Skip to content

Instantly share code, notes, and snippets.

@junwen12221
Created December 20, 2016 08:25
Show Gist options
  • Save junwen12221/85014df69863dd62d74912fbee2e8d41 to your computer and use it in GitHub Desktop.
Save junwen12221/85014df69863dd62d74912fbee2e8d41 to your computer and use it in GitHub Desktop.
package com.alibaba.druid;
import com.alibaba.druid.sql.parser.Lexer;
import com.alibaba.druid.sql.parser.Token;
import static com.alibaba.druid.Main.select_statement;
/**
* Created by Administrator on 2016/12/17 0017.
*/
public class ExpMain {
public static void main(String[] args) {
}
public static final void expression(Lexer lexer) {
exp_factor1(lexer);
while (true) {
if (lexer.token() != Token.OR) {
lexer.nextToken();
break;
}
}
}
public static final void exp_factor1(Lexer lexer) {
exp_factor2(lexer);
while (true) {
if (lexer.token() != Token.XOR) {
lexer.nextToken();
break;
}
}
}
public static final void exp_factor2(Lexer lexer) {
exp_factor3(lexer);
while (true) {
if (lexer.token() != Token.AND) {
lexer.nextToken();
break;
}
}
}
public static final void exp_factor3(Lexer lexer) {
if (lexer.token() == Token.NOT) {
lexer.nextToken();
}
exp_factor4(lexer);
}
public static final void exp_factor4(Lexer lexer) {
bool_primary(lexer);
if (lexer.token() == Token.IS) {
lexer.nextToken();
if (lexer.token() == Token.NOT) {
lexer.nextToken();
}
switch (lexer.token()) {
case TRUE:
case FALSE:
case NULL:
default:
lexer.nextToken();
}
}
}
public static final void bool_primary(Lexer lexer) {
}
public static final void predicate(Lexer lexer) {
bit_expr(lexer);
if (lexer.token() == Token.NOT) {
lexer.nextToken();
} else if (identifierEquals(lexer, "SOUNDS")) {
lexer.nextToken();
accept(lexer, Token.LIKE);
bit_expr(lexer);
return;
}
switch (lexer.token()) {
case IN: {
lexer.nextToken();
break;
}
case BETWEEN: {
lexer.nextToken();
bit_expr(lexer);
accept(lexer, Token.AND);
predicate(lexer);
break;
}
case LIKE: {
lexer.nextToken();
simple_expr(lexer);
if (lexer.token() == Token.ESCAPE) {
simple_expr(lexer);
}
break;
}
default: {
if (identifierEquals(lexer, "REGEXP")) {
lexer.nextToken();
bit_expr(lexer);
} else {
//异常
}
}
}
}
public static final void function_call(Lexer lexer) {
}
public static final void functionList(Lexer lexer) {
}
public static final void column_spec(Lexer lexer) {
//检查是否是字符常量
String first = lexer.stringVal();
lexer.nextToken();
if (lexer.token() == Token.DOT) {
lexer.nextToken();
String second = lexer.stringVal();
lexer.nextToken();
if (lexer.token() == Token.DOT) {
String third = lexer.stringVal();
lexer.nextToken();
}
} else {
}
}
public static final void simple_expr(Lexer lexer) {
switch (lexer.token()) {
case INTERVAL: {
interval_expr(lexer);
return;
}
case ROW: {
lexer.nextToken();
expression_list(lexer);
return;
}
case LPAREN: {
expression_list(lexer);
}
default: {
column_spec(lexer);
}
}
}
public static final void subquery(Lexer lexer) {
accept(lexer, Token.LPAREN);
select_statement(lexer);
accept(lexer, Token.RPAREN);
}
public static final void expression_list(Lexer lexer) {
accept(lexer, Token.LPAREN);
expression(lexer);
while (true) {
if (lexer.token() == Token.COMMA) {
lexer.nextToken();
expression(lexer);
} else {
break;
}
}
accept(lexer, Token.RPAREN);
}
public static final void interval_expr(Lexer lexer) {
accept(lexer, Token.INTERVAL);
expression(lexer);
//interval_unit
lexer.nextToken();
}
public static final void bit_expr(Lexer lexer) {
factor1(lexer);
if (identifierEquals(lexer, "VERTABAR")) {
lexer.nextToken();
factor1(lexer);
}
}
public static final void factor1(Lexer lexer) {
factor2(lexer);
if (identifierEquals(lexer, "BITAND")) {
lexer.nextToken();
factor2(lexer);
}
}
public static final void factor2(Lexer lexer) {
factor3(lexer);
if (identifierEquals(lexer, "<<") || identifierEquals(lexer, ">>")) {
lexer.nextToken();
factor3(lexer);
}
}
public static final void factor3(Lexer lexer) {
factor4(lexer);
if (lexer.token() == Token.PLUS || lexer.token() == Token.MINUS) {
lexer.nextToken();
factor4(lexer);
}
}
public static final void factor4(Lexer lexer) {
factor5(lexer);
if (identifierEquals(lexer, "ASTERISK")
|| lexer.token() == Token.DIV
|| lexer.token() == Token.MOD
|| identifierEquals(lexer, "POWER")) {
lexer.nextToken();
factor5(lexer);
}
}
public static final void factor5(Lexer lexer) {
factor6(lexer);
if (lexer.token() == Token.PLUS || lexer.token() == Token.MINUS) {
lexer.nextToken();
accept(lexer, Token.INTERVAL);
}
}
public static final void factor6(Lexer lexer) {
switch (lexer.token()) {
case PLUS:
case MINUS:
case TILDE://NEGATION
case BINARY:
lexer.nextToken();
default:
}
simple_expr(lexer);
}
public static final void factor7(Lexer lexer) {
simple_expr(lexer);
if (identifierEquals(lexer, "COLLATE")) {
lexer.nextToken();
collation_names(lexer);
}
}
public static final void collation_names(Lexer lexer) {
if (identifierEquals(lexer, "LATIN1_GENERAL_CS") ||
identifierEquals(lexer, "LATIN1_BIN")) {
lexer.nextToken();
} else {
//异常
}
}
protected static boolean identifierEquals(Lexer lexer, String text) {
return lexer.token() == Token.IDENTIFIER && lexer.stringVal().equalsIgnoreCase(text);
}
public static void accept(Lexer lexer, Token token) {
if (lexer.token() == token) {
lexer.nextToken();
} else {
//setErrorEndPos(lexer.pos());
// printError(token);
}
}
}
package com.alibaba.druid;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlLexer;
import com.alibaba.druid.sql.parser.Lexer;
import com.alibaba.druid.sql.parser.ParserException;
import com.alibaba.druid.sql.parser.Token;
import static com.alibaba.druid.sql.parser.Token.*;
/**
* Created by Administrator on 2016/12/17 0017.
*/
public class Main {
public static void main(String[] args) {
MySqlLexer lexer = new MySqlLexer("select a from b");
}
static void table_references(Lexer lexer) {
table_reference(lexer);
while (true) {
if (lexer.token() == Token.COMMA) {
table_reference(lexer);
} else {
break;
}
}
}
/**
* table_reference:
* table_factor1 | table_atom
*
* @param lexer
*/
static void table_reference(Lexer lexer) {
}
static void table_factor1(Lexer lexer) {
}
static void table_factor2(Lexer lexer) {
}
static void table_factor3(Lexer lexer) {
}
static void table_factor4(Lexer lexer) {
table_atom(lexer);
if (identifierEquals(lexer, "NATURAL")) {
}
}
static void table_atom(Lexer lexer) {
{
table_spec(lexer);
partition_clause(lexer);
as(lexer);
index_hint_list(lexer);
}
{
subquery(lexer);
as(lexer);
}
{
if (identifierEquals(lexer, "OJ")) {
table_reference(lexer);
accept(lexer, LEFT);
accept(lexer, OUTER);
accept(lexer, JOIN);
table_reference(lexer);
accept(lexer, ON);
ExpMain.expression(lexer);
}
}
}
static void subquery(Lexer lexer) {
if (lexer.token() == Token.LPAREN) {
lexer.nextToken();
if (lexer.token() == SELECT) {
select_statement(lexer);
} else {
table_reference(lexer);
}
if (lexer.token() == Token.RPAREN) {
lexer.nextToken();
}
}
}
static void select_statement(Lexer lexer) {
select_expression(lexer);
while (lexer.token() == Token.UNION || lexer.token() == Token.ALL || lexer.token() == Token.SELECT) {
if (lexer.token() == Token.UNION || lexer.token() == Token.ALL) {
lexer.nextToken();
}
select_expression(lexer);
}
}
static void select_expression(Lexer lexer) {
accept(lexer, Token.SELECT);
if (lexer.token() == Token.ALL || lexer.token() == Token.DISTINCT || identifierEquals(lexer, "DISTINCTROW")) {
lexer.nextToken();
}
if (identifierEquals(lexer, "HIGH_PRIORITY")) {
lexer.nextToken();
}
if (identifierEquals(lexer, "STRAIGHT_JOIN")) {
lexer.nextToken();
}
if (identifierEquals(lexer, "SQL_SMALL_RESULT")) {
lexer.nextToken();
}
if (identifierEquals(lexer, "SQL_BIG_RESULT")) {
lexer.nextToken();
}
if (identifierEquals(lexer, "SQL_BUFFER_RESULT")) {
lexer.nextToken();
}
if (identifierEquals(lexer, "SQL_CACHE")) {
lexer.nextToken();
}
if (identifierEquals(lexer, "SQL_NO_CACHE")) {
lexer.nextToken();
}
if (identifierEquals(lexer, "SQL_CALC_FOUND_ROWS")) {
lexer.nextToken();
}
select_list(lexer);
if (lexer.token() == Token.FROM) {
lexer.nextToken();
table_references(lexer);
partition_clause(lexer);
where_clause(lexer);
orderby_clause(lexer);
limit_clause(lexer);
if (lexer.token() == FOR) {
lexer.nextToken();
if (lexer.token() == UPDATE) {
lexer.nextToken();
}
}
if (lexer.token() == LOCK) {
lexer.nextToken();
if (lexer.token() == IN) {
lexer.nextToken();
if (lexer.token() == SHARE) {
lexer.nextToken();
if (lexer.token() == MODE) {
lexer.nextToken();
}
}
}
}
}
}
public static void groupby_clause(Lexer lexer) {
accept(lexer, Token.GROUP);
accept(lexer, Token.BY);
groupby_item(lexer);
while (lexer.token() == Token.COMMA) {
lexer.nextToken();
groupby_item(lexer);
}
if (lexer.token() == Token.WITH) {
lexer.nextToken();
identifierEquals(lexer, "ROLLUP");
}
}
public static void groupby_item(Lexer lexer) {
}
public static final void orderby_clause(Lexer lexer) {
accept(lexer, Token.ORDER);
accept(lexer, Token.BY);
orderby_item(lexer);
while (lexer.token() == Token.COMMA) {
lexer.nextToken();
orderby_item(lexer);
}
}
public static final void orderby_item(Lexer lexer) {
accept(lexer, Token.ORDER);
accept(lexer, Token.BY);
if (lexer.token() == Token.ASC) {
} else if (lexer.token() == Token.DESC) {
}
lexer.nextToken();
}
public static void having_clause(Lexer lexer) {
accept(lexer, Token.HAVING);
ExpMain.expression(lexer);
}
public static void limit_clause(Lexer lexer) {
if (lexer.token() == LIMIT) {
lexer.nextToken();
lexer.integerValue();
lexer.nextToken();
if (lexer.token() == COMMA) {
lexer.nextToken();
lexer.integerValue();
lexer.nextToken();
} else if (identifierEquals(lexer, "OFFSET")) {
lexer.nextToken();
lexer.integerValue();
lexer.nextToken();
}
}
}
static void select_list(Lexer lexer) {
if (lexer.token() == Token.STAR) {
return;
} else {
displayed_column(lexer);
while (lexer.token() == Token.COMMA) {
displayed_column(lexer);
}
}
}
static void displayed_column(Lexer lexer) {
column_spec(lexer);
alias(lexer);
}
static void partition_clause(Lexer lexer) {
if (lexer.token() == Token.PARTITION) {
lexer.nextToken();
//跳过非必要的
while (lexer.token() == Token.RPAREN) lexer.nextToken();
}
}
public static final void where_clause(Lexer lexer) {
if (lexer.token() == Token.WHERE) {
lexer.nextToken();
ExpMain.expression(lexer);
}
}
static void table_spec(Lexer lexer) {
String schema_name = lexer.stringVal();
String table_name;
lexer.nextToken();
if ((lexer.token() == Token.DOT)) {
lexer.nextToken();
table_name = lexer.stringVal();
lexer.nextToken();
} else {
table_name = schema_name;
schema_name = null;
}
}
static void table_name(Lexer lexer) {
}
static void column_spec(Lexer lexer) {
}
static void index_hint_list(Lexer lexer) {
index_hint(lexer);
while (lexer.token() == Token.COMMA) {
lexer.nextToken();
index_hint(lexer);
}
}
static void index_hint(Lexer lexer) {
boolean peekFlag = false;
switch (lexer.token()) {
case USE: {
lexer.nextToken();
peekFlag = true;
break;
}
default:
if (identifierEquals(lexer, "IGNORE")) {
lexer.nextToken();
peekFlag = true;
} else if (identifierEquals(lexer, "FORCE")) {
peekFlag = true;
lexer.nextToken();
}
}
if (peekFlag) {
index_options(lexer);
//跳过,直接跳到由括号
while (lexer.token() != Token.RPAREN) lexer.nextToken();
}
}
static void index_options(Lexer lexer) {
switch (lexer.token()) {
case INDEX:
case KEY:
lexer.nextToken();
}
if (lexer.token() == Token.FOR) {
switch (lexer.token()) {
case JOIN: {
break;
}
case ORDER: {
lexer.nextToken();
accept(lexer, Token.BY);
break;
}
case GROUP: {
lexer.nextToken();
accept(lexer, Token.BY);
break;
}
}
}
}
static String alias(Lexer lexer) {
String alias = null;
if (lexer.token() == Token.LITERAL_ALIAS) {
alias = '"' + lexer.stringVal() + '"';
lexer.nextToken();
} else if (lexer.token() == Token.IDENTIFIER) {
alias = lexer.stringVal();
lexer.nextToken();
} else if (lexer.token() == Token.LITERAL_CHARS) {
alias = "'" + lexer.stringVal() + "'";
lexer.nextToken();
} else {
switch (lexer.token()) {
case KEY:
case INDEX:
case CASE:
case MODEL:
case PCTFREE:
case INITRANS:
case MAXTRANS:
case SEGMENT:
case CREATION:
case IMMEDIATE:
case DEFERRED:
case STORAGE:
case NEXT:
case MINEXTENTS:
case MAXEXTENTS:
case MAXSIZE:
case PCTINCREASE:
case FLASH_CACHE:
case CELL_FLASH_CACHE:
case KEEP:
case NONE:
case LOB:
case STORE:
case ROW:
case CHUNK:
case CACHE:
case NOCACHE:
case LOGGING:
case NOCOMPRESS:
case KEEP_DUPLICATES:
case EXCEPTIONS:
case PURGE:
case INITIALLY:
case END:
case COMMENT:
case ENABLE:
case DISABLE:
case SEQUENCE:
case USER:
case ANALYZE:
case OPTIMIZE:
case GRANT:
case REVOKE:
case FULL:
case TO:
case NEW:
case INTERVAL:
case LOCK:
case LIMIT:
case IDENTIFIED:
case PASSWORD:
case BINARY:
case WINDOW:
case OFFSET:
case SHARE:
case START:
case CONNECT:
case MATCHED:
case ERRORS:
case REJECT:
case UNLIMITED:
case BEGIN:
case EXCLUSIVE:
case MODE:
case ADVISE:
case TYPE:
case CLOSE:
alias = lexer.stringVal();
lexer.nextToken();
return alias;
case QUES:
alias = "?";
lexer.nextToken();
default:
break;
}
}
return alias;
}
static String as(Lexer lexer) {
String alias = null;
if (lexer.token() == Token.AS) {
lexer.nextToken();
alias = alias(lexer);
if (alias != null) {
while (lexer.token() == Token.DOT) {
lexer.nextToken();
alias += ('.' + lexer.token().name());
lexer.nextToken();
}
return alias;
}
if (lexer.token() == Token.LPAREN) {
return null;
}
throw new ParserException("Error : " + lexer.token());
}
if (lexer.token() == Token.LITERAL_ALIAS) {
alias = '"' + lexer.stringVal() + '"';
lexer.nextToken();
} else if (lexer.token() == Token.IDENTIFIER) {
alias = lexer.stringVal();
lexer.nextToken();
} else if (lexer.token() == Token.LITERAL_CHARS) {
alias = "'" + lexer.stringVal() + "'";
lexer.nextToken();
} else if (lexer.token() == Token.CASE) {
alias = lexer.token.name();
lexer.nextToken();
} else if (lexer.token() == Token.USER) {
alias = lexer.stringVal();
lexer.nextToken();
} else if (lexer.token() == Token.END) {
alias = lexer.stringVal();
lexer.nextToken();
}
switch (lexer.token()) {
case KEY:
case INTERVAL:
case CONSTRAINT:
alias = lexer.token().name();
lexer.nextToken();
return alias;
default:
break;
}
return alias;
}
protected static boolean identifierEquals(Lexer lexer, String text) {
return lexer.token() == Token.IDENTIFIER && lexer.stringVal().equalsIgnoreCase(text);
}
public static void accept(Lexer lexer, Token token) {
if (lexer.token() == token) {
lexer.nextToken();
} else {
//setErrorEndPos(lexer.pos());
// printError(token);
}
}
public static void match(Lexer lexer, Token token) {
if (lexer.token() != token) {
throw new ParserException("syntax error, expect " + token + ", actual " + lexer.token() + " "
+ lexer.stringVal());
}
}
}
grammar MySQL;
options
{
language=C;
output=AST;
backtrack=true;
}
tokens
{
}
@header
{
}
@members
{
}
@lexer::header
{
}
@lexer::members
{
}
fragment A_ : 'a' | 'A';
fragment B_ : 'b' | 'B';
fragment C_ : 'c' | 'C';
fragment D_ : 'd' | 'D';
fragment E_ : 'e' | 'E';
fragment F_ : 'f' | 'F';
fragment G_ : 'g' | 'G';
fragment H_ : 'h' | 'H';
fragment I_ : 'i' | 'I';
fragment J_ : 'j' | 'J';
fragment K_ : 'k' | 'K';
fragment L_ : 'l' | 'L';
fragment M_ : 'm' | 'M';
fragment N_ : 'n' | 'N';
fragment O_ : 'o' | 'O';
fragment P_ : 'p' | 'P';
fragment Q_ : 'q' | 'Q';
fragment R_ : 'r' | 'R';
fragment S_ : 's' | 'S';
fragment T_ : 't' | 'T';
fragment U_ : 'u' | 'U';
fragment V_ : 'v' | 'V';
fragment W_ : 'w' | 'W';
fragment X_ : 'x' | 'X';
fragment Y_ : 'y' | 'Y';
fragment Z_ : 'z' | 'Z';
ABS : A_ B_ S_ ;
ACCESSIBLE_SYM : A_ C_ C_ E_ S_ S_ I_ B_ L_ E_ ;
ACOS : A_ C_ O_ S_ ;
ACTION : A_ C_ T_ I_ O_ N_ ;
ADD_SYM : A_ D_ D_ ;
ADDDATE : A_ D_ D_ D_ A_ T_ E_ ;
ADDTIME : A_ D_ D_ T_ I_ M_ E_ ;
AES_DECRYPT : A_ E_ S_ '_' D_ E_ C_ R_ Y_ P_ T_ ;
AES_ENCRYPT : A_ E_ S_ '_' E_ N_ C_ R_ Y_ P_ T_ ;
AFTER_SYM : A_ F_ T_ E_ R_ ;
AGAINST : A_ G_ A_ I_ N_ S_ T_ ;
AGGREGATE_SYM : A_ G_ G_ R_ E_ G_ A_ T_ E_ ;
ALGORITHM_SYM : A_ L_ G_ O_ R_ I_ T_ H_ M_ ;
ALL : A_ L_ L_ ;
ALTER : A_ L_ T_ E_ R_ ;
ANALYZE_SYM : A_ N_ A_ L_ Y_ Z_ E_ ;
ANY : A_ N_ Y_ ;
ARMSCII8 : A_ R_ M_ S_ C_ I_ I_ '8' ;
AS_SYM : A_ S_ ;
ASC : A_ S_ C_ ;
ASCII_SYM : A_ S_ C_ I_ I_ ;
ASENSITIVE_SYM : A_ S_ E_ N_ S_ I_ T_ I_ V_ E_ ;
ASIN : A_ S_ I_ N_ ;
AT_SYM : A_ T_ ;
ATAN : A_ T_ A_ N_ ;
ATAN2 : A_ T_ A_ N_ '2' ;
AUTHORS_SYM : A_ U_ T_ H_ O_ R_ S_ ;
AUTO_INCREMENT : A_ U_ T_ O_ '_' I_ N_ C_ R_ E_ M_ E_ N_ T_ ;
AUTOEXTEND_SIZE_SYM : A_ U_ T_ O_ E_ X_ T_ E_ N_ D_ '_' S_ I_ Z_ E_ ;
AVG : A_ V_ G_;
AVG_ROW_LENGTH : A_ V_ G_ '_' R_ O_ W_ '_' L_ E_ N_ G_ T_ H_ ;
BACKUP_SYM : B_ A_ C_ K_ U_ P_ ;
BEFORE_SYM : B_ E_ F_ O_ R_ E_ ;
BEGIN_SYM : B_ E_ G_ I_ N_ ;
BENCHMARK : B_ E_ N_ C_ H_ M_ A_ R_ K_ ;
BETWEEN : B_ E_ T_ W_ E_ E_ N_ ;
BIG5 : B_ I_ G_ '5' ;
BIGINT : B_ I_ G_ I_ N_ T_ ;
BIN : B_ I_ N_ ;
BINARY : B_ I_ N_ A_ R_ Y_ ;
BINLOG_SYM : B_ I_ N_ L_ O_ G_ ;
BIT_AND : B_ I_ T_ '_' A_ N_ D_ ;
BIT_LENGTH : B_ I_ T_ '_' L_ E_ N_ G_ T_ H_;
BIT_OR : B_ I_ T_ '_' O_ R_ ;
BIT_SYM : B_ I_ T_ ;
BIT_XOR : B_ I_ T_ '_' X_ O_ R_ ;
BLOB_SYM : B_ L_ O_ B_ ;
BLOCK_SYM : B_ L_ O_ C_ K_ ;
BOOL_SYM : B_ O_ O_ L_ ;
BOOLEAN_SYM : B_ O_ O_ L_ E_ A_ N_ ;
BOTH : B_ O_ T_ H_ ;
BTREE_SYM : B_ T_ R_ E_ E_ ;
BY_SYM : B_ Y_ ;
BYTE_SYM : B_ Y_ T_ E_ ;
CACHE_SYM : C_ A_ C_ H_ E_ ;
CALL_SYM : C_ A_ L_ L_ ;
CASCADE : C_ A_ S_ C_ A_ D_ E_ ;
CASCADED : C_ A_ S_ C_ A_ D_ E_ D_ ;
CASE_SYM : C_ A_ S_ E_ ;
CAST_SYM : C_ A_ S_ T_ ;
CEIL : C_ E_ I_ L_ ;
CEILING : C_ E_ I_ L_ I_ N_ G_ ;
CHAIN_SYM : C_ H_ A_ I_ N_ ;
CHANGE : C_ H_ A_ N_ G_ E_ ;
CHANGED : C_ H_ A_ N_ G_ E_ D_ ;
CHAR : C_ H_ A_ R_ ;
CHAR_LENGTH : (C_ H_ A_ R_ '_' L_ E_ N_ G_ T_ H_) | (C_ H_ A_ R_ A_ C_ T_ E_ R_ '_' L_ E_ N_ G_ T_ H_) ;
CHARACTER_SYM : C_ H_ A_ R_ A_ C_ T_ E_ R_ ;
CHARSET : C_ H_ A_ R_ S_ E_ T_ ;
CHECK_SYM : C_ H_ E_ C_ K_ ;
CHECKSUM_SYM : C_ H_ E_ C_ K_ S_ U_ M_ ;
CIPHER_SYM : C_ I_ P_ H_ E_ R_ ;
CLIENT_SYM : C_ L_ I_ E_ N_ T_ ;
CLOSE_SYM : C_ L_ O_ S_ E_ ;
COALESCE : C_ O_ A_ L_ E_ S_ C_ E_ ;
CODE_SYM : C_ O_ D_ E_ ;
COERCIBILITY : C_ O_ E_ R_ C_ I_ B_ I_ L_ I_ T_ Y_ ;
COLLATE_SYM : C_ O_ L_ L_ A_ T_ E_ ;
COLLATION : C_ O_ L_ L_ A_ T_ I_ O_ N_ ;
COLUMN_FORMAT : C_ O_ L_ U_ M_ N_ '_' F_ O_ R_ M_ A_ T_ ;
COLUMN_SYM : C_ O_ L_ U_ M_ N_ ;
COLUMNS_SYM : C_ O_ L_ U_ M_ N_ S_ ;
COMMENT_SYM : C_ O_ M_ M_ E_ N_ T_ ;
COMMIT_SYM : C_ O_ M_ M_ I_ T_ ;
COMMITTED_SYM : C_ O_ M_ M_ I_ T_ T_ E_ D_ ;
COMPACT_SYM : C_ O_ M_ P_ A_ C_ T_ ;
COMPLETION_SYM : C_ O_ M_ P_ L_ E_ T_ I_ O_ N_ ;
COMPRESS : C_ O_ M_ P_ R_ E_ S_ S_ ;
COMPRESSED_SYM : C_ O_ M_ P_ R_ E_ S_ S_ E_ D_ ;
CONCAT : C_ O_ N_ C_ A_ T_ ;
CONCAT_WS : C_ O_ N_ C_ A_ T_ '_' W_ S_ ;
CONCURRENT : C_ O_ N_ C_ U_ R_ R_ E_ N_ T_ ;
CONDITION_SYM : C_ O_ N_ D_ I_ T_ I_ O_ N_ ;
CONNECTION_ID : C_ O_ N_ N_ E_ C_ T_ I_ O_ N_ '_' I_ D_ ;
CONNECTION_SYM : C_ O_ N_ N_ E_ C_ T_ I_ O_ N_ ;
CONSISTENT_SYM : C_ O_ N_ S_ I_ S_ T_ E_ N_ T_ ;
CONSTRAINT : C_ O_ N_ S_ T_ R_ A_ I_ N_ T_ ;
CONTAINS_SYM : C_ O_ N_ T_ A_ I_ N_ S_ ;
CONTEXT_SYM : C_ O_ N_ T_ E_ X_ T_ ;
CONTINUE_SYM : C_ O_ N_ T_ I_ N_ U_ E_ ;
CONTRIBUTORS_SYM : C_ O_ N_ T_ R_ I_ B_ U_ T_ O_ R_ S_ ;
CONV : C_ O_ N_ V_ ;
CONVERT_SYM : C_ O_ N_ V_ E_ R_ T_ ;
CONVERT_TZ : C_ O_ N_ V_ E_ R_ T_ '_' T_ Z_ ;
COPY_SYM : C_ O_ P_ Y_ ;
COS : C_ O_ S_ ;
COT : C_ O_ T_ ;
COUNT : C_ O_ U_ N_ T_ ;
CP1250 : C_ P_ '1250' ;
CP1251 : C_ P_ '1251' ;
CP1256 : C_ P_ '1256' ;
CP1257 : C_ P_ '1257' ;
CP850 : C_ P_ '850' ;
CP852 : C_ P_ '852' ;
CP866 : C_ P_ '866' ;
CP932 : C_ P_ '932' ;
CPU_SYM : C_ P_ U_ ;
CRC32 : C_ R_ C_ '32' ;
CREATE : C_ R_ E_ A_ T_ E_ ;
CROSECOND : C_ R_ O_ S_ E_ C_ O_ N_ D_ ;
CROSS : C_ R_ O_ S_ S_ ;
CUBE_SYM : C_ U_ B_ E_ ;
CURDATE : (C_ U_ R_ D_ A_ T_ E_) | (C_ U_ R_ R_ E_ N_ T_ '_' D_ A_ T_ E_) ;
CURRENT_TIMESTAMP : C_ U_ R_ R_ E_ N_ T_ '_' T_ I_ M_ E_ S_ T_ A_ M_ P_ ;
CURRENT_USER : C_ U_ R_ R_ E_ N_ T_ '_' U_ S_ E_ R_ ;
CURSOR_SYM : C_ U_ R_ S_ O_ R_ ;
CURTIME : (C_ U_ R_ T_ I_ M_ E_) | (C_ U_ R_ R_ E_ N_ T_ '_' T_ I_ M_ E_) ;
DATABASE : D_ A_ T_ A_ B_ A_ S_ E_ ;
DATAFILE_SYM : D_ A_ T_ A_ F_ I_ L_ E_ ;
DATA_SYM : D_ A_ T_ A_ ;
DATE_ADD : D_ A_ T_ E_ '_' A_ D_ D_ ;
DATE_FORMAT : D_ A_ T_ E_ '_' F_ O_ R_ M_ A_ T_ ;
DATE_SUB : (D_ A_ T_ E_ '_' S_ U_ B_) | (S_ U_ B_ D_ A_ T_ E_) ;
DATE_SYM : D_ A_ T_ E_ ;
DATEDIFF : D_ A_ T_ E_ D_ I_ F_ F_ ;
DATETIME : D_ A_ T_ E_ T_ I_ M_ E_ ;
DAY_SYM : D_ A_ Y_ ;
DAY_HOUR : D_ A_ Y_ '_' H_ O_ U_ R_ ;
DAY_MICROSECOND : D_ A_ Y_ '_' M_ I_ C_ R_ O_ S_ E_ C_ O_ N_ D_ ;
DAY_MINUTE : D_ A_ Y_ '_' M_ I_ N_ U_ T_ E_ ;
DAY_SECOND : D_ A_ Y_ '_' S_ E_ C_ O_ N_ D_ ;
DAYNAME : D_ A_ Y_ N_ A_ M_ E_ ;
DAYOFMONTH : (D_ A_ Y_ O_ F_ M_ O_ N_ T_ H_) | (D_ A_ Y_) ;
DAYOFWEEK : D_ A_ Y_ O_ F_ W_ E_ E_ K_ ;
DAYOFYEAR : D_ A_ Y_ O_ F_ Y_ E_ A_ R_ ;
DEALLOCATE_SYM : D_ E_ A_ L_ L_ O_ C_ A_ T_ E_ ;
DEC8 : D_ E_ C_ '8' ;
DECIMAL_SYM : D_ E_ C_ I_ M_ A_ L_ ;
DECLARE_SYM : D_ E_ C_ L_ A_ R_ E_ ;
DECODE : D_ E_ C_ O_ D_ E_ ;
DEFAULT : D_ E_ F_ A_ U_ L_ T_ ;
DEFINER : D_ E_ F_ I_ N_ E_ R_ ;
DEGREES : D_ E_ G_ R_ E_ E_ S_ ;
DELAY_KEY_WRITE_SYM : D_ E_ L_ A_ Y_ '_' K_ E_ Y_ '_' W_ R_ I_ T_ E_ ;
DELAYED_SYM : D_ E_ L_ A_ Y_ E_ D_ ;
DELETE_SYM : D_ E_ L_ E_ T_ E_ ;
DES_DECRYPT : D_ E_ S_ '_' D_ E_ C_ R_ Y_ P_ T_ ;
DES_ENCRYPT : D_ E_ S_ '_' E_ N_ C_ R_ Y_ P_ T_ ;
DES_KEY_FILE : D_ E_ S_ '_' K_ E_ Y_ '_' F_ I_ L_ E_ ;
DESC : D_ E_ S_ C_ ;
DETERMINISTIC_SYM : D_ E_ T_ E_ R_ M_ I_ N_ I_ S_ T_ I_ C_ ;
DIRECTORY_SYM : D_ I_ R_ E_ C_ T_ O_ R_ Y_ ;
DISABLE_SYM : D_ I_ S_ A_ B_ L_ E_ ;
DISCARD : D_ I_ S_ C_ A_ R_ D_ ;
DISK_SYM : D_ I_ S_ K_ ;
DISTINCT : D_ I_ S_ T_ I_ N_ C_ T_ ;
DISTINCTROW : D_ I_ S_ T_ I_ N_ C_ T_ R_ O_ W_ ;
DO_SYM : D_ O_ ;
DOUBLE_SYM : D_ O_ U_ B_ L_ E_ ;
DROP : D_ R_ O_ P_ ;
DUAL_SYM : D_ U_ A_ L_ ;
DUMPFILE : D_ U_ M_ P_ F_ I_ L_ E_ ;
DUPLICATE_SYM : D_ U_ P_ L_ I_ C_ A_ T_ E_ ;
DYNAMIC_SYM : D_ Y_ N_ A_ M_ I_ C_ ;
EACH_SYM : E_ A_ C_ H_ ;
ELSE_SYM : E_ L_ S_ E_ ;
ELSIF_SYM : E_ L_ S_ I_ F_ ;
ELT : E_ L_ T_ ;
ENABLE_SYM : E_ N_ A_ B_ L_ E_ ;
ENCLOSED : E_ N_ C_ L_ O_ S_ E_ D_ ;
ENCODE : E_ N_ C_ O_ D_ E_ ;
ENCRYPT : E_ N_ C_ R_ Y_ P_ T_ ;
END_SYM : E_ N_ D_ ;
ENDS_SYM : E_ N_ D_ S_ ;
ENGINE_SYM : E_ N_ G_ I_ N_ E_ ;
ENGINES_SYM : E_ N_ G_ I_ N_ E_ S_ ;
ENUM : E_ N_ U_ M_ ;
ERRORS : E_ R_ R_ O_ R_ S_ ;
ESCAPE_SYM : E_ S_ C_ A_ P_ E_ ;
ESCAPED : E_ S_ C_ A_ P_ E_ D_ ;
EUCJPMS : E_ U_ C_ J_ P_ M_ S_ ;
EUCKR : E_ U_ C_ K_ R_ ;
EVENT_SYM : E_ V_ E_ N_ T_ ;
EVENTS_SYM : E_ V_ E_ N_ T_ S_ ;
EVERY_SYM : E_ V_ E_ R_ Y_ ;
EXCHANGE_SYM : E_ X_ C_ H_ A_ N_ G_ E_ '_' S_ Y_ M_ ;
EXECUTE_SYM : E_ X_ E_ C_ U_ T_ E_ ;
EXCLUSIVE_SYM : E_ X_ C_ L_ U_ S_ I_ V_ E_ ;
EXISTS : E_ X_ I_ S_ T_ S_ ;
EXIT_SYM : E_ X_ I_ T_ ;
EXP : E_ X_ P_ ;
EXPANSION_SYM : E_ X_ P_ A_ N_ S_ I_ O_ N_ ;
EXPORT_SET : E_ X_ P_ O_ R_ T_ '_' S_ E_ T_ ;
EXTENDED_SYM : E_ X_ T_ E_ N_ D_ E_ D_ ;
EXTENT_SIZE_SYM : E_ X_ T_ E_ N_ T_ '_' S_ I_ Z_ E_ ;
EXTRACT : E_ X_ T_ R_ A_ C_ T_ ;
FALSE_SYM : F_ A_ L_ S_ E_ ;
FAST_SYM : F_ A_ S_ T_ ;
FAULTS_SYM : F_ A_ U_ L_ T_ S_ ;
FIELDS_SYM : F_ I_ E_ L_ D_ S_ ;
FETCH_SYM : F_ E_ T_ C_ H_ ;
FIELD : F_ I_ E_ L_ D_ ;
FILE_SYM : F_ I_ L_ E_ ;
FIND_IN_SET : F_ I_ N_ D_ '_' I_ N_ '_' S_ E_ T_ ;
FIRST_SYM : F_ I_ R_ S_ T_ ;
FIXED_SYM : F_ I_ X_ E_ D_ ;
FLOAT_SYM : F_ L_ O_ A_ T_ ;
FLOOR : F_ L_ O_ O_ R_ ;
FLUSH_SYM : F_ L_ U_ S_ H_ ;
FOR_SYM : F_ O_ R_ ;
FORCE_SYM : F_ O_ R_ C_ E_ ;
FOREIGN : F_ O_ R_ E_ I_ G_ N_ ;
FORMAT : F_ O_ R_ M_ A_ T_ ;
FOUND_ROWS : F_ O_ U_ N_ D_ '_' R_ O_ W_ S_ ;
FOUND_SYM : F_ O_ U_ N_ D_ ;
FROM : F_ R_ O_ M_ ;
FROM_BASE64 : F_ R_ O_ M_ '_' B_ A_ S_ E_ '64';
FROM_DAYS : F_ R_ O_ M_ '_' D_ A_ Y_ S_ ;
FROM_UNIXTIME : F_ R_ O_ M_ '_' U_ N_ I_ X_ T_ I_ M_ E_ ;
FULL : F_ U_ L_ L_ ;
FULLTEXT_SYM : F_ U_ L_ L_ T_ E_ X_ T_ ;
FUNCTION_SYM : F_ U_ N_ C_ T_ I_ O_ N_ ;
GB2312 : G_ B_ '2312' ;
GBK : G_ B_ K_ ;
GEOMETRY_SYM : G_ E_ O_ M_ E_ T_ R_ Y_ ;
GEOMETRYCOLLECTION : G_ E_ O_ M_ E_ T_ R_ Y_ C_ O_ L_ L_ E_ C_ T_ I_ O_ N_ ;
GEOSTD8 : G_ E_ O_ S_ T_ D_ '8' ;
GET_FORMAT : G_ E_ T_ '_' F_ O_ R_ M_ A_ T_ ;
GET_LOCK : G_ E_ T_ '_' L_ O_ C_ K_ ;
GLOBAL_SYM : G_ L_ O_ B_ A_ L_ ;
GRANT : G_ R_ A_ N_ T_ ;
GRANTS : G_ R_ A_ N_ T_ S_ ;
GREEK : G_ R_ E_ E_ K_ ;
GROUP_CONCAT : G_ R_ O_ U_ P_ '_' C_ O_ N_ C_ A_ T_ ;
GROUP_SYM : G_ R_ O_ U_ P_ ;
HANDLER_SYM : H_ A_ N_ D_ L_ E_ R_ ;
HASH_SYM : H_ A_ S_ H_ ;
HAVING : H_ A_ V_ I_ N_ G_ ;
HEBREW : H_ E_ B_ R_ E_ W_ ;
HELP_SYM : H_ E_ L_ P_ ;
HEX : H_ E_ X_ ;
HIGH_PRIORITY : H_ I_ G_ H_ '_' P_ R_ I_ O_ R_ I_ T_ Y_ ;
HOST_SYM : H_ O_ S_ T_ ;
HOSTS_SYM : H_ O_ S_ T_ S_ ;
HOUR : H_ O_ U_ R_ ;
HOUR_MICROSECOND : H_ O_ U_ R_ '_' M_ I_ C_ R_ O_ S_ E_ C_ O_ N_ D_ ;
HOUR_MINUTE : H_ O_ U_ R_ '_' M_ I_ N_ U_ T_ E_ ;
HOUR_SECOND : H_ O_ U_ R_ '_' S_ E_ C_ O_ N_ D_ ;
HP8 : H_ P_ '8' ;
IDENTIFIED_SYM : I_ D_ E_ N_ T_ I_ F_ I_ E_ D_ ;
IF : I_ F_ ;
IFNULL : I_ F_ N_ U_ L_ L_ ;
IGNORE_SYM : I_ G_ N_ O_ R_ E_ ;
IMPORT : I_ M_ P_ O_ R_ T_ ;
IN_SYM : I_ N_ ;
INDEX_SYM : I_ N_ D_ E_ X_ ;
INDEXES : I_ N_ D_ E_ X_ E_ S_ ;
INET_ATON : I_ N_ E_ T_ '_' A_ T_ O_ N_ ;
INET_NTOA : I_ N_ E_ T_ '_' N_ T_ O_ A_ ;
INFILE : I_ N_ F_ I_ L_ E_ ;
INITIAL_SIZE_SYM : I_ N_ I_ T_ I_ A_ L_ '_' S_ I_ Z_ E_ ;
INNER_SYM : I_ N_ N_ E_ R_ ;
INOUT_SYM : I_ N_ O_ U_ T_ ;
INPLACE_SYM : I_ N_ P_ L_ A_ C_ E_ ;
INSENSITIVE_SYM : I_ N_ S_ E_ N_ S_ I_ T_ I_ V_ E_ ;
INSERT : I_ N_ S_ E_ R_ T_ ;
INSERT_METHOD : I_ N_ S_ E_ R_ T_ '_' M_ E_ T_ H_ O_ D_ ;
INSTALL_SYM : I_ N_ S_ T_ A_ L_ L_ ;
INSTR : I_ N_ S_ T_ R_ ;
INT_SYM : I_ N_ T_ ;
INTEGER_SYM : I_ N_ T_ E_ G_ E_ R_ ;
INTERVAL_SYM : I_ N_ T_ E_ R_ V_ A_ L_ ;
INTO : I_ N_ T_ O_ ;
INVOKER_SYM : I_ N_ V_ O_ K_ E_ R_ ;
IO_SYM : I_ O_ ;
IPC_SYM : I_ P_ C_ ;
IS_FREE_LOCK : I_ S_ '_' F_ R_ E_ E_ '_' L_ O_ C_ K_ ;
IS_SYM : I_ S_ ;
IS_USED_LOCK : I_ S_ '_' U_ S_ E_ D_ '_' L_ O_ C_ K_ ;
ISOLATION : I_ S_ O_ L_ A_ T_ I_ O_ N_ ;
ISSUER_SYM : I_ S_ S_ U_ E_ R_ ;
ITERATE_SYM : I_ T_ E_ R_ A_ T_ E_ ;
JOIN_SYM : J_ O_ I_ N_ ;
KEY_BLOCK_SIZE : K_ E_ Y_ '_' B_ L_ O_ C_ K_ '_' S_ I_ Z_ E_ ;
KEY_SYM : K_ E_ Y_ ;
KEYBCS2 : K_ E_ Y_ B_ C_ S_ '2' ;
KEYS : K_ E_ Y_ S_ ;
KILL_SYM : K_ I_ L_ L_ ;
KOI8R : K_ O_ I_ '8' R_ ;
KOI8U : K_ O_ I_ '8' U_ ;
LANGUAGE : L_ A_ N_ G_ U_ A_ G_ E_ ;
LAST_DAY : L_ A_ S_ T_ '_' D_ A_ Y_ ;
LAST_INSERT_ID : L_ A_ S_ T_ '_' I_ N_ S_ E_ R_ T_ '_' I_ D_ ;
LAST_SYM : L_ A_ S_ T_ ;
LATIN1_BIN : L_ A_ T_ I_ N_ '1_' B_ I_ N_ ;
LATIN1_GENERAL_CS : L_ A_ T_ I_ N_ '1_' G_ E_ N_ E_ R_ A_ L_ '_' C_ S_ ;
LATIN1 : L_ A_ T_ I_ N_ '1' ;
LATIN2 : L_ A_ T_ I_ N_ '2' ;
LATIN5 : L_ A_ T_ I_ N_ '5' ;
LATIN7 : L_ A_ T_ I_ N_ '7' ;
LEADING : L_ E_ A_ D_ I_ N_ G_ ;
LEAVE_SYM : L_ E_ A_ V_ E_ ;
LEAVES : L_ E_ A_ V_ E_ S_ ;
LEFT : L_ E_ F_ T_ ;
LENGTH : (L_ E_ N_ G_ T_ H_) | (O_ C_ T_ E_ T_ '_' L_ E_ N_ G_ T_ H_) ;
LESS_SYM : L_ E_ S_ S_ ;
LEVEL_SYM : L_ E_ V_ E_ L_ ;
LIKE_SYM : L_ I_ K_ E_ ;
LIMIT : L_ I_ M_ I_ T_ ;
LINEAR_SYM : L_ I_ N_ E_ A_ R_ ;
LINES : L_ I_ N_ E_ S_ ;
LINESTRING : L_ I_ N_ E_ S_ T_ R_ I_ N_ G_ ;
LIST_SYM : L_ I_ S_ T_ ;
LN : L_ N_ ;
LOAD : L_ O_ A_ D_ ;
LOAD_FILE : L_ O_ A_ D_ '_' F_ I_ L_ E_ ;
LOCAL_SYM : L_ O_ C_ A_ L_ ;
LOCATE : (L_ O_ C_ A_ T_ E_) | (P_ O_ S_ I_ T_ I_ O_ N_) ;
LOCK : L_ O_ C_ K_ ;
LOCKS_SYM : L_ O_ C_ K_ S_ ;
LOG : L_ O_ G_ ;
LOG10 : L_ O_ G_ '10' ;
LOG2 : L_ O_ G_ '2' ;
LOGFILE_SYM : L_ O_ G_ F_ I_ L_ E_ ;
LOGS_SYM : L_ O_ G_ S_ ;
LONG_SYM : L_ O_ N_ G_ ;
LONGBLOB : L_ O_ N_ G_ B_ L_ O_ B_ ;
LONGTEXT : L_ O_ N_ G_ T_ E_ X_ T_ ;
LOOP_SYM : L_ O_ O_ P_ ;
LOW_PRIORITY : L_ O_ W_ '_' P_ R_ I_ O_ R_ I_ T_ Y_ ;
LOWER : (L_ O_ W_ E_ R_) | (L_ C_ A_ S_ E_) ;
LPAD : L_ P_ A_ D_ ;
LTRIM : L_ T_ R_ I_ M_ ;
MACCE : M_ A_ C_ C_ E_ ;
MACROMAN : M_ A_ C_ R_ O_ M_ A_ N_ ;
MAKE_SET : M_ A_ K_ E_ '_' S_ E_ T_ ;
MAKEDATE : M_ A_ K_ E_ D_ A_ T_ E_ ;
MAKETIME : M_ A_ K_ E_ T_ I_ M_ E_ ;
MASTER_CONNECT_RETRY : M_ A_ S_ T_ E_ R_ '_' C_ O_ N_ N_ E_ C_ T_ '_' R_ E_ T_ R_ Y_ ;
MASTER_HOST_SYM : M_ A_ S_ T_ E_ R_ '_' H_ O_ S_ T_ ;
MASTER_LOG_FILE_SYM : M_ A_ S_ T_ E_ R_ '_' L_ O_ G_ '_' F_ I_ L_ E_ ;
MASTER_LOG_POS_SYM : M_ A_ S_ T_ E_ R_ '_' L_ O_ G_ '_' P_ O_ S_ ;
MASTER_PASSWORD_SYM : M_ A_ S_ T_ E_ R_ '_' P_ A_ S_ S_ W_ O_ R_ D_ ;
MASTER_PORT_SYM : M_ A_ S_ T_ E_ R_ '_' P_ O_ R_ T_ ;
MASTER_POS_WAIT : M_ A_ S_ T_ E_ R_ '_' P_ O_ S_ '_' W_ A_ I_ T_ ;
MASTER_SERVER_ID_SYM : M_ A_ S_ T_ E_ R_ '_' S_ E_ R_ V_ E_ R_ '_' I_ D_ ;
MASTER_SSL_CA_SYM : M_ A_ S_ T_ E_ R_ '_' S_ S_ L_ '_' C_ A_ ;
MASTER_SSL_CAPATH_SYM : M_ A_ S_ T_ E_ R_ '_' S_ S_ L_ '_' C_ A_ P_ A_ T_ H_ ;
MASTER_SSL_CERT_SYM : M_ A_ S_ T_ E_ R_ '_' S_ S_ L_ '_' C_ E_ R_ T_ ;
MASTER_SSL_CIPHER_SYM : M_ A_ S_ T_ E_ R_ '_' S_ S_ L_ '_' C_ I_ P_ H_ E_ R_ ;
MASTER_SSL_KEY_SYM : M_ A_ S_ T_ E_ R_ '_' S_ S_ L_ '_' K_ E_ Y_ ;
MASTER_SSL_SYM : M_ A_ S_ T_ E_ R_ '_' S_ S_ L_ ;
MASTER_SSL_VERIFY_SERVER_CERT : M_ A_ S_ T_ E_ R_ '_' S_ S_ L_ '_' V_ E_ R_ I_ F_ Y_ '_' S_ E_ R_ V_ E_ R_ '_' C_ E_ R_ T_ ;
MASTER_SYM : M_ A_ S_ T_ E_ R_ ;
MASTER_USER_SYM : M_ A_ S_ T_ E_ R_ '_' U_ S_ E_ R_ ;
MATCH : M_ A_ T_ C_ H_ ;
MAX_SYM : M_ A_ X_ ;
MAX_CONNECTIONS_PER_HOUR : M_ A_ X_ '_' C_ O_ N_ N_ E_ C_ T_ I_ O_ N_ S_ '_' P_ E_ R_ '_' H_ O_ U_ R_ ;
MAX_QUERIES_PER_HOUR : M_ A_ X_ '_' Q_ U_ E_ R_ I_ E_ S_ '_' P_ E_ R_ '_' H_ O_ U_ R_ ;
MAX_ROWS : M_ A_ X_ '_' R_ O_ W_ S_ ;
MAX_SIZE_SYM : M_ A_ X_ '_' S_ I_ Z_ E_ ;
MAX_UPDATES_PER_HOUR : M_ A_ X_ '_' U_ P_ D_ A_ T_ E_ S_ '_' P_ E_ R_ '_' H_ O_ U_ R_ ;
MAX_USER_CONNECTIONS_SYM : M_ A_ X_ '_' U_ S_ E_ R_ '_' C_ O_ N_ N_ E_ C_ T_ I_ O_ N_ S_ ;
MAXVALUE_SYM : M_ A_ X_ V_ A_ L_ U_ E_ ;
MD5 : M_ D_ '5' ;
MEDIUM_SYM : M_ E_ D_ I_ U_ M_ ;
MEDIUMBLOB : M_ E_ D_ I_ U_ M_ B_ L_ O_ B_ ;
MEDIUMINT : M_ E_ D_ I_ U_ M_ I_ N_ T_ ;
MEDIUMTEXT : M_ E_ D_ I_ U_ M_ T_ E_ X_ T_ ;
MEMORY_SYM : M_ E_ M_ O_ R_ Y_ ;
MERGE_SYM : M_ E_ R_ G_ E_ ;
MICROSECOND : M_ I_ C_ R_ O_ S_ E_ C_ O_ N_ D_ ;
MID : M_ I_ D_ ;
MIGRATE_SYM : M_ I_ G_ R_ A_ T_ E_ ;
MIN_SYM : M_ I_ N_ ;
MIN_ROWS : M_ I_ N_ '_' R_ O_ W_ S_ ;
MINUTE : M_ I_ N_ U_ T_ E_ ;
MINUTE_MICROSECOND : M_ I_ N_ U_ T_ E_ '_' M_ I_ C_ R_ O_ S_ E_ C_ O_ N_ D_ ;
MINUTE_SECOND : M_ I_ N_ U_ T_ E_ '_' S_ E_ C_ O_ N_ D_ ;
MOD : M_ O_ D_ ;
MODE_SYM : M_ O_ D_ E_ ;
MODIFIES_SYM : M_ O_ D_ I_ F_ I_ E_ S_ ;
MODIFY_SYM : M_ O_ D_ I_ F_ Y_ ;
MONTH : M_ O_ N_ T_ H_ ;
MONTHNAME : M_ O_ N_ T_ H_ N_ A_ M_ E_ ;
MULTILINESTRING : M_ U_ L_ T_ I_ L_ I_ N_ E_ S_ T_ R_ I_ N_ G_ ;
MULTIPOINT : M_ U_ L_ T_ I_ P_ O_ I_ N_ T_ ;
MULTIPOLYGON : M_ U_ L_ T_ I_ P_ O_ L_ Y_ G_ O_ N_ ;
MUTEX_SYM : M_ U_ T_ E_ X_ ;
NAME_CONST : N_ A_ M_ E_ '_' C_ O_ N_ S_ T_ ;
NAME_SYM : 'NAME' ;
NAMES_SYM : 'NAMES' ;
NATIONAL_SYM : N_ A_ T_ I_ O_ N_ A_ L_ ;
NATURAL : N_ A_ T_ U_ R_ A_ L_ ;
NCHAR_SYM : N_ C_ H_ A_ R_ ;
NEW_SYM : N_ E_ W_ ;
NEXT_SYM : N_ E_ X_ T_ ;
NO_SYM : N_ O_ ;
NO_WAIT_SYM : N_ O_ '_' W_ A_ I_ T_ ;
NO_WRITE_TO_BINLOG : N_ O_ '_' W_ R_ I_ T_ E_ '_' T_ O_ '_' B_ I_ N_ L_ O_ G_ ;
NODEGROUP_SYM : N_ O_ D_ E_ G_ R_ O_ U_ P_ ;
NONE_SYM : N_ O_ N_ E_ ;
NOT_SYM : (N_ O_ T_) | ('!') ;
NOW : (N_ O_ W_) | (L_ O_ C_ A_ L_ T_ I_ M_ E_) | (L_ O_ C_ A_ L_ T_ I_ M_ E_ S_ T_ A_ M_ P_) | (C_ U_ R_ R_ E_ N_ T_ '_' T_ I_ M_ E_ S_ T_ A_ M_ P_);
NULL_SYM : N_ U_ L_ L_ ;
NUMERIC_SYM : N_ U_ M_ E_ R_ I_ C_ ;
NVARCHAR_SYM : N_ V_ A_ R_ C_ H_ A_ R_ ;
OCT : O_ C_ T_ ;
OFFSET_SYM : O_ F_ F_ S_ E_ T_ ;
OJ_SYM : O_ J_ ;
OLD_PASSWORD : O_ L_ D_ '_' P_ A_ S_ S_ W_ O_ R_ D_ ;
ON : O_ N_ ;
ONE_SHOT_SYM : O_ N_ E_ '_' S_ H_ O_ T_ ;
ONE_SYM : O_ N_ E_ ;
OPEN_SYM : O_ P_ E_ N_ ;
OPTIMIZE : O_ P_ T_ I_ M_ I_ Z_ E_ ;
OPTION : O_ P_ T_ I_ O_ N_ ;
OPTIONALLY : O_ P_ T_ I_ O_ N_ A_ L_ L_ Y_ ;
OPTIONS_SYM : O_ P_ T_ I_ O_ N_ S_ ;
ORD : O_ R_ D_ ;
ORDER_SYM : O_ R_ D_ E_ R_ ;
OUT_SYM : O_ U_ T_ ;
OUTER : O_ U_ T_ E_ R_ ;
OUTFILE : O_ U_ T_ F_ I_ L_ E_ ;
OWNER_SYM : O_ W_ N_ E_ R_ ;
PACK_KEYS_SYM : P_ A_ C_ K_ '_' K_ E_ Y_ S_ ;
PAGE_CHECKSUM_SYM : P_ A_ G_ E_ '_' C_ H_ E_ C_ K_ S_ U_ M_ ;
PAGE_SYM : P_ A_ G_ E_ ;
PARSER_SYM : P_ A_ R_ S_ E_ R_ ;
PARTIAL : P_ A_ R_ T_ I_ A_ L_ ;
PARTITION_SYM : P_ A_ R_ T_ I_ T_ I_ O_ N_ ;
PARTITIONING_SYM : P_ A_ R_ T_ I_ T_ I_ O_ N_ I_ N_ G_ ;
PARTITIONS_SYM : P_ A_ R_ T_ I_ T_ I_ O_ N_ S_ ;
PASSWORD : P_ A_ S_ S_ W_ O_ R_ D_ ;
PERIOD_ADD : P_ E_ R_ I_ O_ D_ '_' A_ D_ D_ ;
PERIOD_DIFF : P_ E_ R_ I_ O_ D_ '_' D_ I_ F_ F_ ;
PHASE_SYM : P_ H_ A_ S_ E_ ;
PI : P_ I_ ;
PLUGIN_SYM : P_ L_ U_ G_ I_ N_ ;
PLUGINS_SYM : P_ L_ U_ G_ I_ N_ S_ ;
POINT_SYM : P_ O_ I_ N_ T_ ;
POLYGON : P_ O_ L_ Y_ G_ O_ N_ ;
PORT_SYM : P_ O_ R_ T_ ;
POW : P_ O_ W_ ;
POWER : P_ O_ W_ E_ R_ ;
PRECISION : P_ R_ E_ C_ I_ S_ I_ O_ N_ ;
PREPARE_SYM : P_ R_ E_ P_ A_ R_ E_ ;
PRESERVE_SYM : P_ R_ E_ S_ E_ R_ V_ E_ ;
PREV_SYM : P_ R_ E_ V_ ;
PRIMARY_SYM : P_ R_ I_ M_ A_ R_ Y_ ;
PRIVILEGES : P_ R_ I_ V_ I_ L_ E_ G_ E_ S_ ;
PROCEDURE : P_ R_ O_ C_ E_ D_ U_ R_ E_ ;
PROCESS : P_ R_ O_ C_ E_ S_ S_ ;
PROCESSLIST_SYM : P_ R_ O_ C_ E_ S_ S_ L_ I_ S_ T_ ;
PROFILE_SYM : P_ R_ O_ F_ I_ L_ E_ ;
PROFILES_SYM : P_ R_ O_ F_ I_ L_ E_ S_ ;
PURGE : P_ U_ R_ G_ E_ ;
QUARTER : Q_ U_ A_ R_ T_ E_ R_ ;
QUERY_SYM : Q_ U_ E_ R_ Y_ ;
QUICK : Q_ U_ I_ C_ K_ ;
QUOTE : Q_ U_ O_ T_ E_ ;
RADIANS : R_ A_ D_ I_ A_ N_ S_ ;
RAND : R_ A_ N_ D_ ;
RANGE_SYM : R_ A_ N_ G_ E_ ;
READ_ONLY_SYM : R_ E_ A_ D_ '_' O_ N_ L_ Y_ ;
READ_SYM : R_ E_ A_ D_ ;
READ_WRITE_SYM : R_ E_ A_ D_ '_' W_ R_ I_ T_ E_ ;
READS_SYM : R_ E_ A_ D_ S_ ;
REAL : R_ E_ A_ L_ ;
REBUILD_SYM : R_ E_ B_ U_ I_ L_ D_ ;
RECOVER_SYM : R_ E_ C_ O_ V_ E_ R_ ;
REDO_BUFFER_SIZE_SYM : R_ E_ D_ O_ '_' B_ U_ F_ F_ E_ R_ '_' S_ I_ Z_ E_ ;
REDOFILE_SYM : R_ E_ D_ O_ F_ I_ L_ E_ ;
REDUNDANT_SYM : R_ E_ D_ U_ N_ D_ A_ N_ T_ ;
REFERENCES : R_ E_ F_ E_ R_ E_ N_ C_ E_ S_ ;
REGEXP : (R_ E_ G_ E_ X_ P_) | (R_ L_ I_ K_ E_);
RELAY_LOG_FILE_SYM : R_ E_ L_ A_ Y_ '_' L_ O_ G_ '_' F_ I_ L_ E_ ;
RELAY_LOG_POS_SYM : R_ E_ L_ A_ Y_ '_' L_ O_ G_ '_' P_ O_ S_ ;
RELEASE_LOCK : R_ E_ L_ E_ A_ S_ E_ '_' L_ O_ C_ K_ ;
RELEASE_SYM : R_ E_ L_ E_ A_ S_ E_ ;
RELOAD : R_ E_ L_ O_ A_ D_ ;
REMOVE_SYM : R_ E_ M_ O_ V_ E_ ;
RENAME : R_ E_ N_ A_ M_ E_ ;
REORGANIZE_SYM : R_ E_ O_ R_ G_ A_ N_ I_ Z_ E_ ;
REPAIR : R_ E_ P_ A_ I_ R_ ;
REPEAT : R_ E_ P_ E_ A_ T_ ;
REPEATABLE_SYM : R_ E_ P_ E_ A_ T_ A_ B_ L_ E_ ;
REPLACE : R_ E_ P_ L_ A_ C_ E_ ;
REPLICATION : R_ E_ P_ L_ I_ C_ A_ T_ I_ O_ N_ ;
REQUIRE_SYM : R_ E_ Q_ U_ I_ R_ E_ ;
RESET_SYM : R_ E_ S_ E_ T_ ;
RESOURCES : U_ S_ E_ R_ '_' R_ E_ S_ O_ U_ R_ C_ E_ S_ ;
RESTORE_SYM : R_ E_ S_ T_ O_ R_ E_ ;
RESTRICT : R_ E_ S_ T_ R_ I_ C_ T_ ;
RESUME_SYM : R_ E_ S_ U_ M_ E_ ;
RETURN_SYM : R_ E_ T_ U_ R_ N_ ;
RETURNS_SYM : R_ E_ T_ U_ R_ N_ S_ ;
REVERSE : R_ E_ V_ E_ R_ S_ E_ ;
REVOKE : R_ E_ V_ O_ K_ E_ ;
RIGHT : R_ I_ G_ H_ T_ ;
ROLLBACK : R_ O_ L_ L_ B_ A_ C_ K_ ;
ROLLUP_SYM : R_ O_ L_ L_ U_ P_ ;
ROUND : R_ O_ U_ N_ D_ ;
ROUTINE_SYM : R_ O_ U_ T_ I_ N_ E_ ;
ROW_FORMAT_SYM : R_ O_ W_ '_' F_ O_ R_ M_ A_ T_ ;
ROW_SYM : R_ O_ W_ ;
ROWS_SYM : R_ O_ W_ S_ ;
RPAD : R_ P_ A_ D_ ;
RTREE_SYM : R_ T_ R_ E_ E_ ;
RTRIM : R_ T_ R_ I_ M_ ;
SAVEPOINT : S_ A_ V_ E_ P_ O_ I_ N_ T_ ;
SCHEDULE_SYM : S_ C_ H_ E_ D_ U_ L_ E_ ;
SCHEMA : S_ C_ H_ E_ M_ A_ ;
SEC_TO_TIME : S_ E_ C_ '_' T_ O_ '_' T_ I_ M_ E_ ;
SECOND : S_ E_ C_ O_ N_ D_ ;
SECOND_MICROSECOND : S_ E_ C_ O_ N_ D_ '_' M_ I_ C_ R_ O_ S_ E_ C_ O_ N_ D_ ;
SECURITY_SYM : S_ E_ C_ U_ R_ I_ T_ Y_ ;
SELECT : S_ E_ L_ E_ C_ T_ ;
SENSITIVE_SYM : S_ E_ N_ S_ I_ T_ I_ V_ E_ ;
SEPARATOR_SYM : S_ E_ P_ A_ R_ A_ T_ O_ R_ ;
SERIAL_SYM : S_ E_ R_ I_ A_ L_ ;
SERIALIZABLE_SYM : S_ E_ R_ I_ A_ L_ I_ Z_ A_ B_ L_ E_ ;
SERVER_SYM : S_ E_ R_ V_ E_ R_ ;
SESSION_SYM : S_ E_ S_ S_ I_ O_ N_ ;
SESSION_USER : S_ E_ S_ S_ I_ O_ N_ '_' U_ S_ E_ R_ ;
SET_SYM : S_ E_ T_ ;
SHARED_SYM : S_ H_ A_ R_ E_ D_ ;
SHARE_SYM : S_ H_ A_ R_ E_ ;
SHOW : S_ H_ O_ W_ ;
SHUTDOWN : S_ H_ U_ T_ D_ O_ W_ N_ ;
SIGN : S_ I_ G_ N_ ;
SIGNED_SYM : S_ I_ G_ N_ E_ D_ ;
SIMPLE_SYM : S_ I_ M_ P_ L_ E_ ;
SIN : S_ I_ N_ ;
SJIS : S_ J_ I_ S_ ;
SLAVE : S_ L_ A_ V_ E_ ;
SLEEP : S_ L_ E_ E_ P_ ;
SMALLINT : S_ M_ A_ L_ L_ I_ N_ T_ ;
SNAPSHOT_SYM : S_ N_ A_ P_ S_ H_ O_ T_ ;
SOCKET_SYM : S_ O_ C_ K_ E_ T_ ;
SONAME_SYM : S_ O_ N_ A_ M_ E_ ;
SOUNDEX : S_ O_ U_ N_ D_ E_ X_ ;
SOUNDS_SYM : S_ O_ U_ N_ D_ S_ ;
SOURCE_SYM : S_ O_ U_ R_ C_ E_ ;
SPACE : S_ P_ A_ C_ E_ ;
SPATIAL_SYM : S_ P_ A_ T_ I_ A_ L_ ;
SPECIFIC_SYM : S_ P_ E_ C_ I_ F_ I_ C_ ;
SQL_BIG_RESULT : S_ Q_ L_ '_' B_ I_ G_ '_' R_ E_ S_ U_ L_ T_ ;
SQL_BUFFER_RESULT : S_ Q_ L_ '_' B_ U_ F_ F_ E_ R_ '_' R_ E_ S_ U_ L_ T_ ;
SQL_CACHE_SYM : S_ Q_ L_ '_' C_ A_ C_ H_ E_ ;
SQL_CALC_FOUND_ROWS : S_ Q_ L_ '_' C_ A_ L_ C_ '_' F_ O_ U_ N_ D_ '_' R_ O_ W_ S_ ;
SQL_NO_CACHE_SYM : S_ Q_ L_ '_' N_ O_ '_' C_ A_ C_ H_ E_ ;
SQL_SMALL_RESULT : S_ Q_ L_ '_' S_ M_ A_ L_ L_ '_' R_ E_ S_ U_ L_ T_ ;
SQL_SYM : S_ Q_ L_ ;
SQL_THREAD : S_ Q_ L_ '_' T_ H_ R_ E_ A_ D_ ;
SQLEXCEPTION_SYM : S_ Q_ L_ E_ X_ C_ E_ P_ T_ I_ O_ N_ ;
SQLSTATE_SYM : S_ Q_ L_ S_ T_ A_ T_ E_ ;
SQLWARNING_SYM : S_ Q_ L_ W_ A_ R_ N_ I_ N_ G_ ;
SQRT : S_ Q_ R_ T_ ;
SSL_SYM : S_ S_ L_ ;
START_SYM : S_ T_ A_ R_ T_ ;
STARTING : S_ T_ A_ R_ T_ I_ N_ G_ ;
STATS_AUTO_RECALC : S_ T_ A_ T_ S_ '_' A_ U_ T_ O_ '_' R_ E_ C_ A_ L_ C_ ;
STATS_PERSISTENT : S_ T_ A_ T_ S_ '_' P_ E_ R_ S_ I_ S_ T_ E_ N_ T_ ;
STARTS_SYM : S_ T_ A_ R_ T_ S_ ;
STATUS_SYM : S_ T_ A_ T_ U_ S_ ;
STD : S_ T_ D_ ;
STDDEV : S_ T_ D_ D_ E_ V_ ;
STDDEV_POP : S_ T_ D_ D_ E_ V_ '_' P_ O_ P_ ;
STDDEV_SAMP : S_ T_ D_ D_ E_ V_ '_' S_ A_ M_ P_ ;
STOP_SYM : S_ T_ O_ P_ ;
STORAGE_SYM : S_ T_ O_ R_ A_ G_ E_ ;
STR_TO_DATE : S_ T_ R_ '_' T_ O_ '_' D_ A_ T_ E_ ;
STRAIGHT_JOIN : S_ T_ R_ A_ I_ G_ H_ T_ '_' J_ O_ I_ N_ ;
STRCMP : S_ T_ R_ C_ M_ P_;
STRING_SYM : S_ T_ R_ I_ N_ G_ ;
SUBJECT_SYM : S_ U_ B_ J_ E_ C_ T_ ;
SUBPARTITION_SYM : S_ U_ B_ P_ A_ R_ T_ I_ T_ I_ O_ N_ ;
SUBPARTITIONS_SYM : S_ U_ B_ P_ A_ R_ T_ I_ T_ I_ O_ N_ S_ ;
SUBSTRING : (S_ U_ B_ S_ T_ R_ I_ N_ G_) | (S_ U_ B_ S_ T_ R_) ;
SUBSTRING_INDEX : S_ U_ B_ S_ T_ R_ I_ N_ G_ '_' I_ N_ D_ E_ X_ ;
SUBTIME : S_ U_ B_ T_ I_ M_ E_ ;
SUM : S_ U_ M_ ;
SUPER_SYM : S_ U_ P_ E_ R_ ;
SUSPEND_SYM : S_ U_ S_ P_ E_ N_ D_ ;
SWAPS_SYM : S_ W_ A_ P_ S_ ;
SWE7 : S_ W_ E_ '7' ;
SWITCHES_SYM : S_ W_ I_ T_ C_ H_ E_ S_ ;
SYSDATE : S_ Y_ S_ D_ A_ T_ E_ ;
SYSTEM_USER : S_ Y_ S_ T_ E_ M_ '_' U_ S_ E_ R_ ;
TABLE : T_ A_ B_ L_ E_ ;
TABLE_CHECKSUM_SYM : T_ A_ B_ L_ E_ '_' C_ H_ E_ C_ K_ S_ U_ M_ ;
TABLES : T_ A_ B_ L_ E_ S_ ;
TABLESPACE : T_ A_ B_ L_ E_ S_ P_ A_ C_ E_ ;
TAN : T_ A_ N_ ;
TEMPORARY : T_ E_ M_ P_ O_ R_ A_ R_ Y_ ;
TEMPTABLE_SYM : T_ E_ M_ P_ T_ A_ B_ L_ E_ ;
TERMINATED : T_ E_ R_ M_ I_ N_ A_ T_ E_ D_ ;
TEXT_SYM : T_ E_ X_ T_ ;
THAN_SYM : T_ H_ A_ N_ ;
THEN_SYM : T_ H_ E_ N_ ;
TIME_FORMAT : T_ I_ M_ E_ '_' F_ O_ R_ M_ A_ T_ ;
TIME_SYM : T_ I_ M_ E_ ;
TIME_TO_SEC : T_ I_ M_ E_ '_' T_ O_ '_' S_ E_ C_ ;
TIMEDIFF : T_ I_ M_ E_ D_ I_ F_ F_ ;
TIMESTAMP : T_ I_ M_ E_ S_ T_ A_ M_ P_ ;
TIMESTAMPADD : T_ I_ M_ E_ S_ T_ A_ M_ P_ A_ D_ D_ ;
TIMESTAMPDIFF : T_ I_ M_ E_ S_ T_ A_ M_ P_ D_ I_ F_ F_ ;
TINYBLOB : T_ I_ N_ Y_ B_ L_ O_ B_ ;
TINYINT : T_ I_ N_ Y_ I_ N_ T_ ;
TINYTEXT : T_ I_ N_ Y_ T_ E_ X_ T_ ;
TIS620 : T_ I_ S_ '620' ;
TO_BASE64 : T_ O_ '_' B_ A_ S_ E_ '64';
TO_DAYS : T_ O_ '_' D_ A_ Y_ S_ ;
TO_SECONDS : T_ O_ '_' S_ E_ C_ O_ N_ D_ S_;
TO_SYM : T_ O_ ;
TRAILING : T_ R_ A_ I_ L_ I_ N_ G_ ;
TRANSACTION : T_ R_ A_ N_ S_ A_ C_ T_ I_ O_ N_ ;
TRANSACTIONAL_SYM : T_ R_ A_ N_ S_ A_ C_ T_ I_ O_ N_ A_ L_ ;
TRIGGER_SYM : T_ R_ I_ G_ G_ E_ R_ ;
TRIGGERS_SYM : T_ R_ I_ G_ G_ E_ R_ S_ ;
TRIM : T_ R_ I_ M_ ;
TRUE_SYM : T_ R_ U_ E_ ;
TRUNCATE : T_ R_ U_ N_ C_ A_ T_ E_ ;
TYPE_SYM : 'TYPE' ;
TYPES_SYM : T_ Y_ P_ E_ S_ ;
UCS2 : U_ C_ S_ '2';
UJIS : U_ J_ I_ S_ ;
UNCOMMITTED_SYM : U_ N_ C_ O_ M_ M_ I_ T_ T_ E_ D_ ;
UNCOMPRESS : U_ N_ C_ O_ M_ P_ R_ E_ S_ S_ ;
UNCOMPRESSED_LENGTH : U_ N_ C_ O_ M_ P_ R_ E_ S_ S_ E_ D_ '_' L_ E_ N_ G_ T_ H_ ;
UNDEFINED_SYM : U_ N_ D_ E_ F_ I_ N_ E_ D_ ;
UNDO_BUFFER_SIZE_SYM : U_ N_ D_ O_ '_' B_ U_ F_ F_ E_ R_ '_' S_ I_ Z_ E_ ;
UNDO_SYM : U_ N_ D_ O_ ;
UNDOFILE_SYM : U_ N_ D_ O_ F_ I_ L_ E_ ;
UNHEX : U_ N_ H_ E_ X_ ;
UNICODE_SYM : U_ N_ I_ C_ O_ D_ E_ ;
UNINSTALL_SYM : U_ N_ I_ N_ S_ T_ A_ L_ L_ ;
UNION_SYM : U_ N_ I_ O_ N_ ;
UNIQUE_SYM : U_ N_ I_ Q_ U_ E_ ;
UNIX_TIMESTAMP : U_ N_ I_ X_ '_' T_ I_ M_ E_ S_ T_ A_ M_ P_ ;
UNKNOWN_SYM : U_ N_ K_ N_ O_ W_ N_ ;
UNLOCK_SYM : U_ N_ L_ O_ C_ K_ ;
UNSIGNED_SYM : U_ N_ S_ I_ G_ N_ E_ D_ ;
UNTIL_SYM : U_ N_ T_ I_ L_ ;
UPDATE : U_ P_ D_ A_ T_ E_ ;
UPGRADE_SYM : U_ P_ G_ R_ A_ D_ E_ ;
UPPER : (U_ P_ P_ E_ R_) | (U_ C_ A_ S_ E_) ;
USAGE : U_ S_ A_ G_ E_ ;
USE_FRM : U_ S_ E_ '_' F_ R_ M_ ;
USE_SYM : U_ S_ E_ ;
USER : 'USER' ;
USING_SYM : U_ S_ I_ N_ G_ ;
UTC_DATE : U_ T_ C_ '_' D_ A_ T_ E_ ;
UTC_TIME : U_ T_ C_ '_' T_ I_ M_ E_ ;
UTC_TIMESTAMP : U_ T_ C_ '_' T_ I_ M_ E_ S_ T_ A_ M_ P_ ;
UTF16LE : U_ T_ F_ '16' L_ E_ ;
UTF16 : U_ T_ F_ '16' ;
UTF32 : U_ T_ F_ '32' ;
UTF8 : U_ T_ F_ '8' ;
UUID : U_ U_ I_ D_ ;
VALUE_SYM : V_ A_ L_ U_ E_ ;
VALUES : V_ A_ L_ U_ E_ S_ ;
VAR_POP : V_ A_ R_ '_' P_ O_ P_ ;
VAR_SAMP : V_ A_ R_ '_' S_ A_ M_ P_ ;
VARBINARY : V_ A_ R_ B_ I_ N_ A_ R_ Y_ ;
VARCHAR : V_ A_ R_ C_ H_ A_ R_ ;
VARIABLES : V_ A_ R_ I_ A_ B_ L_ E_ S_ ;
VARIANCE : V_ A_ R_ I_ A_ N_ C_ E_ ;
VARYING : V_ A_ R_ Y_ I_ N_ G_ ;
VERSION_SYM : V_ E_ R_ S_ I_ O_ N_ ;
VIEW_SYM : V_ I_ E_ W_ ;
WAIT_SYM : W_ A_ I_ T_ ;
WARNINGS : W_ A_ R_ N_ I_ N_ G_ S_ ;
WEEK : W_ E_ E_ K_ ;
WEEKDAY : W_ E_ E_ K_ D_ A_ Y_ ;
WEEKOFYEAR : W_ E_ E_ K_ O_ F_ Y_ E_ A_ R_ ;
WEIGHT_STRING : W_ E_ I_ G_ H_ T_ '_' S_ T_ R_ I_ N_ G_;
WHEN_SYM : W_ H_ E_ N_ ;
WHERE : W_ H_ E_ R_ E_ ;
WHILE_SYM : W_ H_ I_ L_ E_ ;
WITH : W_ I_ T_ H_ ;
WORK_SYM : W_ O_ R_ K_ ;
WRAPPER_SYM : W_ R_ A_ P_ P_ E_ R_ ;
WRITE_SYM : W_ R_ I_ T_ E_ ;
X509_SYM : X_ '509' ;
XA_SYM : X_ A_ ;
XML_SYM : X_ M_ L_ ;
XOR : X_ O_ R_ ;
YEAR : Y_ E_ A_ R_ ;
YEAR_MONTH : Y_ E_ A_ R_ '_' M_ O_ N_ T_ H_ ;
YEARWEEK : Y_ E_ A_ R_ W_ E_ E_ K_ ;
ZEROFILL : Z_ E_ R_ O_ F_ I_ L_ L_ ;
// basic token definition ------------------------------------------------------------
DIVIDE : ( D_ I_ V_ ) | '/' ;
MOD_SYM : ( M_ O_ D_ ) | '%' ;
OR_SYM : ( O_ R_ ) | '||';
AND_SYM : ( A_ N_ D_ ) | '&&';
ARROW : '=>' ;
EQ_SYM : '=' | '<=>' ;
NOT_EQ : '<>' | '!=' | '~='| '^=';
LET : '<=' ;
GET : '>=' ;
SET_VAR : ':=' ;
SHIFT_LEFT : '<<' ;
SHIFT_RIGHT : '>>' ;
ALL_FIELDS : '.*' ;
SEMI : ';' ;
COLON : ':' ;
DOT : '.' ;
COMMA : ',' ;
ASTERISK: '*' ;
RPAREN : ')' ;
LPAREN : '(' ;
RBRACK : ']' ;
LBRACK : '[' ;
PLUS : '+' ;
MINUS : '-' ;
NEGATION: '~' ;
VERTBAR : '|' ;
BITAND : '&' ;
POWER_OP: '^' ;
GTH : '>' ;
LTH : '<' ;
INTEGER_NUM : ('0'..'9')+ ;
fragment HEX_DIGIT_FRAGMENT: ( 'a'..'f' | 'A'..'F' | '0'..'9' ) ;
HEX_DIGIT:
( '0x' (HEX_DIGIT_FRAGMENT)+ )
|
( 'X' '\'' (HEX_DIGIT_FRAGMENT)+ '\'' )
;
BIT_NUM:
( '0b' ('0'|'1')+ )
|
( B_ '\'' ('0'|'1')+ '\'' )
;
REAL_NUMBER:
( INTEGER_NUM DOT INTEGER_NUM | INTEGER_NUM DOT | DOT INTEGER_NUM | INTEGER_NUM )
( ('E'|'e') ( PLUS | MINUS )? INTEGER_NUM )?
;
TEXT_STRING:
( N_ | ('_' U_ T_ F_ '8') )?
(
( '\'' ( ('\\' '\\') | ('\'' '\'') | ('\\' '\'') | ~('\'') )* '\'' )
|
( '\"' ( ('\\' '\\') | ('\"' '\"') | ('\\' '\"') | ~('\"') )* '\"' )
)
;
ID:
( 'A'..'Z' | 'a'..'z' | '_' | '$') ( 'A'..'Z' | 'a'..'z' | '_' | '$' | '0'..'9' )*
;
// http://dev.mysql.com/doc/refman/5.6/en/user-variables.html
USER_VAR:
'@' (USER_VAR_SUBFIX1 | USER_VAR_SUBFIX2 | USER_VAR_SUBFIX3 | USER_VAR_SUBFIX4)
;
fragment USER_VAR_SUBFIX1: ( '`' (~'`' )+ '`' ) ;
fragment USER_VAR_SUBFIX2: ( '\'' (~'\'')+ '\'' ) ;
fragment USER_VAR_SUBFIX3: ( '\"' (~'\"')+ '\"' ) ;
fragment USER_VAR_SUBFIX4: ( 'A'..'Z' | 'a'..'z' | '_' | '$' | '0'..'9' | DOT )+ ;
WHITE_SPACE : ( ' '|'\r'|'\t'|'\n' ) {$channel=HIDDEN;} ;
// http://dev.mysql.com/doc/refman/5.6/en/comments.html
SL_COMMENT : ( ('--'|'#') ~('\n'|'\r')* '\r'? '\n' ) {$channel=HIDDEN;} ;
ML_COMMENT : '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;} ;
// data type definition ----- http://dev.mysql.com/doc/refman/5.6/en/data-types.html ---------------
/*integer_types:
INTEGER_SYM | TINYINT | SMALLINT | MEDIUMINT | INT_SYM | BIGINT
( LPAREN INTEGER_NUM RPAREN )?
ZEROFILL? UNSIGNED_SYM?
AUTO_INCREMENT?;
fixed_point_types:
(DECIMAL_SYM | NUMERIC_SYM) // the same
( LPAREN INTEGER_NUM ( COMMA INTEGER_NUM )? RPAREN )? ;
floating_point_types:
(FLOAT_SYM | DOUBLE_SYM)
( LPAREN INTEGER_NUM ( COMMA INTEGER_NUM )? RPAREN )?
AUTO_INCREMENT?;
bit_value_type:
BIT_SYM
( LPAREN INTEGER_NUM RPAREN )?;
numeric_types:
integer_types | fixed_point_types | floating_point_types | bit_value_type;
datetime_length:
LPAREN tlen=INTEGER_NUM RPAREN {atoi((char*)($tlen.text->chars)) <= 6}? ;
datetime_types:
( DATE_SYM )
| ( TIME_SYM (datetime_length)? )
| ( (DATETIME | TIMESTAMP) (datetime_length)? (DEFAULT CURRENT_TIMESTAMP)? (ON UPDATE CURRENT_TIMESTAMP)? )
| ( YEAR LPAREN ('2'|'4') RPAREN ) ;
char_varchar_types:
( CHAR LPAREN clen=INTEGER_NUM RPAREN {atoi((char*)($clen.text->chars)) < 256}? )
|
( VARCHAR LPAREN vlen=INTEGER_NUM RPAREN {atoi((char*)($vlen.text->chars)) < 1024}? ) ;
binary_varbinary_types:
( BINARY LPAREN blen=INTEGER_NUM RPAREN {atoi((char*)($blen.text->chars)) < 256}? )
|
( VARBINARY LPAREN vlen=INTEGER_NUM RPAREN {atoi((char*)($vlen.text->chars)) < 1024}? ) ;
blob_types:
( TINYBLOB LPAREN blen=INTEGER_NUM RPAREN {atoi((char*)($blen.text->chars)) < (1<<8)}? )
| ( BLOB_SYM LPAREN blen=INTEGER_NUM RPAREN {atoi((char*)($blen.text->chars)) < (1<<16)}? )
| ( MEDIUMBLOB LPAREN blen=INTEGER_NUM RPAREN {atoi((char*)($blen.text->chars)) < (1<<24)}? )
| ( LONGBLOB LPAREN blen=INTEGER_NUM RPAREN {_atoi64((char*)($blen.text->chars)) < (1LL<<32)}? ) ; // atoll
text_types:
( TINYTEXT LPAREN tlen=INTEGER_NUM RPAREN {atoi((char*)($tlen.text->chars)) < (1<<8)}? )
| ( TEXT_SYM LPAREN tlen=INTEGER_NUM RPAREN {atoi((char*)($tlen.text->chars)) < (1<<16)}? )
| ( MEDIUMTEXT LPAREN tlen=INTEGER_NUM RPAREN {atoi((char*)($tlen.text->chars)) < (1<<24)}? )
| ( LONGTEXT LPAREN tlen=INTEGER_NUM RPAREN {_atoi64((char*)($tlen.text->chars)) < (1LL<<32)}? ) ; // atoll
enum_types:
ENUM LPAREN TEXT_STRING (COMMA TEXT_STRING)* RPAREN; //0 <= count <= 65535
set_types:
SET_SYM LPAREN TEXT_STRING (COMMA TEXT_STRING)* RPAREN; //0 <= count <= 64
string_types:
char_varchar_types
| binary_varbinary_types
| blob_types | text_types
| enum_types | set_types;
datetypes_decl:
numeric_types | datetime_types | string_types;
*/
// basic type definition -----------------------------------------------------------------------
relational_op:
EQ_SYM | LTH | GTH | NOT_EQ | LET | GET ;
charset_name:
ARMSCII8
| ASCII_SYM
| BIG5
| BINARY
| CP1250
| CP1251
| CP1256
| CP1257
| CP850
| CP852
| CP866
| CP932
| DEC8
| EUCJPMS
| EUCKR
| GB2312
| GBK
| GEOSTD8
| GREEK
| HEBREW
| HP8
| KEYBCS2
| KOI8R
| KOI8U
| LATIN1
| LATIN2
| LATIN5
| LATIN7
| MACCE
| MACROMAN
| SJIS
| SWE7
| TIS620
| UCS2
| UJIS
| UTF8;
cast_data_type:
BINARY (INTEGER_NUM)?
| CHAR (INTEGER_NUM)?
| DATE_SYM
| DATETIME
| DECIMAL_SYM ( INTEGER_NUM (COMMA INTEGER_NUM)? )?
| SIGNED_SYM (INTEGER_SYM)?
| TIME_SYM
| UNSIGNED_SYM (INTEGER_SYM)?
;
search_modifier:
(IN_SYM NATURAL LANGUAGE MODE_SYM)
| (IN_SYM NATURAL LANGUAGE MODE_SYM WITH QUERY_SYM EXPANSION_SYM)
| (IN_SYM BOOLEAN_SYM MODE_SYM)
| (WITH QUERY_SYM EXPANSION_SYM)
;
transcoding_name:
LATIN1
| UTF8
;
interval_unit:
SECOND
| MINUTE
| HOUR
| DAY_SYM
| WEEK
| MONTH
| QUARTER
| YEAR
| SECOND_MICROSECOND
| MINUTE_MICROSECOND
| MINUTE_SECOND
| HOUR_MICROSECOND
| HOUR_SECOND
| HOUR_MINUTE
| DAY_MICROSECOND
| DAY_SECOND
| DAY_MINUTE
| DAY_HOUR
| YEAR_MONTH
;
collation_names:
LATIN1_GENERAL_CS | LATIN1_BIN
;
// basic const data definition ---------------------------------------------------------------
string_literal: TEXT_STRING ;
number_literal: (PLUS | MINUS)? (INTEGER_NUM | REAL_NUMBER) ;
//date_time_literal: ;
hex_literal: HEX_DIGIT;
boolean_literal: TRUE_SYM | FALSE_SYM ;
bit_literal: BIT_NUM;
// http://dev.mysql.com/doc/refman/5.6/en/literals.html
literal_value:
( string_literal | number_literal | hex_literal | boolean_literal | bit_literal | NULL_SYM ) ;
// function defintion ------ http://dev.mysql.com/doc/refman/5.6/en/func-op-summary-ref.html ----------
functionList:
number_functions
| char_functions
| time_functions
| other_functions
;
number_functions:
ABS
| ACOS
| ASIN
| ATAN2
| ATAN
| CEIL
| CEILING
| CONV
| COS
| COT
| CRC32
| DEGREES
| EXP
| FLOOR
| LN
| LOG10
| LOG2
| LOG
| MOD
| PI
| POW
| POWER
| RADIANS
| RAND
| ROUND
| SIGN
| SIN
| SQRT
| TAN
| TRUNCATE
;
char_functions:
ASCII_SYM
| BIN
| BIT_LENGTH
| CHAR_LENGTH
| CHAR
| CONCAT_WS
| CONCAT
| ELT
| EXPORT_SET
| FIELD
| FIND_IN_SET
| FORMAT
| FROM_BASE64
| HEX
| INSERT
| INSTR
| LEFT
| LENGTH
| LOAD_FILE
| LOCATE
| LOWER
| LPAD
| LTRIM
| MAKE_SET
| MID
| OCT
| ORD
| QUOTE
| REPEAT
| REPLACE
| REVERSE
| RIGHT
| RPAD
| RTRIM
| SOUNDEX
| SPACE
| STRCMP
| SUBSTRING_INDEX
| SUBSTRING
| TO_BASE64
| TRIM
| UNHEX
| UPPER
| WEIGHT_STRING
;
time_functions:
ADDDATE
| ADDTIME
| CONVERT_TZ
| CURDATE
| CURTIME
| DATE_ADD
| DATE_FORMAT
| DATE_SUB
| DATE_SYM
| DATEDIFF
| DAYNAME
| DAYOFMONTH
| DAYOFWEEK
| DAYOFYEAR
| EXTRACT
| FROM_DAYS
| FROM_UNIXTIME
| GET_FORMAT
| HOUR
| LAST_DAY
| MAKEDATE
| MAKETIME
| MICROSECOND
| MINUTE
| MONTH
| MONTHNAME
| NOW
| PERIOD_ADD
| PERIOD_DIFF
| QUARTER
| SEC_TO_TIME
| SECOND
| STR_TO_DATE
| SUBTIME
| SYSDATE
| TIME_FORMAT
| TIME_TO_SEC
| TIME_SYM
| TIMEDIFF
| TIMESTAMP
| TIMESTAMPADD
| TIMESTAMPDIFF
| TO_DAYS
| TO_SECONDS
| UNIX_TIMESTAMP
| UTC_DATE
| UTC_TIME
| UTC_TIMESTAMP
| WEEK
| WEEKDAY
| WEEKOFYEAR
| YEAR
| YEARWEEK
;
other_functions:
MAKE_SET | LOAD_FILE
| IF | IFNULL
| AES_ENCRYPT | AES_DECRYPT
| DECODE | ENCODE
| DES_DECRYPT | DES_ENCRYPT
| ENCRYPT | MD5
| OLD_PASSWORD | PASSWORD
| BENCHMARK | CHARSET | COERCIBILITY | COLLATION | CONNECTION_ID
| CURRENT_USER | DATABASE | SCHEMA | USER | SESSION_USER | SYSTEM_USER
| VERSION_SYM
| FOUND_ROWS | LAST_INSERT_ID | DEFAULT
| GET_LOCK | RELEASE_LOCK | IS_FREE_LOCK | IS_USED_LOCK | MASTER_POS_WAIT
| INET_ATON | INET_NTOA
| NAME_CONST
| SLEEP
| UUID
| VALUES
;
group_functions:
AVG | COUNT | MAX_SYM | MIN_SYM | SUM
| BIT_AND | BIT_OR | BIT_XOR
| GROUP_CONCAT
| STD | STDDEV | STDDEV_POP | STDDEV_SAMP
| VAR_POP | VAR_SAMP | VARIANCE
;
// identifiers --- http://dev.mysql.com/doc/refman/5.6/en/identifiers.html --------------
schema_name : tmpName=ID {strlen((const char *)$tmpName.text->chars) <= 64}? {printf("schema name = \%s \n",(char*)($tmpName.text->chars));};
table_name : tmpName=ID {strlen((const char *)$tmpName.text->chars) <= 64}? {printf("table name = \%s \n",(char*)($tmpName.text->chars));};
engine_name : tmpName=ID {strlen((const char *)$tmpName.text->chars) <= 64}? {printf("engine name = \%s \n",(char*)($tmpName.text->chars));};
column_name : tmpName=ID {strlen((const char *)$tmpName.text->chars) <= 64}? {printf("column name = \%s \n",(char*)($tmpName.text->chars));};
view_name : tmpName=ID {strlen((const char *)$tmpName.text->chars) <= 64}? {printf("view name = \%s \n",(char*)($tmpName.text->chars));};
parser_name : tmpName=ID {strlen((const char *)$tmpName.text->chars) <= 64}? {printf("index name = \%s \n",(char*)($tmpName.text->chars));};
index_name : tmpName=ID {strlen((const char *)$tmpName.text->chars) <= 64}? {printf("index name = \%s \n",(char*)($tmpName.text->chars));};
partition_name : tmpName=ID {strlen((const char *)$tmpName.text->chars) <= 64}? {printf("partition name = \%s \n",(char*)($tmpName.text->chars));};
partition_logical_name : tmpName=ID {strlen((const char *)$tmpName.text->chars) <= 64}? {printf("partition logical name = \%s \n",(char*)($tmpName.text->chars));};
constraint_symbol_name : tmpName=ID {strlen((const char *)$tmpName.text->chars) <= 64}? {printf("constraint symbol name = \%s \n",(char*)($tmpName.text->chars));};
foreign_key_symbol_name : tmpName=ID {strlen((const char *)$tmpName.text->chars) <= 64}? {printf("foreign key symbol name = \%s \n",(char*)($tmpName.text->chars));};
collation_name : tmpName=ID {strlen((const char *)$tmpName.text->chars) <= 64}? {printf("collation name = \%s \n",(char*)($tmpName.text->chars));};
event_name : tmpName=ID {strlen((const char *)$tmpName.text->chars) <= 64}? {printf("event name = \%s \n",(char*)($tmpName.text->chars));};
user_name : tmpName=ID {strlen((const char *)$tmpName.text->chars) <= 64}? {printf("user name = \%s \n",(char*)($tmpName.text->chars));};
function_name : tmpName=ID {strlen((const char *)$tmpName.text->chars) <= 64}? {printf("function name = \%s \n",(char*)($tmpName.text->chars));};
procedure_name : tmpName=ID {strlen((const char *)$tmpName.text->chars) <= 64}? {printf("procedure name = \%s \n",(char*)($tmpName.text->chars));};
server_name : tmpName=ID {strlen((const char *)$tmpName.text->chars) <= 64}? {printf("server name = \%s \n",(char*)($tmpName.text->chars));};
wrapper_name : tmpName=ID {strlen((const char *)$tmpName.text->chars) <= 64}? {printf("wrapper name = \%s \n",(char*)($tmpName.text->chars));};
alias : ( AS_SYM )? tmpName=ID {strlen((const char *)$tmpName.text->chars) <= 256}? {printf("alias = \%s \n",(char*)($tmpName.text->chars));};
// expression statement ------- http://dev.mysql.com/doc/refman/5.6/en/expressions.html -------------
expression: exp_factor1 ( OR_SYM exp_factor1 )* ;
exp_factor1: exp_factor2 ( XOR exp_factor2 )* ;
exp_factor2: exp_factor3 ( AND_SYM exp_factor3 )* ;
exp_factor3: (NOT_SYM)? exp_factor4 ;
exp_factor4: bool_primary ( IS_SYM (NOT_SYM)? (boolean_literal|NULL_SYM) )? ;
bool_primary:
( predicate relational_op predicate )
| ( predicate relational_op ( ALL | ANY )? subquery )
| ( NOT_SYM? EXISTS subquery )
| predicate
;
predicate:
( bit_expr (NOT_SYM)? IN_SYM (subquery | expression_list) )
| ( bit_expr (NOT_SYM)? BETWEEN bit_expr AND_SYM predicate )
| ( bit_expr SOUNDS_SYM LIKE_SYM bit_expr )
| ( bit_expr (NOT_SYM)? LIKE_SYM simple_expr (ESCAPE_SYM simple_expr)? )
| ( bit_expr (NOT_SYM)? REGEXP bit_expr )
| ( bit_expr )
;
bit_expr:
factor1 ( VERTBAR factor1 )? ;
factor1:
factor2 ( BITAND factor2 )? ;
factor2:
factor3 ( (SHIFT_LEFT|SHIFT_RIGHT) factor3 )? ;
factor3:
factor4 ( (PLUS|MINUS) factor4 )? ;
factor4:
factor5 ( (ASTERISK|DIVIDE|MOD_SYM|POWER_OP) factor5 )? ;
factor5:
factor6 ( (PLUS|MINUS) interval_expr )? ;
factor6:
(PLUS | MINUS | NEGATION | BINARY) simple_expr
| simple_expr ;
factor7:
simple_expr (COLLATE_SYM collation_names)?;
simple_expr:
literal_value
| column_spec
| function_call
//| param_marker
| USER_VAR
| expression_list
| (ROW_SYM expression_list)
| subquery
| EXISTS subquery
//| {identifier expression}
| match_against_statement
| case_when_statement
| interval_expr
;
function_call:
( functionList ( LPAREN (expression (COMMA expression)*)? RPAREN ) ? )
| ( CAST_SYM LPAREN expression AS_SYM cast_data_type RPAREN )
| ( CONVERT_SYM LPAREN expression COMMA cast_data_type RPAREN )
| ( CONVERT_SYM LPAREN expression USING_SYM transcoding_name RPAREN )
| ( group_functions LPAREN ( ASTERISK | ALL | DISTINCT )? bit_expr RPAREN )
;
case_when_statement:
case_when_statement1 | case_when_statement2
;
case_when_statement1:
CASE_SYM
( WHEN_SYM expression THEN_SYM bit_expr )+
( ELSE_SYM bit_expr )?
END_SYM
;
case_when_statement2:
CASE_SYM bit_expr
( WHEN_SYM bit_expr THEN_SYM bit_expr )+
( ELSE_SYM bit_expr )?
END_SYM
;
match_against_statement:
MATCH (column_spec (COMMA column_spec)* ) AGAINST (expression (search_modifier)? )
;
column_spec:
( ( schema_name DOT )? table_name DOT )? column_name ;
expression_list:
LPAREN expression ( COMMA expression )* RPAREN ;
interval_expr:
INTERVAL_SYM expression interval_unit
;
// JOIN Syntax ---------- http://dev.mysql.com/doc/refman/5.6/en/join.html ---------------
table_references:
table_reference ( COMMA table_reference )*
;
table_reference:
table_factor1 | table_atom
;
table_factor1:
table_factor2 ( (INNER_SYM | CROSS)? JOIN_SYM table_atom (join_condition)? )?
;
table_factor2:
table_factor3 ( STRAIGHT_JOIN table_atom (ON expression)? )?
;
table_factor3:
table_factor4 ( (LEFT|RIGHT) (OUTER)? JOIN_SYM table_factor4 join_condition )?
;
table_factor4:
table_atom ( NATURAL ( (LEFT|RIGHT) (OUTER)? )? JOIN_SYM table_atom )?
;
table_atom:
( table_spec (partition_clause)? (alias)? (index_hint_list)? )
| ( subquery alias )
| ( LPAREN table_references RPAREN )
| ( OJ_SYM table_reference LEFT OUTER JOIN_SYM table_reference ON expression )
;
join_condition:
(ON expression) | (USING_SYM column_list)
;
index_hint_list:
index_hint (COMMA index_hint)*
;
index_options:
(INDEX_SYM | KEY_SYM) ( FOR_SYM ((JOIN_SYM) | (ORDER_SYM BY_SYM) | (GROUP_SYM BY_SYM)) )?
;
index_hint:
USE_SYM index_options LPAREN (index_list)? RPAREN
| IGNORE_SYM index_options LPAREN index_list RPAREN
| FORCE_SYM index_options LPAREN index_list RPAREN
;
index_list:
index_name (COMMA index_name)*
;
partition_clause:
PARTITION_SYM LPAREN partition_names RPAREN
;
partition_names: partition_name (COMMA partition_name)* ;
// SQL Statement Syntax ---- http://dev.mysql.com/doc/refman/5.6/en/sql-syntax.html ----------
root_statement:
(SHIFT_LEFT SHIFT_RIGHT)?
( data_manipulation_statements | data_definition_statements /*| transactional_locking_statements | replication_statements*/ )
(SEMI)?
;
data_manipulation_statements:
select_statement
| delete_statements
| insert_statements
| update_statements
| call_statement
| do_statement
| handler_statements
| load_data_statement
| load_xml_statement
| replace_statement
;
data_definition_statements:
create_database_statement
| alter_database_statements
| drop_database_statement
| create_event_statement
| alter_event_statement
| drop_event_statement
//| create_function_statement
//| alter_function_statement
//| drop_function_statement
//| create_procedure_create_function_statement
//| alter_procedure_statement
//| drop_procedure_drop_function_statement
//| create_trigger_statement
//| drop_trigger_statement
| create_server_statement
| alter_server_statement
| drop_server_statement
| create_table_statement
| alter_table_statement
| drop_table_statement
| create_view_statement
| alter_view_statement
| rename_table_statement
| drop_view_statement
| truncate_table_statement
| create_index_statement
| drop_index_statement
;
/*transactional_locking_statements:
start_transaction_statement
| comment_statement
| rollback_statement
| savepoint_statement
| rollback_to_savepoint_statement
| release_savepoint_statement
| lock_table_statement
| unlock_table_statement
| set_transaction_statement
| xa_transaction_statement
;
replication_statements:
controlling_master_servers_statements
| controlling_slave_servers_statements
;
*/
// select ------ http://dev.mysql.com/doc/refman/5.6/en/select.html -------------------------------
select_statement:
select_expression ( (UNION_SYM (ALL)?) select_expression )*
;
select_expression:
SELECT
( ALL | DISTINCT | DISTINCTROW )?
(HIGH_PRIORITY)?
(STRAIGHT_JOIN)?
(SQL_SMALL_RESULT)? (SQL_BIG_RESULT)? (SQL_BUFFER_RESULT)?
(SQL_CACHE_SYM | SQL_NO_CACHE_SYM)? (SQL_CALC_FOUND_ROWS)?
select_list
(
FROM table_references
( partition_clause )?
( where_clause )?
( groupby_clause )?
( having_clause )?
) ?
( orderby_clause )?
( limit_clause )?
( ( FOR_SYM UPDATE) | (LOCK IN_SYM SHARE_SYM MODE_SYM) )?
;
where_clause:
WHERE expression
;
groupby_clause:
GROUP_SYM BY_SYM groupby_item (COMMA groupby_item)* (WITH ROLLUP_SYM)?
;
groupby_item: column_spec | INTEGER_NUM | bit_expr ;
having_clause:
HAVING expression
;
orderby_clause:
ORDER_SYM BY_SYM orderby_item (COMMA orderby_item)*
;
orderby_item: groupby_item (ASC | DESC)? ;
limit_clause:
LIMIT ((offset COMMA)? row_count) | (row_count OFFSET_SYM offset)
;
offset: INTEGER_NUM ;
row_count: INTEGER_NUM ;
select_list:
( ( displayed_column ( COMMA displayed_column )*)
| ASTERISK )
;
column_list:
LPAREN column_spec (COMMA column_spec)* RPAREN
;
subquery:
LPAREN select_statement RPAREN
;
table_spec:
( schema_name DOT )? table_name
;
displayed_column :
( table_spec DOT ASTERISK )
|
( column_spec (alias)? )
|
( bit_expr (alias)? )
;
// delete ------ http://dev.mysql.com/doc/refman/5.6/en/delete.html ------------------------
delete_statements:
DELETE_SYM (LOW_PRIORITY)? (QUICK)? (IGNORE_SYM)?
( delete_single_table_statement | delete_multiple_table_statement1 | delete_multiple_table_statement2 )
;
delete_single_table_statement:
FROM table_spec
(partition_clause)?
(where_clause)?
(orderby_clause)?
(limit_clause)?
;
delete_multiple_table_statement1:
table_spec (ALL_FIELDS)? (COMMA table_spec (ALL_FIELDS)?)*
FROM table_references
(where_clause)?
;
delete_multiple_table_statement2:
FROM table_spec (ALL_FIELDS)? (COMMA table_spec (ALL_FIELDS)?)*
USING_SYM table_references
(where_clause)?
;
// insert --------- http://dev.mysql.com/doc/refman/5.6/en/insert.html -------------------------
insert_statements :
insert_statement1 | insert_statement2 | insert_statement3
;
insert_header:
INSERT (LOW_PRIORITY | HIGH_PRIORITY)? (IGNORE_SYM)?
(INTO)? table_spec
(partition_clause)?
;
insert_subfix:
ON DUPLICATE_SYM KEY_SYM UPDATE column_spec EQ_SYM expression (COMMA column_spec EQ_SYM expression)*
;
insert_statement1:
insert_header
(column_list)?
value_list_clause
( insert_subfix )?
;
value_list_clause: (VALUES | VALUE_SYM) column_value_list (COMMA column_value_list)*;
column_value_list: LPAREN (bit_expr|DEFAULT) (COMMA (bit_expr|DEFAULT) )* RPAREN ;
insert_statement2:
insert_header
set_columns_cluase
( insert_subfix )?
;
set_columns_cluase: SET_SYM set_column_cluase ( COMMA set_column_cluase )*;
set_column_cluase: column_spec EQ_SYM (expression|DEFAULT) ;
insert_statement3:
insert_header
(column_list)?
select_expression
( insert_subfix )?
;
// update -------- http://dev.mysql.com/doc/refman/5.6/en/update.html ------------------------
update_statements :
single_table_update_statement | multiple_table_update_statement
;
single_table_update_statement:
UPDATE (LOW_PRIORITY)? (IGNORE_SYM)? table_reference
set_columns_cluase
(where_clause)?
(orderby_clause)?
(limit_clause)?
;
multiple_table_update_statement:
UPDATE (LOW_PRIORITY)? (IGNORE_SYM)? table_references
set_columns_cluase
(where_clause)?
;
// call ----------- http://dev.mysql.com/doc/refman/5.6/en/call.html -------------------------
call_statement:
CALL_SYM procedure_name (LPAREN ( bit_expr (COMMA bit_expr)* )? RPAREN)?
;
// do -------------- http://dev.mysql.com/doc/refman/5.6/en/do.html ----------------------------
do_statement:
DO_SYM root_statement (COMMA root_statement)*
;
// handler ------------ http://dev.mysql.com/doc/refman/5.6/en/handler.html ----------------------
handler_statements:
HANDLER_SYM table_name
(open_handler_statement | handler_statement1 | handler_statement2 | handler_statement3 | close_handler_statement)
;
open_handler_statement:
OPEN_SYM (alias)?
;
handler_statement1:
READ_SYM index_name relational_op LPAREN bit_expr (COMMA bit_expr)* RPAREN
(where_clause)? (limit_clause)?
;
handler_statement2:
READ_SYM index_name (FIRST_SYM | NEXT_SYM | PREV_SYM | LAST_SYM)
(where_clause)? (limit_clause)?
;
handler_statement3:
READ_SYM (FIRST_SYM | NEXT_SYM)
(where_clause)? (limit_clause)?
;
close_handler_statement:
CLOSE_SYM
;
// load data ------------ http://dev.mysql.com/doc/refman/5.6/en/load-data.html ---------------------
load_data_statement:
LOAD DATA_SYM (LOW_PRIORITY | CONCURRENT)? (LOCAL_SYM)? INFILE TEXT_STRING
(REPLACE | IGNORE_SYM)?
INTO TABLE table_spec
(partition_clause)?
(CHARACTER_SYM SET_SYM charset_name)?
(
(FIELDS_SYM | COLUMNS_SYM)
(TERMINATED BY_SYM TEXT_STRING)?
((OPTIONALLY)? ENCLOSED BY_SYM TEXT_STRING)?
(ESCAPED BY_SYM TEXT_STRING)?
)?
(
LINES
(STARTING BY_SYM TEXT_STRING)?
(TERMINATED BY_SYM TEXT_STRING)?
)?
(IGNORE_SYM INTEGER_NUM (LINES | ROWS_SYM))?
(LPAREN (column_spec|USER_VAR) (COMMA (column_spec|USER_VAR))* RPAREN)?
(set_columns_cluase)?
;
// load xml --------------- http://dev.mysql.com/doc/refman/5.6/en/load-xml.html ----------------------
load_xml_statement:
LOAD XML_SYM (LOW_PRIORITY | CONCURRENT)? (LOCAL_SYM)? INFILE TEXT_STRING
(REPLACE | IGNORE_SYM)?
INTO TABLE table_spec
(partition_clause)?
(CHARACTER_SYM SET_SYM charset_name)?
(ROWS_SYM IDENTIFIED_SYM BY_SYM TEXT_STRING)?
(IGNORE_SYM INTEGER_NUM (LINES | ROWS_SYM))?
(LPAREN (column_spec|USER_VAR) (COMMA (column_spec|USER_VAR))* RPAREN)?
(set_columns_cluase)?
;
// replace ------------------- http://dev.mysql.com/doc/refman/5.6/en/replace.html ---------------------
replace_statement:
replace_statement_header
( replace_statement1 | replace_statement2 | replace_statement3 )
;
replace_statement_header:
REPLACE (LOW_PRIORITY | DELAYED_SYM)?
(INTO)? table_name
(partition_clause)?
;
replace_statement1:
(column_list)?
value_list_clause
;
replace_statement2:
set_columns_cluase
;
replace_statement3:
(column_list)?
select_statement
;
// http://dev.mysql.com/doc/refman/5.6/en/create-database.html
create_database_statement:
CREATE (DATABASE | SCHEMA) (IF NOT_SYM EXISTS)? schema_name
( create_specification (COMMA create_specification)* )*
;
create_specification:
(DEFAULT)?
(
( CHARACTER_SYM SET_SYM (EQ_SYM)? charset_name )
|
( COLLATE_SYM (EQ_SYM)? collation_name )
)
;
// http://dev.mysql.com/doc/refman/5.6/en/alter-database.html
alter_database_statements:
alter_database_statement1 | alter_database_statement2
;
alter_database_statement1:
ALTER (DATABASE | SCHEMA) (schema_name)?
alter_database_specification
;
alter_database_statement2:
ALTER (DATABASE | SCHEMA) schema_name
UPGRADE_SYM DATA_SYM DIRECTORY_SYM NAME_SYM
;
alter_database_specification:
(DEFAULT)? CHARACTER_SYM SET_SYM (EQ_SYM)? charset_name
|
(DEFAULT)? COLLATE_SYM (EQ_SYM)? collation_names
;
// http://dev.mysql.com/doc/refman/5.6/en/drop-database.html
drop_database_statement:
DROP (DATABASE | SCHEMA) (IF EXISTS)? schema_name
;
// http://dev.mysql.com/doc/refman/5.6/en/create-event.html
create_event_statement:
CREATE
(DEFINER EQ_SYM ( user_name | CURRENT_USER ))?
EVENT_SYM
(IF NOT_SYM EXISTS)?
event_name
ON SCHEDULE_SYM schedule_definition
(ON COMPLETION_SYM (NOT_SYM)? PRESERVE_SYM)?
( ENABLE_SYM | DISABLE_SYM | (DISABLE_SYM ON SLAVE) )?
(COMMENT_SYM TEXT_STRING)?
do_statement
;
schedule_definition:
( AT_SYM timestamp (PLUS INTERVAL_SYM interval)* )
|
( EVERY_SYM interval )
( STARTS_SYM timestamp (PLUS INTERVAL_SYM interval)* )?
( ENDS_SYM timestamp (PLUS INTERVAL_SYM interval)* )?
;
interval:
INTEGER_NUM (YEAR | QUARTER | MONTH | DAY_SYM | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND)
;
timestamp:
CURRENT_TIMESTAMP
//| timestamp_literal
//...
;
// http://dev.mysql.com/doc/refman/5.6/en/alter-event.html
alter_event_statement:
ALTER
(DEFINER EQ_SYM ( user_name | CURRENT_USER ))?
EVENT_SYM event_name
(ON SCHEDULE_SYM schedule_definition)?
(ON COMPLETION_SYM (NOT_SYM)? PRESERVE_SYM)?
(RENAME TO_SYM event_name)?
( ENABLE_SYM | DISABLE_SYM | (DISABLE_SYM ON SLAVE) )?
(COMMENT_SYM TEXT_STRING)?
(do_statement)?
;
// http://dev.mysql.com/doc/refman/5.6/en/drop-event.html
drop_event_statement:
DROP EVENT_SYM (IF EXISTS)? event_name
;
/*
// http://dev.mysql.com/doc/refman/5.6/en/create-function.html
create_function_statement:
;
// http://dev.mysql.com/doc/refman/5.6/en/alter-function.html
alter_function_statement:
ALTER FUNCTION_SYM function_name (characteristic)*
;
characteristic:
( COMMENT_SYM TEXT_STRING )
| ( LANGUAGE SQL_SYM )
| ( (CONTAINS_SYM SQL_SYM) | (NO_SYM SQL_SYM) | (READS_SYM SQL_SYM DATA_SYM) | (MODIFIES_SYM SQL_SYM DATA_SYM) )
| ( SQL_SYM SECURITY_SYM (DEFINER | INVOKER_SYM) )
;
// http://dev.mysql.com/doc/refman/5.6/en/drop-function.html
drop_function_statement:
;
*/
// http://dev.mysql.com/doc/refman/5.6/en/create-index.html
create_index_statement:
CREATE (UNIQUE_SYM|FULLTEXT_SYM|SPATIAL_SYM)? INDEX_SYM index_name
(index_type)?
ON table_name LPAREN index_column_name (COMMA index_column_name)* RPAREN
(algorithm_option | lock_option)*
;
algorithm_option:
ALGORITHM_SYM (EQ_SYM)? (DEFAULT|INPLACE_SYM|COPY_SYM)
;
lock_option:
LOCK (EQ_SYM)? (DEFAULT|NONE_SYM|SHARED_SYM|EXCLUSIVE_SYM)
;
// http://dev.mysql.com/doc/refman/5.6/en/drop-index.html
drop_index_statement:
DROP INDEX_SYM index_name ON table_name
(algorithm_option | lock_option)*
;
/*
// http://dev.mysql.com/doc/refman/5.6/en/create-procedure.html
create_procedure_create_function_statement:
;
// http://dev.mysql.com/doc/refman/5.6/en/alter-procedure.html
alter_procedure_statement:
ALTER PROCEDURE procedure_name (characteristic)*
;
// http://dev.mysql.com/doc/refman/5.6/en/drop-procedure.html
drop_procedure_drop_function_statement:
;
*/
// http://dev.mysql.com/doc/refman/5.6/en/create-server.html
create_server_statement:
CREATE SERVER_SYM server_name
FOREIGN DATA_SYM WRAPPER_SYM wrapper_name
OPTIONS_SYM LPAREN create_server_option (COMMA create_server_option)* RPAREN
;
create_server_option:
| ( HOST_SYM string_literal )
| ( DATABASE string_literal )
| ( USER string_literal )
| ( PASSWORD string_literal )
| ( SOCKET_SYM string_literal )
| ( OWNER_SYM string_literal )
| ( PORT_SYM number_literal )
;
// http://dev.mysql.com/doc/refman/5.6/en/alter-server.html
alter_server_statement:
ALTER SERVER_SYM server_name
OPTIONS_SYM LPAREN alter_server_option (COMMA alter_server_option)* RPAREN
;
alter_server_option:
(USER) (ID|TEXT_STRING)
;
// http://dev.mysql.com/doc/refman/5.6/en/drop-server.html
drop_server_statement:
DROP SERVER_SYM (IF EXISTS)? server_name
;
// http://dev.mysql.com/doc/refman/5.6/en/create-table.html
create_table_statement:
create_table_statement1 | create_table_statement2 | create_table_statement3
;
create_table_statement1:
CREATE (TEMPORARY)? TABLE (IF NOT_SYM EXISTS)? table_name
LPAREN create_definition (COMMA create_definition)* RPAREN
(table_options)?
(partition_options)?
(select_statement)?
;
create_table_statement2:
CREATE (TEMPORARY)? TABLE (IF NOT_SYM EXISTS)? table_name
(table_options)?
(partition_options)?
select_statement
;
create_table_statement3:
CREATE (TEMPORARY)? TABLE (IF NOT_SYM EXISTS)? table_name
( (LIKE_SYM table_name) | (LPAREN LIKE_SYM table_name RPAREN) )
;
create_definition:
( column_name column_definition )
| ( (CONSTRAINT (constraint_symbol_name)?)? PRIMARY_SYM KEY_SYM (index_type)? LPAREN index_column_name (COMMA index_column_name)* RPAREN (index_option)* )
| ( (INDEX_SYM|KEY_SYM) (index_name)? (index_type)? LPAREN index_column_name (COMMA index_column_name)* RPAREN (index_option)* )
| ( (CONSTRAINT (constraint_symbol_name)?)? UNIQUE_SYM (INDEX_SYM|KEY_SYM)? (index_name)? (index_type)? LPAREN index_column_name (COMMA index_column_name)* RPAREN (index_option)* )
| ( (FULLTEXT_SYM|SPATIAL_SYM) (INDEX_SYM|KEY_SYM)? (index_name)? LPAREN index_column_name (COMMA index_column_name)* RPAREN (index_option)* )
| ( (CONSTRAINT (constraint_symbol_name)?)? FOREIGN KEY_SYM (index_name)? LPAREN index_column_name (COMMA index_column_name)* RPAREN reference_definition )
| ( CHECK_SYM LPAREN expression RPAREN )
;
column_definition:
column_data_type_header
(AUTO_INCREMENT)? ( (UNIQUE_SYM (KEY_SYM)?) | (PRIMARY_SYM (KEY_SYM)?) )?
(COMMENT_SYM TEXT_STRING)?
(COLUMN_FORMAT (FIXED_SYM|DYNAMIC_SYM|DEFAULT))?
(reference_definition)?
;
null_or_notnull:
(NOT_SYM NULL_SYM) | NULL_SYM
;
column_data_type_header:
( BIT_SYM(LPAREN length RPAREN)? (null_or_notnull)? (DEFAULT bit_literal)? )
| ( TINYINT(LPAREN length RPAREN)? (UNSIGNED_SYM)? (ZEROFILL)? (null_or_notnull)? (DEFAULT number_literal)? )
| ( SMALLINT(LPAREN length RPAREN)? (UNSIGNED_SYM)? (ZEROFILL)? (null_or_notnull)? (DEFAULT number_literal)? )
| ( MEDIUMINT(LPAREN length RPAREN)? (UNSIGNED_SYM)? (ZEROFILL)? (null_or_notnull)? (DEFAULT number_literal)? )
| ( INT_SYM(LPAREN length RPAREN)? (UNSIGNED_SYM)? (ZEROFILL)? (null_or_notnull)? (DEFAULT number_literal)? )
| ( INTEGER_SYM(LPAREN length RPAREN)? (UNSIGNED_SYM)? (ZEROFILL)? (null_or_notnull)? (DEFAULT number_literal)? )
| ( BIGINT(LPAREN length RPAREN)? (UNSIGNED_SYM)? (ZEROFILL)? (null_or_notnull)? (DEFAULT number_literal)? )
| ( REAL(LPAREN length COMMA number_literal RPAREN)? (UNSIGNED_SYM)? (ZEROFILL)? (null_or_notnull)? (DEFAULT number_literal)? )
| ( DOUBLE_SYM(LPAREN length COMMA number_literal RPAREN)? (UNSIGNED_SYM)? (ZEROFILL)? (null_or_notnull)? (DEFAULT number_literal)? )
| ( FLOAT_SYM(LPAREN length COMMA number_literal RPAREN)? (UNSIGNED_SYM)? (ZEROFILL)? (null_or_notnull)? (DEFAULT number_literal)? )
| ( DECIMAL_SYM(LPAREN length( COMMA number_literal)? RPAREN)? (UNSIGNED_SYM)? (ZEROFILL)? (null_or_notnull)? (DEFAULT number_literal)? )
| ( NUMERIC_SYM(LPAREN length( COMMA number_literal)? RPAREN)? (UNSIGNED_SYM)? (ZEROFILL)? (null_or_notnull)? (DEFAULT number_literal)? )
| ( DATE_SYM (null_or_notnull)? (DEFAULT TEXT_STRING)? )
| ( TIME_SYM (null_or_notnull)? (DEFAULT TEXT_STRING)? )
| ( TIMESTAMP (null_or_notnull)? (DEFAULT (CURRENT_TIMESTAMP|TEXT_STRING))? )
| ( DATETIME (null_or_notnull)? (DEFAULT (CURRENT_TIMESTAMP|TEXT_STRING))? )
| ( YEAR (null_or_notnull)? (DEFAULT INTEGER_NUM)? )
| ( CHAR (LPAREN length RPAREN)? (CHARACTER_SYM SET_SYM charset_name)? (COLLATE_SYM collation_name)? (null_or_notnull)? (DEFAULT TEXT_STRING)? )
| ( VARCHAR LPAREN length RPAREN (CHARACTER_SYM SET_SYM charset_name)? (COLLATE_SYM collation_name)? (null_or_notnull)? (DEFAULT TEXT_STRING)? )
| ( BINARY (LPAREN length RPAREN)? (null_or_notnull)? (DEFAULT TEXT_STRING)? )
| ( VARBINARY LPAREN length RPAREN (null_or_notnull)? (DEFAULT TEXT_STRING)? )
| ( TINYBLOB (null_or_notnull)? )
| ( BLOB_SYM (null_or_notnull)? )
| ( MEDIUMBLOB (null_or_notnull)? )
| ( LONGBLOB (null_or_notnull)? )
| ( TINYTEXT (BINARY)? (CHARACTER_SYM SET_SYM charset_name)? (COLLATE_SYM collation_name)? (null_or_notnull)? )
| ( TEXT_SYM (BINARY)? (CHARACTER_SYM SET_SYM charset_name)? (COLLATE_SYM collation_name)? (null_or_notnull)? )
| ( MEDIUMTEXT (BINARY)? (CHARACTER_SYM SET_SYM charset_name)? (COLLATE_SYM collation_name)? (null_or_notnull)? )
| ( LONGTEXT (BINARY)? (CHARACTER_SYM SET_SYM charset_name)? (COLLATE_SYM collation_name)? (null_or_notnull)? )
| ( ENUM LPAREN TEXT_STRING (COMMA TEXT_STRING)* RPAREN (CHARACTER_SYM SET_SYM charset_name)? (COLLATE_SYM collation_name)? (null_or_notnull)? (DEFAULT TEXT_STRING)? )
| ( SET_SYM LPAREN TEXT_STRING (COMMA TEXT_STRING)* RPAREN (CHARACTER_SYM SET_SYM charset_name)? (COLLATE_SYM collation_name)? (null_or_notnull)? (DEFAULT TEXT_STRING)? )
//| ( spatial_type (null_or_notnull)? (DEFAULT default_value)? )
;
index_column_name:
column_name (LPAREN INTEGER_NUM RPAREN)? (ASC | DESC)?
;
reference_definition:
REFERENCES table_name LPAREN index_column_name (COMMA index_column_name)* RPAREN
( (MATCH FULL) | (MATCH PARTIAL) | (MATCH SIMPLE_SYM) )?
(ON DELETE_SYM reference_option)?
(ON UPDATE reference_option)?
;
reference_option:
(RESTRICT) | (CASCADE) | (SET_SYM NULL_SYM) | (NO_SYM ACTION)
;
table_options:
table_option (( COMMA )? table_option)*
;
table_option:
( ENGINE_SYM (EQ_SYM)? engine_name )
| ( AUTO_INCREMENT (EQ_SYM)? INTEGER_NUM )
| ( AVG_ROW_LENGTH (EQ_SYM)? INTEGER_NUM )
| ( (DEFAULT)? CHARACTER_SYM SET_SYM (EQ_SYM)? charset_name )
| ( CHECKSUM_SYM (EQ_SYM)? INTEGER_NUM )
| ( (DEFAULT)? COLLATE_SYM (EQ_SYM)? collation_name )
| ( COMMENT_SYM (EQ_SYM)? TEXT_STRING )
| ( CONNECTION_SYM (EQ_SYM)? TEXT_STRING )
| ( DATA_SYM DIRECTORY_SYM (EQ_SYM)? TEXT_STRING )
| ( DELAY_KEY_WRITE_SYM (EQ_SYM)? INTEGER_NUM )
| ( INDEX_SYM DIRECTORY_SYM (EQ_SYM)? TEXT_STRING )
| ( INSERT_METHOD (EQ_SYM)? ( NO_SYM | FIRST_SYM | LAST_SYM ) )
| ( KEY_BLOCK_SIZE (EQ_SYM)? INTEGER_NUM )
| ( MAX_ROWS (EQ_SYM)? INTEGER_NUM )
| ( MIN_ROWS (EQ_SYM)? INTEGER_NUM )
| ( PACK_KEYS_SYM (EQ_SYM)? (INTEGER_NUM | DEFAULT) )
| ( PASSWORD (EQ_SYM)? TEXT_STRING )
| ( ROW_FORMAT_SYM (EQ_SYM)? (DEFAULT|DYNAMIC_SYM|FIXED_SYM|COMPRESSED_SYM|REDUNDANT_SYM|COMPACT_SYM) )
| ( STATS_AUTO_RECALC (EQ_SYM)? (DEFAULT | INTEGER_NUM) )
| ( STATS_PERSISTENT (EQ_SYM)? (DEFAULT | INTEGER_NUM) )
| ( UNION_SYM (EQ_SYM)? LPAREN table_name( COMMA table_name)* RPAREN )
;
partition_options:
PARTITION_SYM BY_SYM
(
( (LINEAR_SYM)? HASH_SYM LPAREN expression RPAREN )
| ( (LINEAR_SYM)? KEY_SYM LPAREN column_list RPAREN )
| ( RANGE_SYM(LPAREN expression RPAREN | COLUMNS_SYM LPAREN column_list RPAREN) )
| ( LIST_SYM(LPAREN expression RPAREN | COLUMNS_SYM LPAREN column_list RPAREN) )
)
(PARTITIONS_SYM INTEGER_NUM)?
(
SUBPARTITION_SYM BY_SYM
( ( (LINEAR_SYM)? HASH_SYM LPAREN expression RPAREN ) | ( (LINEAR_SYM)? KEY_SYM LPAREN column_list RPAREN ) )
(SUBPARTITIONS_SYM INTEGER_NUM)?
)?
(LPAREN partition_definition ( COMMA partition_definition)* RPAREN)?
;
partition_definition:
PARTITION_SYM partition_name
(
VALUES
(
(LESS_SYM THAN_SYM ( (LPAREN expression_list RPAREN) | MAXVALUE_SYM ))
|
(IN_SYM LPAREN expression_list RPAREN)
)
)?
((STORAGE_SYM)? ENGINE_SYM (EQ_SYM)? engine_name)?
(COMMENT_SYM (EQ_SYM)? TEXT_STRING )?
(DATA_SYM DIRECTORY_SYM (EQ_SYM)? TEXT_STRING)?
(INDEX_SYM DIRECTORY_SYM (EQ_SYM)? TEXT_STRING)?
(MAX_ROWS (EQ_SYM)? INTEGER_NUM)?
(MIN_ROWS (EQ_SYM)? INTEGER_NUM)?
(LPAREN subpartition_definition (COMMA subpartition_definition)* RPAREN)?
;
subpartition_definition:
SUBPARTITION_SYM partition_logical_name
((STORAGE_SYM)? ENGINE_SYM (EQ_SYM)? engine_name)?
(COMMENT_SYM (EQ_SYM)? TEXT_STRING )?
(DATA_SYM DIRECTORY_SYM (EQ_SYM)? TEXT_STRING)?
(INDEX_SYM DIRECTORY_SYM (EQ_SYM)? TEXT_STRING)?
(MAX_ROWS (EQ_SYM)? INTEGER_NUM)?
(MIN_ROWS (EQ_SYM)? INTEGER_NUM)?
;
length : INTEGER_NUM;
// http://dev.mysql.com/doc/refman/5.6/en/alter-table.html
alter_table_statement:
ALTER (IGNORE_SYM)? TABLE table_name
( alter_table_specification (COMMA alter_table_specification)* )?
( partition_options )?
;
alter_table_specification:
table_options
| ( ADD_SYM (COLUMN_SYM)? column_name column_definition ( (FIRST_SYM|AFTER_SYM) column_name )? )
| ( ADD_SYM (COLUMN_SYM)? LPAREN column_definitions RPAREN )
| ( ADD_SYM (INDEX_SYM|KEY_SYM) (index_name)? (index_type)? LPAREN index_column_names RPAREN (index_option)* )
| ( ADD_SYM (CONSTRAINT (constraint_symbol_name)?)? PRIMARY_SYM KEY_SYM (index_type)? LPAREN index_column_names RPAREN (index_option)* )
|
(
ADD_SYM (CONSTRAINT (constraint_symbol_name)?)? UNIQUE_SYM (INDEX_SYM|KEY_SYM)? (index_name)?
(index_type)? LPAREN index_column_name (COMMA index_column_name)* RPAREN (index_option)*
)
| ( ADD_SYM FULLTEXT_SYM (INDEX_SYM|KEY_SYM)? (index_name)? LPAREN index_column_names RPAREN (index_option)* )
| ( ADD_SYM SPATIAL_SYM (INDEX_SYM|KEY_SYM)? (index_name)? LPAREN index_column_names RPAREN (index_option)* )
| ( ADD_SYM (CONSTRAINT (constraint_symbol_name)?)? FOREIGN KEY_SYM (index_name)? LPAREN index_column_names RPAREN reference_definition )
| ( ALGORITHM_SYM (EQ_SYM)? (DEFAULT|INPLACE_SYM|COPY_SYM) )
| ( ALTER (COLUMN_SYM)? column_name ((SET_SYM DEFAULT literal_value) | (DROP DEFAULT)) )
| ( CHANGE (COLUMN_SYM)? column_name column_name column_definition (FIRST_SYM|AFTER_SYM column_name)? )
| ( LOCK (EQ_SYM)? (DEFAULT|NONE_SYM|SHARED_SYM|EXCLUSIVE_SYM) )
| ( MODIFY_SYM (COLUMN_SYM)? column_name column_definition (FIRST_SYM | AFTER_SYM column_name)? )
| ( DROP (COLUMN_SYM)? column_name )
| ( DROP PRIMARY_SYM KEY_SYM )
| ( DROP (INDEX_SYM|KEY_SYM) index_name )
| ( DROP FOREIGN KEY_SYM foreign_key_symbol_name )
| ( DISABLE_SYM KEYS )
| ( ENABLE_SYM KEYS )
| ( RENAME (TO_SYM|AS_SYM)? table_name )
| ( ORDER_SYM BY_SYM column_name (COMMA column_name)* )
| ( CONVERT_SYM TO_SYM CHARACTER_SYM SET_SYM charset_name (COLLATE_SYM collation_name)? )
| ( (DEFAULT)? CHARACTER_SYM SET_SYM (EQ_SYM)? charset_name (COLLATE_SYM (EQ_SYM)? collation_name)? )
| ( DISCARD TABLESPACE )
| ( IMPORT TABLESPACE )
| ( FORCE_SYM )
| ( ADD_SYM PARTITION_SYM LPAREN partition_definition RPAREN )
| ( DROP PARTITION_SYM partition_names )
| ( TRUNCATE PARTITION_SYM (partition_names | ALL) )
| ( COALESCE PARTITION_SYM INTEGER_NUM )
| ( REORGANIZE_SYM PARTITION_SYM partition_names INTO LPAREN partition_definition (COMMA partition_definition)* RPAREN )
| ( EXCHANGE_SYM PARTITION_SYM partition_name WITH TABLE table_name )
| ( ANALYZE_SYM PARTITION_SYM (partition_names | ALL) )
| ( CHECK_SYM PARTITION_SYM (partition_names | ALL) )
| ( OPTIMIZE PARTITION_SYM (partition_names | ALL) )
| ( REBUILD_SYM PARTITION_SYM (partition_names | ALL) )
| ( REPAIR PARTITION_SYM (partition_names | ALL) )
| ( REMOVE_SYM PARTITIONING_SYM )
;
index_column_names:
index_column_name (COMMA index_column_name)*;
index_type:
USING_SYM (BTREE_SYM | HASH_SYM)
;
index_option:
( KEY_BLOCK_SIZE (EQ_SYM)? INTEGER_NUM )
| index_type
| ( WITH PARSER_SYM parser_name )
| ( COMMENT_SYM TEXT_STRING )
;
column_definitions:
column_name column_definition (COMMA column_name column_definition)*
;
// http://dev.mysql.com/doc/refman/5.6/en/rename-table.html
rename_table_statement:
RENAME TABLE
table_name TO_SYM table_name
(COMMA table_name TO_SYM table_name)*
;
// http://dev.mysql.com/doc/refman/5.6/en/drop-table.html
drop_table_statement:
DROP (TEMPORARY)? TABLE (IF EXISTS)?
table_name (COMMA table_name)*
(RESTRICT | CASCADE)?
;
// http://dev.mysql.com/doc/refman/5.6/en/truncate-table.html
truncate_table_statement:
TRUNCATE (TABLE)? table_name
;
/*
// http://dev.mysql.com/doc/refman/5.6/en/create-trigger.html
create_trigger_statement:
CREATE
(DEFINER EQ_SYM (user_name | CURRENT_USER))?
// ...
;
// http://dev.mysql.com/doc/refman/5.6/en/drop-trigger.html
drop_trigger_statement:
;
*/
// http://dev.mysql.com/doc/refman/5.6/en/create-view.html
create_view_statement:
CREATE (OR_SYM REPLACE)?
create_view_body
;
create_view_body:
(ALGORITHM_SYM EQ_SYM (UNDEFINED_SYM | MERGE_SYM | TEMPTABLE_SYM))?
(DEFINER EQ_SYM (user_name | CURRENT_USER) )?
(SQL_SYM SECURITY_SYM ( DEFINER | INVOKER_SYM ))?
VIEW_SYM view_name (LPAREN column_list RPAREN)?
AS_SYM select_statement
(WITH (CASCADED | LOCAL_SYM)? CHECK_SYM OPTION)?
;
// http://dev.mysql.com/doc/refman/5.6/en/alter-view.html
alter_view_statement:
ALTER
create_view_body
;
// http://dev.mysql.com/doc/refman/5.6/en/drop-view.html
drop_view_statement:
DROP VIEW_SYM (IF EXISTS)?
view_name (COMMA view_name)*
(RESTRICT | CASCADE)?
;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment