// Licensed to Cloudera, Inc. under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. Cloudera, Inc. licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. %options case-insensitive flex %s between hive impala %x hdfs doubleQuotedValue singleQuotedValue backtickedValue %% \s { /* skip whitespace */ } '--'.* { /* skip comments */ } [/][*][^*]*[*]+([^/*][^*]*[*]+)*[/] { /* skip comments */ } '\u2020' { parser.yy.partialCursor = false; parser.yy.cursorFound = yylloc; return 'CURSOR'; } '\u2021' { parser.yy.partialCursor = true; parser.yy.cursorFound = yylloc; return 'PARTIAL_CURSOR'; } // Reserved Keywords 'ALL' { return 'ALL'; } 'ARRAY' { return 'ARRAY'; } 'AS' { return 'AS'; } 'AUTHORIZATION' { return 'AUTHORIZATION'; } 'BINARY' { return 'BINARY'; } 'CACHE' { return 'CACHE'; } 'COLUMN' { return 'COLUMN'; } 'CONF' { return 'CONF'; } 'CONSTRAINT' { return 'CONSTRAINT'; } 'CREATE' { parser.determineCase(yytext); return 'CREATE'; } 'CUBE' { return 'CUBE'; } 'CURRENT' { return 'CURRENT'; } 'DATE' { return 'DATE'; } 'DELETE' { parser.determineCase(yytext); return 'DELETE'; } 'DESCRIBE' { parser.determineCase(yytext); return 'DESCRIBE'; } 'EXTENDED' { return 'EXTENDED'; } 'EXTERNAL' { return 'EXTERNAL'; } 'FOR' { return 'FOR'; } 'FOREIGN' { return 'FOREIGN'; } 'FUNCTION' { return 'FUNCTION'; } 'GRANT' { return 'GRANT'; } 'GROUPING' { return 'GROUPING'; } 'IMPORT' { parser.determineCase(yytext); return 'IMPORT'; } 'INSERT' { parser.determineCase(yytext); return 'INSERT'; } 'LATERAL' { return 'LATERAL'; } 'LOCAL' { return 'LOCAL'; } 'MACRO' { return 'MACRO'; } 'MAP' { return 'MAP'; } 'NONE' { return 'NONE'; } 'OF' { return 'OF'; } 'OUT' { return 'OUT'; } 'PRIMARY' { return 'PRIMARY'; } 'REFERENCES' { return 'REFERENCES'; } 'REVOKE' { return 'REVOKE'; } 'ROLLUP' { return 'ROLLUP'; } 'TABLE' { return 'TABLE'; } 'TIMESTAMP' { return 'TIMESTAMP'; } 'USER' { return 'USER'; } 'USING' { return 'USING'; } 'VIEWS' { return 'VIEWS'; } 'LIFECYCLE' { return 'LIFECYCLE'; } // Non-reserved Keywords 'ABORT' { parser.determineCase(yytext); return 'ABORT'; } 'ADD' { return 'ADD'; } 'ADMIN' { return 'ADMIN'; } 'AFTER' { return 'AFTER'; } 'ANALYZE' { parser.determineCase(yytext); return 'ANALYZE'; } 'ARCHIVE' { return 'ARCHIVE'; } 'ASC' { return 'ASC'; } 'AVRO' { return 'AVRO'; } 'BUCKET' { return 'BUCKET'; } 'BUCKETS' { return 'BUCKETS'; } 'CASCADE' { return 'CASCADE'; } 'CHANGE' { return 'CHANGE'; } 'CLUSTER' { return 'CLUSTER'; } 'CLUSTERED' { return 'CLUSTERED'; } 'COLLECTION' { return 'COLLECTION'; } 'COLUMNS' { return 'COLUMNS'; } 'COMMENT' { return 'COMMENT'; } 'COMPACT' { return 'COMPACT'; } 'COMPACTIONS' { return 'COMPACTIONS'; } 'COMPUTE' { return 'COMPUTE'; } 'CONCATENATE' { return 'CONCATENATE'; } 'DATA' { return 'DATA'; } 'DATABASES' { return 'DATABASES'; } 'DAY' { return 'DAY'; } 'DAYOFWEEK' { return 'DAYOFWEEK'; } 'DBPROPERTIES' { return 'DBPROPERTIES'; } 'DEFERRED' { return 'DEFERRED'; } 'DEFINED' { return 'DEFINED'; } 'DELIMITED' { return 'DELIMITED'; } 'DEPENDENCY' { return 'DEPENDENCY'; } 'DESC' { return 'DESC'; } 'DIRECTORY' { this.begin('hdfs'); return 'DIRECTORY'; } 'DISABLE' { return 'DISABLE'; } 'DISTRIBUTE' { return 'DISTRIBUTE'; } DOUBLE\s+PRECISION { return 'DOUBLE_PRECISION'; } 'ESCAPED' { return 'ESCAPED'; } 'ENABLE' { return 'ENABLE'; } 'EXCHANGE' { return 'EXCHANGE'; } 'EXPLAIN' { parser.determineCase(yytext); return 'EXPLAIN'; } 'EXPORT' { parser.determineCase(yytext); return 'EXPORT'; } 'FIELDS' { return 'FIELDS'; } 'FILE' { return 'FILE'; } 'FILEFORMAT' { return 'FILEFORMAT'; } 'FIRST' { return 'FIRST'; } 'FORMAT' { return 'FORMAT'; } 'FORMATTED' { return 'FORMATTED'; } 'FUNCTION' { return 'FUNCTION'; } 'FUNCTIONS' { return 'FUNCTIONS'; } 'HOUR' { return 'HOUR'; } 'IDXPROPERTIES' { return 'IDXPROPERTIES'; } 'INDEX' { return 'INDEX'; } 'INDEXES' { return 'INDEXES'; } 'INPATH' { this.begin('hdfs'); return 'INPATH'; } 'INPUTFORMAT' { return 'INPUTFORMAT'; } 'ITEMS' { return 'ITEMS'; } 'JAR' { return 'JAR'; } 'KEY' { return 'KEY'; } 'KEYS' { return 'KEYS'; } 'LINES' { return 'LINES'; } 'LOAD' { parser.determineCase(yytext); return 'LOAD'; } 'LOCATION' { this.begin('hdfs'); return 'LOCATION'; } 'LOCK' { return 'LOCK'; } 'LOCKS' { return 'LOCKS'; } 'MATCHED' { return 'MATCHED'; } 'MERGE' { return 'MERGE'; } 'METADATA' { return 'METADATA'; } 'MINUTE' { return 'MINUTE'; } 'MONTH' { return 'MONTH'; } 'MSCK' { return 'MSCK'; } 'NORELY' { return 'NORELY'; } 'NOSCAN' { return 'NOSCAN'; } 'NOVALIDATE' { return 'NOVALIDATE'; } 'NO_DROP' { return 'NO_DROP'; } 'OFFLINE' { return 'OFFLINE'; } 'ORC' { return 'ORC'; } 'OUTPUTFORMAT' { return 'OUTPUTFORMAT'; } 'OVERWRITE' { return 'OVERWRITE'; } OVERWRITE\s+DIRECTORY { this.begin('hdfs'); return 'OVERWRITE_DIRECTORY'; } 'OWNER' { return 'OWNER'; } 'PARQUET' { return 'PARQUET'; } 'PARTITIONED' { return 'PARTITIONED'; } 'PARTITIONS' { return 'PARTITIONS'; } 'PERCENT' { return 'PERCENT'; } 'PRIVILEGES' { return 'PRIVILEGES'; } 'PURGE' { return 'PURGE'; } 'QUARTER' { return 'QUARTER'; } 'RCFILE' { return 'RCFILE'; } 'REBUILD' { return 'REBUILD'; } 'RELOAD' { parser.determineCase(yytext); return 'RELOAD'; } 'RELY' { return 'RELY'; } 'REPAIR' { return 'REPAIR'; } 'REPLICATION' { return 'REPLICATION'; } 'RECOVER' { return 'RECOVER'; } 'RENAME' { return 'RENAME'; } 'REPLACE' { return 'REPLACE'; } 'RESTRICT' { return 'RESTRICT'; } 'ROLE' { return 'ROLE'; } 'ROLES' { return 'ROLES'; } 'SECOND' { return 'SECOND'; } 'SCHEMA' { return 'SCHEMA'; } 'SCHEMAS' { return 'SCHEMAS'; } 'SEQUENCEFILE' { return 'SEQUENCEFILE'; } 'SERDE' { return 'SERDE'; } 'SERDEPROPERTIES' { return 'SERDEPROPERTIES'; } 'SETS' { return 'SETS'; } 'SHOW' { parser.determineCase(yytext); return 'SHOW'; } 'SHOW_DATABASE' { return 'SHOW_DATABASE'; } 'SKEWED' { return 'SKEWED'; } 'SKEWED LOCATION' { return 'SKEWED_LOCATION'; } // Hack to prevent hdfs lexer state 'SORT' { return 'SORT'; } 'SORTED' { return 'SORTED'; } 'STATISTICS' { return 'STATISTICS'; } 'STORED' { return 'STORED'; } STORED\s+AS\s+DIRECTORIES { return 'STORED_AS_DIRECTORIES'; } 'STRING' { return 'STRING'; } 'STRUCT' { return 'STRUCT'; } 'TABLES' { return 'TABLES'; } 'TABLESAMPLE' { return 'TABLESAMPLE'; } 'TBLPROPERTIES' { return 'TBLPROPERTIES'; } 'TEMPORARY' { return 'TEMPORARY'; } 'TERMINATED' { return 'TERMINATED'; } 'TEXTFILE' { return 'TEXTFILE'; } 'TINYINT' { return 'TINYINT'; } 'TOUCH' { return 'TOUCH'; } 'TRANSACTIONS' { return 'TRANSACTIONS'; } 'UNARCHIVE' { return 'UNARCHIVE'; } 'UNIONTYPE' { return 'UNIONTYPE'; } 'USE' { parser.determineCase(yytext); return 'USE'; } 'VIEW' { return 'VIEW'; } 'WAIT' { return 'WAIT'; } 'WEEK' { return 'WEEK'; } 'WINDOW' { return 'WINDOW'; } 'YEAR' { return 'YEAR'; } '.' { return '.'; } '[' { return '['; } ']' { return ']'; } // Reserved Keywords 'ADD' { return 'ADD'; } 'AGGREGATE' { return 'AGGREGATE'; } 'AVRO' { return 'AVRO'; } 'CACHED' { return 'CACHED'; } 'CASCADE' { return 'CASCADE'; } 'CHANGE' { return 'CHANGE'; } 'CLOSE_FN' { return 'CLOSE_FN'; } 'COLUMN' { return 'COLUMN'; } 'COLUMNS' { return 'COLUMNS'; } 'COMMENT' { parser.determineCase(yytext); return 'COMMENT'; } 'COMPUTE' { parser.determineCase(yytext); return 'COMPUTE'; } 'CREATE' { parser.determineCase(yytext); parser.addStatementTypeLocation('CREATE', yylloc, yy.lexer.upcomingInput()); return 'CREATE'; } 'DATA' { return 'DATA'; } 'DATABASES' { return 'DATABASES'; } 'DELETE' { return 'DELETE'; } 'DELIMITED' { return 'DELIMITED'; } 'DESCRIBE' { parser.determineCase(yytext); parser.addStatementTypeLocation('DESCRIBE', yylloc); return 'DESCRIBE'; } 'ESCAPED' { return 'ESCAPED'; } 'EXPLAIN' { parser.determineCase(yytext); parser.addStatementTypeLocation('EXPLAIN', yylloc); return 'EXPLAIN'; } 'EXTERNAL' { return 'EXTERNAL'; } 'EXTENDED' { return 'EXTENDED'; } 'FIELDS' { return 'FIELDS'; } 'FILEFORMAT' { return 'FILEFORMAT'; } 'FILES' { return 'FILES'; } 'FINALIZE_FN' { return 'FINALIZE_FN'; } 'FIRST' { return 'FIRST'; } 'FORMAT' { return 'FORMAT'; } 'FORMATTED' { return 'FORMATTED'; } 'FUNCTION' { return 'FUNCTION'; } 'FUNCTIONS' { return 'FUNCTIONS'; } 'GROUP' { return 'GROUP'; } 'HASH' { return 'HASH'; } 'ILIKE' { return 'ILIKE'; } 'INCREMENTAL' { return 'INCREMENTAL'; } 'INSERT' { parser.determineCase(yytext); parser.addStatementTypeLocation('INSERT', yylloc); return 'INSERT'; } 'INTERVAL' { return 'INTERVAL'; } 'INTERMEDIATE' { return 'INTERMEDIATE'; } 'INIT_FN' { return 'INIT_FN'; } 'INVALIDATE' { parser.determineCase(yytext); parser.addStatementTypeLocation('INVALIDATE', yylloc, yy.lexer.upcomingInput()); return 'INVALIDATE'; } 'INPATH' { this.begin('hdfs'); return 'INPATH'; } 'IREGEXP' { return 'IREGEXP'; } 'KEY' { return 'KEY'; } 'KUDU' { return 'KUDU'; } 'LAST' { return 'LAST'; } LIKE\s+PARQUET { this.begin('hdfs'); return 'LIKE_PARQUET'; } 'LIMIT' { return 'LIMIT'; } 'LINES' { return 'LINES'; } 'LOAD' { parser.determineCase(yytext); parser.addStatementTypeLocation('LOAD', yylloc, yy.lexer.upcomingInput()); return 'LOAD'; } 'LOCATION' { this.begin('hdfs'); return 'LOCATION'; } 'MERGE_FN' { return 'MERGE_FN'; } 'METADATA' { return 'METADATA'; } 'NULLS' { return 'NULLS'; } 'OFFSET' { return 'OFFSET'; } 'ORC' { return 'ORC'; } 'OVERWRITE' { return 'OVERWRITE'; } 'PARQUET' { return 'PARQUET'; } 'PARTITIONED' { return 'PARTITIONED'; } 'PARTITIONS' { return 'PARTITIONS'; } 'PREPARE_FN' { return 'PREPARE_FN'; } 'PRIMARY' { return 'PRIMARY'; } 'RCFILE' { return 'RCFILE'; } 'RANGE' { return 'RANGE'; } 'REAL' { return 'REAL'; } 'REFRESH' { parser.determineCase(yytext); parser.addStatementTypeLocation('REFRESH', yylloc); return 'REFRESH'; } 'RENAME' { return 'RENAME'; } 'REPEATABLE' { return 'REPEATABLE'; } 'REPLACE' { return 'REPLACE'; } 'REPLICATION' { return 'REPLICATION'; } 'RESTRICT' { return 'RESTRICT'; } 'RETURNS' { return 'RETURNS'; } 'REVOKE' { parser.determineCase(yytext); parser.addStatementTypeLocation('REVOKE', yylloc); return 'REVOKE'; } 'SEQUENCEFILE' { return 'SEQUENCEFILE'; } 'SERDEPROPERTIES' { return 'SERDEPROPERTIES'; } 'SCHEMAS' { return 'SCHEMAS'; } 'SERIALIZE_FN' { return 'SERIALIZE_FN'; } 'SERVER' { return 'SERVER'; } 'SORT' { return 'SORT'; } 'STATS' { return 'STATS'; } 'STORED' { return 'STORED'; } 'STRAIGHT_JOIN' { return 'STRAIGHT_JOIN'; } 'SYMBOL' { return 'SYMBOL'; } 'TABLE' { return 'TABLE'; } 'TABLES' { return 'TABLES'; } 'TABLESAMPLE' { return 'TABLESAMPLE'; } 'TBLPROPERTIES' { return 'TBLPROPERTIES'; } 'TERMINATED' { return 'TERMINATED'; } 'TEXTFILE' { return 'TEXTFILE'; } 'UNCACHED' { return 'UNCACHED'; } 'UPDATE_FN' { return 'UPDATE_FN'; } 'UPSERT' { parser.determineCase(yytext); parser.addStatementTypeLocation('UPSERT', yylloc); return 'UPSERT'; } 'URI' { return 'URI'; } 'USING' { return 'USING'; } PARTITION\s+VALUE\s { return 'PARTITION_VALUE'; } // Non-reserved Keywords 'ANALYTIC' { return 'ANALYTIC'; } 'ANTI' { return 'ANTI'; } 'ARRAY' { return 'ARRAY'; } 'BLOCK_SIZE' { return 'BLOCK_SIZE'; } 'COMPRESSION' { return 'COMPRESSION'; } 'CURRENT' { return 'CURRENT'; } 'DEFAULT' { return 'DEFAULT'; } 'ENCODING' { return 'ENCODING'; } 'GRANT' { return 'GRANT'; } 'MAP' { return 'MAP'; } 'RECOVER' { return 'RECOVER'; } 'ROLE' { return 'ROLE'; } 'ROLES' { return 'ROLES'; } 'STRUCT' { return 'STRUCT'; } 'UNKNOWN' { return 'UNKNOWN'; } \[BROADCAST\] { return 'BROADCAST'; } \[NOSHUFFLE\] { return 'NOSHUFFLE'; } \[SHUFFLE\] { return 'SHUFFLE'; } '...' { return '...'; } '.' { return '.'; } '[' { return '['; } ']' { return ']'; } 'AND' { this.popState(); return 'BETWEEN_AND'; } // Reserved Keywords 'ALL' { return 'ALL'; } 'ALTER' { parser.determineCase(yytext); parser.addStatementTypeLocation('ALTER', yylloc, yy.lexer.upcomingInput()); return 'ALTER'; } 'AND' { return 'AND'; } 'AS' { return 'AS'; } 'ASC' { return 'ASC'; } 'BETWEEN' { this.begin('between'); return 'BETWEEN'; } 'BIGINT' { return 'BIGINT'; } 'BOOLEAN' { return 'BOOLEAN'; } 'BY' { return 'BY'; } 'CASE' { return 'CASE'; } 'CHAR' { return 'CHAR'; } 'CREATE' { parser.determineCase(yytext); return 'CREATE'; } 'CROSS' { return 'CROSS'; } 'CURRENT' { return 'CURRENT'; } 'DATABASE' { return 'DATABASE'; } 'DECIMAL' { return 'DECIMAL'; } 'DISTINCT' { return 'DISTINCT'; } 'DIV' { return 'ARITHMETIC_OPERATOR'; } 'DOUBLE' { return 'DOUBLE'; } 'DESC' { return 'DESC'; } 'DROP' { parser.determineCase(yytext); parser.addStatementTypeLocation('DROP', yylloc, yy.lexer.upcomingInput()); return 'DROP'; } 'ELSE' { return 'ELSE'; } 'END' { return 'END'; } 'EXISTS' { parser.yy.correlatedSubQuery = true; return 'EXISTS'; } 'FALSE' { return 'FALSE'; } 'FLOAT' { return 'FLOAT'; } 'FOLLOWING' { return 'FOLLOWING'; } 'FROM' { parser.determineCase(yytext); return 'FROM'; } 'FULL' { return 'FULL'; } 'GROUP' { return 'GROUP'; } 'HAVING' { return 'HAVING'; } 'IF' { return 'IF'; } 'IN' { return 'IN'; } 'INNER' { return 'INNER'; } 'INSERT' { return 'INSERT'; } 'INT' { return 'INT'; } 'INTO' { return 'INTO'; } 'IS' { return 'IS'; } 'JOIN' { return 'JOIN'; } 'LEFT' { return 'LEFT'; } 'LIKE' { return 'LIKE'; } 'LIMIT' { return 'LIMIT'; } 'NOT' { return 'NOT'; } 'NULL' { return 'NULL'; } 'ON' { return 'ON'; } 'OPTION' { return 'OPTION'; } 'OR' { return 'OR'; } 'ORDER' { return 'ORDER'; } 'OUTER' { return 'OUTER'; } 'PARTITION' { return 'PARTITION'; } 'PRECEDING' { return 'PRECEDING'; } 'PURGE' { return 'PURGE'; } 'RANGE' { return 'RANGE'; } 'REGEXP' { return 'REGEXP'; } 'RIGHT' { return 'RIGHT'; } 'RLIKE' { return 'RLIKE'; } 'ROW' { return 'ROW'; } 'ROWS' { return 'ROWS'; } 'SCHEMA' { return 'SCHEMA'; } 'SELECT' { parser.determineCase(yytext); parser.addStatementTypeLocation('SELECT', yylloc); return 'SELECT'; } 'SEMI' { return 'SEMI'; } 'SET' { parser.determineCase(yytext); parser.addStatementTypeLocation('SET', yylloc); return 'SET'; } 'SHOW' { parser.determineCase(yytext); parser.addStatementTypeLocation('SHOW', yylloc); return 'SHOW'; } 'SMALLINT' { return 'SMALLINT'; } 'STRING' { return 'STRING'; } 'TABLE' { return 'TABLE'; } 'THEN' { return 'THEN'; } 'TIMESTAMP' { return 'TIMESTAMP'; } 'TINYINT' { return 'TINYINT'; } 'TO' { return 'TO'; } 'TRUE' { return 'TRUE'; } 'TRUNCATE' { parser.determineCase(yytext); parser.addStatementTypeLocation('TRUNCATE', yylloc, yy.lexer.upcomingInput()); return 'TRUNCATE'; } 'UNBOUNDED' { return 'UNBOUNDED'; } 'UPDATE' { parser.determineCase(yytext); return 'UPDATE'; } 'USE' { parser.determineCase(yytext); parser.addStatementTypeLocation('USE', yylloc); return 'USE'; } 'UNION' { return 'UNION'; } 'VIEW' { return 'VIEW'; } 'VARCHAR' { return 'VARCHAR'; } // Not in Impala 'VALUES' { return 'VALUES'; } 'WHEN' { return 'WHEN'; } 'WHERE' { return 'WHERE'; } 'WITH' { parser.determineCase(yytext); parser.addStatementTypeLocation('WITH', yylloc); return 'WITH'; } // Non-reserved Keywords 'OVER' { return 'OVER'; } 'ROLE' { return 'ROLE'; } // --- UDFs --- AVG\s*\( { yy.lexer.unput('('); yytext = 'avg'; parser.addFunctionLocation(yylloc, yytext); return 'AVG'; } CAST\s*\( { yy.lexer.unput('('); yytext = 'cast'; parser.addFunctionLocation(yylloc, yytext); return 'CAST'; } COUNT\s*\( { yy.lexer.unput('('); yytext = 'count'; parser.addFunctionLocation(yylloc, yytext); return 'COUNT'; } MAX\s*\( { yy.lexer.unput('('); yytext = 'max'; parser.addFunctionLocation(yylloc, yytext); return 'MAX'; } MIN\s*\( { yy.lexer.unput('('); yytext = 'min'; parser.addFunctionLocation(yylloc, yytext); return 'MIN'; } STDDEV_POP\s*\( { yy.lexer.unput('('); yytext = 'stddev_pop'; parser.addFunctionLocation(yylloc, yytext); return 'STDDEV_POP'; } STDDEV_SAMP\s*\( { yy.lexer.unput('('); yytext = 'stddev_samp'; parser.addFunctionLocation(yylloc, yytext); return 'STDDEV_SAMP'; } SUM\s*\( { yy.lexer.unput('('); yytext = 'sum'; parser.addFunctionLocation(yylloc, yytext); return 'SUM'; } VARIANCE\s*\( { yy.lexer.unput('('); yytext = 'variance'; parser.addFunctionLocation(yylloc, yytext); return 'VARIANCE'; } VAR_POP\s*\( { yy.lexer.unput('('); yytext = 'var_pop'; parser.addFunctionLocation(yylloc, yytext); return 'VAR_POP'; } VAR_SAMP\s*\( { yy.lexer.unput('('); yytext = 'var_samp'; parser.addFunctionLocation(yylloc, yytext); return 'VAR_SAMP'; } COLLECT_SET\s*\( { yy.lexer.unput('('); yytext = 'collect_set'; parser.addFunctionLocation(yylloc, yytext); return 'COLLECT_SET'; } COLLECT_LIST\s*\( { yy.lexer.unput('('); yytext = 'collect_list'; parser.addFunctionLocation(yylloc, yytext); return 'COLLECT_LIST'; } CORR\s*\( { yy.lexer.unput('('); yytext = 'corr'; parser.addFunctionLocation(yylloc, yytext); return 'CORR'; } COVAR_POP\s*\( { yy.lexer.unput('('); yytext = 'covar_pop'; parser.addFunctionLocation(yylloc, yytext); return 'COVAR_POP'; } COVAR_SAMP\s*\( { yy.lexer.unput('('); yytext = 'covar_samp'; parser.addFunctionLocation(yylloc, yytext); return 'COVAR_SAMP'; } EXTRACT\s*\( { yy.lexer.unput('('); yytext = 'extract'; parser.addFunctionLocation(yylloc, yytext); return 'EXTRACT'; } HISTOGRAM_NUMERIC\s*\( { yy.lexer.unput('('); yytext = 'histogram_numeric'; parser.addFunctionLocation(yylloc, yytext); return 'HISTOGRAM_NUMERIC'; } NTILE\s*\( { yy.lexer.unput('('); yytext = 'ntile'; parser.addFunctionLocation(yylloc, yytext); return 'NTILE'; } PERCENTILE\s*\( { yy.lexer.unput('('); yytext = 'percentile'; parser.addFunctionLocation(yylloc, yytext); return 'PERCENTILE'; } PERCENTILE_APPROX\s*\( { yy.lexer.unput('('); yytext = 'percentile_approx'; parser.addFunctionLocation(yylloc, yytext); return 'PERCENTILE_APPROX'; } APPX_MEDIAN\s*\( { yy.lexer.unput('('); yytext = 'appx_median'; parser.addFunctionLocation(yylloc, yytext); return 'APPX_MEDIAN'; } EXTRACT\s*\( { yy.lexer.unput('('); yytext = 'extract'; parser.addFunctionLocation(yylloc, yytext); return 'EXTRACT'; } GROUP_CONCAT\s*\( { yy.lexer.unput('('); yytext = 'group_concat'; parser.addFunctionLocation(yylloc, yytext); return 'GROUP_CONCAT'; } NDV\s*\( { yy.lexer.unput('('); yytext = 'ndv'; parser.addFunctionLocation(yylloc, yytext); return 'NDV'; } STDDEV\s*\( { yy.lexer.unput('('); yytext = 'stddev'; parser.addFunctionLocation(yylloc, yytext); return 'STDDEV'; } VARIANCE_POP\s*\( { yy.lexer.unput('('); yytext = 'variance_pop'; parser.addFunctionLocation(yylloc, yytext); return 'VARIANCE_POP'; } VARIANCE_SAMP\s*\( { yy.lexer.unput('('); yytext = 'variance_samp'; parser.addFunctionLocation(yylloc, yytext); return 'VARIANCE_SAMP'; } // Analytical functions CUME_DIST\s*\( { yy.lexer.unput('('); yytext = 'cume_dist'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } DENSE_RANK\s*\( { yy.lexer.unput('('); yytext = 'dense_rank'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } FIRST_VALUE\s*\( { yy.lexer.unput('('); yytext = 'first_value'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } LAG\s*\( { yy.lexer.unput('('); yytext = 'lag'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } LAST_VALUE\s*\( { yy.lexer.unput('('); yytext = 'last_value'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } LEAD\s*\( { yy.lexer.unput('('); yytext = 'lead'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } RANK\s*\( { yy.lexer.unput('('); yytext = 'rank'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } ROW_NUMBER\s*\( { yy.lexer.unput('('); yytext = 'row_number'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } CUME_DIST\s*\( { yy.lexer.unput('('); yytext = 'cume_dist'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } PERCENT_RANK\s*\( { yy.lexer.unput('('); yytext = 'percent_rank'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } NTILE\s*\( { yy.lexer.unput('('); yytext = 'ntile'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } PERCENT_RANK\s*\( { yy.lexer.unput('('); yytext = 'percent_rank'; parser.addFunctionLocation(yylloc, yytext); return 'ANALYTIC'; } SYSTEM\s*\( { yy.lexer.unput('('); yytext = 'system'; return 'SYSTEM'; } [0-9]+ { return 'UNSIGNED_INTEGER'; } [0-9]+(?:[YSL]|BD)? { return 'UNSIGNED_INTEGER'; } [0-9]+E { return 'UNSIGNED_INTEGER_E'; } [A-Za-z0-9_]+ { return 'REGULAR_IDENTIFIER'; } '\u2020' { parser.yy.cursorFound = true; return 'CURSOR'; } '\u2021' { parser.yy.cursorFound = true; return 'PARTIAL_CURSOR'; } \s+['] { return 'HDFS_START_QUOTE'; } [^'\u2020\u2021]+ { parser.addFileLocation(yylloc, yytext); return 'HDFS_PATH'; } ['] { this.popState(); return 'HDFS_END_QUOTE'; } <> { return 'EOF'; } '&&' { return 'AND'; } '||' { return 'OR'; } '=' { return '='; } '<' { return '<'; } '>' { return '>'; } '!=' { return 'COMPARISON_OPERATOR'; } '<=' { return 'COMPARISON_OPERATOR'; } '>=' { return 'COMPARISON_OPERATOR'; } '<>' { return 'COMPARISON_OPERATOR'; } '<=>' { return 'COMPARISON_OPERATOR'; } '-' { return '-'; } '*' { return '*'; } '+' { return 'ARITHMETIC_OPERATOR'; } '/' { return 'ARITHMETIC_OPERATOR'; } '%' { return 'ARITHMETIC_OPERATOR'; } '|' { return 'ARITHMETIC_OPERATOR'; } '^' { return 'ARITHMETIC_OPERATOR'; } '&' { return 'ARITHMETIC_OPERATOR'; } ',' { return ','; } '.' { return '.'; } ':' { return ':'; } ';' { return ';'; } '~' { return '~'; } '!' { return '!'; } '(' { return '('; } ')' { return ')'; } '[' { return '['; } ']' { return ']'; } \$\{[^}]*\} { return 'VARIABLE_REFERENCE'; } \` { this.begin('backtickedValue'); return 'BACKTICK'; } [^`]+ { if (parser.handleQuotedValueWithCursor(this, yytext, yylloc, '`')) { return 'PARTIAL_VALUE'; } return 'VALUE'; } \` { this.popState(); return 'BACKTICK'; } \' { this.begin('singleQuotedValue'); return 'SINGLE_QUOTE'; } (?:\\[']|[^'])+ { if (parser.handleQuotedValueWithCursor(this, yytext, yylloc, '\'')) { return 'PARTIAL_VALUE'; } return 'VALUE'; } \' { this.popState(); return 'SINGLE_QUOTE'; } \" { this.begin('doubleQuotedValue'); return 'DOUBLE_QUOTE'; } (?:\\["]|[^"])+ { if (parser.handleQuotedValueWithCursor(this, yytext, yylloc, '"')) { return 'PARTIAL_VALUE'; } return 'VALUE'; } \" { this.popState(); return 'DOUBLE_QUOTE'; } <> { return 'EOF'; } . { /* To prevent console logging of unknown chars */ } . { } . { } . { } . { } . { } . { } . { }