/* THIS FILE WAS AUTOMATICALLY GENERATED BY inline_grammar.py */
#pragma once

namespace duckdb {

const char INLINED_PEG_GRAMMAR[] = {
	"UnreservedKeyword <- 'ABORT'i /\n"
	"'ABSOLUTE'i /\n"
	"'ACCESS'i /\n"
	"'ACTION'i /\n"
	"'ADD'i /\n"
	"'ADMIN'i /\n"
	"'AFTER'i /\n"
	"'AGGREGATE'i /\n"
	"'ALSO'i /\n"
	"'ALTER'i /\n"
	"'ALWAYS'i /\n"
	"'ASSERTION'i /\n"
	"'ASSIGNMENT'i /\n"
	"'ATTACH'i /\n"
	"'ATTRIBUTE'i /\n"
	"'BACKWARD'i /\n"
	"'BEFORE'i /\n"
	"'BEGIN'i /\n"
	"'CACHE'i /\n"
	"'CALL'i /\n"
	"'CALLED'i /\n"
	"'CASCADE'i /\n"
	"'CASCADED'i /\n"
	"'CATALOG'i /\n"
	"'CENTURY'i /\n"
	"'CENTURIES'i /\n"
	"'CHAIN'i /\n"
	"'CHARACTERISTICS'i /\n"
	"'CHECKPOINT'i /\n"
	"'CLASS'i /\n"
	"'CLOSE'i /\n"
	"'CLUSTER'i /\n"
	"'COMMENT'i /\n"
	"'COMMENTS'i /\n"
	"'COMMIT'i /\n"
	"'COMMITTED'i /\n"
	"'COMPRESSION'i /\n"
	"'CONFIGURATION'i /\n"
	"'CONFLICT'i /\n"
	"'CONNECTION'i /\n"
	"'CONSTRAINTS'i /\n"
	"'CONTENT'i /\n"
	"'CONTINUE'i /\n"
	"'CONVERSION'i /\n"
	"'COPY'i /\n"
	"'COST'i /\n"
	"'CSV'i /\n"
	"'CUBE'i /\n"
	"'CURRENT'i /\n"
	"'CURSOR'i /\n"
	"'CYCLE'i /\n"
	"'DATA'i /\n"
	"'DATABASE'i /\n"
	"'DAY'i /\n"
	"'DAYS'i /\n"
	"'DEALLOCATE'i /\n"
	"'DECADE'i /\n"
	"'DECADES'i /\n"
	"'DECLARE'i /\n"
	"'DEFAULTS'i /\n"
	"'DEFERRED'i /\n"
	"'DEFINER'i /\n"
	"'DELETE'i /\n"
	"'DELIMITER'i /\n"
	"'DELIMITERS'i /\n"
	"'DEPENDS'i /\n"
	"'DETACH'i /\n"
	"'DICTIONARY'i /\n"
	"'DISABLE'i /\n"
	"'DISCARD'i /\n"
	"'DOCUMENT'i /\n"
	"'DOMAIN'i /\n"
	"'DOUBLE'i /\n"
	"'DROP'i /\n"
	"'EACH'i /\n"
	"'ENABLE'i /\n"
	"'ENCODING'i /\n"
	"'ENCRYPTED'i /\n"
	"'ENUM'i /\n"
	"'ERROR'i /\n"
	"'ESCAPE'i /\n"
	"'EVENT'i /\n"
	"'EXCLUDE'i /\n"
	"'EXCLUDING'i /\n"
	"'EXCLUSIVE'i /\n"
	"'EXECUTE'i /\n"
	"'EXPLAIN'i /\n"
	"'EXPORT'i /\n"
	"'EXPORT_STATE'i /\n"
	"'EXTENSION'i /\n"
	"'EXTENSIONS'i /\n"
	"'EXTERNAL'i /\n"
	"'FAMILY'i /\n"
	"'FILTER'i /\n"
	"'FIRST'i /\n"
	"'FOLLOWING'i /\n"
	"'FORCE'i /\n"
	"'FORWARD'i /\n"
	"'FUNCTION'i /\n"
	"'FUNCTIONS'i /\n"
	"'GLOBAL'i /\n"
	"'GRANT'i /\n"
	"'GRANTED'i /\n"
	"'GROUPS'i /\n"
	"'HANDLER'i /\n"
	"'HEADER'i /\n"
	"'HOLD'i /\n"
	"'HOUR'i /\n"
	"'HOURS'i /\n"
	"'IDENTITY'i /\n"
	"'IF'i /\n"
	"'IGNORE'i /\n"
	"'IMMEDIATE'i /\n"
	"'IMMUTABLE'i /\n"
	"'IMPLICIT'i /\n"
	"'IMPORT'i /\n"
	"'INCLUDE'i /\n"
	"'INCLUDING'i /\n"
	"'INCREMENT'i /\n"
	"'INDEX'i /\n"
	"'INDEXES'i /\n"
	"'INHERIT'i /\n"
	"'INHERITS'i /\n"
	"'INLINE'i /\n"
	"'INPUT'i /\n"
	"'INSENSITIVE'i /\n"
	"'INSERT'i /\n"
	"'INSTALL'i /\n"
	"'INSTEAD'i /\n"
	"'INVOKER'i /\n"
	"'JSON'i /\n"
	"'ISOLATION'i /\n"
	"'KEY'i /\n"
	"'LABEL'i /\n"
	"'LANGUAGE'i /\n"
	"'LARGE'i /\n"
	"'LAST'i /\n"
	"'LEAKPROOF'i /\n"
	"'LEVEL'i /\n"
	"'LISTEN'i /\n"
	"'LOAD'i /\n"
	"'LOCAL'i /\n"
	"'LOCATION'i /\n"
	"'LOCK'i /\n"
	"'LOCKED'i /\n"
	"'LOGGED'i /\n"
	"'MACRO'i /\n"
	"'MAPPING'i /\n"
	"'MATCH'i /\n"
	"'MATCHED'i /\n"
	"'MATERIALIZED'i /\n"
	"'MAXVALUE'i /\n"
	"'MERGE'i /\n"
	"'METHOD'i /\n"
	"'MICROSECOND'i /\n"
	"'MICROSECONDS'i /\n"
	"'MILLENNIUM'i /\n"
	"'MILLENNIA'i /\n"
	"'MILLISECOND'i /\n"
	"'MILLISECONDS'i /\n"
	"'MINUTE'i /\n"
	"'MINUTES'i /\n"
	"'MINVALUE'i /\n"
	"'MODE'i /\n"
	"'MONTH'i /\n"
	"'MONTHS'i /\n"
	"'MOVE'i /\n"
	"'NAME'i /\n"
	"'NAMES'i /\n"
	"'NEW'i /\n"
	"'NEXT'i /\n"
	"'NO'i /\n"
	"'NOTHING'i /\n"
	"'NOTIFY'i /\n"
	"'NOWAIT'i /\n"
	"'NULLS'i /\n"
	"'OBJECT'i /\n"
	"'OF'i /\n"
	"'OFF'i /\n"
	"'OIDS'i /\n"
	"'OLD'i /\n"
	"'OPERATOR'i /\n"
	"'OPTION'i /\n"
	"'OPTIONS'i /\n"
	"'ORDINALITY'i /\n"
	"'OTHERS'i /\n"
	"'OVER'i /\n"
	"'OVERRIDING'i /\n"
	"'OWNED'i /\n"
	"'OWNER'i /\n"
	"'PARALLEL'i /\n"
	"'PARSER'i /\n"
	"'PARTIAL'i /\n"
	"'PARTITION'i /\n"
	"'PARTITIONED'i /\n"
	"'PASSING'i /\n"
	"'PASSWORD'i /\n"
	"'PERCENT'i /\n"
	"'PERSISTENT'i /\n"
	"'PLANS'i /\n"
	"'POLICY'i /\n"
	"'PRAGMA'i /\n"
	"'PRECEDING'i /\n"
	"'PREPARE'i /\n"
	"'PREPARED'i /\n"
	"'PRESERVE'i /\n"
	"'PRIOR'i /\n"
	"'PRIVILEGES'i /\n"
	"'PROCEDURAL'i /\n"
	"'PROCEDURE'i /\n"
	"'PROGRAM'i /\n"
	"'PUBLICATION'i /\n"
	"'QUARTER'i /\n"
	"'QUARTERS'i /\n"
	"'QUOTE'i /\n"
	"'RANGE'i /\n"
	"'READ'i /\n"
	"'REASSIGN'i /\n"
	"'RECHECK'i /\n"
	"'RECURSIVE'i /\n"
	"'REF'i /\n"
	"'REFERENCING'i /\n"
	"'REFRESH'i /\n"
	"'REINDEX'i /\n"
	"'RELATIVE'i /\n"
	"'RELEASE'i /\n"
	"'RENAME'i /\n"
	"'REPEATABLE'i /\n"
	"'REPLACE'i /\n"
	"'REPLICA'i /\n"
	"'RESET'i /\n"
	"'RESPECT'i /\n"
	"'RESTART'i /\n"
	"'RESTRICT'i /\n"
	"'RETURNS'i /\n"
	"'REVOKE'i /\n"
	"'ROLE'i /\n"
	"'ROLLBACK'i /\n"
	"'ROLLUP'i /\n"
	"'ROWS'i /\n"
	"'RULE'i /\n"
	"'SAMPLE'i /\n"
	"'SAVEPOINT'i /\n"
	"'SCHEMA'i /\n"
	"'SCHEMAS'i /\n"
	"'SCOPE'i /\n"
	"'SCROLL'i /\n"
	"'SEARCH'i /\n"
	"'SECRET'i /\n"
	"'SECOND'i /\n"
	"'SECONDS'i /\n"
	"'SECURITY'i /\n"
	"'SEQUENCE'i /\n"
	"'SEQUENCES'i /\n"
	"'SERIALIZABLE'i /\n"
	"'SERVER'i /\n"
	"'SESSION'i /\n"
	"'SET'i /\n"
	"'SETS'i /\n"
	"'SHARE'i /\n"
	"'SIMPLE'i /\n"
	"'SKIP'i /\n"
	"'SNAPSHOT'i /\n"
	"'SORTED'i /\n"
	"'SOURCE'i /\n"
	"'SQL'i /\n"
	"'STABLE'i /\n"
	"'STANDALONE'i /\n"
	"'START'i /\n"
	"'STATEMENT'i /\n"
	"'STATISTICS'i /\n"
	"'STDIN'i /\n"
	"'STDOUT'i /\n"
	"'STORAGE'i /\n"
	"'STORED'i /\n"
	"'STRICT'i /\n"
	"'STRIP'i /\n"
	"'SUBSCRIPTION'i /\n"
	"'SYSID'i /\n"
	"'SYSTEM'i /\n"
	"'TABLES'i /\n"
	"'TABLESPACE'i /\n"
	"'TARGET'i /\n"
	"'TEMP'i /\n"
	"'TEMPLATE'i /\n"
	"'TEMPORARY'i /\n"
	"'TEXT'i /\n"
	"'TIES'i /\n"
	"'TRANSACTION'i /\n"
	"'TRANSFORM'i /\n"
	"'TRIGGER'i /\n"
	"'TRUNCATE'i /\n"
	"'TRUSTED'i /\n"
	"'TYPE'i /\n"
	"'TYPES'i /\n"
	"'UNBOUNDED'i /\n"
	"'UNCOMMITTED'i /\n"
	"'UNENCRYPTED'i /\n"
	"'UNKNOWN'i /\n"
	"'UNLISTEN'i /\n"
	"'UNLOGGED'i /\n"
	"'UNTIL'i /\n"
	"'UPDATE'i /\n"
	"'USE'i /\n"
	"'USER'i /\n"
	"'VACUUM'i /\n"
	"'VALID'i /\n"
	"'VALIDATE'i /\n"
	"'VALIDATOR'i /\n"
	"'VALUE'i /\n"
	"'VARIABLE'i /\n"
	"'VARYING'i /\n"
	"'VERSION'i /\n"
	"'VIEW'i /\n"
	"'VIEWS'i /\n"
	"'VIRTUAL'i /\n"
	"'VOLATILE'i /\n"
	"'WEEK'i /\n"
	"'WEEKS'i /\n"
	"'WHITESPACE'i /\n"
	"'WITHIN'i /\n"
	"'WITHOUT'i /\n"
	"'WORK'i /\n"
	"'WRAPPER'i /\n"
	"'WRITE'i /\n"
	"'XML'i /\n"
	"'YEAR'i /\n"
	"'YEARS'i /\n"
	"'YES'i /\n"
	"'ZONE'i\n"
	"ReservedKeyword <- 'ALL'i /\n"
	"'ANALYSE'i /\n"
	"'ANALYZE'i /\n"
	"'AND'i /\n"
	"'ANY'i /\n"
	"'ARRAY'i /\n"
	"'AS'i /\n"
	"'ASC'i /\n"
	"'ASYMMETRIC'i /\n"
	"'BOTH'i /\n"
	"'CASE'i /\n"
	"'CAST'i /\n"
	"'CHECK'i /\n"
	"'COLLATE'i /\n"
	"'COLUMN'i /\n"
	"'CONSTRAINT'i /\n"
	"'CREATE'i /\n"
	"'DEFAULT'i /\n"
	"'DEFERRABLE'i /\n"
	"'DESC'i /\n"
	"'DESCRIBE'i /\n"
	"'DISTINCT'i /\n"
	"'DO'i /\n"
	"'ELSE'i /\n"
	"'END'i /\n"
	"'EXCEPT'i /\n"
	"'FALSE'i /\n"
	"'FETCH'i /\n"
	"'FOR'i /\n"
	"'FOREIGN'i /\n"
	"'FROM'i /\n"
	"'GROUP'i /\n"
	"'HAVING'i /\n"
	"'QUALIFY'i /\n"
	"'IN'i /\n"
	"'INITIALLY'i /\n"
	"'INTERSECT'i /\n"
	"'INTO'i /\n"
	"'LAMBDA'i /\n"
	"'LATERAL'i /\n"
	"'LEADING'i /\n"
	"'LIMIT'i /\n"
	"'NOT'i /\n"
	"'NULL'i /\n"
	"'OFFSET'i /\n"
	"'ON'i /\n"
	"'ONLY'i /\n"
	"'OR'i /\n"
	"'ORDER'i /\n"
	"'PIVOT'i /\n"
	"'PIVOT_WIDER'i /\n"
	"'PIVOT_LONGER'i /\n"
	"'PLACING'i /\n"
	"'PRIMARY'i /\n"
	"'REFERENCES'i /\n"
	"'RETURNING'i /\n"
	"'SELECT'i /\n"
	"'SHOW'i /\n"
	"'SOME'i /\n"
	"'SUMMARIZE'i /\n"
	"'SYMMETRIC'i /\n"
	"'TABLE'i /\n"
	"'THEN'i /\n"
	"'TO'i /\n"
	"'TRAILING'i /\n"
	"'TRUE'i /\n"
	"'UNION'i /\n"
	"'UNIQUE'i /\n"
	"'UNPIVOT'i /\n"
	"'USING'i /\n"
	"'VARIADIC'i /\n"
	"'WHEN'i /\n"
	"'WHERE'i /\n"
	"'WINDOW'i /\n"
	"'WITH'i\n"
	"ColumnNameKeyword <- 'BETWEEN'i /\n"
	"'BIGINT'i /\n"
	"'BIT'i /\n"
	"'BOOLEAN'i /\n"
	"'CHAR'i /\n"
	"'CHARACTER'i /\n"
	"'COALESCE'i /\n"
	"'COLUMNS'i /\n"
	"'DEC'i /\n"
	"'DECIMAL'i /\n"
	"'EXISTS'i /\n"
	"'EXTRACT'i /\n"
	"'FLOAT'i /\n"
	"'GENERATED'i /\n"
	"'GROUPING'i /\n"
	"'GROUPING_ID'i /\n"
	"'INOUT'i /\n"
	"'INT'i /\n"
	"'INTEGER'i /\n"
	"'INTERVAL'i /\n"
	"'MAP'i /\n"
	"'NATIONAL'i /\n"
	"'NCHAR'i /\n"
	"'NONE'i /\n"
	"'NULLIF'i /\n"
	"'NUMERIC'i /\n"
	"'OUT'i /\n"
	"'OVERLAY'i /\n"
	"'POSITION'i /\n"
	"'PRECISION'i /\n"
	"'REAL'i /\n"
	"'ROW'i /\n"
	"'SETOF'i /\n"
	"'SMALLINT'i /\n"
	"'SUBSTRING'i /\n"
	"'STRUCT'i /\n"
	"'TIME'i /\n"
	"'TIMESTAMP'i /\n"
	"'TREAT'i /\n"
	"'TRIM'i /\n"
	"'TRY_CAST'i /\n"
	"'VALUES'i /\n"
	"'VARCHAR'i /\n"
	"'XMLATTRIBUTES'i /\n"
	"'XMLCONCAT'i /\n"
	"'XMLELEMENT'i /\n"
	"'XMLEXISTS'i /\n"
	"'XMLFOREST'i /\n"
	"'XMLNAMESPACES'i /\n"
	"'XMLPARSE'i /\n"
	"'XMLPI'i /\n"
	"'XMLROOT'i /\n"
	"'XMLSERIALIZE'i /\n"
	"'XMLTABLE'i\n"
	"FuncNameKeyword <- 'ASOF'i /\n"
	"'AT'i /\n"
	"'AUTHORIZATION'i /\n"
	"'BINARY'i /\n"
	"'COLLATION'i /\n"
	"'CONCURRENTLY'i /\n"
	"'CROSS'i /\n"
	"'FREEZE'i /\n"
	"'FULL'i /\n"
	"'GENERATED'i /\n"
	"'GLOB'i /\n"
	"'ILIKE'i /\n"
	"'INNER'i /\n"
	"'IS'i /\n"
	"'ISNULL'i /\n"
	"'JOIN'i /\n"
	"'LEFT'i /\n"
	"'LIKE'i /\n"
	"'MAP'i /\n"
	"'NATURAL'i /\n"
	"'NOTNULL'i /\n"
	"'OUTER'i /\n"
	"'OVERLAPS'i /\n"
	"'POSITIONAL'i /\n"
	"'RIGHT'i /\n"
	"'SIMILAR'i /\n"
	"'STRUCT'i /\n"
	"'TABLESAMPLE'i /\n"
	"'VERBOSE'i\n"
	"TypeNameKeyword <- 'ASOF'i /\n"
	"'AT'i /\n"
	"'AUTHORIZATION'i /\n"
	"'BINARY'i /\n"
	"'BY'i /\n"
	"'COLLATION'i /\n"
	"'COLUMNS'i /\n"
	"'CONCURRENTLY'i /\n"
	"'CROSS'i /\n"
	"'FREEZE'i /\n"
	"'FULL'i /\n"
	"'GLOB'i /\n"
	"'ILIKE'i /\n"
	"'INNER'i /\n"
	"'IS'i /\n"
	"'ISNULL'i /\n"
	"'JOIN'i /\n"
	"'LEFT'i /\n"
	"'LIKE'i /\n"
	"'NATURAL'i /\n"
	"'NOTNULL'i /\n"
	"'OUTER'i /\n"
	"'OVERLAPS'i /\n"
	"'POSITIONAL'i /\n"
	"'RIGHT'i /\n"
	"'UNPACK'i /\n"
	"'SIMILAR'i /\n"
	"'TABLESAMPLE'i /\n"
	"'TRY_CAST'i /\n"
	"'VERBOSE'i /\n"
	"'SEMI'i /\n"
	"'ANTI'i\n"
	"PivotStatement <- PivotKeyword TableRef PivotOn? PivotUsing? GroupByClause?\n"
	"PivotOn <- 'ON' PivotColumnList\n"
	"PivotUsing <- 'USING' TargetList\n"
	"PivotColumnList <- List(Expression)\n"
	"PivotKeyword <- 'PIVOT'i / 'PIVOT_WIDER'i\n"
	"UnpivotKeyword <- 'UNPIVOT'i / 'PIVOT_LONGER'i\n"
	"UnpivotStatement <- UnpivotKeyword TableRef 'ON' TargetList IntoNameValues?\n"
	"IntoNameValues <- 'INTO' 'NAME' ColIdOrString ValueOrValues List(Identifier)\n"
	"ValueOrValues <- 'VALUE' / 'VALUES'\n"
	"IncludeExcludeNulls <- ('INCLUDE' / 'EXCLUDE') 'NULLS'\n"
	"UnpivotHeader <- ColIdOrString / Parens(List(ColIdOrString))\n"
	"ColumnReference <- CatalogReservedSchemaTableColumnName / SchemaReservedTableColumnName / TableReservedColumnName / ColumnName\n"
	"CatalogReservedSchemaTableColumnName <- CatalogQualification ReservedSchemaQualification ReservedTableQualification ReservedColumnName\n"
	"SchemaReservedTableColumnName <- SchemaQualification ReservedTableQualification ReservedColumnName\n"
	"TableReservedColumnName <- TableQualification ReservedColumnName\n"
	"FunctionExpression <- FunctionIdentifier Parens(DistinctOrAll? List(FunctionArgument)? OrderByClause? IgnoreNulls?) WithinGroupClause? FilterClause? ExportClause? OverClause?\n"
	"FunctionIdentifier <- CatalogReservedSchemaFunctionName / SchemaReservedFunctionName / FunctionName\n"
	"CatalogReservedSchemaFunctionName <- CatalogQualification ReservedSchemaQualification? ReservedFunctionName\n"
	"SchemaReservedFunctionName <- SchemaQualification ReservedFunctionName\n"
	"DistinctOrAll <- 'DISTINCT'i / 'ALL'i\n"
	"ExportClause <- 'EXPORT_STATE'i\n"
	"WithinGroupClause <- 'WITHIN'i 'GROUP'i Parens(OrderByClause)\n"
	"FilterClause <- 'FILTER' Parens('WHERE'i? Expression)\n"
	"IgnoreNulls <- ('IGNORE'i 'NULLS'i) / ('RESPECT'i 'NULLS'i)\n"
	"ParenthesisExpression <- Parens(List(Expression))\n"
	"LiteralExpression <- StringLiteral / NumberLiteral / 'NULL'i / 'TRUE'i / 'FALSE'i\n"
	"CastExpression <- CastOrTryCast Parens(Expression 'AS'i Type)\n"
	"CastOrTryCast <- 'CAST'i / 'TRY_CAST'i\n"
	"StarExpression <- (ColId '.')* '*'i ExcludeList? ReplaceList? RenameList?\n"
	"ExcludeList <- 'EXCLUDE'i (Parens(List(ExcludeName)) / ExcludeName)\n"
	"ExcludeName <- DottedIdentifier / ColIdOrString\n"
	"ReplaceList <- 'REPLACE'i (Parens(List(ReplaceEntry)) / ReplaceEntry)\n"
	"ReplaceEntry <- Expression 'AS'i ColumnReference\n"
	"RenameList <- 'RENAME'i (Parens(List(RenameEntry)) / RenameEntry)\n"
	"RenameEntry <- ColumnReference 'AS'i Identifier\n"
	"SubqueryExpression <- 'NOT'i? 'EXISTS'i? SubqueryReference\n"
	"CaseExpression <- 'CASE'i Expression? CaseWhenThen CaseWhenThen* CaseElse? 'END'i\n"
	"CaseWhenThen <- 'WHEN'i Expression 'THEN'i Expression\n"
	"CaseElse <- 'ELSE'i Expression\n"
	"TypeLiteral <- ColId StringLiteral\n"
	"IntervalLiteral <- 'INTERVAL'i IntervalParameter IntervalUnit?\n"
	"IntervalParameter <- StringLiteral / NumberLiteral / Parens(Expression)\n"
	"IntervalUnit <- ColId\n"
	"FrameClause <- Framing FrameExtent WindowExcludeClause?\n"
	"Framing <- 'ROWS'i / 'RANGE'i / 'GROUPS'i\n"
	"FrameExtent <- ('BETWEEN'i FrameBound 'AND'i FrameBound) / FrameBound\n"
	"FrameBound <- ('UNBOUNDED'i 'PRECEDING'i) / ('UNBOUNDED'i 'FOLLOWING'i) / ('CURRENT'i 'ROW'i) / (Expression 'PRECEDING'i) / (Expression 'FOLLOWING'i)\n"
	"WindowExcludeClause <- 'EXCLUDE'i WindowExcludeElement\n"
	"WindowExcludeElement <- ('CURRENT'i 'ROW'i) / 'GROUP'i / 'TIES'i / ('NO'i 'OTHERS'i)\n"
	"OverClause <- 'OVER'i WindowFrame\n"
	"WindowFrame <- WindowFrameDefinition / Identifier / Parens(Identifier)\n"
	"WindowFrameDefinition <- Parens(BaseWindowName? WindowFrameContents) / Parens(WindowFrameContents)\n"
	"WindowFrameContents <- WindowPartition? OrderByClause? FrameClause?\n"
	"BaseWindowName <- Identifier\n"
	"WindowPartition <- 'PARTITION'i 'BY'i List(Expression)\n"
	"PrefixExpression <- PrefixOperator Expression\n"
	"PrefixOperator <- 'NOT'i / '-' / '+' / '~'\n"
	"ListExpression <- 'ARRAY'i? (BoundedListExpression / SelectStatement)\n"
	"BoundedListExpression <- '[' List(Expression)? ']'\n"
	"StructExpression <- '{' List(StructField)? '}'\n"
	"StructField <- Expression ':'i Expression\n"
	"MapExpression <- 'MAP'i StructExpression\n"
	"GroupingExpression <- GroupingOrGroupingId Parens(List(Expression))\n"
	"GroupingOrGroupingId <- 'GROUPING'i / 'GROUPING_ID'i\n"
	"Parameter <- '?' / NumberedParameter / ColLabelParameter\n"
	"NumberedParameter <- '$' NumberLiteral\n"
	"ColLabelParameter <- '$' ColLabel\n"
	"PositionalExpression <- '#' NumberLiteral\n"
	"DefaultExpression <- 'DEFAULT'i\n"
	"ListComprehensionExpression <- '['i Expression 'FOR'i List(Expression) ListComprehensionFilter? ']'\n"
	"ListComprehensionFilter <- 'IF'i Expression\n"
	"SingleExpression <-\n"
	"	LiteralExpression /\n"
	"	Parameter /\n"
	"    SubqueryExpression /\n"
	"    SpecialFunctionExpression /\n"
	"    ParenthesisExpression /\n"
	"    IntervalLiteral /\n"
	"    TypeLiteral /\n"
	"    CaseExpression /\n"
	"    StarExpression /\n"
	"    CastExpression /\n"
	"    GroupingExpression /\n"
	"    MapExpression /\n"
	"    FunctionExpression /\n"
	"    ColumnReference /\n"
	"    PrefixExpression /\n"
	"    ListComprehensionExpression /\n"
	"    ListExpression /\n"
	"    StructExpression /\n"
	"    PositionalExpression /\n"
	"    DefaultExpression\n"
	"OperatorLiteral <- <[\\+\\-\\*\\/\\%\\^\\<\\>\\=\\~\\!\\@\\&\\|\\`]+>\n"
	"LikeOperator <- 'NOT'i? LikeOrSimilarTo\n"
	"LikeOrSimilarTo <- 'LIKE'i / 'ILIKE'i / 'GLOB'i / ('SIMILAR'i 'TO'i)\n"
	"InOperator <- 'NOT'i? 'IN'i\n"
	"IsOperator <- 'IS'i 'NOT'i? DistinctFrom?\n"
	"DistinctFrom <- 'DISTINCT'i 'FROM'i\n"
	"ConjunctionOperator <- 'OR'i / 'AND'i\n"
	"ComparisonOperator <- '=' / '<=' / '>=' / '<' / '>' / '<>' / '!=' / '=='\n"
	"BetweenOperator <- 'NOT'i? 'BETWEEN'i\n"
	"CollateOperator <- 'COLLATE'i\n"
	"LambdaOperator <- '->'\n"
	"EscapeOperator <- 'ESCAPE'i\n"
	"AtTimeZoneOperator <- 'AT'i 'TIME'i 'ZONE'i\n"
	"PostfixOperator <- '!'\n"
	"AnyAllOperator <- ComparisonOperator AnyOrAll\n"
	"AnyOrAll <- 'ANY' / 'ALL'\n"
	"Operator <-\n"
	"	AnyAllOperator /\n"
	"    ConjunctionOperator /\n"
	"    LikeOperator /\n"
	"    InOperator /\n"
	"    IsOperator /\n"
	"    BetweenOperator /\n"
	"    CollateOperator /\n"
	"    LambdaOperator /\n"
	"    EscapeOperator /\n"
	"    AtTimeZoneOperator /\n"
	"    OperatorLiteral\n"
	"CastOperator <- '::' Type\n"
	"DotOperator <- '.' (FunctionExpression / ColLabel)\n"
	"NotNull <- 'NOT'i 'NULL'i\n"
	"Indirection <- CastOperator / DotOperator / SliceExpression / NotNull / PostfixOperator\n"
	"BaseExpression <- SingleExpression Indirection*\n"
	"Expression <- BaseExpression RecursiveExpression*\n"
	"RecursiveExpression <- (Operator Expression)\n"
	"SliceExpression <- '[' SliceBound ']'\n"
	"SliceBound <- Expression? (':' (Expression / '-')?)? (':' Expression?)?\n"
	"SpecialFunctionExpression <- CoalesceExpression / UnpackExpression / ColumnsExpression / ExtractExpression / LambdaExpression / NullIfExpression / PositionExpression / RowExpression / SubstringExpression / TrimExpression\n"
	"CoalesceExpression <- 'COALESCE'i Parens(List(Expression))\n"
	"UnpackExpression <- 'UNPACK'i Parens(Expression)\n"
	"ColumnsExpression <- '*'? 'COLUMNS'i Parens(Expression)\n"
	"ExtractExpression <- 'EXTRACT'i Parens(Expression 'FROM'i Expression)\n"
	"LambdaExpression <- 'LAMBDA'i List(ColIdOrString) ':' Expression\n"
	"NullIfExpression <- 'NULLIF'i Parens(Expression ',' Expression)\n"
	"PositionExpression <- 'POSITION'i Parens(Expression)\n"
	"RowExpression <- 'ROW'i Parens(List(Expression))\n"
	"SubstringExpression <- 'SUBSTRING'i Parens(SubstringParameters / List(Expression))\n"
	"SubstringParameters <- Expression 'FROM'i NumberLiteral 'FOR'i NumberLiteral\n"
	"TrimExpression <- 'TRIM'i Parens(TrimDirection? TrimSource? List(Expression))\n"
	"TrimDirection <- 'BOTH'i / 'LEADING'i / 'TRAILING'i\n"
	"TrimSource <- Expression? 'FROM'i\n"
	"ExecuteStatement <- 'EXECUTE'i Identifier TableFunctionArguments?\n"
	"CreateSecretStmt <- 'SECRET'i IfNotExists? SecretName? SecretStorageSpecifier? Parens(GenericCopyOptionList)\n"
	"SecretStorageSpecifier <- 'IN'i Identifier\n"
	"CreateViewStmt <- 'RECURSIVE'i? 'VIEW'i IfNotExists? QualifiedName InsertColumnList? 'AS'i SelectStatement\n"
	"DescribeStatement <- ShowSelect / ShowAllTables / ShowQualifiedName\n"
	"ShowSelect <- ShowOrDescribeOrSummarize SelectStatement\n"
	"ShowAllTables <- ShowOrDescribe 'ALL'i 'TABLES'\n"
	"ShowQualifiedName <- ShowOrDescribeOrSummarize (BaseTableName / StringLiteral)?\n"
	"ShowOrDescribeOrSummarize <- ShowOrDescribe / 'SUMMARIZE'i\n"
	"ShowOrDescribe <- 'SHOW'i / 'DESCRIBE'i / 'DESC'i\n"
	"VacuumStatement <- 'VACUUM'i (VacuumLegacyOptions AnalyzeStatement / VacuumLegacyOptions QualifiedTarget / VacuumLegacyOptions / VacuumParensOptions QualifiedTarget?)?\n"
	"VacuumLegacyOptions <- OptFull OptFreeze OptVerbose\n"
	"VacuumParensOptions <- Parens(List(VacuumOption))\n"
	"VacuumOption <- 'ANALYZE'i / 'VERBOSE'i / 'FREEZE'i / 'FULL'i / Identifier\n"
	"OptFull <- 'FULL'i?\n"
	"OptFreeze <- 'FREEZE'i?\n"
	"OptVerbose <- 'VERBOSE'i?\n"
	"QualifiedTarget <- QualifiedName OptNameList\n"
	"OptNameList <- Parens(List(Name))?\n"
	"MergeIntoStatement <- WithClause? 'MERGE'i 'INTO'i TargetOptAlias MergeIntoUsingClause MergeMatch* ReturningClause?\n"
	"MergeIntoUsingClause <- 'USING'i TableRef JoinQualifier\n"
	"MergeMatch <- MatchedClause / NotMatchedClause\n"
	"MatchedClause <- 'WHEN'i 'MATCHED'i AndExpression? 'THEN'i MatchedClauseAction\n"
	"MatchedClauseAction <- UpdateMatchClause / DeleteMatchClause / InsertMatchClause / DoNothingMatchClause / ErrorMatchClause\n"
	"UpdateMatchClause <- 'UPDATE'i (UpdateMatchSetClause / ByNameOrPosition?)\n"
	"DeleteMatchClause <- 'DELETE'i\n"
	"InsertMatchClause <- 'INSERT'i (InsertValuesList / DefaultValues / InsertByNameOrPosition)?\n"
	"InsertByNameOrPosition <- ByNameOrPosition? '*'?\n"
	"InsertValuesList <- InsertColumnList? 'VALUES'i Parens(List(Expression))\n"
	"DoNothingMatchClause <- 'DO'i 'NOTHING'i\n"
	"ErrorMatchClause <- 'ERROR'i Expression?\n"
	"UpdateMatchSetClause <- 'SET'i (UpdateSetClause / '*')\n"
	"AndExpression <- 'AND'i Expression\n"
	"NotMatchedClause <- 'WHEN'i 'NOT'i 'MATCHED'i BySourceOrTarget? AndExpression? 'THEN'i MatchedClauseAction\n"
	"BySourceOrTarget <- 'BY'i ('SOURCE'i / 'TARGET'i)\n"
	"PragmaStatement <- 'PRAGMA'i (PragmaAssign / PragmaFunction)\n"
	"PragmaAssign <- SettingName '=' VariableList\n"
	"PragmaFunction <- PragmaName PragmaParameters?\n"
	"PragmaParameters <- List(Expression)\n"
	"DeallocateStatement <- 'DEALLOCATE'i 'PREPARE'i? Identifier\n"
	"PrepareStatement <- 'PREPARE'i Identifier TypeList? 'AS'i Statement\n"
	"TypeList <- Parens(List(Type))\n"
	"CreateStatement <- 'CREATE'i OrReplace? Temporary? (CreateTableStmt / CreateMacroStmt / CreateSequenceStmt / CreateTypeStmt / CreateSchemaStmt / CreateViewStmt / CreateIndexStmt / CreateSecretStmt)\n"
	"OrReplace <- 'OR'i 'REPLACE'i\n"
	"Temporary <- 'TEMP'i / 'TEMPORARY'i / 'PERSISTENT'i\n"
	"CreateTableStmt <- 'TABLE'i IfNotExists? QualifiedName (CreateTableAs / CreateColumnList) CommitAction?\n"
	"CreateTableAs <- IdentifierList? 'AS'i SelectStatement WithData?\n"
	"WithData <- 'WITH'i 'NO'i? 'DATA'i\n"
	"IdentifierList <- Parens(List(Identifier))\n"
	"CreateColumnList <- Parens(CreateTableColumnList)\n"
	"IfNotExists <- 'IF'i 'NOT'i 'EXISTS'i\n"
	"QualifiedName <- CatalogReservedSchemaIdentifier / SchemaReservedIdentifierOrStringLiteral / IdentifierOrStringLiteral\n"
	"SchemaReservedIdentifierOrStringLiteral <- SchemaQualification ReservedIdentifierOrStringLiteral\n"
	"CatalogReservedSchemaIdentifier <- CatalogQualification ReservedSchemaQualification ReservedIdentifierOrStringLiteral\n"
	"IdentifierOrStringLiteral <- Identifier / StringLiteral\n"
	"ReservedIdentifierOrStringLiteral <- ReservedIdentifier / StringLiteral\n"
	"CatalogQualification <- CatalogName '.'\n"
	"SchemaQualification <- SchemaName '.'\n"
	"ReservedSchemaQualification <- ReservedSchemaName '.'\n"
	"TableQualification <- TableName '.'\n"
	"ReservedTableQualification <- ReservedTableName '.'\n"
	"CreateTableColumnList <- List(CreateTableColumnElement)\n"
	"CreateTableColumnElement <- ColumnDefinition / TopLevelConstraint\n"
	"ColumnDefinition <- DottedIdentifier TypeOrGenerated ColumnConstraint*\n"
	"TypeOrGenerated <- Type? GeneratedColumn?\n"
	"ColumnConstraint <- NotNullConstraint / UniqueConstraint / PrimaryKeyConstraint / DefaultValue / CheckConstraint / ForeignKeyConstraint / ColumnCollation / ColumnCompression\n"
	"NotNullConstraint <- 'NOT'i? 'NULL'i\n"
	"UniqueConstraint <- 'UNIQUE'i\n"
	"PrimaryKeyConstraint <- 'PRIMARY'i 'KEY'i\n"
	"DefaultValue <- 'DEFAULT'i Expression\n"
	"CheckConstraint <- 'CHECK'i Parens(Expression)\n"
	"ForeignKeyConstraint <- 'REFERENCES'i BaseTableName Parens(ColumnList)? KeyActions?\n"
	"ColumnCollation <- 'COLLATE'i Expression\n"
	"ColumnCompression <- 'USING'i 'COMPRESSION'i ColIdOrString\n"
	"KeyActions <- UpdateAction? DeleteAction?\n"
	"UpdateAction <- 'ON' 'UPDATE' KeyAction\n"
	"DeleteAction <- 'ON' 'DELETE' KeyAction\n"
	"KeyAction <- ('NO'i 'ACTION'i) / 'RESTRICT'i / 'CASCADE'i / ('SET'i 'NULL'i) / ('SET'i 'DEFAULT'i)\n"
	"TopLevelConstraint <- ConstraintNameClause? TopLevelConstraintList\n"
	"TopLevelConstraintList <- TopPrimaryKeyConstraint / CheckConstraint / TopUniqueConstraint / TopForeignKeyConstraint\n"
	"ConstraintNameClause <- 'CONSTRAINT'i Identifier\n"
	"TopPrimaryKeyConstraint <- 'PRIMARY'i 'KEY'i ColumnIdList\n"
	"TopUniqueConstraint <- 'UNIQUE'i ColumnIdList\n"
	"TopForeignKeyConstraint <- 'FOREIGN'i 'KEY'i ColumnIdList ForeignKeyConstraint\n"
	"ColumnIdList <- Parens(List(ColId))\n"
	"PlainIdentifier <- !ReservedKeyword <[a-z_]i[a-z0-9_]i*>\n"
	"QuotedIdentifier <- '\"' [^\"]* '\"'\n"
	"DottedIdentifier <- Identifier ('.' Identifier)*\n"
	"Identifier <- QuotedIdentifier / PlainIdentifier\n"
	"ColId <- UnreservedKeyword / ColumnNameKeyword / Identifier\n"
	"ColIdOrString <- ColId / StringLiteral\n"
	"FuncName <- UnreservedKeyword / FuncNameKeyword / Identifier\n"
	"TypeFuncName <- UnreservedKeyword / TypeNameKeyword / FuncNameKeyword / Identifier\n"
	"TypeName <- UnreservedKeyword / TypeNameKeyword / Identifier\n"
	"ColLabel <- ReservedKeyword / UnreservedKeyword / ColumnNameKeyword / FuncNameKeyword / TypeNameKeyword / Identifier\n"
	"ColLabelOrString <- ColLabel / StringLiteral\n"
	"GeneratedColumn <- Generated? 'AS'i Parens(Expression) GeneratedColumnType?\n"
	"Generated <- 'GENERATED'i AlwaysOrByDefault?\n"
	"AlwaysOrByDefault <- 'ALWAYS'i / ('BY'i 'DEFAULT'i)\n"
	"GeneratedColumnType <- 'VIRTUAL'i / 'STORED'i\n"
	"CommitAction <- 'ON'i 'COMMIT'i 'PRESERVE'i 'ROWS'i\n"
	"CreateIndexStmt <- Unique? 'INDEX'i IfNotExists? IndexName? 'ON'i BaseTableName IndexType? Parens(List(IndexElement)) WithList?\n"
	"WithList <- 'WITH'i Parens(List(RelOption)) / Oids\n"
	"Oids <- ('WITH'i / 'WITHOUT'i) 'OIDS'i\n"
	"IndexElement <- Expression DescOrAsc? NullsFirstOrLast?\n"
	"Unique <- 'UNIQUE'i\n"
	"IndexType <- 'USING'i Identifier\n"
	"RelOption <- ColLabel ('.' ColLabel)* ('=' DefArg)?\n"
	"DefArg <- FuncType / ReservedKeyword / StringLiteral / NumberLiteral / 'NONE'i\n"
	"FuncType <- Type / ('SETOF'i? TypeFuncName '%' 'TYPE'i)\n"
	"LoadStatement <- 'LOAD'i ColIdOrString\n"
	"InstallStatement <- 'FORCE'i? 'INSTALL'i Identifier FromSource? VersionNumber?\n"
	"FromSource <- 'FROM'i (Identifier / StringLiteral)\n"
	"VersionNumber <- Identifier\n"
	"DropStatement <- 'DROP'i DropEntries DropBehavior?\n"
	"DropEntries <-\n"
	"	DropTable /\n"
	"	DropTableFunction /\n"
	"	DropFunction /\n"
	"	DropSchema /\n"
	"	DropIndex /\n"
	"	DropSequence /\n"
	"	DropCollation /\n"
	"	DropType /\n"
	"	DropSecret\n"
	"DropTable <- TableOrView IfExists? List(BaseTableName)\n"
	"DropTableFunction <- 'MACRO'i 'TABLE'i IfExists? List(TableFunctionName)\n"
	"DropFunction <- FunctionType IfExists? List(FunctionIdentifier)\n"
	"DropSchema <- 'SCHEMA'i IfExists? List(QualifiedSchemaName)\n"
	"DropIndex <- 'INDEX'i IfExists? List(QualifiedIndexName)\n"
	"QualifiedIndexName <- CatalogQualification? SchemaQualification? IndexName\n"
	"DropSequence <- 'SEQUENCE'i IfExists? List(QualifiedSequenceName)\n"
	"DropCollation <- 'COLLATION'i IfExists? List(CollationName)\n"
	"DropType <- 'TYPE'i IfExists? List(QualifiedTypeName)\n"
	"DropSecret <- Temporary? 'SECRET'i IfExists? SecretName DropSecretStorage?\n"
	"TableOrView <- 'TABLE'i / 'VIEW'i / ('MATERIALIZED'i 'VIEW'i)\n"
	"FunctionType <- 'MACRO'i / 'FUNCTION'i\n"
	"DropBehavior <- 'CASCADE'i / 'RESTRICT'i\n"
	"IfExists <- 'IF'i 'EXISTS'i\n"
	"QualifiedSchemaName <- CatalogQualification? SchemaName\n"
	"DropSecretStorage <- 'FROM'i Identifier\n"
	"UpdateStatement <- WithClause? 'UPDATE'i UpdateTarget UpdateSetClause FromClause? WhereClause? ReturningClause?\n"
	"UpdateTarget <- (BaseTableName 'SET'i) / (BaseTableName UpdateAlias? 'SET'i)\n"
	"UpdateAlias <- 'AS'i? ColId\n"
	"UpdateSetClause <- List(UpdateSetElement) / (Parens(List(ColumnName)) '=' Expression)\n"
	"UpdateSetElement <- ColumnName '=' Expression\n"
	"InsertStatement <- WithClause? 'INSERT'i OrAction? 'INTO'i InsertTarget ByNameOrPosition? InsertColumnList? InsertValues OnConflictClause? ReturningClause?\n"
	"OrAction <- 'OR'i 'REPLACE'i / 'IGNORE'i\n"
	"ByNameOrPosition <- 'BY'i 'NAME'i / 'POSITION'i\n"
	"InsertTarget <- BaseTableName InsertAlias?\n"
	"InsertAlias <- 'AS'i Identifier\n"
	"ColumnList <- List(ColId)\n"
	"InsertColumnList <- Parens(ColumnList)\n"
	"InsertValues <- SelectStatement / DefaultValues\n"
	"DefaultValues <- 'DEFAULT'i 'VALUES'i\n"
	"OnConflictClause <- 'ON'i 'CONFLICT'i OnConflictTarget? OnConflictAction\n"
	"OnConflictTarget <- OnConflictExpressionTarget / OnConflictIndexTarget\n"
	"OnConflictExpressionTarget <- Parens(List(ColId)) WhereClause?\n"
	"OnConflictIndexTarget <- 'ON'i 'CONSTRAINT'i ConstraintName\n"
	"OnConflictAction <- OnConflictUpdate / OnConflictNothing\n"
	"OnConflictUpdate <- 'DO'i 'UPDATE'i 'SET'i UpdateSetClause WhereClause?\n"
	"OnConflictNothing <- 'DO'i 'NOTHING'i\n"
	"ReturningClause <- 'RETURNING'i TargetList\n"
	"CreateSchemaStmt <- 'SCHEMA'i IfNotExists? QualifiedName\n"
	"SelectStatement <- SelectOrParens (SetopClause SelectStatement)* ResultModifiers\n"
	"SetopClause <- ('UNION'i / 'EXCEPT'i / 'INTERSECT'i) DistinctOrAll? ByName?\n"
	"ByName <- 'BY'i 'NAME'i\n"
	"SelectOrParens <- BaseSelect / Parens(SelectStatement)\n"
	"BaseSelect <- WithClause? (OptionalParensSimpleSelect / ValuesClause / DescribeStatement / TableStatement / PivotStatement / UnpivotStatement) ResultModifiers\n"
	"ResultModifiers <- OrderByClause? LimitClause? OffsetClause?\n"
	"TableStatement <- 'TABLE' BaseTableName\n"
	"OptionalParensSimpleSelect <- Parens(SimpleSelect) / SimpleSelect\n"
	"SimpleSelect <- SelectFrom WhereClause? GroupByClause? HavingClause? WindowClause? QualifyClause? SampleClause?\n"
	"SelectFrom <- (SelectClause FromClause?) / (FromClause SelectClause?)\n"
	"WithStatement <- ColIdOrString InsertColumnList? UsingKey? 'AS'i Materialized? SubqueryReference\n"
	"UsingKey <- 'USING'i 'KEY'i Parens(List(ColId))\n"
	"Materialized <- 'NOT'i? 'MATERIALIZED'i\n"
	"WithClause <- 'WITH'i Recursive? List(WithStatement)\n"
	"Recursive <- 'RECURSIVE'i\n"
	"SelectClause <- 'SELECT'i DistinctClause? TargetList\n"
	"TargetList <- List(AliasedExpression)\n"
	"ColumnAliases <- Parens(List(ColIdOrString))\n"
	"DistinctClause <- ('DISTINCT'i DistinctOn?) / 'ALL'i\n"
	"DistinctOn <- 'ON'i Parens(List(Expression))\n"
	"InnerTableRef <- ValuesRef / TableFunction / TableSubquery / BaseTableRef / ParensTableRef\n"
	"TableRef <- InnerTableRef JoinOrPivot* TableAlias?\n"
	"TableSubquery <- Lateral? SubqueryReference TableAlias?\n"
	"BaseTableRef <- TableAliasColon? BaseTableName TableAlias? AtClause?\n"
	"TableAliasColon <- ColIdOrString ':'\n"
	"ValuesRef <- ValuesClause TableAlias?\n"
	"ParensTableRef <- TableAliasColon? Parens(TableRef)\n"
	"JoinOrPivot <- JoinClause / TablePivotClause / TableUnpivotClause\n"
	"TablePivotClause <- 'PIVOT' Parens(TargetList 'FOR' PivotValueLists GroupByClause?) TableAlias?\n"
	"TableUnpivotClause <- 'UNPIVOT' IncludeExcludeNulls? Parens(UnpivotHeader 'FOR' PivotValueLists) TableAlias?\n"
	"PivotHeader <- BaseExpression\n"
	"PivotValueLists <- PivotValueList PivotValueList*\n"
	"PivotValueList <- PivotHeader 'IN' PivotTargetList\n"
	"PivotTargetList <- Identifier / Parens(TargetList)\n"
	"Lateral <- 'LATERAL'i\n"
	"BaseTableName <- CatalogReservedSchemaTable / SchemaReservedTable / TableName\n"
	"SchemaReservedTable <- SchemaQualification ReservedTableName\n"
	"CatalogReservedSchemaTable <- CatalogQualification ReservedSchemaQualification ReservedTableName\n"
	"TableFunction <- TableFunctionLateralOpt / TableFunctionAliasColon\n"
	"TableFunctionLateralOpt <- Lateral? QualifiedTableFunction TableFunctionArguments TableAlias?\n"
	"TableFunctionAliasColon <- TableAliasColon QualifiedTableFunction TableFunctionArguments\n"
	"QualifiedTableFunction <- CatalogQualification? SchemaQualification? TableFunctionName\n"
	"TableFunctionArguments <- Parens(List(FunctionArgument)?)\n"
	"FunctionArgument <- NamedParameter / Expression\n"
	"NamedParameter <- TypeName NamedParameterAssignment Expression\n"
	"NamedParameterAssignment <- ':=' / '=>'\n"
	"TableAlias <- 'AS'i? (Identifier / StringLiteral) ColumnAliases?\n"
	"AtClause <- 'AT'i Parens(AtSpecifier)\n"
	"AtSpecifier <- AtUnit '=>' Expression\n"
	"AtUnit <- 'VERSION'i / 'TIMESTAMP'i\n"
	"JoinClause <- RegularJoinClause / JoinWithoutOnClause\n"
	"RegularJoinClause <- 'ASOF'i? JoinType? 'JOIN'i TableRef JoinQualifier\n"
	"JoinWithoutOnClause <- JoinPrefix 'JOIN'i TableRef\n"
	"JoinQualifier <- OnClause / UsingClause\n"
	"OnClause <- 'ON'i Expression\n"
	"UsingClause <- 'USING'i Parens(List(ColumnName))\n"
	"OuterJoinType <- 'FULL'i / 'LEFT'i / 'RIGHT'i\n"
	"JoinType <- (OuterJoinType 'OUTER'i?) / 'SEMI'i / 'ANTI'i / 'INNER'i\n"
	"JoinPrefix <- 'CROSS'i / ('NATURAL'i JoinType?) / 'POSITIONAL'i\n"
	"FromClause <- 'FROM'i List(TableRef)\n"
	"WhereClause <- 'WHERE'i Expression\n"
	"GroupByClause <- 'GROUP'i 'BY'i GroupByExpressions\n"
	"HavingClause <- 'HAVING'i Expression\n"
	"QualifyClause <- 'QUALIFY'i Expression\n"
	"SampleClause <- (TableSample / UsingSample) SampleEntry\n"
	"UsingSample <- 'USING'i 'SAMPLE'i\n"
	"TableSample <- 'TABLESAMPLE'i\n"
	"WindowClause <- 'WINDOW'i List(WindowDefinition)\n"
	"WindowDefinition <- Identifier 'AS'i WindowFrameDefinition\n"
	"SampleEntry <- SampleEntryFunction / SampleEntryCount\n"
	"SampleEntryCount <- SampleCount Parens(SampleProperties)?\n"
	"SampleEntryFunction <- SampleFunction? Parens(SampleCount) RepeatableSample?\n"
	"SampleFunction <- ColId\n"
	"SampleProperties <- ColId (',' NumberLiteral)?\n"
	"RepeatableSample <- 'REPEATABLE'i Parens(NumberLiteral)\n"
	"SampleCount <- Expression SampleUnit?\n"
	"SampleUnit <- '%' / 'PERCENT'i / 'ROWS'i\n"
	"GroupByExpressions <- GroupByList / 'ALL'i\n"
	"GroupByList <- List(GroupByExpression)\n"
	"GroupByExpression <- EmptyGroupingItem / CubeOrRollupClause / GroupingSetsClause / Expression\n"
	"EmptyGroupingItem <- '(' ')'\n"
	"CubeOrRollupClause <- CubeOrRollup Parens(List(Expression))\n"
	"CubeOrRollup <- 'CUBE'i / 'ROLLUP'i\n"
	"GroupingSetsClause <- 'GROUPING'i 'SETS'i Parens(GroupByList)\n"
	"SubqueryReference <- Parens(SelectStatement)\n"
	"OrderByExpression <- Expression DescOrAsc? NullsFirstOrLast?\n"
	"DescOrAsc <- 'DESC'i / 'DESCENDING'i / 'ASC'i / 'ASCENDING'i\n"
	"NullsFirstOrLast <- 'NULLS'i 'FIRST'i / 'LAST'i\n"
	"OrderByClause <- 'ORDER'i 'BY'i OrderByExpressions\n"
	"OrderByExpressions <- List(OrderByExpression) / OrderByAll\n"
	"OrderByAll <- 'ALL'i DescOrAsc? NullsFirstOrLast?\n"
	"LimitClause <- 'LIMIT'i LimitValue\n"
	"OffsetClause <- 'OFFSET'i LimitValue\n"
	"LimitValue <- 'ALL'i / (NumberLiteral 'PERCENT'i) / (Expression '%'?)\n"
	"AliasedExpression <- (ColId ':' Expression) / (Expression 'AS'i ColLabelOrString) / (Expression Identifier?)\n"
	"ValuesClause <- 'VALUES'i List(ValuesExpressions)\n"
	"ValuesExpressions <- Parens(List(Expression))\n"
	"TransactionStatement <- BeginTransaction / RollbackTransaction / CommitTransaction\n"
	"BeginTransaction <- StartOrBegin Transaction? ReadOrWrite?\n"
	"RollbackTransaction <- AbortOrRollback Transaction?\n"
	"CommitTransaction <- CommitOrEnd Transaction?\n"
	"StartOrBegin <- 'START'i / 'BEGIN'i\n"
	"Transaction <- 'WORK'i / 'TRANSACTION'i\n"
	"ReadOrWrite <- 'READ'i ('ONLY'i / 'WRITE'i)\n"
	"AbortOrRollback <- 'ABORT'i / 'ROLLBACK'i\n"
	"CommitOrEnd <- 'COMMIT'i / 'END'i\n"
	"DeleteStatement <- WithClause? 'DELETE'i 'FROM'i TargetOptAlias DeleteUsingClause? WhereClause? ReturningClause?\n"
	"TruncateStatement <- 'TRUNCATE'i 'TABLE'i? BaseTableName\n"
	"TargetOptAlias <- BaseTableName 'AS'i? ColId?\n"
	"DeleteUsingClause <- 'USING'i List(TableRef)\n"
	"CreateTypeStmt <- 'TYPE'i IfNotExists? QualifiedName 'AS'i CreateType\n"
	"CreateType <- ('ENUM'i Parens(SelectStatement)) /\n"
	"              ('ENUM'i Parens(List(StringLiteral))) /\n"
	"              Type\n"
	"SetStatement <- 'SET'i (StandardAssignment / SetTimeZone)\n"
	"StandardAssignment <- (SetVariable / SetSetting) SetAssignment\n"
	"SetTimeZone <- 'TIME'i 'ZONE'i Expression\n"
	"SetSetting <- SettingScope? SettingName\n"
	"SetVariable <- 'VARIABLE'i Identifier\n"
	"SettingScope <- 'LOCAL'i / 'SESSION'i / 'GLOBAL'i\n"
	"SetAssignment <- VariableAssign VariableList\n"
	"VariableAssign <- '=' / 'TO'\n"
	"VariableList <- List(Expression)\n"
	"ResetStatement <- 'RESET'i (SetVariable / SetSetting)\n"
	"ExportStatement <- 'EXPORT'i 'DATABASE'i ExportSource? StringLiteral Parens(GenericCopyOptionList)?\n"
	"ExportSource <- CatalogName 'TO'i\n"
	"ImportStatement <- 'IMPORT'i 'DATABASE'i StringLiteral\n"
	"CheckpointStatement <- 'FORCE'i? 'CHECKPOINT'i CatalogName?\n"
	"CopyStatement <- 'COPY'i (CopyTable / CopySelect / CopyFromDatabase)\n"
	"CopyTable <- BaseTableName InsertColumnList? FromOrTo CopyFileName CopyOptions?\n"
	"FromOrTo <- 'FROM'i / 'TO'i\n"
	"CopySelect <- Parens(SelectStatement) 'TO'i CopyFileName CopyOptions?\n"
	"CopyFileName <- StringLiteral / Identifier / (Identifier '.' ColId)\n"
	"CopyOptions <- 'WITH'i? (Parens(GenericCopyOptionList) / (SpecializedOptions*))\n"
	"SpecializedOptions <-\n"
	"	'BINARY'i / 'FREEZE'i / 'OIDS'i / 'CSV'i / 'HEADER'i /\n"
	"	SpecializedStringOption /\n"
	"	('ENCODING'i StringLiteral) /\n"
	"	('FORCE'i 'QUOTE'i StarOrColumnList) /\n"
	"	('PARTITION'i 'BY'i StarOrColumnList) /\n"
	"	('FORCE'i 'NOT'i? 'NULL'i ColumnList)\n"
	"SpecializedStringOption <- ('DELIMITER'i / 'NULL'i / 'QUOTE'i / 'ESCAPE'i) 'AS'i? StringLiteral\n"
	"StarOrColumnList <- '*' / ColumnList\n"
	"GenericCopyOptionList <- List(GenericCopyOption)\n"
	"GenericCopyOption <- GenericCopyOptionName Expression?\n"
	"# FIXME: should not need to hard-code options here\n"
	"GenericCopyOptionName <- 'ARRAY'i / 'NULL'i / 'ANALYZE'i / CopyOptionName\n"
	"CopyFromDatabase <- 'FROM'i 'DATABASE'i ColId 'TO'i ColId CopyDatabaseFlag?\n"
	"CopyDatabaseFlag <- Parens(SchemaOrData)\n"
	"SchemaOrData <- 'SCHEMA'i / 'DATA'i\n"
	"AlterStatement <- 'ALTER'i AlterOptions\n"
	"AlterOptions <- AlterTableStmt / AlterViewStmt / AlterSequenceStmt\n"
	"AlterTableStmt <- 'TABLE'i IfExists? BaseTableName AlterTableOptions\n"
	"AlterTableOptions <- AddColumn / DropColumn / AlterColumn / AddConstraint / ChangeNullability / RenameColumn / RenameAlter / SetPartitionedBy / ResetPartitionedBy / SetSortedBy / ResetSortedBy\n"
	"AddConstraint <- 'ADD'i TopLevelConstraint\n"
	"AddColumn <- 'ADD'i 'COLUMN'i? IfNotExists? ColumnDefinition\n"
	"DropColumn <- 'DROP'i 'COLUMN'i? IfExists? NestedColumnName DropBehavior?\n"
	"AlterColumn <- 'ALTER'i 'COLUMN'i? NestedColumnName AlterColumnEntry\n"
	"RenameColumn <- 'RENAME'i 'COLUMN'i? NestedColumnName 'TO'i Identifier\n"
	"NestedColumnName <- (Identifier '.')* ColumnName\n"
	"RenameAlter <- 'RENAME'i 'TO'i Identifier\n"
	"SetPartitionedBy <- 'SET'i 'PARTITIONED'i 'BY'i Parens(List(Expression))\n"
	"ResetPartitionedBy <- 'RESET'i 'PARTITIONED'i 'BY'i\n"
	"SetSortedBy <- 'SET'i 'SORTED'i 'BY'i OrderByExpressions\n"
	"ResetSortedBy <- 'RESET'i 'SORTED'i 'BY'i\n"
	"AlterColumnEntry <- AddOrDropDefault / ChangeNullability / AlterType\n"
	"AddOrDropDefault <- AddDefault / DropDefault\n"
	"AddDefault <- 'SET'i 'DEFAULT'i Expression\n"
	"DropDefault <- 'DROP'i 'DEFAULT'i\n"
	"ChangeNullability <- ('DROP'i / 'SET'i) 'NOT'i 'NULL'i\n"
	"AlterType <- SetData? 'TYPE'i Type? UsingExpression?\n"
	"SetData <- 'SET'i 'DATA'i?\n"
	"UsingExpression <- 'USING'i Expression\n"
	"AlterViewStmt <- 'VIEW'i IfExists? BaseTableName RenameAlter\n"
	"AlterSequenceStmt <- 'SEQUENCE'i IfExists? QualifiedSequenceName AlterSequenceOptions\n"
	"QualifiedSequenceName <- CatalogQualification? SchemaQualification? SequenceName\n"
	"AlterSequenceOptions <- RenameAlter / SetSequenceOption\n"
	"SetSequenceOption <- List(SequenceOption)\n"
	"CreateSequenceStmt <- 'SEQUENCE'i IfNotExists? QualifiedName SequenceOption*\n"
	"SequenceOption <-\n"
	"	SeqSetCycle /\n"
	"	SeqSetIncrement /\n"
	"	SeqSetMinMax /\n"
	"	SeqNoMinMax /\n"
	"	SeqStartWith /\n"
	"	SeqOwnedBy\n"
	"SeqSetCycle <- 'NO'i? 'CYCLE'i\n"
	"SeqSetIncrement <- 'INCREMENT'i 'BY'i? Expression\n"
	"SeqSetMinMax <- SeqMinOrMax Expression\n"
	"SeqNoMinMax <- 'NO'i SeqMinOrMax\n"
	"SeqStartWith <- 'START'i 'WITH'i? Expression\n"
	"SeqOwnedBy <- 'OWNED'i 'BY'i QualifiedName\n"
	"SeqMinOrMax <- 'MINVALUE'i / 'MAXVALUE'i\n"
	"Statement <-\n"
	"	CreateStatement /\n"
	"	SelectStatement /\n"
	"	SetStatement /\n"
	"	PragmaStatement /\n"
	"	CallStatement /\n"
	"	InsertStatement /\n"
	"	DropStatement /\n"
	"	CopyStatement /\n"
	"	ExplainStatement /\n"
	"	UpdateStatement /\n"
	"	PrepareStatement /\n"
	"	ExecuteStatement /\n"
	"	AlterStatement /\n"
	"	TransactionStatement /\n"
	"	DeleteStatement /\n"
	"	AttachStatement /\n"
	"	UseStatement /\n"
	"	DetachStatement /\n"
	"	CheckpointStatement /\n"
	"	VacuumStatement /\n"
	"	ResetStatement /\n"
	"	ExportStatement /\n"
	"	ImportStatement /\n"
	"	CommentStatement /\n"
	"	DeallocateStatement /\n"
	"	TruncateStatement /\n"
	"	LoadStatement /\n"
	"	InstallStatement /\n"
	"	AnalyzeStatement /\n"
	"	MergeIntoStatement\n"
	"CatalogName <- Identifier\n"
	"SchemaName <- Identifier\n"
	"ReservedSchemaName <- Identifier\n"
	"TableName <- Identifier\n"
	"ReservedTableName <- Identifier\n"
	"ReservedIdentifier <- Identifier\n"
	"ColumnName <- Identifier\n"
	"ReservedColumnName <- Identifier\n"
	"IndexName <- Identifier\n"
	"SettingName <- Identifier\n"
	"PragmaName <- Identifier\n"
	"FunctionName <- Identifier\n"
	"ReservedFunctionName <- Identifier\n"
	"TableFunctionName <- Identifier\n"
	"ConstraintName <- ColIdOrString\n"
	"SequenceName <- Identifier\n"
	"CollationName <- Identifier\n"
	"CopyOptionName <- ColLabel\n"
	"SecretName <- ColId\n"
	"NumberLiteral <- < [+-]?[0-9]*([.][0-9]*)? >\n"
	"StringLiteral <- '\\'' [^\\']* '\\''\n"
	"Type <- (TimeType / IntervalType / BitType / RowType / MapType / UnionType / NumericType / SimpleType) ArrayBounds*\n"
	"SimpleType <- (QualifiedTypeName / CharacterType) TypeModifiers?\n"
	"CharacterType <- ('CHARACTER'i 'VARYING'i?) /\n"
	"                 ('CHAR'i 'VARYING'i?) /\n"
	"                 ('NATIONAL'i 'CHARACTER'i 'VARYING'i?) /\n"
	"                 ('NATIONAL'i 'CHAR'i 'VARYING'i?) /\n"
	"                 ('NCHAR'i 'VARYING'i?) /\n"
	"                 'VARCHAR'i\n"
	"IntervalType <- ('INTERVAL'i Interval?) / ('INTERVAL'i Parens(NumberLiteral))\n"
	"YearKeyword         <- 'YEAR'i / 'YEARS'i\n"
	"MonthKeyword        <- 'MONTH'i / 'MONTHS'i\n"
	"DayKeyword          <- 'DAY'i / 'DAYS'i\n"
	"HourKeyword         <- 'HOUR'i / 'HOURS'i\n"
	"MinuteKeyword       <- 'MINUTE'i / 'MINUTES'i\n"
	"SecondKeyword       <- 'SECOND'i / 'SECONDS'i\n"
	"MillisecondKeyword  <- 'MILLISECOND'i / 'MILLISECONDS'i\n"
	"MicrosecondKeyword  <- 'MICROSECOND'i / 'MICROSECONDS'i\n"
	"WeekKeyword         <- 'WEEK'i / 'WEEKS'i\n"
	"QuarterKeyword      <- 'QUARTER'i / 'QUARTERS'i\n"
	"DecadeKeyword       <- 'DECADE'i / 'DECADES'i\n"
	"CenturyKeyword      <- 'CENTURY'i / 'CENTURIES'i\n"
	"MillenniumKeyword   <- 'MILLENNIUM'i / 'MILLENNIA'i\n"
	"Interval <- YearKeyword /\n"
	"    MonthKeyword /\n"
	"    DayKeyword /\n"
	"    HourKeyword /\n"
	"    MinuteKeyword /\n"
	"    SecondKeyword /\n"
	"    MillisecondKeyword /\n"
	"    MicrosecondKeyword /\n"
	"    WeekKeyword /\n"
	"    QuarterKeyword /\n"
	"    DecadeKeyword /\n"
	"    CenturyKeyword /\n"
	"    MillenniumKeyword /\n"
	"    (YearKeyword 'TO'i MonthKeyword) /\n"
	"    (DayKeyword 'TO'i HourKeyword) /\n"
	"    (DayKeyword 'TO'i MinuteKeyword) /\n"
	"    (DayKeyword 'TO'i SecondKeyword) /\n"
	"    (HourKeyword 'TO'i MinuteKeyword) /\n"
	"    (HourKeyword 'TO'i SecondKeyword) /\n"
	"    (MinuteKeyword 'TO'i SecondKeyword)\n"
	"BitType <- 'BIT'i 'VARYING'i? Parens(List(Expression))?\n"
	"NumericType <- 'INT'i /\n"
	"               'INTEGER'i /\n"
	"               'SMALLINT'i /\n"
	"               'BIGINT'i /\n"
	"               'REAL'i /\n"
	"               'BOOLEAN'i /\n"
	"               ('FLOAT'i Parens(NumberLiteral)?) /\n"
	"               ('DOUBLE'i 'PRECISION'i) /\n"
	"               ('DECIMAL'i TypeModifiers?) /\n"
	"               ('DEC'i TypeModifiers?) /\n"
	"               ('NUMERIC'i TypeModifiers?)\n"
	"QualifiedTypeName <- CatalogQualification? SchemaQualification? TypeName\n"
	"TypeModifiers <- Parens(List(Expression)?)\n"
	"RowType <- RowOrStruct Parens(List(ColIdType))\n"
	"UnionType <- 'UNION'i Parens(List(ColIdType))\n"
	"MapType <- 'MAP'i Parens(List(Type))\n"
	"ColIdType <- ColId Type\n"
	"ArrayBounds <- ('[' NumberLiteral? ']') / 'ARRAY'i\n"
	"TimeType <- TimeOrTimestamp TypeModifiers? TimeZone?\n"
	"TimeOrTimestamp <- 'TIME'i / 'TIMESTAMP'i\n"
	"TimeZone <- WithOrWithout 'TIME'i 'ZONE'i\n"
	"WithOrWithout <- 'WITH'i / 'WITHOUT'i\n"
	"RowOrStruct <- 'ROW'i / 'STRUCT'i\n"
	"# internal definitions\n"
	"%whitespace <- [ \\t\\n\\r]*\n"
	"List(D) <- D (',' D)* ','?\n"
	"Parens(D) <- '(' D ')'\n"
	"ExplainStatement <- 'EXPLAIN'i 'ANALYZE'i? ExplainOptions? Statement\n"
	"ExplainOptions <- Parens(GenericCopyOptionList)\n"
	"AnalyzeStatement <- 'ANALYZE'i 'VERBOSE'i? AnalyzeTarget?\n"
	"AnalyzeTarget <- QualifiedName Parens(List(Name))?\n"
	"Name <- ColId ('.' ColLabel)*\n"
	"CreateMacroStmt <- MacroOrFunction IfNotExists? QualifiedName List(MacroDefinition)\n"
	"MacroOrFunction <- 'MACRO'i / 'FUNCTION'i\n"
	"MacroDefinition <- Parens(MacroParameters?) 'AS'i (TableMacroDefinition / ScalarMacroDefinition)\n"
	"MacroParameters <- List(MacroParameter)\n"
	"MacroParameter <- NamedParameter / TypeFuncName\n"
	"ScalarMacroDefinition <- Expression\n"
	"TableMacroDefinition <- 'TABLE'i SelectStatement\n"
	"CommentStatement <- 'COMMENT'i 'ON'i CommentOnType ColumnReference 'IS'i CommentValue\n"
	"CommentOnType <- 'TABLE'i / 'SEQUENCE'i / 'FUNCTION'i / ('MACRO'i 'TABLE'i?) / 'VIEW'i / 'DATABASE'i / 'INDEX'i / 'SCHEMA'i / 'TYPE'i / 'COLUMN'i\n"
	"CommentValue <- 'NULL'i / StringLiteral\n"
	"AttachStatement <- 'ATTACH'i OrReplace? IfNotExists? Database? DatabasePath AttachAlias? AttachOptions?\n"
	"Database <- 'DATABASE'i\n"
	"DatabasePath <- StringLiteral\n"
	"AttachAlias <- 'AS'i ColId\n"
	"AttachOptions <- Parens(GenericCopyOptionList)\n"
	"DetachStatement <- 'DETACH'i Database? IfExists? CatalogName\n"
	"UseStatement <- 'USE'i UseTarget\n"
	"UseTarget <- (CatalogName '.' ReservedSchemaName) / SchemaName / CatalogName\n"
	"CallStatement <- 'CALL'i TableFunctionName TableFunctionArguments\n"

};

} // namespace duckdb
