151 lines
6.5 KiB
Plaintext
151 lines
6.5 KiB
Plaintext
ColumnReference <- CatalogReservedSchemaTableColumnName / SchemaReservedTableColumnName / TableReservedColumnName / ColumnName
|
|
CatalogReservedSchemaTableColumnName <- CatalogQualification ReservedSchemaQualification ReservedTableQualification ReservedColumnName
|
|
SchemaReservedTableColumnName <- SchemaQualification ReservedTableQualification ReservedColumnName
|
|
TableReservedColumnName <- TableQualification ReservedColumnName
|
|
FunctionExpression <- FunctionIdentifier Parens(DistinctOrAll? List(FunctionArgument)? OrderByClause? IgnoreNulls?) WithinGroupClause? FilterClause? ExportClause? OverClause?
|
|
|
|
FunctionIdentifier <- CatalogReservedSchemaFunctionName / SchemaReservedFunctionName / FunctionName
|
|
CatalogReservedSchemaFunctionName <- CatalogQualification ReservedSchemaQualification? ReservedFunctionName
|
|
SchemaReservedFunctionName <- SchemaQualification ReservedFunctionName
|
|
|
|
DistinctOrAll <- 'DISTINCT' / 'ALL'
|
|
ExportClause <- 'EXPORT_STATE'
|
|
WithinGroupClause <- 'WITHIN' 'GROUP' Parens(OrderByClause)
|
|
FilterClause <- 'FILTER' Parens('WHERE'? Expression)
|
|
IgnoreNulls <- ('IGNORE' 'NULLS') / ('RESPECT' 'NULLS')
|
|
|
|
ParenthesisExpression <- Parens(List(Expression))
|
|
LiteralExpression <- StringLiteral / NumberLiteral / ConstantLiteral
|
|
ConstantLiteral <- NullLiteral / TrueLiteral / FalseLiteral
|
|
NullLiteral <- 'NULL'
|
|
TrueLiteral <- 'TRUE'
|
|
FalseLiteral <- 'FALSE'
|
|
CastExpression <- CastOrTryCast Parens(Expression 'AS' Type)
|
|
CastOrTryCast <- 'CAST' / 'TRY_CAST'
|
|
|
|
StarExpression <- (ColId '.')* '*' ExcludeList? ReplaceList? RenameList?
|
|
ExcludeList <- 'EXCLUDE' (Parens(List(ExcludeName)) / ExcludeName)
|
|
ExcludeName <- DottedIdentifier / ColIdOrString
|
|
ReplaceList <- 'REPLACE' (Parens(List(ReplaceEntry)) / ReplaceEntry)
|
|
ReplaceEntry <- Expression 'AS' ColumnReference
|
|
RenameList <- 'RENAME' (Parens(List(RenameEntry)) / RenameEntry)
|
|
RenameEntry <- ColumnReference 'AS' Identifier
|
|
SubqueryExpression <- 'NOT'? 'EXISTS'? SubqueryReference
|
|
CaseExpression <- 'CASE' Expression? CaseWhenThen CaseWhenThen* CaseElse? 'END'
|
|
CaseWhenThen <- 'WHEN' Expression 'THEN' Expression
|
|
CaseElse <- 'ELSE' Expression
|
|
TypeLiteral <- ColId StringLiteral
|
|
IntervalLiteral <- 'INTERVAL' IntervalParameter IntervalUnit?
|
|
IntervalParameter <- StringLiteral / NumberLiteral / Parens(Expression)
|
|
IntervalUnit <- ColId
|
|
FrameClause <- Framing FrameExtent WindowExcludeClause?
|
|
Framing <- 'ROWS' / 'RANGE' / 'GROUPS'
|
|
FrameExtent <- ('BETWEEN' FrameBound 'AND' FrameBound) / FrameBound
|
|
FrameBound <- ('UNBOUNDED' 'PRECEDING') / ('UNBOUNDED' 'FOLLOWING') / ('CURRENT' 'ROW') / (Expression 'PRECEDING') / (Expression 'FOLLOWING')
|
|
WindowExcludeClause <- 'EXCLUDE' WindowExcludeElement
|
|
WindowExcludeElement <- ('CURRENT' 'ROW') / 'GROUP' / 'TIES' / ('NO' 'OTHERS')
|
|
OverClause <- 'OVER' WindowFrame
|
|
WindowFrame <- WindowFrameDefinition / Identifier / Parens(Identifier)
|
|
WindowFrameDefinition <- Parens(BaseWindowName? WindowFrameContents) / Parens(WindowFrameContents)
|
|
WindowFrameContents <- WindowPartition? OrderByClause? FrameClause?
|
|
BaseWindowName <- Identifier
|
|
WindowPartition <- 'PARTITION' 'BY' List(Expression)
|
|
PrefixExpression <- PrefixOperator Expression
|
|
PrefixOperator <- 'NOT' / '-' / '+' / '~'
|
|
ListExpression <- 'ARRAY'? (BoundedListExpression / SelectStatement)
|
|
BoundedListExpression <- '[' List(Expression)? ']'
|
|
StructExpression <- '{' List(StructField)? '}'
|
|
StructField <- Expression ':' Expression
|
|
MapExpression <- 'MAP' StructExpression
|
|
GroupingExpression <- GroupingOrGroupingId Parens(List(Expression))
|
|
GroupingOrGroupingId <- 'GROUPING' / 'GROUPING_ID'
|
|
Parameter <- '?' / NumberedParameter / ColLabelParameter
|
|
NumberedParameter <- '$' NumberLiteral
|
|
ColLabelParameter <- '$' ColLabel
|
|
PositionalExpression <- '#' NumberLiteral
|
|
DefaultExpression <- 'DEFAULT'
|
|
|
|
ListComprehensionExpression <- '[' Expression 'FOR' List(Expression) ListComprehensionFilter? ']'
|
|
ListComprehensionFilter <- 'IF' Expression
|
|
|
|
SingleExpression <-
|
|
LiteralExpression /
|
|
Parameter /
|
|
SubqueryExpression /
|
|
SpecialFunctionExpression /
|
|
ParenthesisExpression /
|
|
IntervalLiteral /
|
|
TypeLiteral /
|
|
CaseExpression /
|
|
StarExpression /
|
|
CastExpression /
|
|
GroupingExpression /
|
|
MapExpression /
|
|
FunctionExpression /
|
|
ColumnReference /
|
|
PrefixExpression /
|
|
ListComprehensionExpression /
|
|
ListExpression /
|
|
StructExpression /
|
|
PositionalExpression /
|
|
DefaultExpression
|
|
|
|
|
|
|
|
OperatorLiteral <- <[\+\-\*\/\%\^\<\>\=\~\!\@\&\|\`]+>
|
|
LikeOperator <- 'NOT'? LikeOrSimilarTo
|
|
LikeOrSimilarTo <- 'LIKE' / 'ILIKE' / 'GLOB' / ('SIMILAR' 'TO')
|
|
InOperator <- 'NOT'? 'IN'
|
|
IsOperator <- 'IS' 'NOT'? DistinctFrom?
|
|
DistinctFrom <- 'DISTINCT' 'FROM'
|
|
ConjunctionOperator <- 'OR' / 'AND'
|
|
ComparisonOperator <- '=' / '<=' / '>=' / '<' / '>' / '<>' / '!=' / '=='
|
|
BetweenOperator <- 'NOT'? 'BETWEEN'
|
|
CollateOperator <- 'COLLATE'
|
|
LambdaOperator <- '->'
|
|
EscapeOperator <- 'ESCAPE'
|
|
AtTimeZoneOperator <- 'AT' 'TIME' 'ZONE'
|
|
PostfixOperator <- '!'
|
|
AnyAllOperator <- ComparisonOperator AnyOrAll
|
|
AnyOrAll <- 'ANY' / 'ALL'
|
|
|
|
Operator <-
|
|
AnyAllOperator /
|
|
ConjunctionOperator /
|
|
LikeOperator /
|
|
InOperator /
|
|
IsOperator /
|
|
BetweenOperator /
|
|
CollateOperator /
|
|
LambdaOperator /
|
|
EscapeOperator /
|
|
AtTimeZoneOperator /
|
|
OperatorLiteral
|
|
|
|
CastOperator <- '::' Type
|
|
DotOperator <- '.' (FunctionExpression / ColLabel)
|
|
NotNull <- 'NOT' 'NULL'
|
|
Indirection <- CastOperator / DotOperator / SliceExpression / NotNull / PostfixOperator
|
|
|
|
BaseExpression <- SingleExpression Indirection*
|
|
Expression <- BaseExpression RecursiveExpression*
|
|
RecursiveExpression <- (Operator Expression)
|
|
SliceExpression <- '[' SliceBound ']'
|
|
SliceBound <- Expression? (':' (Expression / '-')?)? (':' Expression?)?
|
|
|
|
SpecialFunctionExpression <- CoalesceExpression / UnpackExpression / ColumnsExpression / ExtractExpression / LambdaExpression / NullIfExpression / PositionExpression / RowExpression / SubstringExpression / TrimExpression
|
|
CoalesceExpression <- 'COALESCE' Parens(List(Expression))
|
|
UnpackExpression <- 'UNPACK' Parens(Expression)
|
|
ColumnsExpression <- '*'? 'COLUMNS' Parens(Expression)
|
|
ExtractExpression <- 'EXTRACT' Parens(Expression 'FROM' Expression)
|
|
LambdaExpression <- 'LAMBDA' List(ColIdOrString) ':' Expression
|
|
NullIfExpression <- 'NULLIF' Parens(Expression ',' Expression)
|
|
PositionExpression <- 'POSITION' Parens(Expression)
|
|
RowExpression <- 'ROW' Parens(List(Expression))
|
|
SubstringExpression <- 'SUBSTRING' Parens(SubstringParameters / List(Expression))
|
|
SubstringParameters <- Expression 'FROM' NumberLiteral 'FOR' NumberLiteral
|
|
TrimExpression <- 'TRIM' Parens(TrimDirection? TrimSource? List(Expression))
|
|
|
|
TrimDirection <- 'BOTH' / 'LEADING' / 'TRAILING'
|
|
TrimSource <- Expression? 'FROM'
|