| parseStatement | ::= | ( ( selectSql | deleteSql | insertSql | updateSql | createTable | dropTable | alterTable | commit | executeProcedure ) ) |
| selectSql | ::= | ( <SELECT> ( setQuantifier )? ( <OPENPAREN> )? selectColumnList ( <CLOSEPAREN> )? <FROM> selectTableList ( <WHERE> conditionList )? ( groupBy )? ( orderBy )? ( <FOR_UPDATE> )? ) |
| deleteSql | ::= | ( <DELETE> <FROM> tableName ( <WHERE> conditionList )? ) |
| updateSql | ::= | ( <UPDATE> ( ( <BY> <UID> ) | tableName ) <SET> columnListWithValues ( <WHERE> conditionList )? ) |
| insertSql | ::= | ( <INSERT> <INTO> tableName ( <OPENPAREN> columnList <CLOSEPAREN> )? ( <VALUES> <OPENPAREN> insertValuesList <CLOSEPAREN> | ( <OPENPAREN> )? selectSql ( <CLOSEPAREN> )? ) ) |
| createTable | ::= | <CREATE> <TABLE> ( className ) <OPENPAREN> <IDENTIFIER> sqlType ( ( ( <PRIMARY_KEY> ( <NOT> <NULL> )? ) | ( <INDEX> ) ) )? ( <DEFAULT_NULL> )? ( "," ( ( <PRIMARY_KEY> <OPENPAREN> <IDENTIFIER> ( "," <IDENTIFIER> )* <CLOSEPAREN> ) | ( <IDENTIFIER> sqlType ( ( ( <PRIMARY_KEY> ( <NOT> <NULL> )? ) | ( <INDEX> ) ) )? ( <DEFAULT_NULL> )? ) ) )* <CLOSEPAREN> |
| dropTable | ::= | <DROP> <TABLE> className |
| alterTable | ::= | <ALTER> <TABLE> className <ADD> <PRIMARY_KEY> <OPENPAREN> <IDENTIFIER> ( "," <IDENTIFIER> )* <CLOSEPAREN> <USING> <INDEX> |
| commit | ::= | ( <COMMIT> | <ROLLBACK> ) |
| executeProcedure | ::= | <CALL> <IDENTIFIER> <OPENPAREN> ( ( <STRING_LITERAL> | <INTEGER_LITERAL> | <LONG_LITERAL> | <FLOATING_POINT_LITERAL> | <IDENTIFIER> | <QUESTIONMARK> ) ( "," ( <STRING_LITERAL> | <INTEGER_LITERAL> | <LONG_LITERAL> | <FLOATING_POINT_LITERAL> | <IDENTIFIER> ) )* )? <CLOSEPAREN> |
| setQuantifier | ::= | ( <DISTINCT> ) |
| | | ( <ALL> ) | |
| columnList | ::= | ( <IDENTIFIER> ) ( "," ( <IDENTIFIER> ) )* |
| selectColumnList | ::= | ( ( <IDENTIFIER> ) "." )? ( ( <IDENTIFIER> | <ASTERISK> | <UID> | <STRING_LITERAL> <IDENTIFIER> ) | function ) ( "," ( <IDENTIFIER> "." )? ( ( <IDENTIFIER> | <ASTERISK> | <UID> | <STRING_LITERAL> <IDENTIFIER> ) | function ) )* |
| columnListWithValues | ::= | ( <LOB> | <IDENTIFIER> ) "=" ( <MINUS> )? ( <QUESTIONMARK> | <STRING_LITERAL> | <INTEGER_LITERAL> | <LONG_LITERAL> | <FLOATING_POINT_LITERAL> | <TRUE> | <FALSE> | <EMPTY_CLOB> | <EMPTY_BLOB> ) ( "," <IDENTIFIER> "=" ( <MINUS> )? ( <QUESTIONMARK> | <STRING_LITERAL> | <LONG_LITERAL> | <INTEGER_LITERAL> | <FLOATING_POINT_LITERAL> | <TRUE> | <FALSE> | <EMPTY_CLOB> | <EMPTY_BLOB> ) )* |
| function | ::= | ( <SUM> | <COUNT> | <MAX> | <MIN> | <AVG> ) <OPENPAREN> ( <ASTERISK> | ( <IDENTIFIER> ) ) <CLOSEPAREN> |
| createColumnNode | ::= | ( <IDENTIFIER> ) |
| selectTableList | ::= | ( className ) ( <IDENTIFIER> )? ( "," ( className ) ( <IDENTIFIER> )? )* |
| tableName | ::= | ( className ) |
| insertValuesList | ::= | ( <QUESTIONMARK> | <TRUE> | <FALSE> | <NULL> | <EMPTY_CLOB> | <EMPTY_BLOB> | <STRING_LITERAL> | ( <MINUS> )? <INTEGER_LITERAL> | ( <MINUS> )? <LONG_LITERAL> | ( <MINUS> )? <FLOATING_POINT_LITERAL> ) ( "," ( <QUESTIONMARK> | <TRUE> | <FALSE> | <NULL> | <EMPTY_CLOB> | <EMPTY_BLOB> | <STRING_LITERAL> | ( <MINUS> )? <INTEGER_LITERAL> | ( <MINUS> )? <LONG_LITERAL> | ( <MINUS> )? <FLOATING_POINT_LITERAL> ) )* |
| groupBy | ::= | <GROUP> <BY> ( <IDENTIFIER> "." )? <IDENTIFIER> ( "," ( <IDENTIFIER> "." )? <IDENTIFIER> )* |
| orderBy | ::= | <ORDER> <BY> ( <IDENTIFIER> "." )? ( <IDENTIFIER> ) ( ( <ASC> | <DESC> ) )? ( ( "," ( <IDENTIFIER> "." )? <IDENTIFIER> ) ( ( <ASC> | <DESC> ) )? )* |
| conditionList | ::= | |
| | | <SEMICOLON> | |
| | | <EOF> | |
| | | <OPENPAREN> | |
| | | ||
| | | <AND> | |
| | | <OR> | |
| | | ||
| doCondition | ::= | |
| andExpression | ::= | ( <AND> )* |
| orExpression | ::= | ( <OR> )* |
| className | ::= | <IDENTIFIER> ( ( "." | "$" ) <IDENTIFIER> )* |
| sqlType | ::= | ( ( <VARCHAR> | <VARCHAR2> ) ( <OPENPAREN> <INTEGER_LITERAL> <CLOSEPAREN> )? | <CHAR> ( <OPENPAREN> <INTEGER_LITERAL> <CLOSEPAREN> )? | <DATE> | <DATETIME> | <NUMBER> <OPENPAREN> <INTEGER_LITERAL> ( "," <INTEGER_LITERAL> )? <CLOSEPAREN> | <TIME> | <FLOAT> ( <OPENPAREN> <INTEGER_LITERAL> <CLOSEPAREN> )? | <DOUBLE> | <BOOLEAN> | ( <INTEGER> | <INT> ) | <LONG> | <BLOB> | <CLOB> | <TIMESTAMP> | <DECIMAL> | <LONGVARCHAR> | <TINYINT> | <SMALLINT> | <BIGINT> | <BIT> ( <OPENPAREN> <INTEGER_LITERAL> <CLOSEPAREN> )? ) |
| condition | ::= | <ROWNUM> ( <EQUAL> <INTEGER_LITERAL> | <LESS> <INTEGER_LITERAL> | <LESSEQUAL> <INTEGER_LITERAL> | <GREATER> <INTEGER_LITERAL> | <GREATEREQUAL> <INTEGER_LITERAL> ) |
| | | createColumnNode ( ( ( <IS> <NULL> | <IS> <NOT> <NULL> ) ) | ( ( <EQUAL> | <LESS> | <LESSEQUAL> | <GREATER> | <GREATEREQUAL> | <NOTEQUAL> | <NOTEQUAL2> | <LIKE> | <NOT> <LIKE> ) ( <QUESTIONMARK> | <STRING_LITERAL> | <TRUE> | <FALSE> | ( <MINUS> )? <INTEGER_LITERAL> | ( <MINUS> )? <LONG_LITERAL> | ( <MINUS> )? <FLOATING_POINT_LITERAL> | <DATE_LITERAL> | <SYSDATE> ( ( <PLUS> | <MINUS> ) <INTEGER_LITERAL> )? | createColumnNode ) ) | ( <IN> ( <OPENPAREN> )? ( <CLOSEPAREN> )? ) | ( <NOT> <IN> ( <OPENPAREN> )? ( <CLOSEPAREN> )? ) ) | |
| inExprOrList | ::= | ( selectSql ) |
| | | ( inValueList ) | |
| inValueList | ::= | ( <TRUE> | <FALSE> | <NULL> | <EMPTY_CLOB> | <EMPTY_BLOB> | <QUESTIONMARK> | <STRING_LITERAL> | ( <MINUS> )? <INTEGER_LITERAL> | ( <MINUS> )? <LONG_LITERAL> | ( <MINUS> )? <FLOATING_POINT_LITERAL> ) ( "," ( <TRUE> | <FALSE> | <NULL> | <EMPTY_CLOB> | <EMPTY_BLOB> | <QUESTIONMARK> | <STRING_LITERAL> | ( <MINUS> )? <INTEGER_LITERAL> | ( <MINUS> )? <LONG_LITERAL> | ( <MINUS> )? <FLOATING_POINT_LITERAL> ) )* |