You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by hy...@apache.org on 2014/01/29 06:22:59 UTC

git commit: TAJO-567: Expression projection bugs.

Updated Branches:
  refs/heads/master b0d81a590 -> 179a707fc


TAJO-567: Expression projection bugs.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tajo/commit/179a707f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tajo/tree/179a707f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tajo/diff/179a707f

Branch: refs/heads/master
Commit: 179a707fc4ba58425ebd92ccd5d64c6cba78d512
Parents: b0d81a5
Author: Hyunsik Choi <hy...@apache.org>
Authored: Wed Jan 29 14:22:28 2014 +0900
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Wed Jan 29 14:22:28 2014 +0900

----------------------------------------------------------------------
 CHANGES.txt                                     |  2 ++
 .../org/apache/tajo/algebra/Aggregation.java    |  6 ++---
 .../org/apache/tajo/algebra/CreateTable.java    | 10 ++++----
 .../org/apache/tajo/algebra/FunctionExpr.java   |  2 +-
 .../java/org/apache/tajo/algebra/Insert.java    |  6 ++++-
 .../main/java/org/apache/tajo/algebra/Join.java |  2 +-
 .../org/apache/tajo/algebra/Projection.java     |  2 +-
 .../tajo/algebra/TablePrimarySubQuery.java      |  2 +-
 .../org/apache/tajo/catalog/FunctionDesc.java   |  2 +-
 .../org/apache/tajo/catalog/CatalogServer.java  |  3 ++-
 .../tajo/engine/planner/NamedExprsManager.java  | 15 +++++++++---
 .../planner/rewrite/ProjectionPushDownRule.java |  1 +
 .../tajo/engine/query/TestGroupByQuery.java     | 25 ++++++++++++++++++++
 .../apache/tajo/engine/query/TestJoinQuery.java | 22 +++++++++++++++++
 .../testGroupByWithConstantKeys1.sql            |  1 +
 .../testGroupByWithExpressionKeys1.sql          |  1 +
 .../testGroupByWithExpressionKeys2.sql          |  1 +
 .../testLeftOuterJoinWithConstantExpr1.sql      |  1 +
 .../testLeftOuterJoinWithConstantExpr2.sql      |  1 +
 .../testGroupByWithExpressionKeys1.result       |  5 ++++
 .../testGroupByWithExpressionKeys2.result       |  5 ++++
 .../testLeftOuterJoinWithConstantExpr1.result   |  7 ++++++
 .../testLeftOuterJoinWithConstantExpr2.result   |  7 ++++++
 23 files changed, 112 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 1f78565..333740d 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -233,6 +233,8 @@ Release 0.8.0 - unreleased
 
   BUG FIXES
 
