diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SimpleFetchOptimizer.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SimpleFetchOptimizer.java index eb0ba7b..d0c5102 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SimpleFetchOptimizer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SimpleFetchOptimizer.java @@ -127,6 +127,9 @@ private FetchTask optimize(ParseContext pctx, String alias, TableScanOperator so boolean aggressive = "more".equals(mode); final int limit = pctx.getQueryProperties().getOuterQueryLimit(); + if (limit == 0) { + return null; + } FetchData fetch = checkTree(aggressive, pctx, alias, source); if (fetch != null && checkThreshold(fetch, limit, pctx)) { FetchWork fetchWork = fetch.convertToWork(); diff --git a/ql/src/test/queries/clientpositive/limit0.q b/ql/src/test/queries/clientpositive/limit0.q index b4f48a3..5d3fa9c 100644 --- a/ql/src/test/queries/clientpositive/limit0.q +++ b/ql/src/test/queries/clientpositive/limit0.q @@ -1,7 +1,11 @@ +explain select key from src limit 0; +explain select key from src where key = '238' limit 0; 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 key from src limit 0; +select key from src where key = '238' 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 index 3f08bdd..2a33b4d 100644 --- a/ql/src/test/results/clientpositive/limit0.q.out +++ b/ql/src/test/results/clientpositive/limit0.q.out @@ -1,3 +1,31 @@ +PREHOOK: query: explain select key from src limit 0 +PREHOOK: type: QUERY +POSTHOOK: query: explain select key from src 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 key from src where key = '238' limit 0 +PREHOOK: type: QUERY +POSTHOOK: query: explain select key 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 * from src where key = '238' limit 0 PREHOOK: type: QUERY POSTHOOK: query: explain select * from src where key = '238' limit 0 @@ -40,6 +68,22 @@ STAGE PLANS: Processor Tree: ListSink +PREHOOK: query: select key from src limit 0 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +#### A masked pattern was here #### +POSTHOOK: query: select key from src limit 0 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +#### A masked pattern was here #### +PREHOOK: query: select key from src where key = '238' limit 0 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +#### A masked pattern was here #### +POSTHOOK: query: select key from src where key = '238' limit 0 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +#### A masked pattern was here #### PREHOOK: query: select * from src where key = '238' limit 0 PREHOOK: type: QUERY PREHOOK: Input: default@src