@@ -649,7 +649,9 @@ orderByClause
649649 ;
650650
651651orderItemDefinition
652- : columnName ordering=(KW_ASC | KW_DESC )? (KW_NULLS nullOrder=(KW_LAST | KW_FIRST ))?
652+ : (columnName | valueExpression) ordering=(KW_ASC | KW_DESC )? (
653+ KW_NULLS nullOrder=(KW_LAST | KW_FIRST )
654+ )?
653655 ;
654656
655657limitClause
@@ -699,13 +701,26 @@ patternVariablesDefinition
699701
700702windowFrame
701703 : KW_RANGE KW_BETWEEN timeIntervalExpression frameBound
704+ | (KW_ROWS | KW_RANGE ) KW_BETWEEN frameStart KW_AND frameEnd
702705 | KW_ROWS KW_BETWEEN DIG_LITERAL frameBound
703706 ;
704707
705708frameBound
706709 : KW_PRECEDING KW_AND KW_CURRENT KW_ROW
707710 ;
708711
712+ frameStart
713+ : KW_UNBOUNDED KW_PRECEDING
714+ | DIG_LITERAL KW_PRECEDING
715+ | KW_CURRENT KW_ROW
716+ ;
717+
718+ frameEnd
719+ : KW_CURRENT KW_ROW
720+ | DIG_LITERAL KW_FOLLOWING
721+ | KW_UNBOUNDED KW_FOLLOWING
722+ ;
723+
709724withinClause
710725 : KW_WITHIN timeIntervalExpression
711726 ;
@@ -788,11 +803,11 @@ primaryExpression
788803 | functionCallExpression # functionCall
789804 // | identifier '->' expression #lambda
790805 // | '(' identifier (',' identifier)+ ')' '->' expression #lambda
791- | value=primaryExpression LS_BRACKET index=valueExpression RS_BRACKET # subscript
792- | columnNamePath # columnReference
793- | dereferenceDefinition # dereference
794- | LR_BRACKET expression RR_BRACKET # parenthesizedExpression
795- // | EXTRACT LR_BRACKET field=identifier KW_FROM source=valueExpression RR_BRACKET # extract
806+ | value=primaryExpression LS_BRACKET index=valueExpression RS_BRACKET # subscript
807+ | columnNamePath # columnReference
808+ | dereferenceDefinition # dereference
809+ | LR_BRACKET expression RR_BRACKET # parenthesizedExpression
810+ | KW_EXTRACT LR_BRACKET field=identifier KW_FROM source=valueExpression RR_BRACKET # extract
796811 // | (SUBSTR | SUBSTRING) LR_BRACKET str=valueExpression (KW_FROM | COMMA) pos=valueExpression
797812 // ((KW_FOR | COMMA) len=valueExpression)? RR_BRACKET #substring
798813 // | TRIM LR_BRACKET trimOption=(BOTH | LEADING | TRAILING)? (trimStr=valueExpression)?
0 commit comments