commit 72d54021abc0f68807d5591a853364bdac4a0657 Author: Ashutosh Chauhan Date: Mon Jun 9 17:22:16 2014 -0700 HIVE-7203 diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/TaskCompiler.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/TaskCompiler.java index 68f1153..b75f78c 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/TaskCompiler.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/TaskCompiler.java @@ -132,6 +132,13 @@ public void compile(final ParseContext pCtx, final List " + fetchLimit + ". Doesn't qualify limit optimiztion."); globalLimitCtx.disableOpt(); + + } + if (qb.getParseInfo().getOuterQueryLimit() == 0) { + // Believe it or not, some tools do generate queries with limit 0 and than expect + // query to run quickly. Lets meet their requirement. + LOG.info("Limit 0. No query execution needed."); + return; } } else if (!isCStats) { for (LoadTableDesc ltd : loadTableWork) { diff --git a/ql/src/test/queries/clientpositive/limit0.q b/ql/src/test/queries/clientpositive/limit0.q new file mode 100644 index 0000000..b4f48a3 --- /dev/null +++ b/ql/src/test/queries/clientpositive/limit0.q @@ -0,0 +1,7 @@ +explain select * from src where key = '238' limit 0; +explain select src.key, count(src.value) from src group by src.key limit 0; +explain select * from ( select key from src limit 3) sq1 limit 0; + +select * from src where key = '238' limit 0; +select src.key, count(src.value) from src group by src.key limit 0; +select * from ( select key from src limit 3) sq1 limit 0; diff --git a/ql/src/test/results/clientpositive/limit0.q.out b/ql/src/test/results/clientpositive/limit0.q.out new file mode 100644 index 0000000..d047374 --- /dev/null +++ b/ql/src/test/results/clientpositive/limit0.q.out @@ -0,0 +1,60 @@ +PREHOOK: query: explain select * from src where key = '238' limit 0 +PREHOOK: type: QUERY +POSTHOOK: query: explain select * from src where key = '238' limit 0 +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-0 + Fetch Operator + limit: 0 + Processor Tree: + ListSink + +PREHOOK: query: explain select src.key, count(src.value) from src group by src.key limit 0 +PREHOOK: type: QUERY +POSTHOOK: query: explain select src.key, count(src.value) from src group by src.key limit 0 +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-0 + Fetch Operator + limit: 0 + Processor Tree: + ListSink + +PREHOOK: query: explain select * from ( select key from src limit 3) sq1 limit 0 +PREHOOK: type: QUERY +POSTHOOK: query: explain select * from ( select key from src limit 3) sq1 limit 0 +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-0 + Fetch Operator + limit: 0 + Processor Tree: + ListSink + +PREHOOK: query: select * from src where key = '238' limit 0 +PREHOOK: type: QUERY +#### A masked pattern was here #### +POSTHOOK: query: select * from src where key = '238' limit 0 +POSTHOOK: type: QUERY +#### A masked pattern was here #### +PREHOOK: query: select src.key, count(src.value) from src group by src.key limit 0 +PREHOOK: type: QUERY +#### A masked pattern was here #### +POSTHOOK: query: select src.key, count(src.value) from src group by src.key limit 0 +POSTHOOK: type: QUERY +#### A masked pattern was here #### +PREHOOK: query: select * from ( select key from src limit 3) sq1 limit 0 +PREHOOK: type: QUERY +#### A masked pattern was here #### +POSTHOOK: query: select * from ( select key from src limit 3) sq1 limit 0 +POSTHOOK: type: QUERY +#### A masked pattern was here ####