BNF for SQLParser.jj

NON-TERMINALS

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> ) )*