Repository: tajo Updated Branches: refs/heads/branch-0.10.1 c9b5e1134 -> 7ccd8341a
TAJO-1574: Fix NPE on natural join. Signed-off-by: Jihoon Son <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/tajo/repo Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/7ccd8341 Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/7ccd8341 Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/7ccd8341 Branch: refs/heads/branch-0.10.1 Commit: 7ccd8341ab45db79202a6c35ada56533107ee2aa Parents: c9b5e11 Author: Dongjoon Hyun <[email protected]> Authored: Mon Apr 27 22:35:27 2015 +0900 Committer: Jihoon Son <[email protected]> Committed: Mon Apr 27 22:35:27 2015 +0900 ---------------------------------------------------------------------- CHANGES | 3 +++ .../main/java/org/apache/tajo/algebra/Join.java | 4 ++- .../apache/tajo/engine/query/TestJoinQuery.java | 13 ++++++++++ .../queries/TestJoinQuery/testNaturalJoin.sql | 3 +++ .../TestJoinQuery/testNaturalJoin.result | 27 ++++++++++++++++++++ .../tajo/plan/algebra/BaseAlgebraVisitor.java | 4 ++- 6 files changed, 52 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/7ccd8341/CHANGES ---------------------------------------------------------------------- diff --git a/CHANGES b/CHANGES index 6cd7ad7..9fdcb09 100644 --- a/CHANGES +++ b/CHANGES @@ -27,6 +27,9 @@ Release 0.10.1 - unreleased BUG FIXES + TAJO-1574: Fix NPE on natural join. + (Contributed by Dongjoon Hyun, Committed by jihoon) + TAJO-1581: Does not update last state of query stage in non-hash shuffle. (jinho) http://git-wip-us.apache.org/repos/asf/tajo/blob/7ccd8341/tajo-algebra/src/main/java/org/apache/tajo/algebra/Join.java ---------------------------------------------------------------------- diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Join.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Join.java index 2b1f344..6b3ce61 100644 --- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Join.java +++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Join.java @@ -96,7 +96,9 @@ public class Join extends BinaryOperator { public Object clone() throws CloneNotSupportedException { Join join = (Join) super.clone(); join.joinType = joinType; - join.joinQual = (Expr) joinQual.clone(); + if (joinQual != null) { + join.joinQual = (Expr) joinQual.clone(); + } if (joinColumns != null) { join.joinColumns = new ColumnReferenceExpr[joinColumns.length]; for (ColumnReferenceExpr colume : joinColumns) { http://git-wip-us.apache.org/repos/asf/tajo/blob/7ccd8341/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java ---------------------------------------------------------------------- diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java index 9ab32ff..f844a8f 100644 --- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java +++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java @@ -18,6 +18,7 @@ package org.apache.tajo.engine.query; +import junit.framework.Assert; import org.apache.tajo.IntegrationTest; import org.apache.tajo.QueryTestCaseBase; import org.apache.tajo.TajoConstants; @@ -1170,4 +1171,16 @@ public class TestJoinQuery extends QueryTestCaseBase { assertResultSet(res); cleanupQuery(res); } + + @Test + public final void testNaturalJoin() throws Exception { + ResultSet res = null; + try { + res = executeQuery(); + } catch (Exception e) { + Assert.fail(); + } + assertResultSet(res); + cleanupQuery(res); + } } http://git-wip-us.apache.org/repos/asf/tajo/blob/7ccd8341/tajo-core/src/test/resources/queries/TestJoinQuery/testNaturalJoin.sql ---------------------------------------------------------------------- diff --git a/tajo-core/src/test/resources/queries/TestJoinQuery/testNaturalJoin.sql b/tajo-core/src/test/resources/queries/TestJoinQuery/testNaturalJoin.sql new file mode 100644 index 0000000..fcbdcdc --- /dev/null +++ b/tajo-core/src/test/resources/queries/TestJoinQuery/testNaturalJoin.sql @@ -0,0 +1,3 @@ +select n1.n_name, n2.n_name +from nation n1 natural join nation n2 +order by n2.n_name; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/7ccd8341/tajo-core/src/test/resources/results/TestJoinQuery/testNaturalJoin.result ---------------------------------------------------------------------- diff --git a/tajo-core/src/test/resources/results/TestJoinQuery/testNaturalJoin.result b/tajo-core/src/test/resources/results/TestJoinQuery/testNaturalJoin.result new file mode 100644 index 0000000..fa5a71e --- /dev/null +++ b/tajo-core/src/test/resources/results/TestJoinQuery/testNaturalJoin.result @@ -0,0 +1,27 @@ +n_name,n_name +------------------------------- +ALGERIA,ALGERIA +ARGENTINA,ARGENTINA +BRAZIL,BRAZIL +CANADA,CANADA +CHINA,CHINA +EGYPT,EGYPT +ETHIOPIA,ETHIOPIA +FRANCE,FRANCE +GERMANY,GERMANY +INDIA,INDIA +INDONESIA,INDONESIA +IRAN,IRAN +IRAQ,IRAQ +JAPAN,JAPAN +JORDAN,JORDAN +KENYA,KENYA +MOROCCO,MOROCCO +MOZAMBIQUE,MOZAMBIQUE +PERU,PERU +ROMANIA,ROMANIA +RUSSIA,RUSSIA +SAUDI ARABIA,SAUDI ARABIA +UNITED KINGDOM,UNITED KINGDOM +UNITED STATES,UNITED STATES +VIETNAM,VIETNAM \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/7ccd8341/tajo-plan/src/main/java/org/apache/tajo/plan/algebra/BaseAlgebraVisitor.java ---------------------------------------------------------------------- diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/algebra/BaseAlgebraVisitor.java b/tajo-plan/src/main/java/org/apache/tajo/plan/algebra/BaseAlgebraVisitor.java index bd10514..eb11f33 100644 --- a/tajo-plan/src/main/java/org/apache/tajo/plan/algebra/BaseAlgebraVisitor.java +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/algebra/BaseAlgebraVisitor.java @@ -364,7 +364,9 @@ public class BaseAlgebraVisitor<CONTEXT, RESULT> implements AlgebraVisitor<CONTE @Override public RESULT visitJoin(CONTEXT ctx, Stack<Expr> stack, Join expr) throws PlanningException { stack.push(expr); - visit(ctx, stack, expr.getQual()); + if (expr.getQual() != null) { + visit(ctx, stack, expr.getQual()); + } visit(ctx, stack, expr.getLeft()); RESULT result = visit(ctx, stack, expr.getRight()); stack.pop();
