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 43fd69e..892e2e8 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 @@ -349,13 +349,19 @@ timestampLiteral KW_CURRENT_TIMESTAMP -> ^(TOK_FUNCTION KW_CURRENT_TIMESTAMP) ; -intervalExpression +intervalValue : - KW_INTERVAL? k1=(StringLiteral|Number) q1=intervalQualifiers -> - ^(TOK_FUNCTION Identifier["internal_interval"] NumberLiteral[Integer.toString(((CommonTree)q1.getTree()).token.getType())] $k1) + StringLiteral + | + Number | - KW_INTERVAL? LPAREN k2=expression RPAREN q2=intervalQualifiers -> - ^(TOK_FUNCTION Identifier["internal_interval"] NumberLiteral[Integer.toString(((CommonTree)q2.getTree()).token.getType())] $k2) + LPAREN! expression RPAREN! + ; + +intervalExpression + : + KW_INTERVAL value=intervalValue qualifier=intervalQualifiers -> + ^(TOK_FUNCTION Identifier["internal_interval"] NumberLiteral[Integer.toString(((CommonTree)value.getTree()).token.getType())] $qualifier) ; intervalQualifiers @@ -379,18 +385,18 @@ expression atomExpression : - (intervalExpression)=>intervalExpression - | (constant) => constant + (constant) => constant | castExpression | extractExpression | floorExpression | caseExpression | whenExpression + | intervalExpression | (subQueryExpression)=> (subQueryExpression) -> ^(TOK_SUBQUERY_EXPR TOK_SUBQUERY_OP subQueryExpression) | (function) => function | tableOrColumn - | LPAREN! expression RPAREN! + | expressionsInParenthese ; precedenceFieldExpression @@ -508,49 +514,49 @@ subQueryExpression precedenceEqualExpression : - (precedenceEqualExpressionSingle) => precedenceEqualExpressionSingle + precedenceEqualExpressionMain + | + KW_EXISTS subQueryExpression -> ^(TOK_SUBQUERY_EXPR ^(TOK_SUBQUERY_OP KW_EXISTS) subQueryExpression) + ; + +precedenceEqualExpressionMain + : + a=precedenceBitwiseOrExpression part=precedenceEqualExpressionPart[$precedenceBitwiseOrExpression.tree]? + -> {part == null}? {$a.tree} + -> {$part.tree} + ; + +precedenceEqualExpressionPart[CommonTree t] + : + (precedenceEqualOperator equalExpr=precedenceBitwiseOrExpression) + -> ^(precedenceEqualOperator {$t} $equalExpr) | - precedenceEqualExpressionMutiple + precedenceEqualExpressionAtom[$t] + | + (KW_NOT^ precedenceEqualExpressionPartNot[$t]) ; - -precedenceEqualExpressionSingle + +precedenceEqualExpressionAtom[CommonTree t] : - (left=precedenceBitwiseOrExpression -> $left) - ( - (KW_NOT precedenceEqualNegatableOperator notExpr=precedenceBitwiseOrExpression) - -> ^(KW_NOT ^(precedenceEqualNegatableOperator $precedenceEqualExpressionSingle $notExpr)) - | (precedenceEqualOperator equalExpr=precedenceBitwiseOrExpression) - -> ^(precedenceEqualOperator $precedenceEqualExpressionSingle $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 expressionsInParenthese) - -> ^(KW_NOT ^(TOK_FUNCTION KW_IN $precedenceEqualExpressionSingle expressionsInParenthese)) - | (KW_IN LPAREN KW_SELECT)=> (KW_IN subQueryExpression) - -> ^(TOK_SUBQUERY_EXPR ^(TOK_SUBQUERY_OP KW_IN) subQueryExpression $precedenceEqualExpressionSingle) - | (KW_IN expressionsInParenthese) - -> ^(TOK_FUNCTION KW_IN $precedenceEqualExpressionSingle expressionsInParenthese) - | ( KW_NOT KW_BETWEEN (min=precedenceBitwiseOrExpression) KW_AND (max=precedenceBitwiseOrExpression) ) - -> ^(TOK_FUNCTION Identifier["between"] KW_TRUE $precedenceEqualExpressionSingle $min $max) - | ( KW_BETWEEN (min=precedenceBitwiseOrExpression) KW_AND (max=precedenceBitwiseOrExpression) ) - -> ^(TOK_FUNCTION Identifier["between"] KW_FALSE $precedenceEqualExpressionSingle $min $max) - )* - | 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)) -precedenceEqualExpressionMutiple - : - (LPAREN precedenceBitwiseOrExpression (COMMA precedenceBitwiseOrExpression)+ RPAREN -> ^(TOK_FUNCTION Identifier["struct"] precedenceBitwiseOrExpression+)) - ( (KW_IN LPAREN expressionsToStruct (COMMA expressionsToStruct)* RPAREN) - -> ^(TOK_FUNCTION KW_IN $precedenceEqualExpressionMutiple expressionsToStruct*) - | (KW_NOT KW_IN LPAREN expressionsToStruct (COMMA expressionsToStruct)* RPAREN) - -> ^(KW_NOT ^(TOK_FUNCTION KW_IN $precedenceEqualExpressionMutiple expressionsToStruct*))) - ; - -expressionsToStruct - : - LPAREN expression (COMMA expression)* RPAREN -> ^(TOK_FUNCTION Identifier["struct"] expression+) + KW_IN! precedenceEqualExpressionIn[$t] + | + KW_BETWEEN (min=precedenceBitwiseOrExpression) KW_AND (max=precedenceBitwiseOrExpression) + -> ^(TOK_FUNCTION Identifier["between"] KW_FALSE {$t} $min $max) + ; + +precedenceEqualExpressionIn[CommonTree t] + : + (subQueryExpression) => subQueryExpression -> ^(TOK_SUBQUERY_EXPR ^(TOK_SUBQUERY_OP KW_IN) subQueryExpression {$t}) + | + expressionsInParenthese -> ^(TOK_FUNCTION KW_IN {$t} expressionsInParenthese) + ; + +precedenceEqualExpressionPartNot[CommonTree t] + : + precedenceEqualNegatableOperator notExpr=precedenceBitwiseOrExpression + -> ^(precedenceEqualNegatableOperator {$t} $notExpr) + | + precedenceEqualExpressionAtom[$t] ; precedenceNotOperator diff --git a/ql/src/test/queries/clientpositive/p.q b/ql/src/test/queries/clientpositive/p.q new file mode 100644 index 0000000..60a2b5b --- /dev/null +++ b/ql/src/test/queries/clientpositive/p.q @@ -0,0 +1,80 @@ +drop table airports; +create table airports (airport string); + +SELECT * FROM airports +WHERE (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((`airports`.`airport` = "Thigpen" + OR `airports`.`airport` = "Astoria Regional") + OR `airports`.`airport` = "Warsaw Municipal") + OR `airports`.`airport` = "John F Kennedy Memorial") + OR `airports`.`airport` = "Hall-Miller Municipal") + OR `airports`.`airport` = "Atqasuk") + OR `airports`.`airport` = "William B Hartsfield-Atlanta Intl") + OR `airports`.`airport` = "Artesia Municipal") + OR `airports`.`airport` = "Outagamie County Regional") + OR `airports`.`airport` = "Watertown Municipal") + OR `airports`.`airport` = "Augusta State") + OR `airports`.`airport` = "Aurora Municipal") + OR `airports`.`airport` = "Alakanuk") + OR `airports`.`airport` = "Austin Municipal") + OR `airports`.`airport` = "Auburn Municipal") + OR `airports`.`airport` = "Auburn-Opelik") + OR `airports`.`airport` = "Austin-Bergstrom International") + OR `airports`.`airport` = "Wausau Municipal") + OR `airports`.`airport` = "Mecklenburg-Brunswick Regional") + OR `airports`.`airport` = "Alva Regional") + OR `airports`.`airport` = "Asheville Regional") + OR `airports`.`airport` = "Avon Park Municipal") + OR `airports`.`airport` = "Wilkes-Barre/Scranton Intl") + OR `airports`.`airport` = "Marana Northwest Regional") + OR `airports`.`airport` = "Catalina") + OR `airports`.`airport` = "Washington Municipal") + OR `airports`.`airport` = "Wainwright") + OR `airports`.`airport` = "West Memphis Municipal") + OR `airports`.`airport` = "Arlington Municipal") + OR `airports`.`airport` = "Algona Municipal") + OR `airports`.`airport` = "Chandler") + OR `airports`.`airport` = "Altus Municipal") + OR `airports`.`airport` = "Neil Armstrong") + OR `airports`.`airport` = "Angel Fire") + OR `airports`.`airport` = "Waycross-Ware County") + OR `airports`.`airport` = "Colorado City Municipal") + OR `airports`.`airport` = "Hazelhurst") + OR `airports`.`airport` = "Kalamazoo County") + OR `airports`.`airport` = "Granville") + OR `airports`.`airport` = "Silver Springs") + OR `airports`.`airport` = "Whitford") + OR `airports`.`airport` = "Biddeford Municipal") + OR `airports`.`airport` = "Sugarloaf Regional") + OR `airports`.`airport` = "Barnes Municipal") + OR `airports`.`airport` = "Columbus Municipal") + OR `airports`.`airport` = "Battle Mountain") + OR `airports`.`airport` = "Huron County Memorial") + OR `airports`.`airport` = "New Braunfels Municipal") + OR `airports`.`airport` = "Benson Municipal") + OR `airports`.`airport` = "Curtis") + OR `airports`.`airport` = "Marlboro County") + OR `airports`.`airport` = "Broken Bow Municipal") + OR `airports`.`airport` = "Virginia Tech") + OR `airports`.`airport` = "Bryce Canyon") + OR `airports`.`airport` = "Black River Falls Area") + OR `airports`.`airport` = "Boca Raton") + OR `airports`.`airport` = "Birchwood") + OR `airports`.`airport` = "Baudette International") + OR `airports`.`airport` = "Blanding Muni") + OR `airports`.`airport` = "Bradley International") + OR `airports`.`airport` = "Morrilton Municipal") + OR `airports`.`airport` = "Igor I Sikorsky Memorial") + OR `airports`.`airport` = "Broadus") + OR `airports`.`airport` = "Laurence G Hanscom") + OR `airports`.`airport` = "Southwest Michigan Regional") + OR `airports`.`airport` = "Bethel") + OR `airports`.`airport` = "Bradford Reg") + OR `airports`.`airport` = "Scotts Bluff County") + OR `airports`.`airport` = "Boeing Field/King County Intl") + OR `airports`.`airport` = "Buffalo Municipal") + OR `airports`.`airport` = "Meadows") + OR `airports`.`airport` = "Mobile Downtown") + OR `airports`.`airport` = "Virgil I Grissom Municipal") + OR `airports`.`airport` = "Silver Bay Municipal"); + + diff --git a/ql/src/test/results/clientpositive/p.q.out b/ql/src/test/results/clientpositive/p.q.out new file mode 100644 index 0000000..e7eae5a --- /dev/null +++ b/ql/src/test/results/clientpositive/p.q.out @@ -0,0 +1,168 @@ +PREHOOK: query: drop table airports +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table airports +POSTHOOK: type: DROPTABLE +PREHOOK: query: create table airports (airport string) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@airports +POSTHOOK: query: create table airports (airport string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@airports +PREHOOK: query: SELECT * FROM airports +WHERE (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((`airports`.`airport` = "Thigpen" + OR `airports`.`airport` = "Astoria Regional") + OR `airports`.`airport` = "Warsaw Municipal") + OR `airports`.`airport` = "John F Kennedy Memorial") + OR `airports`.`airport` = "Hall-Miller Municipal") + OR `airports`.`airport` = "Atqasuk") + OR `airports`.`airport` = "William B Hartsfield-Atlanta Intl") + OR `airports`.`airport` = "Artesia Municipal") + OR `airports`.`airport` = "Outagamie County Regional") + OR `airports`.`airport` = "Watertown Municipal") + OR `airports`.`airport` = "Augusta State") + OR `airports`.`airport` = "Aurora Municipal") + OR `airports`.`airport` = "Alakanuk") + OR `airports`.`airport` = "Austin Municipal") + OR `airports`.`airport` = "Auburn Municipal") + OR `airports`.`airport` = "Auburn-Opelik") + OR `airports`.`airport` = "Austin-Bergstrom International") + OR `airports`.`airport` = "Wausau Municipal") + OR `airports`.`airport` = "Mecklenburg-Brunswick Regional") + OR `airports`.`airport` = "Alva Regional") + OR `airports`.`airport` = "Asheville Regional") + OR `airports`.`airport` = "Avon Park Municipal") + OR `airports`.`airport` = "Wilkes-Barre/Scranton Intl") + OR `airports`.`airport` = "Marana Northwest Regional") + OR `airports`.`airport` = "Catalina") + OR `airports`.`airport` = "Washington Municipal") + OR `airports`.`airport` = "Wainwright") + OR `airports`.`airport` = "West Memphis Municipal") + OR `airports`.`airport` = "Arlington Municipal") + OR `airports`.`airport` = "Algona Municipal") + OR `airports`.`airport` = "Chandler") + OR `airports`.`airport` = "Altus Municipal") + OR `airports`.`airport` = "Neil Armstrong") + OR `airports`.`airport` = "Angel Fire") + OR `airports`.`airport` = "Waycross-Ware County") + OR `airports`.`airport` = "Colorado City Municipal") + OR `airports`.`airport` = "Hazelhurst") + OR `airports`.`airport` = "Kalamazoo County") + OR `airports`.`airport` = "Granville") + OR `airports`.`airport` = "Silver Springs") + OR `airports`.`airport` = "Whitford") + OR `airports`.`airport` = "Biddeford Municipal") + OR `airports`.`airport` = "Sugarloaf Regional") + OR `airports`.`airport` = "Barnes Municipal") + OR `airports`.`airport` = "Columbus Municipal") + OR `airports`.`airport` = "Battle Mountain") + OR `airports`.`airport` = "Huron County Memorial") + OR `airports`.`airport` = "New Braunfels Municipal") + OR `airports`.`airport` = "Benson Municipal") + OR `airports`.`airport` = "Curtis") + OR `airports`.`airport` = "Marlboro County") + OR `airports`.`airport` = "Broken Bow Municipal") + OR `airports`.`airport` = "Virginia Tech") + OR `airports`.`airport` = "Bryce Canyon") + OR `airports`.`airport` = "Black River Falls Area") + OR `airports`.`airport` = "Boca Raton") + OR `airports`.`airport` = "Birchwood") + OR `airports`.`airport` = "Baudette International") + OR `airports`.`airport` = "Blanding Muni") + OR `airports`.`airport` = "Bradley International") + OR `airports`.`airport` = "Morrilton Municipal") + OR `airports`.`airport` = "Igor I Sikorsky Memorial") + OR `airports`.`airport` = "Broadus") + OR `airports`.`airport` = "Laurence G Hanscom") + OR `airports`.`airport` = "Southwest Michigan Regional") + OR `airports`.`airport` = "Bethel") + OR `airports`.`airport` = "Bradford Reg") + OR `airports`.`airport` = "Scotts Bluff County") + OR `airports`.`airport` = "Boeing Field/King County Intl") + OR `airports`.`airport` = "Buffalo Municipal") + OR `airports`.`airport` = "Meadows") + OR `airports`.`airport` = "Mobile Downtown") + OR `airports`.`airport` = "Virgil I Grissom Municipal") + OR `airports`.`airport` = "Silver Bay Municipal") +PREHOOK: type: QUERY +PREHOOK: Input: default@airports +#### A masked pattern was here #### +POSTHOOK: query: SELECT * FROM airports +WHERE (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((`airports`.`airport` = "Thigpen" + OR `airports`.`airport` = "Astoria Regional") + OR `airports`.`airport` = "Warsaw Municipal") + OR `airports`.`airport` = "John F Kennedy Memorial") + OR `airports`.`airport` = "Hall-Miller Municipal") + OR `airports`.`airport` = "Atqasuk") + OR `airports`.`airport` = "William B Hartsfield-Atlanta Intl") + OR `airports`.`airport` = "Artesia Municipal") + OR `airports`.`airport` = "Outagamie County Regional") + OR `airports`.`airport` = "Watertown Municipal") + OR `airports`.`airport` = "Augusta State") + OR `airports`.`airport` = "Aurora Municipal") + OR `airports`.`airport` = "Alakanuk") + OR `airports`.`airport` = "Austin Municipal") + OR `airports`.`airport` = "Auburn Municipal") + OR `airports`.`airport` = "Auburn-Opelik") + OR `airports`.`airport` = "Austin-Bergstrom International") + OR `airports`.`airport` = "Wausau Municipal") + OR `airports`.`airport` = "Mecklenburg-Brunswick Regional") + OR `airports`.`airport` = "Alva Regional") + OR `airports`.`airport` = "Asheville Regional") + OR `airports`.`airport` = "Avon Park Municipal") + OR `airports`.`airport` = "Wilkes-Barre/Scranton Intl") + OR `airports`.`airport` = "Marana Northwest Regional") + OR `airports`.`airport` = "Catalina") + OR `airports`.`airport` = "Washington Municipal") + OR `airports`.`airport` = "Wainwright") + OR `airports`.`airport` = "West Memphis Municipal") + OR `airports`.`airport` = "Arlington Municipal") + OR `airports`.`airport` = "Algona Municipal") + OR `airports`.`airport` = "Chandler") + OR `airports`.`airport` = "Altus Municipal") + OR `airports`.`airport` = "Neil Armstrong") + OR `airports`.`airport` = "Angel Fire") + OR `airports`.`airport` = "Waycross-Ware County") + OR `airports`.`airport` = "Colorado City Municipal") + OR `airports`.`airport` = "Hazelhurst") + OR `airports`.`airport` = "Kalamazoo County") + OR `airports`.`airport` = "Granville") + OR `airports`.`airport` = "Silver Springs") + OR `airports`.`airport` = "Whitford") + OR `airports`.`airport` = "Biddeford Municipal") + OR `airports`.`airport` = "Sugarloaf Regional") + OR `airports`.`airport` = "Barnes Municipal") + OR `airports`.`airport` = "Columbus Municipal") + OR `airports`.`airport` = "Battle Mountain") + OR `airports`.`airport` = "Huron County Memorial") + OR `airports`.`airport` = "New Braunfels Municipal") + OR `airports`.`airport` = "Benson Municipal") + OR `airports`.`airport` = "Curtis") + OR `airports`.`airport` = "Marlboro County") + OR `airports`.`airport` = "Broken Bow Municipal") + OR `airports`.`airport` = "Virginia Tech") + OR `airports`.`airport` = "Bryce Canyon") + OR `airports`.`airport` = "Black River Falls Area") + OR `airports`.`airport` = "Boca Raton") + OR `airports`.`airport` = "Birchwood") + OR `airports`.`airport` = "Baudette International") + OR `airports`.`airport` = "Blanding Muni") + OR `airports`.`airport` = "Bradley International") + OR `airports`.`airport` = "Morrilton Municipal") + OR `airports`.`airport` = "Igor I Sikorsky Memorial") + OR `airports`.`airport` = "Broadus") + OR `airports`.`airport` = "Laurence G Hanscom") + OR `airports`.`airport` = "Southwest Michigan Regional") + OR `airports`.`airport` = "Bethel") + OR `airports`.`airport` = "Bradford Reg") + OR `airports`.`airport` = "Scotts Bluff County") + OR `airports`.`airport` = "Boeing Field/King County Intl") + OR `airports`.`airport` = "Buffalo Municipal") + OR `airports`.`airport` = "Meadows") + OR `airports`.`airport` = "Mobile Downtown") + OR `airports`.`airport` = "Virgil I Grissom Municipal") + OR `airports`.`airport` = "Silver Bay Municipal") +POSTHOOK: type: QUERY +POSTHOOK: Input: default@airports +#### A masked pattern was here ####