diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g b/ql/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g index cd9adfc..3392d91 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g @@ -76,15 +76,14 @@ rollupOldSyntax @init { gParent.pushMsg("rollup old syntax", state); } @after { gParent.popMsg(state); } : - expression - ( COMMA expression)* + expressionsNotInParenthese ((rollup=KW_WITH KW_ROLLUP) | (cube=KW_WITH KW_CUBE)) ? (sets=KW_GROUPING KW_SETS LPAREN groupingSetExpression ( COMMA groupingSetExpression)* RPAREN ) ? - -> {rollup != null}? ^(TOK_ROLLUP_GROUPBY expression+) - -> {cube != null}? ^(TOK_CUBE_GROUPBY expression+) - -> {sets != null}? ^(TOK_GROUPING_SETS expression+ groupingSetExpression+) - -> ^(TOK_GROUPBY expression+) + -> {rollup != null}? ^(TOK_ROLLUP_GROUPBY expressionsNotInParenthese) + -> {cube != null}? ^(TOK_CUBE_GROUPBY expressionsNotInParenthese) + -> {sets != null}? ^(TOK_GROUPING_SETS expressionsNotInParenthese groupingSetExpression+) + -> ^(TOK_GROUPBY expressionsNotInParenthese) ; @@ -92,7 +91,7 @@ groupingSetExpression @init {gParent.pushMsg("grouping set expression", state); } @after {gParent.popMsg(state); } : - (LPAREN) => groupingSetExpressionMultiple + (groupingSetExpressionMultiple) => groupingSetExpressionMultiple | groupingExpressionSingle ; @@ -130,7 +129,7 @@ havingCondition expressionsInParenthese : - LPAREN expression (COMMA expression)* RPAREN -> expression+ + LPAREN! expressionsNotInParenthese RPAREN! ; expressionsNotInParenthese @@ -138,6 +137,13 @@ expressionsNotInParenthese expression (COMMA expression)* -> expression+ ; +expressions + : + (expressionsInParenthese) => expressionsInParenthese + | + expressionsNotInParenthese + ; + columnRefOrderInParenthese : LPAREN columnRefOrder (COMMA columnRefOrder)* RPAREN -> columnRefOrder+ @@ -160,36 +166,21 @@ clusterByClause @init { gParent.pushMsg("cluster by clause", state); } @after { gParent.popMsg(state); } : - KW_CLUSTER KW_BY - ( - (LPAREN) => expressionsInParenthese -> ^(TOK_CLUSTERBY expressionsInParenthese) - | - expressionsNotInParenthese -> ^(TOK_CLUSTERBY expressionsNotInParenthese) - ) + KW_CLUSTER KW_BY expressions -> ^(TOK_CLUSTERBY expressions) ; partitionByClause @init { gParent.pushMsg("partition by clause", state); } @after { gParent.popMsg(state); } : - KW_PARTITION KW_BY - ( - (LPAREN) => expressionsInParenthese -> ^(TOK_DISTRIBUTEBY expressionsInParenthese) - | - expressionsNotInParenthese -> ^(TOK_DISTRIBUTEBY expressionsNotInParenthese) - ) + KW_PARTITION KW_BY expressions -> ^(TOK_DISTRIBUTEBY expressions) ; distributeByClause @init { gParent.pushMsg("distribute by clause", state); } @after { gParent.popMsg(state); } : - KW_DISTRIBUTE KW_BY - ( - (LPAREN) => expressionsInParenthese -> ^(TOK_DISTRIBUTEBY expressionsInParenthese) - | - expressionsNotInParenthese -> ^(TOK_DISTRIBUTEBY expressionsNotInParenthese) - ) + KW_DISTRIBUTE KW_BY expressions -> ^(TOK_DISTRIBUTEBY expressions) ; sortByClause @@ -517,39 +508,34 @@ subQueryExpression ; precedenceEqualExpression - : - (LPAREN precedenceBitwiseOrExpression COMMA) => precedenceEqualExpressionMutiple + : + (precedenceEqualExpressionSingle) => precedenceEqualExpressionSingle | - precedenceEqualExpressionSingle + precedenceEqualExpressionMutiple ; precedenceEqualExpressionSingle : (left=precedenceBitwiseOrExpression -> $left) ( - (KW_NOT precedenceEqualNegatableOperator notExpr=precedenceBitwiseOrExpression) - -> ^(KW_NOT ^(precedenceEqualNegatableOperator $precedenceEqualExpressionSingle $notExpr)) + (KW_NOT precedenceEqualNegatableOperator notExpr=precedenceBitwiseOrExpression) + -> ^(KW_NOT ^(precedenceEqualNegatableOperator $left $notExpr)) | (precedenceEqualOperator equalExpr=precedenceBitwiseOrExpression) - -> ^(precedenceEqualOperator $precedenceEqualExpressionSingle $equalExpr) + -> ^(precedenceEqualOperator $left $equalExpr) | (KW_NOT KW_IN LPAREN KW_SELECT)=> (KW_NOT KW_IN subQueryExpression) - -> ^(KW_NOT ^(TOK_SUBQUERY_EXPR ^(TOK_SUBQUERY_OP KW_IN) subQueryExpression $precedenceEqualExpressionSingle)) - | (KW_NOT KW_IN expressions) - -> ^(KW_NOT ^(TOK_FUNCTION KW_IN $precedenceEqualExpressionSingle expressions)) + -> ^(KW_NOT ^(TOK_SUBQUERY_EXPR ^(TOK_SUBQUERY_OP KW_IN) subQueryExpression $left)) + | (KW_NOT KW_IN expressionsInParenthese) + -> ^(KW_NOT ^(TOK_FUNCTION KW_IN $left expressionsInParenthese)) | (KW_IN LPAREN KW_SELECT)=> (KW_IN subQueryExpression) - -> ^(TOK_SUBQUERY_EXPR ^(TOK_SUBQUERY_OP KW_IN) subQueryExpression $precedenceEqualExpressionSingle) - | (KW_IN expressions) - -> ^(TOK_FUNCTION KW_IN $precedenceEqualExpressionSingle expressions) + -> ^(TOK_SUBQUERY_EXPR ^(TOK_SUBQUERY_OP KW_IN) subQueryExpression $left) + | (KW_IN expressionsInParenthese) + -> ^(TOK_FUNCTION KW_IN $left expressionsInParenthese) | ( KW_NOT KW_BETWEEN (min=precedenceBitwiseOrExpression) KW_AND (max=precedenceBitwiseOrExpression) ) -> ^(TOK_FUNCTION Identifier["between"] KW_TRUE $left $min $max) | ( KW_BETWEEN (min=precedenceBitwiseOrExpression) KW_AND (max=precedenceBitwiseOrExpression) ) -> ^(TOK_FUNCTION Identifier["between"] KW_FALSE $left $min $max) - )* - | (KW_EXISTS LPAREN KW_SELECT)=> (KW_EXISTS subQueryExpression) -> ^(TOK_SUBQUERY_EXPR ^(TOK_SUBQUERY_OP KW_EXISTS) subQueryExpression) - ; - -expressions - : - LPAREN expression (COMMA expression)* RPAREN -> expression+ + )? + | KW_EXISTS subQueryExpression -> ^(TOK_SUBQUERY_EXPR ^(TOK_SUBQUERY_OP KW_EXISTS) subQueryExpression) ; //we transform the (col0, col1) in ((v00,v01),(v10,v11)) into struct(col0, col1) in (struct(v00,v01),struct(v10,v11))