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 49b839a351b36af7c17bb0508f17d370d0222db9..53bfbb7ff887551a132c349b9d2909d5f00e39c2 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 @@ -120,9 +120,24 @@ public Object process(Node nd, Stack stack, NodeProcessorCtx procCtx, public Object process(Node nd, Stack stack, NodeProcessorCtx procCtx, Object... nodeOutputs) throws SemanticException { - if(!(((LimitOperator)nd).getConf().getLimit() == 0)) { + LimitOperator limitOp = (LimitOperator)nd; + if(!(limitOp.getConf().getLimit() == 0)) { return null; } + + int numOflimSelPeers = 0; + if (limitOp.getParentOperators() != null) { + Operator limParent = limitOp.getParentOperators().get(0); //limit opt's parent is sel + if (limParent.getParentOperators() != null) { + for (Operator lsParent : limParent.getParentOperators()) { //check if the limit sel has peer or not + if (lsParent.getChildOperators() != null) { + numOflimSelPeers += lsParent.getChildOperators().size(); + if (numOflimSelPeers > 1) + return null; + } + } + } + } LOG.info("Found Limit 0 TableScan. " + nd); ((WalkerCtx)procCtx).convertMetadataOnly(); return null; diff --git a/ql/src/test/queries/clientpositive/inputwherefalse.q b/ql/src/test/queries/clientpositive/inputwherefalse.q index c9186e6727553d77e6657673c81fdd3326ed1950..197bcf9aec946bff14280fe643d9976da4b249fd 100644 --- a/ql/src/test/queries/clientpositive/inputwherefalse.q +++ b/ql/src/test/queries/clientpositive/inputwherefalse.q @@ -4,6 +4,22 @@ select key where key=200 limit 1 insert overwrite directory 'target/warehouse/destemp.out/dir2/' select 'header' +limit 0 +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; + +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 diff --git a/ql/src/test/results/clientpositive/inputwherefalse.q.out b/ql/src/test/results/clientpositive/inputwherefalse.q.out index ecb73001b17e3334c5eb144a28b11261426c6819..95e14f005dd30e13017bd9aafbb7c357983da264 100644 --- a/ql/src/test/results/clientpositive/inputwherefalse.q.out +++ b/ql/src/test/results/clientpositive/inputwherefalse.q.out @@ -4,6 +4,39 @@ select key where key=200 limit 1 insert overwrite directory 'target/warehouse/destemp.out/dir2/' select 'header' +limit 0 +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' +limit 0 +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 #### +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