SQL Reserved words
The following table contains reserved words for the KCML SQL parser. They cannot be used as column names, table names or aliases unless they are protected by being quoted e.g. "DATE".
50 8 393ABS | CHARACTER_LENGTH | DEGREES | GROUP | MAX | PARTITION | SET | TRANSLATE |
ABSOLUTE | CHAR_LENGTH | DELETE | HAVING | MAX_DUMP_FILE_SIZE | PASCAL | SIGN | TRANSLATION |
ACOS | CHECK | DESC | HEX | MIN | PATH | SIGNED | TREE |
ACTION | CJKWIDTH | DESCRIBE | HOUR | MINUTE | PCTFREE | SIN | TRIM |
ADA | CLOB | DESCRIPTION | IBMPACKED | MOD | PERMISSIONS | SIZE | TRUE |
ADC | CLOSE | DESCRIPTOR | ICU | MODIFY | PI | SMALLINT | TRUNCATE |
ADD | COALESCE | DIAGNOSTICS | IDENTIFIED | MODULE | PLI | SOME | TYPE |
ALIAS | COBOL | DIFFERENCE | IDENTITY | MONTH | POSITION | SORTMERGE | TYPESTAMP |
ALL | COLLATE | DISABLE | IDEOGRAM | MONTHNAME | POSTVAL | SOUNDEX | UCASE |
ALLOCATE | COLLATION | DISCONNECT | IF | MOVE | POWER | SOURCE_IMAGE | UNION |
ALTER | COLUMN | DISPLAY | IFNULL | MUMPS | PRECISION | SPACE | UNIQUE |
AND | COMMIT | DISTINCT | IMMEDIATE | NAME | PREPARE | SPECIAL | UNKNOWN |
ANY | COMPRESS | DOMAIN | IN | NAMES | PRESERVE | SQL | UNLIMITED |
ARE | CONCAT | DOUBLE | INCLUDE | NATIONAL | PREVAL | SQLCA | UNSIGNED |
AS | CONNECT | DROP | INDEX | NATURAL | PRIMARY | SQLCODE | UNUSED |
ASC | CONNECTION | DTD | INDICATOR | NCHAR | PRIOR | SQLERROR | UPDATE |
ASCII | CONSTRAINT | ELSE | INITIALLY | NEXT | PRIORITY | SQLSTATE | UPPER |
ASIN | CONSTRAINTS | ENABLE | INNER | NO | PRIVILEGES | SQLWARNING | USAGE |
ASSERTION | CONTINUE | END | INPUT | NOCOMPACT | PROCEDURE | SQL_TSI_DAY | USER |
AT | CONVERT | END-EXEC | INSENSITIVE | NOEDIT | PUBLIC | SQL_TSI_FRAC_SECOND | USERSTAMP |
ATAN | CORRESPONDING | ESCAPE | INSERT | NOISE | QUARTER | SQL_TSI_HOUR | USE_KRCN |
ATAN2 | COS | EVENTS | INTEGER | NOLOGGING | RADIANS | SQL_TSI_MINUTE | USING |
AUTHORIZATION | COT | EXCEPT | INTERNAL_NUMBER | NONALPHA | RAND | SQL_TSI_MONTH | UUIDSTAMP |
AUTO | COUNT | EXCEPTION | INTERSECT | NONE | RANGE | SQL_TSI_QUARTER | VALIDATE |
AUTOEXTEND | CREATE | EXCLUDE | INTERVAL | NORMALIZE | RAW | SQL_TSI_SECOND | VALUE |
AVG | CROSS | EXEC | INTO | NOROWDEPENDENCIES | READ | SQL_TSI_WEEK | VALUES |
BCDDATE | CURDATE | EXECUTE | IPREFIX | NOT | RECLEN | SQL_TSI_YEAR | VARCHAR |
BCDDATE3 | CURRENT | EXISTS | IS | NOW | REFERENCES | SQRT | VARCHAR2 |
BEGIN | CURRENT_DATE | EXP | ISOLATION | NULL | RELATIVE | STARTBYTE | VARYING |
BETWEEN | CURRENT_TIME | EXPLICIT | JOIN | NULLIF | RENAME | SUBSTR | VIEW |
BIT | CURRENT_TIMESTAMP | EXTENT | KDB | NUMERIC | REPEAT | SUBSTRING | VIRTUAL |
BITMAP | CURRENT_USER | EXTERNAL | KEY | OBJECT_IMAGE | REPLACE | SUM | WEEK |
BIT_LENGTH | CURSOR | EXTRACT | LANGUAGE | OCCURS | RESIZE | SYSTEM_USER | WHEN |
BLOB | CURTIME | FALSE | LAST | OCTET_LENGTH | RESTRICT | TABLE | WHENEVER |
BLOBDATA | DATABASE | FETCH | LCASE | OF | REVOKE | TABLESPACE | WHERE |
BLOCKLEN | DATE | FIRST | LEADING | OFFSET | RIGHT | TAN | WITH |
BOOL | DATESTAMP | FLAT | LEFT | OLD_DATE | ROLLBACK | TEMPORARY | WORD |
BOTH | DAY | FLOAT | LENGTH | ON | ROUND | THEN | WORK |
BREAK | DAYNAME | FLOOR | LEVEL | ONLY | ROWDEPENDENCIES | TIME | WRITE |
BY | DAYOFMONTH | FOR | LIKE | OPEN | ROWS | TIMESTAMP | XML |
CASCADE | DAYOFWEEK | FOREIGN | LOCAL | OPTION | RTRIM | TIMESTAMPADD | XMLDATA |
CASCADED | DAYOFYEAR | FORTRAN | LOCATE | OR | SCHEMA | TIMESTAMPDIFF | YEAR |
CASE | DBIDSTAMP | FOUND | LOG | ORACLE | SCROLL | TIMEZONE_HOUR | YES |
CAST | DEALLOCATE | FROM | LOG10 | ORDER | SECOND | TIMEZONE_MINUTE | |
CATALOG | DEC | FULL | LOGGING | OUTER | SECTION | TO | |
CATALOGUE | DECIMAL | GET | LOGOGRAM | OUTPUT | SELECT | TOP | |
CBLOB | DECLARE | GLOBAL | LONGUSERNAMES | OVERLAPS | SEQUENCE | TOTALLED | |
CEILING | DEFAULT | GO | LOWER | PACKING | SERIAL | TRACEFILE_IDENTIFIER | |
CHAR | DEFERRABLE | GOTO | LTRIM | PAD | SESSION | TRAILING | |
CHARACTER | DEFERRED | GRANT | MATCH | PARTIAL | SESSION_USER | TRANSACTION |
statement : /* nothing */ | select_statement | create_table_statement | create_index_statement | drop_table_statement | drop_index_statement | alter_table_statement | alter_tablespace_statement | alter_session_statement | delete_statement | insert_statement | update_statement | index_delete_statement | create_database_statement | create_ws_index_statement | drop_ws_index_statement | alter_ws_index_statement | create_tablespace_statement | drop_tablespace_statement | drop_database_statement | rename_statement | add_catalog_statement | RT_KCML_SQL_WHERE hash_where ; column_values : '(' insert_name_list ')' '(' insert_value_list ')' ; hash_where : search_condition | column_values ; delete_statement : RW_DELETE RW_FROM table_name opt_where_clause optional_semicolon ; insert_statement : RW_INSERT RW_INTO table_name opt_insert_name_list insert_source ; opt_insert_name_list : /* nothing */ | '(' insert_name_list ')' ; insert_name_list : column_identifier | column_identifier ',' insert_name_list ; insert_source : sub_query | RW_VALUES '(' insert_value_list ')' optional_semicolon ; insert_value_list : insert_value | insert_value ',' insert_value_list ; insert_value : literal | dynamic_parameter | RW_NULL | userfn ; update_statement : RW_UPDATE table_name RW_SET update_expr_list opt_where_clause optional_semicolon ; update_expr_list : update_expr | update_expr_list ',' update_expr ; update_expr : column_identifier '=' expression_or_null ; expression_or_null : expression | RW_NULL ; drop_table_statement : RW_DROP RW_TABLE opt_if_exists table_identifier opt_cascade_or_restrict opt_from_catalogue optional_semicolon ; opt_if_exists: /* missing */ | RW_IF RW_EXISTS ; opt_cascade_or_restrict : /* null */ | RW_CASCADE | RW_RESTRICT ; catalog: RW_CATALOG | RW_CATALOGUE ; opt_from_catalogue : | RW_FROM catalog ; alter_table_statement : RW_ALTER RW_TABLE table_name alter_table_type optional_semicolon ; alter_table_type : RW_MOVE | RW_MOVE RW_PARTITION user_name | RW_MOVE RW_TABLESPACE user_name | RW_LOGGING RW_TO user_name | RW_NOLOGGING | RW_ADD optschema '(' alter_column_list ')' | RW_SET RW_UNUSED '(' insert_name_list ')' | RW_DROP RW_UNUSED | RW_DROP optschema '(' insert_name_list ')' | RW_DROP optschema RW_COLUMN column_identifier | RW_MODIFY optschema modify_cols | RW_RENAME RW_COLUMN column_identifier RW_TO user_name | RW_SCHEMA schemaopts ; optschema: /* optional */ | RW_SCHEMA RW_ONLY ; schemaopts: RW_UPDATE | schemaparms ; modify_cols: alter_column_definition /* single column */ | '(' alter_column_list ')' /* list of columns in () */ ; alter_column_list: alter_column_definition | alter_column_list ',' alter_column_definition ; alter_column_definition: user_name opt_data_type options_list ; opt_data_type: /* optional */ | data_type ; alter_tablespace_statement : RW_ALTER RW_TABLESPACE user_name RW_LOGGING optional_semicolon | RW_ALTER RW_TABLESPACE user_name RW_NOLOGGING optional_semicolon | RW_ALTER RW_TABLESPACE user_name RW_RESIZE literal_integer size_unit optional_semicolon ; size_unit : RT_USER_DEFINED_NAME ; alter_session_statement : RW_ALTER RW_SESSION RW_SET alter_session_variant optional_semicolon ; alter_session_variant : RW_EVENTS literal_string | RW_TRACEFILE_IDENTIFIER '=' literal_string | RW_MAX_DUMP_FILE_SIZE '=' RW_UNLIMITED ; rename_statement : RW_RENAME table_name RW_TO user_name optional_semicolon ; add_catalog_statement: RW_ALTER catalog RW_ADD RW_TABLE lit_name opt_update optional_semicolon ; opt_update: RW_FOR RW_UPDATE | /* optional */ ; create_database_statement : RW_CREATE RW_DATABASE user_name_mixed_case RW_TYPE database_type databaseparms optional_semicolon ; database_type : RW_VIRTUAL | RW_KDB | RW_SQL ; drop_database_statement : RW_DROP RW_DATABASE opt_if_exists user_name_mixed_case ; create_tablespace_statement : RW_CREATE opt_local_or_global RW_TABLESPACE user_name literal_string tablespaceparms optional_semicolon ; tablespaceparms: /* none */ | tablespace_element /* only one */ | tablespace_element tablespaceparms /* a list */ ; tablespace_element: RW_TYPE tablespace_type | RW_FOR RW_USER user_name_mixed_case | RW_SIZE literal_integer | RW_AUTOEXTEND literal_integer | RW_OBJECT_IMAGE literal_string | RW_SOURCE_IMAGE literal_string ; tablespace_type:RW_FLAT | RW_TREE | RW_TEMPORARY ; opt_local_or_global : /* optional */ | RW_GLOBAL | RW_LOCAL ; drop_tablespace_statement: RW_DROP RW_TABLESPACE user_name_mixed_case ; opt_temp_param: /* Nothing */ | RW_ON RW_COMMIT RW_PRESERVE RW_ROWS | RW_ON RW_COMMIT RW_DELETE RW_ROWS ; create_table_statement: RW_CREATE RW_TABLE user_name '(' create_column_list ')' tableparms optional_semicolon | RW_CREATE RW_TEMPORARY RW_TABLE user_name '(' create_column_list ')' opt_temp_param tableparms optional_semicolon | RW_CREATE RW_TABLE user_name opt_tablespace opt_partition RW_AS RW_SELECT '*' RW_FROM table_name optional_semicolon /*| RW_CREATE RW_TEMPORARY RW_TABLE user_name opt_temp_param opt_tablespace opt_partition RW_AS RW_SELECT '*' RW_FROM table_name optional_semicolon*/ ; opt_tablespace : /* Nothing */ | RW_TABLESPACE user_name ; create_column_list: create_column_definition | create_column_list ',' create_column_definition ; create_column_definition: user_name data_type options_list ; options_list : /* could be blank */ | options_list options_element ; options_element : RW_ALIAS user_defined_name | RW_STARTBYTE literal_integer | RW_DISPLAY literal_string | RW_SIGNED | RW_UNSIGNED | RW_OCCURS literal_integer | RW_RANGE '(' range_type ')' | RW_TOTALLED | RW_NOT RW_TOTALLED | RW_PRIORITY '(' priority_string ',' priority_string ',' priority_string ')' | RW_NAME literal_string | RW_SPECIAL literal_string | RW_PREVAL literal_integer | RW_POSTVAL literal_integer | RW_VALIDATE user_defined_name_mixed_case literal_string | RW_NOT RW_VALIDATE | RW_SEQUENCE literal_integer | RW_OVERLAPS user_defined_name | RW_OVERLAPS user_defined_name RW_OFFSET literal_integer | RW_NULL | RW_NOT RW_NULL | RW_NO RW_UPDATE | RW_SQLDEFAULT RW_NULL | RW_SQLDEFAULT RW_USER | RW_SQLDEFAULT RT_EXACT_NUMERIC_REAL_LITERAL | RW_SQLDEFAULT RT_APPROXIMATE_NUMERIC_LITERAL | RW_SQLDEFAULT RT_INT_LITERAL | RW_SQLDEFAULT RT_CHARACTER_STRING_LITERAL | RW_SQLDEFAULT hexlit | RW_SQLDEFAULT RT_DATE_LITERAL | RW_SQLDEFAULT RT_TIME_LITERAL | RW_SQLDEFAULT RT_TIMESTAMP_LITERAL | RW_LANGUAGE ; hexlit: RW_HEX '(' lit_name ')' ; range_type : opt_plus_or_minus range_number ',' opt_plus_or_minus range_number | RW_ALL ; range_number : literal_integer | literal_real ; priority_string : /* blank */ | user_defined_name | literal_integer ; data_prec: '(' literal_integer ')' ; data_type: RW_VARCHAR data_prec | RW_VARCHAR2 data_prec | RW_CHAR data_prec | RW_HEX data_prec | RW_NUMERIC '(' literal_integer rpar | RW_NUMERIC '(' literal_integer ',' literal_integer rpar | RW_KSEPACKED data_prec | RW_KSEPACKED '(' literal_integer ',' literal_integer ')' | RW_INTEGER data_prec | RW_DECIMAL data_prec | RW_DECIMAL '(' literal_integer ',' literal_integer ')' | RW_INTERNAL_NUMBER | RW_INTERNAL_NUMBER data_prec | RW_INTERNAL_NUMBER '(' literal_integer ',' literal_integer ')' | RW_BLOB | RW_CLOB | RW_CBLOB | RW_TIME | RW_TIMESTAMP | RW_KSEDATE | RW_KSEDATE3 | RW_OLD_DATE | RW_BIT | RW_BOOL | RW_DATE ; rpar : ')' | RT_RPARB | RT_RPARF ; literal_real : RT_EXACT_NUMERIC_REAL_LITERAL | RT_APPROXIMATE_NUMERIC_LITERAL ; literal_integer : RT_INT_LITERAL ; lit_name : RT_CHARACTER_STRING_LITERAL ; literal_string : lit_name | RT_INTS litstrlist RT_INTE ; int_lit_name : lit_name | /* nothing */ ; litstrlist : int_lit_name | int_lit_name ',' litstrlist ; user_name_mixed_case : RT_USER_DEFINED_NAME ; int_user_name_mixed_case : RT_USER_DEFINED_NAME | /* nothing */ ; user_defined_name_mixed_case : user_name_mixed_case | RT_INTS userstrlist_mixed_case RT_INTE ; userstrlist_mixed_case : int_user_name | int_user_name_mixed_case ',' userstrlist_mixed_case ; user_name : RT_USER_DEFINED_NAME ; int_user_name : RT_USER_DEFINED_NAME | /* nothing */ ; user_defined_name : user_name | RT_INTS userstrlist RT_INTE ; userstrlist : int_user_name | int_user_name ',' userstrlist ; databaseparms : /* could be nothing */ | databaseparms_element | databaseparms_element databaseparms ; databaseparms_element : RW_DESCRIPTION literal_string | RW_WITH RW_PERMISSIONS | RW_USER user_name_mixed_case RW_IDENTIFIED RW_BY literal_string | RW_SQLDEFAULT RW_TABLESPACE user_name ; stamp_col_name: RW_NULL | user_name ; tableparms : /* could be blank */ | tableparms_element | tableparms_element ',' tableparms ; tableparms_element : RW_ROWS literal_integer | RW_RECLEN literal_integer | RW_EXTENT literal_integer | RW_TYPE literal_integer | RW_PACKING literal_integer | RW_BLOCKLEN literal_integer | RW_NAME literal_string | RW_SERIAL user_name /* no name */ | RW_SERIAL user_name user_defined_name | RW_NOEDIT lit_name | RW_PATH lit_name | RW_TIMESTAMP stamp_col_name | RW_DATESTAMP stamp_col_name | RW_USERSTAMP stamp_col_name | RW_TYPESTAMP stamp_col_name | RW_UUIDSTAMP stamp_col_name | RW_DBIDSTAMP stamp_col_name | RW_IPREFIX lit_name | RW_EXCLUDE RW_COLUMN user_defined_name lit_name | RW_TABLESPACE user_name | RW_CASE lit_name | RW_UPDATE lit_name | RW_PCTFREE literal_integer | RW_REVOKE '(' revoke_list ')' | partition | RW_ROWDEPENDENCIES | RW_NOROWDEPENDENCIES | RW_USE_KRCN | RW_ADC enable_or_disable_as_bool ; schemaparms: schemaparms_element | schemaparms_element ',' schemaparms ; schemaparms_element: RW_IPREFIX lit_name | RW_SERIAL user_name | RW_SERIAL user_name user_defined_name optserdef | RW_TIMESTAMP stamp_col_name | RW_USERSTAMP stamp_col_name | RW_TYPESTAMP stamp_col_name | RW_UUIDSTAMP stamp_col_name | RW_DBIDSTAMP stamp_col_name | RW_NAME literal_string | RW_REVOKE '(' revoke_list ')' | RW_EXCLUDE RW_COLUMN user_defined_name lit_name | RW_EXCLUDE RW_COLUMN RW_NULL | RW_CASE lit_name | RW_UPDATE lit_name | RW_NOEDIT lit_name | RW_USE_KRCN yes_or_no_as_bool | RW_ADC enable_or_disable_as_bool ; yes_or_no_as_bool: RW_YES | RW_NO ; enable_or_disable_as_bool: RW_ENABLE | RW_DISABLE ; optserdef: /* missing */ | RW_SQLDEFAULT ; revoke_element : RW_ALTER | RW_DELETE | RW_INSERT | RW_READ | RW_SELECT | RW_UPDATE | RW_WRITE ; revoke_list: /* could be blank */ | revoke_element | revoke_element ',' revoke_list ; partition: RW_PARTITION RW_BY user_defined_name RW_VALUES '(' literal_integer ')' ; opt_partition: partition | /* nothing */ ; optional_xml_clause : RW_FOR RW_XML RW_RAW optional_xml_schema | RW_FOR RW_XML RW_AUTO optional_xml_schema | RW_FOR RW_XML RW_EXPLICIT optional_xml_schema | RW_FOR RW_CHAR | RW_FOR RW_INSERT | /* nothing */ ; optional_xml_schema : ',' RW_DTD | ',' RW_XMLDATA | /* nothing */ ; optional_semicolon : ';' | /* nothing */ ; drop_index_statement : RW_DROP RW_INDEX user_defined_name optional_semicolon ; drop_ws_index_statement : RW_DROP RW_WORD RW_INDEX user_defined_name optional_semicolon ; index_delete_statement : RW_INDEX user_defined_name RW_DELETE optional_semicolon ; optint: /* missing */ | RT_INT_LITERAL ; compress: /* missing */ | RW_COMPRESS optint ; create_index_statement : RW_CREATE opt_unique RW_INDEX user_defined_name RW_ON user_defined_name '(' collist ')' compress opt_tablespace optional_semicolon ; opt_unique : /* missing, default */ | RW_UNIQUE | RW_VIRTUAL | RW_BITMAP ; collist : colident | collist ',' colident ; substr: RW_SUBSTRING | RW_SUBSTR ; colident: user_defined_name optocc OptAscDesc | substr '(' user_defined_name optocc ',' numlit substrlen ')' OptAscDesc ; optocc: /* none */ | '(' numlit ')' ; substrlen: /* none */ | ',' numlit ; numlit: RT_INT_LITERAL ; create_ws_index_statement : RW_CREATE RW_WORD RW_INDEX user_defined_name RW_ON user_defined_name '(' wscollist ')' wsorderbyclause wsparms optional_semicolon ; alter_ws_index_statement: RW_ALTER RW_WORD RW_INDEX user_defined_name alter_ws_index_mode optional_ws_reorder optional_ws_reindex optional_semicolon ; alter_ws_index_mode: /* optional */ | RW_ADD alter_ws_collist | RW_DROP alter_ws_collist ; alter_ws_collist: '(' wscollist ')' ; optional_ws_reorder: /* optional */ | wsorderbyclause ; optional_ws_reindex: /* optional */ | RW_UPDATE RW_INDEX ; wscollist: wscolident | wscollist ',' wscolident ; wscolident: user_defined_name optocc ; wsparms : /* could be blank */ | wsparms_element | wsparms_element ',' wsparms ; wsparms_element : RW_MAX literal_integer | RW_MIN literal_integer | RW_NONALPHA literal_string | RW_NOISE literal_string | RW_ICU literal_integer | RW_BREAK RW_IDEOGRAM | RW_BREAK RW_LOGOGRAM | RW_NORMALIZE RW_CJKWIDTH ; wsorderbyclause : /* might be optional */ | RW_ORDER RW_BY wsorderby ; wsorderby : user_defined_name | '(' wsorderlist ')' ; wsorderlist : wsorderent | wsorderlist ',' wsorderent ; wsorderent : user_defined_name optocc ; select_statement : RW_SELECT opt_hint opt_top opt_all_or_distinct select_list RW_FROM table_reference_list opt_where_clause opt_group_clause opt_having_clause opt_union_clause opt_order_by_clause optional_xml_clause optional_semicolon ; opt_union_clause : /* null */ | RW_UNION RW_ALL sub_query opt_union_clause | RW_UNION sub_query opt_union_clause ; opt_hint : /* null */ | RT_HINT ; opt_top : /* null */ | RW_TOP RT_INT_LITERAL ; opt_all_or_distinct : /* null */ | RW_ALL | RW_DISTINCT ; select_list : '*' | select_sublist ; select_sublist : select_sublist_item | select_sublist ',' select_sublist_item ; select_sublist_as : column_alias | RT_CHARACTER_STRING_LITERAL ; select_sublist_item : expression | expression column_identifier | expression RT_CHARACTER_STRING_LITERAL | expression RW_AS select_sublist_as | table_name '.' '*' | correlation_name '.' '*' ; expression : term | expression plus_or_minus term ; opt_plus_or_minus : /* NULL */ | '+' | '-' ; plus_or_minus : '+' | '-' ; term : factor | term star_or_slash factor ; star_or_slash : '*' | '/' ; factor : primary | plus_or_minus primary if ($1 == '+') else $$ = $2; } else } ; primary : column_name | dynamic_parameter | literal | set_function_reference | ODBC_scalar_function_extension | scalar_function | yes_or_no | '(' expression ')' ; column_name : column_identifier | ifld_identifier | table_name '.' column_identifier | correlation_name '.' column_identifier ; table_name : table_identifier | owner_name '.' table_identifier | qualifier_name_and_separator table_identifier | qualifier_name_and_separator opt_owner_name '.' table_identifier ; owner_name : RT_SCHEMA_NAME ; opt_owner_name : /* null */ | owner_name ; qualifier_name_and_separator: RT_QUALIFIER_NAME ; table_identifier: RT_TABLE_NAME ; correlation_name: RT_CORRELATION_NAME ; ifld_identifier: ifld_identifier2 ifld_occurs ; ifld_identifier2: RT_USER_DEFINED_IFLD_NAME ; ifld_occurs: /* null */ | RT_USER_DEFINED_IFLD_OCCURS ; column_identifier: RT_USER_DEFINED_NAME ; dynamic_parameter : '?' dynamic_parameter_type | ':' numlit dynamic_parameter_type ; dynamic_parameter_type: | RT_USER_DEFINED_NAME switch (ps->szLexToken[0]) } ; literal : RT_CHARACTER_STRING_LITERAL | numeric_literal | ODBC_date_time_extension | RW_DATE date_value | RW_TIME time_value | RW_TIMESTAMP timestamp_value ; opt_quote : /* null */ | RT_QUOTATION_MARK ; numeric_literal : opt_quote RT_INT_LITERAL | opt_quote RT_EXACT_NUMERIC_REAL_LITERAL | opt_quote RT_APPROXIMATE_NUMERIC_LITERAL ; ODBC_date_time_extension : RT_ESC_D date_value RT_ESC_CLOSE | RT_ODBC_D date_value '}' | date_value | RT_ODBC_J literal_integer '}' | RT_ESC_T time_value RT_ESC_CLOSE | RT_ODBC_T time_value '}' | time_value | RT_ESC_TS timestamp_value RT_ESC_CLOSE | RT_ODBC_TS timestamp_value '}' | RT_ODBC_TS literal_real '}' ; date_value : RT_DATE_LITERAL ; time_value : RT_TIME_LITERAL ; timestamp_value : RT_TIMESTAMP_LITERAL ; set_function_reference : RW_COUNT '(' '*' ')' | distinct_function | all_function ; distinct_function : RW_AVG '(' RW_DISTINCT column_name ')' | RW_COUNT '(' RW_DISTINCT column_name ')' | RW_MAX '(' RW_DISTINCT column_name ')' | RW_MIN '(' RW_DISTINCT column_name ')' | RW_SUM '(' RW_DISTINCT column_name ')' ; all_function : RW_AVG '(' expression ')' /* the following is not in ODBC 2.0 but is in x/Open '92 */ | RW_COUNT '(' expression ')' | RW_MAX '(' expression ')' | RW_MIN '(' expression ')' | RW_SUM '(' expression ')' ; column_alias : RT_ALIAS_NAME ; table_reference_list : table_reference | table_reference_list ',' table_reference ; table_reference : table_name | table_name correlation_name | outer_join | RT_ESC_OJ outer_join RT_ESC_CLOSE | RT_ODBC_OJ outer_join '}' | sub_query_as_table opt_sq_alias ; sub_query_as_table: '(' sub_query ')' ; opt_sq_alias: | optas RT_TABLE_NAME ; optas: /* nothing */ | RW_AS ; outer_join_keyword : RW_LEFT RW_OUTER RW_JOIN | RW_RIGHT RW_OUTER RW_JOIN ; outer_join_table : table_name_and_opt_correlation | outer_join ; outer_join : outer_join_table outer_join_keyword table_name_and_opt_correlation RW_ON search_condition if ($2) tl_node = CreateParserNode(ps, ENODE_TABLE_LIST, lnode, rnode, 0); $$ = CreateParserNode(ps, ENODE_LEFT_OUTER_JOIN, tl_node, $6, 0); ps->bTableNames = TRUE; } ; table_name_and_opt_correlation : table_name | table_name correlation_name ; search_condition : boolean_term | boolean_term RW_OR search_condition ; boolean_term : boolean_factor | boolean_factor RW_AND boolean_term ; boolean_factor : boolean_primary | RW_NOT boolean_primary ; opt_not : /* null */ | RW_NOT ; boolean_primary : predicate | '(' search_condition ')' ; predicate : between_predicate | comparison_predicate | exists_predicate | in_predicate | like_predicate | null_predicate | qualified_predicate | true_false_predicate ; between_predicate : expression opt_not RW_BETWEEN between_range ; between_range : expression RW_AND expression ; comparison_predicate : expression comparison_operator expression | expression comparison_operator '(' sub_query ')' ; comparison_operator : RT_LT | RT_GT | RT_LTE | RT_GTE | '=' | RT_NE ; sub_query : RW_SELECT opt_all_or_distinct select_list RW_FROM table_reference_list opt_where_clause opt_group_clause opt_having_clause opt_union_clause opt_order_by_clause ; exists_predicate : RW_EXISTS '(' sub_query ')' ; in_predicate : expression opt_not RW_IN '(' value_list ')' | expression opt_not RW_IN '(' sub_query ')' ; value_list : value | value_list ',' value ; value : literal | dynamic_parameter | userfn ; userfn: RW_USER ; like_opt_escape: /* none */ | RW_ESCAPE RT_CHARACTER_STRING_LITERAL else } ; like_predicate : expression opt_not RW_LIKE pattern_value like_opt_escape ; pattern_value : RT_CHARACTER_STRING_LITERAL | dynamic_parameter | userfn ; null_predicate : column_name RW_IS opt_not RW_NULL ; qualified_predicate : expression comparison_operator RW_ALL '(' sub_query ')' | expression comparison_operator RW_SOME '(' sub_query ')' | expression comparison_operator RW_ANY '(' sub_query ')' ; true_false_predicate : RW_TRUE | RW_FALSE ; yes_or_no : RW_YES | RW_NO ; opt_where_clause : /* null */ | RW_WHERE search_condition ; sort_specification_list : sort_specification | sort_specification_list ',' sort_specification ; sort_specification : expression OptAscDesc ; OptAscDesc : /* null */ | RW_ASC | RW_DESC ; opt_group_clause : /* null */ | RW_GROUP RW_BY column_name_list ; column_name_list : column_name_element | column_name_list ',' column_name_element ; column_name_element : column_name ; opt_having_clause : /* null */ | RW_HAVING search_condition ; opt_order_by_clause : /* null */ | RW_ORDER RW_BY sort_specification_list ; ODBC_scalar_function_extension : RT_ESC_FN scalar_function RT_ESC_CLOSE | RT_ODBC_FN scalar_function '}' ; scalar_function : string_function | numeric_function | date_function | system_function ; trimspec: /* nothing */ | RW_LEADING | RW_TRAILING | RW_BOTH ; trimchar: /* nothing */ | RT_CHARACTER_STRING_LITERAL ; two_expressions: expression ',' expression ; three_expressions: expression ',' two_expressions ; string_function : RW_ASCII '(' expression ')' | RW_BIT '(' expression ',' expression ')' | RW_CHAR '(' expression ')' | RW_CONCAT '(' expression ',' expression ')' | RW_DIFFERENCE '(' expression ',' expression ')' | RW_LCASE '(' expression ')' | RW_LOWER '(' expression ')' | RW_LEFT '(' expression ',' expression ')' | RW_LENGTH '(' expression ')' | RW_LOCATE '(' two_expressions ',' expression ')' | RW_LOCATE '(' two_expressions ')' | RW_LTRIM '(' expression ')' | RW_RIGHT '(' expression ',' expression ')' | RW_RTRIM '(' expression ')' | RW_SOUNDEX '(' expression ')' | RW_SPACE '(' expression ')' | RW_REPEAT '(' expression ',' expression ')' | RW_REPLACE '(' expression ',' two_expressions ')' | RW_SUBSTR '(' expression ',' two_expressions ')' | RW_SUBSTRING '(' expression ',' two_expressions ')' | RW_UCASE '(' expression ')' | RW_UPPER '(' expression ')' | RW_BLOBDATA '(' expression ',' literal_integer ')' | RW_HEX '(' expression ')' | RW_TRIM '(' trimspec trimchar RW_FROM expression ')' | RW_INSERT '(' expression ',' three_expressions ')' ; numeric_function : RW_ABS '(' expression ')' | RW_ATAN '(' expression ')' | RW_CEILING '(' expression ')' | RW_COS '(' expression ')' | RW_DEGREES '(' expression ')' | RW_ACOS '(' expression ')' | RW_EXP '(' expression ')' | RW_FLOOR '(' expression ')' | RW_LOG '(' expression ')' | RW_LOG10 '(' expression ')' | RW_MOD '(' expression ',' expression ')' | RW_ATAN2 '(' expression ',' expression ')' | RW_POWER '(' expression ',' expression ')' | RW_ROUND '(' expression ',' expression ')' | RW_ROUND '(' expression ')' | RW_TRUNCATE '(' expression ',' expression ')' | RW_RAND '(' expression ')' | RW_RAND '(' ')' | RW_PI '(' ')' | RW_SIGN '(' expression ')' | RW_SIN '(' expression ')' | RW_ASIN '(' expression ')' | RW_SQRT '(' expression ')' | RW_TAN '(' expression ')' | RW_COT '(' expression ')' | RW_RADIANS '(' expression ')' ; date_function : RW_DAYNAME '(' expression ')' | RW_DAYOFMONTH '(' expression ')' | RW_DAYOFWEEK '(' expression ')' | RW_DAYOFYEAR '(' expression ')' | RW_MONTH '(' expression ')' | RW_MONTHNAME '(' expression ')' | RW_QUARTER '(' expression ')' | RW_HOUR '(' expression ')' | RW_MINUTE '(' expression ')' | RW_SECOND '(' expression ')' | RW_CURDATE '(' ')' | RW_CURTIME '(' ')' | RW_NOW '(' ')' | RW_TIMESTAMPADD '(' time_interval ',' two_expressions ')' | RW_TIMESTAMPDIFF '(' time_interval ',' two_expressions ')' | RW_WEEK '(' expression ')' | RW_YEAR '(' expression ')' ; system_function : RW_DATABASE '(' ')' | RW_IFNULL '(' expression ',' expression ')' | RW_USER '(' ')' | userfn ; time_interval : RW_SQL_TSI_FRAC_SECOND | RW_SQL_TSI_SECOND | RW_SQL_TSI_MINUTE | RW_SQL_TSI_HOUR | RW_SQL_TSI_DAY | RW_SQL_TSI_WEEK | RW_SQL_TSI_MONTH | RW_SQL_TSI_QUARTER | RW_SQL_TSI_YEAR ;