Index: ql/src/test/results/clientpositive/nestedvirtual.q.out =================================================================== --- ql/src/test/results/clientpositive/nestedvirtual.q.out (revision 0) +++ ql/src/test/results/clientpositive/nestedvirtual.q.out (revision 0) @@ -0,0 +1,43 @@ +PREHOOK: query: CREATE TABLE pokes (foo INT, bar STRING) +PREHOOK: type: CREATETABLE +POSTHOOK: query: CREATE TABLE pokes (foo INT, bar STRING) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@pokes +PREHOOK: query: create table pokes2(foo INT, bar STRING) +PREHOOK: type: CREATETABLE +POSTHOOK: query: create table pokes2(foo INT, bar STRING) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@pokes2 +PREHOOK: query: create table jssarma_nilzma_bad as select a.val, a.filename, a.offset from (select hash(foo) as val, INPUT__FILE__NAME as filename, BLOCK__OFFSET__INSIDE__FILE as offset from pokes) a join pokes2 b on (a.val = b.foo) +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@pokes +PREHOOK: Input: default@pokes2 +POSTHOOK: query: create table jssarma_nilzma_bad as select a.val, a.filename, a.offset from (select hash(foo) as val, INPUT__FILE__NAME as filename, BLOCK__OFFSET__INSIDE__FILE as offset from pokes) a join pokes2 b on (a.val = b.foo) +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@pokes +POSTHOOK: Input: default@pokes2 +POSTHOOK: Output: default@jssarma_nilzma_bad +PREHOOK: query: drop table jssarma_nilzma_bad +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@jssarma_nilzma_bad +PREHOOK: Output: default@jssarma_nilzma_bad +POSTHOOK: query: drop table jssarma_nilzma_bad +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@jssarma_nilzma_bad +POSTHOOK: Output: default@jssarma_nilzma_bad +PREHOOK: query: drop table pokes +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@pokes +PREHOOK: Output: default@pokes +POSTHOOK: query: drop table pokes +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@pokes +POSTHOOK: Output: default@pokes +PREHOOK: query: drop table pokes2 +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@pokes2 +PREHOOK: Output: default@pokes2 +POSTHOOK: query: drop table pokes2 +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@pokes2 +POSTHOOK: Output: default@pokes2 Index: ql/src/test/queries/clientpositive/nestedvirtual.q =================================================================== --- ql/src/test/queries/clientpositive/nestedvirtual.q (revision 0) +++ ql/src/test/queries/clientpositive/nestedvirtual.q (revision 0) @@ -0,0 +1,9 @@ +CREATE TABLE pokes (foo INT, bar STRING); +create table pokes2(foo INT, bar STRING); + +create table jssarma_nilzma_bad as select a.val, a.filename, a.offset from (select hash(foo) as val, INPUT__FILE__NAME as filename, BLOCK__OFFSET__INSIDE__FILE as offset from pokes) a join pokes2 b on (a.val = b.foo); + +drop table jssarma_nilzma_bad; + +drop table pokes; +drop table pokes2; Index: ql/src/java/org/apache/hadoop/hive/ql/exec/MapOperator.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/MapOperator.java (revision 1097824) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/MapOperator.java (working copy) @@ -361,23 +361,21 @@ List aliases = conf.getPathToAliases().get(onefile); for (String onealias : aliases) { - Operator op = conf.getAliasToWork().get( - onealias); - LOG.info("Adding alias " + onealias + " to work list for file " - + onefile); - MapInputPath inp = new MapInputPath(onefile, onealias, op); - opCtxMap.put(inp, opCtx); - if (operatorToPaths.get(op) == null) { - operatorToPaths.put(op, new java.util.ArrayList()); - } - operatorToPaths.get(op).add(onefile); - - op - .setParentOperators(new ArrayList>()); - op.getParentOperators().add(this); // check for the operators who will process rows coming to this Map // Operator if (!onepath.toUri().relativize(fpath.toUri()).equals(fpath.toUri())) { + Operator op = conf.getAliasToWork().get( + onealias); + LOG.info("Adding alias " + onealias + " to work list for file " + + onefile); + MapInputPath inp = new MapInputPath(onefile, onealias, op); + opCtxMap.put(inp, opCtx); + if (operatorToPaths.get(op) == null) { + operatorToPaths.put(op, new java.util.ArrayList()); + } + operatorToPaths.get(op).add(onefile); + op.setParentOperators(new ArrayList>()); + op.getParentOperators().add(this); children.add(op); childrenPaths.add(onefile); LOG.info("dump " + op.getName() + " " @@ -389,6 +387,7 @@ } } } + if (children.size() == 0) { // didn't find match for input file path in configuration! // serious problem ..