Repository: hive Updated Branches: refs/heads/master 86510f773 -> 9fc51b0c4
HIVE-14519 : Multi insert query bug (Ashutosh Chauhan via Yongzhi Chen) Signed-off-by: Ashutosh Chauhan <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/9fc51b0c Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/9fc51b0c Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/9fc51b0c Branch: refs/heads/master Commit: 9fc51b0c4b8b0c05d79087351b345bef3b235a7b Parents: 86510f7 Author: Yongzhi Chen <[email protected]> Authored: Sat Aug 13 12:48:51 2016 -0700 Committer: Ashutosh Chauhan <[email protected]> Committed: Sat Aug 13 12:48:51 2016 -0700 ---------------------------------------------------------------------- .../optimizer/physical/NullScanOptimizer.java | 12 +++++++ .../queries/clientpositive/inputwherefalse.q | 15 +++++++++ .../clientpositive/inputwherefalse.q.out | 33 ++++++++++++++++++++ 3 files changed, 60 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/9fc51b0c/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/NullScanOptimizer.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/NullScanOptimizer.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/NullScanOptimizer.java index 200e098..49b839a 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/NullScanOptimizer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/NullScanOptimizer.java @@ -27,6 +27,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.hadoop.hive.ql.exec.FilterOperator; import org.apache.hadoop.hive.ql.exec.LimitOperator; +import org.apache.hadoop.hive.ql.exec.Operator; import org.apache.hadoop.hive.ql.exec.TableScanOperator; import org.apache.hadoop.hive.ql.lib.DefaultGraphWalker; import org.apache.hadoop.hive.ql.lib.Dispatcher; @@ -90,6 +91,17 @@ public class NullScanOptimizer implements PhysicalPlanResolver { return null; } + int numOfndPeers = 0; + if (filter.getParentOperators() != null) { + for (Operator<?> fParent : filter.getParentOperators()) { + if (fParent.getChildOperators() != null) { + numOfndPeers += fParent.getChildOperators().size(); + if (numOfndPeers > 1) + return null; + } + } + } + WalkerCtx ctx = (WalkerCtx) procCtx; for (Node op : stack) { if (op instanceof TableScanOperator) { http://git-wip-us.apache.org/repos/asf/hive/blob/9fc51b0c/ql/src/test/queries/clientpositive/inputwherefalse.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientpositive/inputwherefalse.q b/ql/src/test/queries/clientpositive/inputwherefalse.q new file mode 100644 index 0000000..c9186e6 --- /dev/null +++ b/ql/src/test/queries/clientpositive/inputwherefalse.q @@ -0,0 +1,15 @@ +From (select * from src) a +insert overwrite directory 'target/warehouse/destemp.out/dir1/' +select key +where key=200 limit 1 +insert overwrite directory 'target/warehouse/destemp.out/dir2/' +select 'header' +where 1=2 +insert overwrite directory 'target/warehouse/destemp.out/dir3/' +select key +where key = 100 limit 1; + +dfs -cat ${system:test.warehouse.dir}/destemp.out/dir1/000000_0; +dfs -cat ${system:test.warehouse.dir}/destemp.out/dir2/000000_0; +dfs -cat ${system:test.warehouse.dir}/destemp.out/dir3/000000_0; +dfs -rmr ${system:test.warehouse.dir}/destemp.out; http://git-wip-us.apache.org/repos/asf/hive/blob/9fc51b0c/ql/src/test/results/clientpositive/inputwherefalse.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/inputwherefalse.q.out b/ql/src/test/results/clientpositive/inputwherefalse.q.out new file mode 100644 index 0000000..ecb7300 --- /dev/null +++ b/ql/src/test/results/clientpositive/inputwherefalse.q.out @@ -0,0 +1,33 @@ +PREHOOK: query: From (select * from src) a +insert overwrite directory 'target/warehouse/destemp.out/dir1/' +select key +where key=200 limit 1 +insert overwrite directory 'target/warehouse/destemp.out/dir2/' +select 'header' +where 1=2 +insert overwrite directory 'target/warehouse/destemp.out/dir3/' +select key +where key = 100 limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: target/warehouse/destemp.out/dir1 +PREHOOK: Output: target/warehouse/destemp.out/dir2 +PREHOOK: Output: target/warehouse/destemp.out/dir3 +POSTHOOK: query: From (select * from src) a +insert overwrite directory 'target/warehouse/destemp.out/dir1/' +select key +where key=200 limit 1 +insert overwrite directory 'target/warehouse/destemp.out/dir2/' +select 'header' +where 1=2 +insert overwrite directory 'target/warehouse/destemp.out/dir3/' +select key +where key = 100 limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: target/warehouse/destemp.out/dir1 +POSTHOOK: Output: target/warehouse/destemp.out/dir2 +POSTHOOK: Output: target/warehouse/destemp.out/dir3 +200 +100 +#### A masked pattern was here ####
