blob: 98107cd44c305f57db7074a596832e1c9135efa6 [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF 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.
#
{
# Generated parser implementation class package and name
package: "org.apache.drill.exec.planner.sql.parser.impl",
class: "DrillParserImpl",
# List of import statements.
imports: [
"org.apache.drill.exec.planner.sql.parser.*",
"org.apache.calcite.util.*",
"java.util.*"
]
# List of keywords.
keywords: [
"DATABASES",
"SCHEMAS",
"TABLES",
"USE",
"FILES",
"REFRESH",
"METADATA",
"IF",
"JAR",
"PROPERTIES",
"ANALYZE",
"COMPUTE",
"ESTIMATE",
"STATISTICS",
"SAMPLE",
"COLUMNS",
"REMOVE",
"ALIAS",
"ALIASES",
"STORAGE"
]
# List of methods for parsing custom SQL statements.
statementParserMethods: [
"SqlShowTables()",
"SqlShowSchemas()",
"SqlDescribeSchema()"
"SqlDescribeTable()",
"SqlUseSchema()",
"SqlCreateOrReplace()"
"SqlDropAlias()",
"SqlDropAllAliases()",
"SqlDrop()",
"SqlShowFiles()",
"SqlRefreshMetadata()",
"SqlCreateFunction()",
"SqlDropFunction()",
"SqlAnalyzeTable()",
"DrillSqlSetOption(Span.of(), null)",
"DrillSqlResetOption(Span.of(), null)",
"SqlAlterSchema()"
]
# List of methods for parsing custom literals.
# Example: ParseJsonLiteral().
literalParserMethods: [
]
# List of methods for parsing custom data types.
dataTypeParserMethods: [
]
# Binary operators tokens
binaryOperatorsTokens: [
]
# Binary operators initialization
extraBinaryExpressions: [
]
# List of files in @includes directory that have parser method
# implementations for custom SQL statements, literals or types
# given as part of "statementParserMethods", "literalParserMethods" or
# "dataTypeParserMethods".
implementationFiles: [
"parserImpls.ftl"
]
# List of methods for parsing extensions to "CREATE [OR REPLACE]" calls.
# Each must accept arguments "(SqlParserPos pos, boolean replace)".
createStatementParserMethods: [
]
# List of methods for parsing extensions to "ALTER <scope>" calls.
# Each must accept arguments "(SqlParserPos pos, String scope)".
alterStatementParserMethods: [
"DrillSqlSetOption",
"DrillSqlResetOption"
]
# List of methods for parsing extensions to "DROP" calls.
# Each must accept arguments "(SqlParserPos pos)".
dropStatementParserMethods: [
]
# List of keywords from "keywords" section that are not reserved.
# Copied from calcite-core config.fmpp
# For details please see comment under CALCITE-2405.
nonReservedKeywords: [
"A"
"ABSENT"
"ABSOLUTE"
"ACTION"
"ADA"
"ADD"
"ADMIN"
"AFTER"
"ALWAYS"
"APPLY"
"ARRAY_AGG"
"ARRAY_CONCAT_AGG"
"ASC"
"ASSERTION"
"ASSIGNMENT"
"ATTRIBUTE"
"ATTRIBUTES"
"BEFORE"
"BERNOULLI"
"BREADTH"
"C"
"CASCADE"
"CATALOG"
"CATALOG_NAME"
"CENTURY"
"CHAIN"
"CHARACTERISTICS"
"CHARACTERS"
"CHARACTER_SET_CATALOG"
"CHARACTER_SET_NAME"
"CHARACTER_SET_SCHEMA"
"CLASS_ORIGIN"
"COBOL"
"COLLATION"
"COLLATION_CATALOG"
"COLLATION_NAME"
"COLLATION_SCHEMA"
"COLUMN_NAME"
"COMMAND_FUNCTION"
"COMMAND_FUNCTION_CODE"
"COMMITTED"
"CONDITIONAL"
"CONDITION_NUMBER"
"CONNECTION"
"CONNECTION_NAME"
"CONSTRAINT_CATALOG"
"CONSTRAINT_NAME"
"CONSTRAINTS"
"CONSTRAINT_SCHEMA"
"CONSTRUCTOR"
"CONTINUE"
"CURSOR_NAME"
"DATA"
"DATABASE"
"DATE_TRUNC"
"DATETIME_INTERVAL_CODE"
"DATETIME_INTERVAL_PRECISION"
"DAYS"
"DECADE"
"DEFAULTS"
"DEFERRABLE"
"DEFERRED"
"DEFINED"
"DEFINER"
"DEGREE"
"DEPTH"
"DERIVED"
"DESC"
"DESCRIPTION"
"DESCRIPTOR"
"DIAGNOSTICS"
"DISPATCH"
"DOMAIN"
"DOW"
"DOY"
"DOT_FORMAT"
"DYNAMIC_FUNCTION"
"DYNAMIC_FUNCTION_CODE"
"ENCODING"
"EPOCH"
"ERROR"
"EXCEPTION"
"EXCLUDE"
"EXCLUDING"
"FINAL"
"FIRST"
"FOLLOWING"
"FORMAT"
"FORTRAN"
"FOUND"
"FRAC_SECOND"
"G"
"GENERAL"
"GENERATED"
"GEOMETRY"
"GO"
"GOTO"
"GRANTED"
"GROUP_CONCAT"
"HIERARCHY"
"HOP"
"HOURS"
"IGNORE"
"ILIKE"
"IMMEDIATE"
"IMMEDIATELY"
"IMPLEMENTATION"
"INCLUDE"
"INCLUDING"
"INCREMENT"
"INITIALLY"
"INPUT"
"INSTANCE"
"INSTANTIABLE"
"INVOKER"
"ISODOW"
"ISOLATION"
"ISOYEAR"
"JAVA"
"JSON"
"K"
"KEY"
"KEY_MEMBER"
"KEY_TYPE"
"LABEL"
"LAST"
"LENGTH"
"LEVEL"
"LIBRARY"
"LOCATOR"
"M"
"MAP"
"MATCHED"
"MAXVALUE"
"MESSAGE_LENGTH"
"MESSAGE_OCTET_LENGTH"
"MESSAGE_TEXT"
"MICROSECOND"
"MILLENNIUM"
"MILLISECOND"
"MINUTES"
"MINVALUE"
"MONTHS"
"MORE_"
"MUMPS"
"NAME"
"NAMES"
"NANOSECOND"
"NESTING"
"NORMALIZED"
"NULLABLE"
"NULLS"
"NUMBER"
"OBJECT"
"OCTETS"
"OPTION"
"OPTIONS"
"ORDERING"
"ORDINALITY"
"OTHERS"
"OUTPUT"
"OVERRIDING"
"PAD"
"PARAMETER_MODE"
"PARAMETER_NAME"
"PARAMETER_ORDINAL_POSITION"
"PARAMETER_SPECIFIC_CATALOG"
"PARAMETER_SPECIFIC_NAME"
"PARAMETER_SPECIFIC_SCHEMA"
"PARTIAL"
"PASCAL"
"PASSING"
"PASSTHROUGH"
"PAST"
"PATH"
"PIVOT"
"PLACING"
"PLAN"
"PLI"
"PRECEDING"
"PRESERVE"
"PRIOR"
"PRIVILEGES"
"PUBLIC"
"QUARTER"
"QUARTERS"
"READ"
"RELATIVE"
"REPEATABLE"
"REPLACE"
"RESPECT"
"RESTART"
"RESTRICT"
"RETURNED_CARDINALITY"
"RETURNED_LENGTH"
"RETURNED_OCTET_LENGTH"
"RETURNED_SQLSTATE"
"RETURNING"
"RLIKE"
"ROLE"
"ROUTINE"
"ROUTINE_CATALOG"
"ROUTINE_NAME"
"ROUTINE_SCHEMA"
"ROW_COUNT"
"SCALAR"
"SCALE"
"SCHEMA"
"SCHEMA_NAME"
"SCOPE_CATALOGS"
"SCOPE_NAME"
"SCOPE_SCHEMA"
"SECONDS"
"SECTION"
"SECURITY"
"SELF"
"SEPARATOR"
"SEQUENCE"
"SERIALIZABLE"
"SERVER"
"SERVER_NAME"
"SESSION"
"SETS"
"SIMPLE"
"SIZE"
"SOURCE"
"SPACE"
"SPECIFIC_NAME"
"SQL_BIGINT"
"SQL_BINARY"
"SQL_BIT"
"SQL_BLOB"
"SQL_BOOLEAN"
"SQL_CHAR"
"SQL_CLOB"
"SQL_DATE"
"SQL_DECIMAL"
"SQL_DOUBLE"
"SQL_FLOAT"
"SQL_INTEGER"
"SQL_INTERVAL_DAY"
"SQL_INTERVAL_DAY_TO_HOUR"
"SQL_INTERVAL_DAY_TO_MINUTE"
"SQL_INTERVAL_DAY_TO_SECOND"
"SQL_INTERVAL_HOUR"
"SQL_INTERVAL_HOUR_TO_MINUTE"
"SQL_INTERVAL_HOUR_TO_SECOND"
"SQL_INTERVAL_MINUTE"
"SQL_INTERVAL_MINUTE_TO_SECOND"
"SQL_INTERVAL_MONTH"
"SQL_INTERVAL_SECOND"
"SQL_INTERVAL_YEAR"
"SQL_INTERVAL_YEAR_TO_MONTH"
"SQL_LONGVARBINARY"
"SQL_LONGVARCHAR"
"SQL_LONGVARNCHAR"
"SQL_NCHAR"
"SQL_NCLOB"
"SQL_NUMERIC"
"SQL_NVARCHAR"
"SQL_REAL"
"SQL_SMALLINT"
"SQL_TIME"
"SQL_TIMESTAMP"
"SQL_TINYINT"
"SQL_TSI_DAY"
"SQL_TSI_FRAC_SECOND"
"SQL_TSI_HOUR"
"SQL_TSI_MICROSECOND"
"SQL_TSI_MINUTE"
"SQL_TSI_MONTH"
"SQL_TSI_QUARTER"
"SQL_TSI_SECOND"
"SQL_TSI_WEEK"
"SQL_TSI_YEAR"
"SQL_VARBINARY"
"SQL_VARCHAR"
"STATE"
"STATEMENT"
"STRING_AGG"
"STRUCTURE"
"STYLE"
"SUBCLASS_ORIGIN"
"SUBSTITUTE"
"TABLE_NAME"
"TEMPORARY"
"TIES"
"TIME_DIFF"
"TIME_TRUNC"
"TIMESTAMPADD"
"TIMESTAMPDIFF"
"TIMESTAMP_DIFF"
"TIMESTAMP_TRUNC"
"TOP_LEVEL_COUNT"
"TRANSACTION"
"TRANSACTIONS_ACTIVE"
"TRANSACTIONS_COMMITTED"
"TRANSACTIONS_ROLLED_BACK"
"TRANSFORM"
"TRANSFORMS"
"TRIGGER_CATALOG"
"TRIGGER_NAME"
"TRIGGER_SCHEMA"
"TUMBLE"
"TYPE"
"UNBOUNDED"
"UNCOMMITTED"
"UNCONDITIONAL"
"UNDER"
"UNPIVOT"
"UNNAMED"
"USAGE"
"USER_DEFINED_TYPE_CATALOG"
"USER_DEFINED_TYPE_CODE"
"USER_DEFINED_TYPE_NAME"
"USER_DEFINED_TYPE_SCHEMA"
"UTF16"
"UTF32"
"UTF8"
"VERSION"
"VIEW"
"WEEK"
"WEEKS"
"WORK"
"WRAPPER"
"WRITE"
"XML"
"YEARS"
"ZONE"
# The following keywords are reserved in core Calcite,
# are reserved in some version of SQL,
# but are not reserved in Babel.
#
# Words that are commented out (e.g. "AND") are still reserved.
# These are the most important reserved words, and SQL cannot be
# unambiguously parsed if they are not reserved. For example, if
# "INNER" is not reserved then in the query
#
# select * from emp inner join dept using (deptno)"
#
# "inner" could be a table alias for "emp".
#
"ABS"
"ABSOLUTE"
"ACTION"
"ADD"
"AFTER"
"ALL"
"ALLOCATE"
"ALLOW"
"ALTER"
"AND"
# "ANY"
"ARE"
"ARRAY"
# "ARRAY_AGG" # not a keyword in Calcite
"ARRAY_MAX_CARDINALITY"
"AS"
"ASC"
"ASENSITIVE"
"ASSERTION"
"ASYMMETRIC"
"AT"
"ATOMIC"
"AUTHORIZATION"
"AVG"
"BEFORE"
"BEGIN"
"BEGIN_FRAME"
"BEGIN_PARTITION"
"BETWEEN"
"BIGINT"
"BINARY"
"BIT"
# "BIT_LENGTH" # not a keyword in Calcite
"BLOB"
"BOOLEAN"
"BOTH"
"BREADTH"
"BY"
# "CALL"
"CALLED"
"CARDINALITY"
"CASCADE"
"CASCADED"
# "CASE"
"CAST"
"CATALOG"
"CEIL"
"CEILING"
"CHAR"
"CHARACTER"
"CHARACTER_LENGTH"
"CHAR_LENGTH"
"CHECK"
"CLASSIFIER"
"CLOB"
"CLOSE"
"COALESCE"
"COLLATE"
"COLLATION"
"COLLECT"
"COLUMN"
"COMMIT"
"CONDITION"
"CONNECT"
"CONNECTION"
"CONSTRAINT"
"CONSTRAINTS"
"CONSTRUCTOR"
"CONTAINS"
"CONTINUE"
"CONVERT"
"CORR"
"CORRESPONDING"
"COUNT"
"COVAR_POP"
"COVAR_SAMP"
# "CREATE"
# "CROSS"
"CUBE"
"CUME_DIST"
# "CURRENT"
"CURRENT_CATALOG"
"CURRENT_DATE"
"CURRENT_DEFAULT_TRANSFORM_GROUP"
"CURRENT_PATH"
"CURRENT_ROLE"
"CURRENT_ROW"
"CURRENT_SCHEMA"
"CURRENT_TIME"
"CURRENT_TIMESTAMP"
"CURRENT_TRANSFORM_GROUP_FOR_TYPE"
"CURRENT_USER"
# "CURSOR"
"CYCLE"
"DATA"
# "DATE"
"DAY"
"DEALLOCATE"
"DEC"
"DECIMAL"
"DECLARE"
# "DEFAULT"
"DEFERRABLE"
"DEFERRED"
# "DEFINE"
# "DELETE"
"DENSE_RANK"
"DEPTH"
"DEREF"
"DESC"
# "DESCRIBE" # must be reserved
"DESCRIPTOR"
"DETERMINISTIC"
"DIAGNOSTICS"
"DISALLOW"
"DISCONNECT"
# "DISTINCT"
# "DO" # not a keyword in Calcite
"DOMAIN"
"DOUBLE"
# "DROP" # probably must be reserved
"DYNAMIC"
"EACH"
"ELEMENT"
"ELSE"
# "ELSEIF" # not a keyword in Calcite
"EMPTY"
"END"
# "END-EXEC" # not a keyword in Calcite, and contains '-'
"END_FRAME"
"END_PARTITION"
"EQUALS"
"ESCAPE"
"EVERY"
# "EXCEPT" # must be reserved
"EXCEPTION"
"EXEC"
"EXECUTE"
"EXISTS"
# "EXIT" # not a keyword in Calcite
"EXP"
# "EXPLAIN" # must be reserved
"EXTEND"
"EXTERNAL"
"EXTRACT"
"FALSE"
# "FETCH"
"FILTER"
"FIRST"
"FIRST_VALUE"
"FLOAT"
"FLOOR"
"FOR"
"FOREIGN"
# "FOREVER" # not a keyword in Calcite
"FOUND"
"FRAME_ROW"
"FREE"
# "FROM" # must be reserved
# "FULL" # must be reserved
"FUNCTION"
"FUSION"
"GENERAL"
"GET"
"GLOBAL"
"GO"
"GOTO"
# "GRANT"
# "GROUP"
# "GROUPING"
"GROUPS"
# "HANDLER" # not a keyword in Calcite
# "HAVING"
"HOLD"
"HOUR"
"HOURS",
"IDENTITY"
"ILIKE"
"IMMEDIATE"
"IMMEDIATELY"
"IMPORT"
# "IN"
"INDICATOR"
"INITIAL"
"INITIALLY"
# "INNER"
"INOUT"
"INPUT"
"INSENSITIVE"
# "INSERT"
"INT"
"INTEGER"
# "INTERSECT"
"INTERSECTION"
# "INTERVAL"
# "INTO"
"IS"
"ISOLATION"
# "ITERATE" # not a keyword in Calcite
# "JOIN"
"JSON_ARRAY"
"JSON_ARRAYAGG"
"JSON_EXISTS"
"JSON_OBJECT"
"JSON_OBJECTAGG"
"JSON_QUERY"
"JSON_VALUE"
# "KEEP" # not a keyword in Calcite
"KEY"
"LAG"
"LANGUAGE"
"LARGE"
"LAST"
"LAST_VALUE"
# "LATERAL"
"LEAD"
"LEADING"
# "LEAVE" # not a keyword in Calcite
# "LEFT"
"LEVEL"
"LIKE"
"LIKE_REGEX"
# "LIMIT"
"LN"
"LOCAL"
"LOCALTIME"
"LOCALTIMESTAMP"
"LOCATOR"
# "LOOP" # not a keyword in Calcite
"LOWER"
"MAP"
"MATCH"
"MATCHES"
"MATCH_NUMBER"
# "MATCH_RECOGNIZE"
"MAX"
# "MAX_CARDINALITY" # not a keyword in Calcite
"MEASURES"
"MEMBER"
# "MERGE"
"METHOD"
"MIN"
# "MINUS"
"MINUTE"
"MOD"
"MODIFIES"
"MODULE"
"MONTH"
"MULTISET"
"NAMES"
"NATIONAL"
# "NATURAL"
"NCHAR"
"NCLOB"
# "NEW"
# "NEXT"
"NO"
"NONE"
"NORMALIZE"
"NOT"
"NTH_VALUE"
"NTILE"
# "NULL"
"NULLIF"
"NUMERIC"
"OBJECT"
"OCCURRENCES_REGEX"
"OCTET_LENGTH"
"OF"
# "OFFSET"
"OLD"
"OMIT"
# "ON"
"ONE"
"ONLY"
"OPEN"
"OPTION"
"OR"
# "ORDER"
"ORDINALITY"
"OUT"
# "OUTER"
"OUTPUT"
# "OVER"
"OVERLAPS"
"OVERLAY"
"PAD"
"PARAMETER"
"PARTIAL"
# "PARTITION"
"PATH"
# "PATTERN"
"PER"
"PERCENT"
"PERCENTILE_CONT"
"PERCENTILE_DISC"
"PERCENT_RANK"
"PERIOD"
"PERMUTE"
"PORTION"
"POSITION"
"POSITION_REGEX"
"POWER"
"PRECEDES"
"PRECISION"
"PREPARE"
"PRESERVE"
"PREV"
"PRIMARY"
"PRIOR"
"PRIVILEGES"
"PROCEDURE"
"PUBLIC"
# "RANGE"
"RANK"
"READ"
"READS"
"REAL"
"RECURSIVE"
"REF"
"REFERENCES"
"REFERENCING"
"REGR_AVGX"
"REGR_AVGY"
"REGR_COUNT"
"REGR_INTERCEPT"
"REGR_R2"
"REGR_SLOPE"
"REGR_SXX"
"REGR_SXY"
"REGR_SYY"
"RELATIVE"
"RELEASE"
# "REPEAT" # not a keyword in Calcite
"RESET"
# "RESIGNAL" # not a keyword in Calcite
"RESTRICT"
"RESULT"
"RETURN"
"RETURNS"
"REVOKE"
# "RIGHT"
"RLIKE"
"ROLE"
"ROLLBACK"
# "ROLLUP"
"ROUTINE"
# "ROW"
# "ROWS"
"ROW_NUMBER"
"RUNNING"
"SAVEPOINT"
"SCHEMA"
"SCOPE"
"SCROLL"
"SEARCH"
"SECOND"
"SECTION"
"SEEK"
# "SELECT"
"SENSITIVE"
"SESSION"
"SESSION_USER"
# "SET"
# "SETS"
"SHOW"
# "SIGNAL" # not a keyword in Calcite
"SIMILAR"
"SIZE"
# "SKIP" # messes with JavaCC's <SKIP> token
"SMALLINT"
# "SOME"
"SPACE"
"SPECIFIC"
"SPECIFICTYPE"
"SQL"
# "SQLCODE" # not a keyword in Calcite
# "SQLERROR" # not a keyword in Calcite
"SQLEXCEPTION"
"SQLSTATE"
"SQLWARNING"
"SQRT"
"START"
"STATE"
"STATIC"
"STDDEV_POP"
"STDDEV_SAMP"
# "STREAM"
"SUBMULTISET"
"SUBSET"
"SUBSTRING"
"SUBSTRING_REGEX"
"SUCCEEDS"
"SUM"
"SYMMETRIC"
"SYSTEM"
"SYSTEM_TIME"
"SYSTEM_USER"
# "TABLE"
# "TABLESAMPLE"
"TEMPORARY"
# "THEN"
# "TIME"
"TIME_DIFF"
"TIME_TRUNC"
# "TIMESTAMP"
"TIMESTAMP_DIFF"
"TIMESTAMP_TRUNC"
"TIMEZONE_HOUR"
"TIMEZONE_MINUTE"
"TINYINT"
"TO"
"TRAILING"
"TRANSACTION"
"TRANSLATE"
"TRANSLATE_REGEX"
"TRANSLATION"
"TREAT"
"TRIGGER"
"TRIM"
"TRIM_ARRAY"
"TRUE"
"TRUNCATE"
"UESCAPE"
"UNDER"
# "UNDO" # not a keyword in Calcite
# "UNION"
"UNIQUE"
"UNKNOWN"
# "UNNEST"
# "UNTIL" # not a keyword in Calcite
# "UPDATE"
"UPPER"
"UPSERT"
"USAGE"
"USER"
# "USING"
"VALUE"
# "VALUES"
"VALUE_OF"
"VARBINARY"
"VARCHAR"
"VARYING"
"VAR_POP"
"VAR_SAMP"
"VERSION"
"VERSIONING"
# "VERSIONS" # not a keyword in Calcite
"VIEW"
# "WHEN"
"WHENEVER"
# "WHERE"
# "WHILE" # not a keyword in Calcite
"WIDTH_BUCKET"
# "WINDOW"
# "WITH"
"WITHIN"
"WITHOUT"
"WORK"
"WRITE"
"YEAR"
"ZONE"
]
# List of non-reserved keywords to add;
# items in this list become non-reserved
nonReservedKeywordsToAdd: [
"ALIAS"
"ALIASES"
"COLUMNS"
"DATETIME"
"HOURS"
"STORAGE"
"REMOVE"
]
# List of non-reserved keywords to remove;
# items in this list become reserved
nonReservedKeywordsToRemove: [
]
# List of additional join types. Each is a method with no arguments.
# Example: LeftSemiJoin()
joinTypes: [
]
# List of methods for parsing builtin function calls.
# Return type of method implementation should be "SqlNode".
# Example: DateFunctionCall().
builtinFunctionCallMethods: [
]
includePosixOperators: false,
includeCompoundIdentifier: false,
includeBraces: true,
includeAdditionalDeclarations: false,
includeParsingStringLiteralAsArrayLiteral: false,
identifierMaxLength: 1024
}