+    TAJO-567: Expression projection bugs. (hyunsik)
+
     TAJO-565: FilterPushDown rewrite rule does not push filters on
     partitioned scans. (hyunsik)
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-algebra/src/main/java/org/apache/tajo/algebra/Aggregation.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Aggregation.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Aggregation.java
index 376963f..d1a6bd3 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Aggregation.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Aggregation.java
@@ -51,7 +51,7 @@ public class Aggregation extends UnaryOperator {
 
   @Override
   public int hashCode() {
-    return Objects.hashCode(namedExprs, groups, getChild());
+    return Objects.hashCode(Objects.hashCode(namedExprs), Objects.hashCode(groups), getChild());
   }
 
   @Override
@@ -91,14 +91,14 @@ public class Aggregation extends UnaryOperator {
 
     @Override
     public int hashCode() {
-      return Objects.hashCode(group_type, grouping_sets);
+      return Objects.hashCode(group_type, Objects.hashCode(grouping_sets));
     }
 
     @Override
     public boolean equals(Object obj) {
       if (obj instanceof GroupElement) {
         GroupElement other = (GroupElement) obj;
-        return group_type.equals(other) &&
+        return group_type.equals(other.group_type) &&
             TUtil.checkEquals(grouping_sets, other.grouping_sets);
       }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-algebra/src/main/java/org/apache/tajo/algebra/CreateTable.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/CreateTable.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/CreateTable.java
index 1836f51..7ad802c 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/CreateTable.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/CreateTable.java
@@ -130,7 +130,9 @@ public class CreateTable extends Expr {
 
   @Override
   public int hashCode() {
-    return Objects.hashCode(external, tableName, tableElements, storageType, subquery, location, params, partition);
+    return Objects.hashCode(
+        external, tableName, Objects.hashCode(tableElements),
+        storageType, subquery, location, params, partition);
   }
 
   @Override
@@ -225,7 +227,7 @@ public class CreateTable extends Expr {
     }
 
     public int hashCode() {
-      return Objects.hashCode(type, columns, specifiers);
+      return Objects.hashCode(type, Objects.hashCode(columns), specifiers);
     }
 
     public boolean equals(Object object) {
@@ -310,7 +312,7 @@ public class CreateTable extends Expr {
     }
 
     public int hashCode() {
-      return Objects.hashCode(columns, specifiers);
+      return Objects.hashCode(Objects.hashCode(columns), specifiers);
     }
 
     public boolean equals(Object object) {
@@ -343,7 +345,7 @@ public class CreateTable extends Expr {
     }
 
     public int hashCode() {
-      return Objects.hashCode(columns, isOmitValues);
+      return Objects.hashCode(Objects.hashCode(columns), isOmitValues);
     }
 
     public boolean equals(Object object) {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-algebra/src/main/java/org/apache/tajo/algebra/FunctionExpr.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/FunctionExpr.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/FunctionExpr.java
index 7f1dcd3..b007362 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/FunctionExpr.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/FunctionExpr.java
@@ -65,7 +65,7 @@ public class FunctionExpr extends Expr {
 
   @Override
   public int hashCode() {
-    return Objects.hashCode(signature, params);
+    return Objects.hashCode(signature, Objects.hashCode(params));
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-algebra/src/main/java/org/apache/tajo/algebra/Insert.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Insert.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Insert.java
index c58c040..c427a39 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Insert.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Insert.java
@@ -114,7 +114,10 @@ public class Insert extends Expr {
 
   @Override
   public int hashCode() {
-    return Objects.hashCode(overwrite, tableName, subquery, storageType, location, params);
+    return Objects.hashCode(
+        overwrite, tableName, Objects.hashCode(targetColumns),
+        subquery, storageType, location,
+        params);
   }
 
   @Override
@@ -122,6 +125,7 @@ public class Insert extends Expr {
     Insert another = (Insert) expr;
     return overwrite == another.overwrite &&
         TUtil.checkEquals(tableName, another.tableName) &&
+        TUtil.checkEquals(targetColumns, another.targetColumns) &&
         TUtil.checkEquals(subquery, another.subquery) &&
         TUtil.checkEquals(storageType, another.storageType) &&
         TUtil.checkEquals(location, another.location) &&

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/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 da2b153..258f750 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
@@ -70,7 +70,7 @@ public class Join extends BinaryOperator {
 
   @Override
   public int hashCode() {
-    return Objects.hashCode(joinType, joinQual, joinColumns, natural);
+    return Objects.hashCode(joinType, joinQual, Objects.hashCode(joinColumns), natural);
   }
 
   boolean equalsTo(Expr expr) {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-algebra/src/main/java/org/apache/tajo/algebra/Projection.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Projection.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Projection.java
index bcb6253..3d9f8a6 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Projection.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Projection.java
@@ -60,7 +60,7 @@ public class Projection extends UnaryOperator implements Cloneable {
   }
 
   public int hashCode() {
-    return Objects.hashCode(all, distinct, targets, getChild());
+    return Objects.hashCode(all, distinct, Objects.hashCode(targets), getChild());
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-algebra/src/main/java/org/apache/tajo/algebra/TablePrimarySubQuery.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/TablePrimarySubQuery.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/TablePrimarySubQuery.java
index 90d89a4..2af90b6 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/TablePrimarySubQuery.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/TablePrimarySubQuery.java
@@ -47,7 +47,7 @@ public class TablePrimarySubQuery extends Relation {
   }
 
   public int hashCode() {
-    return Objects.hashCode(subquery, columnNames);
+    return Objects.hashCode(subquery, Objects.hashCode(columnNames));
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/FunctionDesc.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/FunctionDesc.java b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/FunctionDesc.java
index 00a687c..084d97c 100644
--- a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/FunctionDesc.java
+++ b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/FunctionDesc.java
@@ -140,7 +140,7 @@ public class FunctionDesc implements ProtoObject<FunctionDescProto>, Cloneable,
 
   @Override
   public int hashCode() {
-    return Objects.hashCode(signature, params);
+    return Objects.hashCode(signature, Objects.hashCode(params));
   }
   
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/CatalogServer.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/CatalogServer.java b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/CatalogServer.java
index abc3832..69e0248 100644
--- a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/CatalogServer.java
+++ b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/CatalogServer.java
@@ -18,6 +18,7 @@
 
 package org.apache.tajo.catalog;
 
+import com.google.common.base.Objects;
 import com.google.protobuf.RpcController;
 import com.google.protobuf.ServiceException;
 import org.apache.commons.logging.Log;
@@ -640,7 +641,7 @@ public class CatalogServer extends AbstractService {
 
     @Override
     public int hashCode() {
-      return com.google.common.base.Objects.hashCode(signature, type, arguments);
+      return Objects.hashCode(signature, type, Objects.hashCode(arguments));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/NamedExprsManager.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/NamedExprsManager.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/NamedExprsManager.java
index 893fbe1..6ce7bdf 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/NamedExprsManager.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/NamedExprsManager.java
@@ -171,10 +171,12 @@ public class NamedExprsManager {
   }
 
   public void resolveExpr(String name, EvalNode evalNode) throws PlanningException {
+    String normalized = name.toLowerCase();
+
     if (evalNode.getType() == EvalType.CONST) {
-      return;
+      resolvedFlags.put(normalized, true);
     }
-    String normalized = name.toLowerCase();
+
     nameToEvalMap.put(normalized, evalNode);
     evalToNameMap.put(evalNode, normalized);
     resolvedFlags.put(normalized, true);
@@ -212,7 +214,14 @@ public class NamedExprsManager {
   public Target getTarget(String name, boolean unresolved) {
     String normalized = name;
     if (!unresolved && resolvedFlags.containsKey(normalized) && resolvedFlags.get(normalized)) {
-      return new Target(new FieldEval(normalized, nameToEvalMap.get(normalized).getValueType()));
+      EvalNode evalNode = nameToEvalMap.get(normalized);
+      EvalNode referredEval;
+      if (evalNode.getType() == EvalType.CONST) {
+        referredEval = evalNode;
+      } else {
+        referredEval = new FieldEval(normalized, evalNode.getValueType());
+      }
+      return new Target(referredEval, name);
     } else {
       if (nameToEvalMap.containsKey(normalized)) {
         return new Target(nameToEvalMap.get(normalized), name);

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/rewrite/ProjectionPushDownRule.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/rewrite/ProjectionPushDownRule.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/rewrite/ProjectionPushDownRule.java
index 4e60448..c589910 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/rewrite/ProjectionPushDownRule.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/rewrite/ProjectionPushDownRule.java
@@ -174,6 +174,7 @@ public class ProjectionPushDownRule extends
     public void resolve(Target target) {
       EvalNode evalNode = target.getEvalTree();
       if (evalNode.getType() == EvalType.CONST) { // if constant value
+        resolvedFlags.put(name, true);
         return; // keep it raw always
       }
       if (!evalToNameMap.containsKey(evalNode)) {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestGroupByQuery.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestGroupByQuery.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestGroupByQuery.java
index 8bb2c28..25f61f5 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestGroupByQuery.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestGroupByQuery.java
@@ -84,6 +84,31 @@ public class TestGroupByQuery extends QueryTestCaseBase {
   }
 
   @Test
+  public final void testGroupByWithExpressionKeys1() throws Exception {
+    // select upper(lower(l_orderkey::text)) as key, count(1) as total from lineitem
+    // group by key order by upper(lower(l_orderkey::text)), total;
+    ResultSet res = executeQuery();
+    assertResultSet(res);
+    cleanupQuery(res);
+  }
+
+  @Test
+  public final void testGroupByWithExpressionKeys2() throws Exception {
+    // select upper(lower(l_orderkey::text)) as key, count(1) as total from lineitem
+    // group by upper(lower(l_orderkey::text)) order by upper(l_orderkey::text), total;
+    ResultSet res = executeQuery();
+    assertResultSet(res);
+    cleanupQuery(res);
+  }
+
+  @Test
+  public final void testGroupByWithConstantKeys1() throws Exception {
+    ResultSet res = executeQuery();
+    System.out.println(resultSetToString(res));
+    cleanupQuery(res);
+  }
+
+  @Test
   public final void testCountDistinct() throws Exception {
     // select l_orderkey, max(l_orderkey) as maximum, count(distinct l_linenumber) as unique_key from lineitem
     // group by l_orderkey;

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java
index a9f7849..fbb7fba 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java
@@ -91,6 +91,28 @@ public class TestJoinQuery extends QueryTestCaseBase {
   }
 
   @Test
+  public final void testLeftOuterJoinWithConstantExpr1() throws Exception {
+    // outer join with constant projections
+    //
+    // select c_custkey, orders.o_orderkey, 'val' as val from customer
+    // left outer join orders on c_custkey = o_orderkey;
+    ResultSet res = executeQuery();
+    assertResultSet(res);
+    cleanupQuery(res);
+  }
+
+  @Test
+  public final void testLeftOuterJoinWithConstantExpr2() throws Exception {
+    // outer join with constant projections
+    //
+    // select c_custkey, o.o_orderkey, 'val' as val from customer left outer join
+    // (select * from orders) o on c_custkey = o.o_orderkey
+    ResultSet res = executeQuery();
+    assertResultSet(res);
+    cleanupQuery(res);
+  }
+
+  @Test
   public final void testRightOuterJoin1() throws Exception {
     ResultSet res = executeQuery();
     assertResultSet(res);

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-core/tajo-core-backend/src/test/resources/queries/TestGroupByQuery/testGroupByWithConstantKeys1.sql
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/queries/TestGroupByQuery/testGroupByWithConstantKeys1.sql b/tajo-core/tajo-core-backend/src/test/resources/queries/TestGroupByQuery/testGroupByWithConstantKeys1.sql
new file mode 100644
index 0000000..52541aa
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/test/resources/queries/TestGroupByQuery/testGroupByWithConstantKeys1.sql
@@ -0,0 +1 @@
+select 123 as key, count(1) as total from lineitem group by key order by key, total;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-core/tajo-core-backend/src/test/resources/queries/TestGroupByQuery/testGroupByWithExpressionKeys1.sql
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/queries/TestGroupByQuery/testGroupByWithExpressionKeys1.sql b/tajo-core/tajo-core-backend/src/test/resources/queries/TestGroupByQuery/testGroupByWithExpressionKeys1.sql
new file mode 100644
index 0000000..4dbc2ce
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/test/resources/queries/TestGroupByQuery/testGroupByWithExpressionKeys1.sql
@@ -0,0 +1 @@
+select upper(lower(l_orderkey::text)) as key, count(1) as total from lineitem group by key order by upper(lower(l_orderkey::text)), total;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-core/tajo-core-backend/src/test/resources/queries/TestGroupByQuery/testGroupByWithExpressionKeys2.sql
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/queries/TestGroupByQuery/testGroupByWithExpressionKeys2.sql b/tajo-core/tajo-core-backend/src/test/resources/queries/TestGroupByQuery/testGroupByWithExpressionKeys2.sql
new file mode 100644
index 0000000..c98c121
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/test/resources/queries/TestGroupByQuery/testGroupByWithExpressionKeys2.sql
@@ -0,0 +1 @@
+select upper(lower(l_orderkey::text)) as key, count(1) as total from lineitem group by upper(lower(l_orderkey::text)) order by upper(lower(l_orderkey::text)), total;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-core/tajo-core-backend/src/test/resources/queries/TestJoinQuery/testLeftOuterJoinWithConstantExpr1.sql
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/queries/TestJoinQuery/testLeftOuterJoinWithConstantExpr1.sql b/tajo-core/tajo-core-backend/src/test/resources/queries/TestJoinQuery/testLeftOuterJoinWithConstantExpr1.sql
new file mode 100644
index 0000000..334c161
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/test/resources/queries/TestJoinQuery/testLeftOuterJoinWithConstantExpr1.sql
@@ -0,0 +1 @@
+select c_custkey, orders.o_orderkey, 'val' as val from customer left outer join orders on c_custkey = o_orderkey;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-core/tajo-core-backend/src/test/resources/queries/TestJoinQuery/testLeftOuterJoinWithConstantExpr2.sql
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/queries/TestJoinQuery/testLeftOuterJoinWithConstantExpr2.sql b/tajo-core/tajo-core-backend/src/test/resources/queries/TestJoinQuery/testLeftOuterJoinWithConstantExpr2.sql
new file mode 100644
index 0000000..3256e28
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/test/resources/queries/TestJoinQuery/testLeftOuterJoinWithConstantExpr2.sql
@@ -0,0 +1 @@
+select c_custkey, o.o_orderkey, 'val' as val from customer left outer join (select * from orders) o on c_custkey = o.o_orderkey
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-core/tajo-core-backend/src/test/resources/results/TestGroupByQuery/testGroupByWithExpressionKeys1.result
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/results/TestGroupByQuery/testGroupByWithExpressionKeys1.result b/tajo-core/tajo-core-backend/src/test/resources/results/TestGroupByQuery/testGroupByWithExpressionKeys1.result
new file mode 100644
index 0000000..d1f1282
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/test/resources/results/TestGroupByQuery/testGroupByWithExpressionKeys1.result
@@ -0,0 +1,5 @@
+key,total
+-------------------------------
+1,2
+2,1
+3,2
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-core/tajo-core-backend/src/test/resources/results/TestGroupByQuery/testGroupByWithExpressionKeys2.result
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/results/TestGroupByQuery/testGroupByWithExpressionKeys2.result b/tajo-core/tajo-core-backend/src/test/resources/results/TestGroupByQuery/testGroupByWithExpressionKeys2.result
new file mode 100644
index 0000000..d1f1282
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/test/resources/results/TestGroupByQuery/testGroupByWithExpressionKeys2.result
@@ -0,0 +1,5 @@
+key,total
+-------------------------------
+1,2
+2,1
+3,2
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-core/tajo-core-backend/src/test/resources/results/TestJoinQuery/testLeftOuterJoinWithConstantExpr1.result
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/results/TestJoinQuery/testLeftOuterJoinWithConstantExpr1.result b/tajo-core/tajo-core-backend/src/test/resources/results/TestJoinQuery/testLeftOuterJoinWithConstantExpr1.result
new file mode 100644
index 0000000..ed28172
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/test/resources/results/TestJoinQuery/testLeftOuterJoinWithConstantExpr1.result
@@ -0,0 +1,7 @@
+c_custkey,o_orderkey,val
+-------------------------------
+1,1,val
+2,2,val
+3,3,val
+4,0,val
+5,0,val
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/179a707f/tajo-core/tajo-core-backend/src/test/resources/results/TestJoinQuery/testLeftOuterJoinWithConstantExpr2.result
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/results/TestJoinQuery/testLeftOuterJoinWithConstantExpr2.result b/tajo-core/tajo-core-backend/src/test/resources/results/TestJoinQuery/testLeftOuterJoinWithConstantExpr2.result
new file mode 100644
index 0000000..ed28172
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/test/resources/results/TestJoinQuery/testLeftOuterJoinWithConstantExpr2.result
@@ -0,0 +1,7 @@
+c_custkey,o_orderkey,val
+-------------------------------
+1,1,val
+2,2,val
+3,3,val
+4,0,val
+5,0,val
\ No newline at end of file