Repository: hive Updated Branches: refs/heads/master 445b79153 -> af19055c1
HIVE-16190: Support expression in merge statement (Pengcheng Xiong, reviewed by Eugene Koifman) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/af19055c Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/af19055c Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/af19055c Branch: refs/heads/master Commit: af19055c142ded4e68ef7880d1e3c75793ca8493 Parents: 445b791 Author: Pengcheng Xiong <[email protected]> Authored: Tue Mar 14 11:00:05 2017 -0700 Committer: Pengcheng Xiong <[email protected]> Committed: Tue Mar 14 11:00:05 2017 -0700 ---------------------------------------------------------------------- .../java/org/apache/hadoop/hive/ql/parse/FromClauseParser.g | 4 ++-- ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java | 7 +++++++ .../org/apache/hadoop/hive/ql/parse/TestMergeStatement.java | 9 +-------- 3 files changed, 10 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/af19055c/ql/src/java/org/apache/hadoop/hive/ql/parse/FromClauseParser.g ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/FromClauseParser.g b/ql/src/java/org/apache/hadoop/hive/ql/parse/FromClauseParser.g index c8c71b0..558ca7f 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/FromClauseParser.g +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/FromClauseParser.g @@ -295,7 +295,7 @@ valueRowConstructor @init { gParent.pushMsg("value row constructor", state); } @after { gParent.popMsg(state); } : - LPAREN precedenceUnaryPrefixExpression (COMMA precedenceUnaryPrefixExpression)* RPAREN -> ^(TOK_VALUE_ROW precedenceUnaryPrefixExpression+) + expressionsInParenthesis[false] -> ^(TOK_VALUE_ROW expressionsInParenthesis) ; valuesTableConstructor @@ -314,7 +314,7 @@ valuesClause @init { gParent.pushMsg("values clause", state); } @after { gParent.popMsg(state); } : - KW_VALUES valuesTableConstructor -> valuesTableConstructor + KW_VALUES! valuesTableConstructor ; /* http://git-wip-us.apache.org/repos/asf/hive/blob/af19055c/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java ---------------------------------------------------------------------- diff --git a/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java b/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java index b9df674..6dae7ba 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java @@ -898,4 +898,11 @@ public class TestTxnCommands { //> 2 seconds pass, i.e. that the command in Driver actually blocks before cancel is fired Assert.assertTrue(System.currentTimeMillis() > start + 2); } + + @Test + public void testMergeCase() throws Exception { + runStatementOnDriver("create table merge_test (c1 integer, c2 integer, c3 integer) CLUSTERED BY (c1) into 2 buckets stored as orc tblproperties(\"transactional\"=\"true\")"); + runStatementOnDriver("create table if not exists e011_02 (c1 float, c2 double, c3 float)"); + runStatementOnDriver("merge into merge_test using e011_02 on (merge_test.c1 = e011_02.c1) when not matched then insert values (case when e011_02.c1 > 0 then e011_02.c1 + 1 else e011_02.c1 end, e011_02.c2 + e011_02.c3, coalesce(e011_02.c3, 1))"); + } } http://git-wip-us.apache.org/repos/asf/hive/blob/af19055c/ql/src/test/org/apache/hadoop/hive/ql/parse/TestMergeStatement.java ---------------------------------------------------------------------- diff --git a/ql/src/test/org/apache/hadoop/hive/ql/parse/TestMergeStatement.java b/ql/src/test/org/apache/hadoop/hive/ql/parse/TestMergeStatement.java index a862e5c..8e0ac9d 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/parse/TestMergeStatement.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/parse/TestMergeStatement.java @@ -219,15 +219,8 @@ public class TestMergeStatement { "MERGE INTO target USING source ON target.pk = source.pk WHEN NOT MATCHED THEN INSERT VALUES(a,source.b) WHEN MATCHED THEN DELETE"); } - /** - * why does this fail but next one passes - * @throws ParseException - */ @Test - public void testNegative5() throws ParseException { - expectedException.expect(ParseException.class); - expectedException.expectMessage("line 1:103 mismatched input '+' expecting ) near 'b' in value row constructor"); - //todo: why does this fail but next one passes? + public void test5_1() throws ParseException { ASTNode ast = parse( "MERGE INTO target USING source ON target.pk = source.pk WHEN NOT MATCHED THEN INSERT VALUES(a,source.b + 1)"); }
