Repository: tajo
Updated Branches:
  refs/heads/master 149a44d85 -> 0dcb702a0


TAJO-1947: Change Projection::setNamedExprs and getNamedExprs to set and get 
List<NamedExpr>.

Closes #842


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

Branch: refs/heads/master
Commit: 0dcb702a0b92ce0585a788c0fe49a2ef5bcbb79d
Parents: 149a44d
Author: Dongkyu Hwangbo <[email protected]>
Authored: Wed Nov 25 17:35:31 2015 -0800
Committer: Hyunsik Choi <[email protected]>
Committed: Wed Nov 25 17:36:08 2015 -0800

----------------------------------------------------------------------
 CHANGES                                           |  3 +++
 .../java/org/apache/tajo/algebra/Projection.java  | 17 ++++++++++-------
 .../org/apache/tajo/parser/sql/SQLAnalyzer.java   | 12 ++++++------
 .../java/org/apache/tajo/plan/LogicalPlanner.java | 12 ++++++------
 .../tajo/plan/rewrite/BaseSchemaBuildPhase.java   | 18 +++++++++---------
 .../org/apache/tajo/plan/util/PlannerUtil.java    |  2 +-
 .../plan/verifier/PreLogicalPlanVerifier.java     |  2 +-
 7 files changed, 36 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tajo/blob/0dcb702a/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 653dc6f..00e515e 100644
--- a/CHANGES
+++ b/CHANGES
@@ -120,6 +120,9 @@ Release 0.12.0 - unreleased
 
   SUB TASKS
 
+    TAJO-1947: Change Projection::setNamedExprs and getNamedExprs to set and 
+    get List<NamedExpr>. (Contributed by Dongkyu Hwangbo, Committed by hyunsik)
+
     TAJO-1946: Change Projectable::setTargets and getTargets to set and get
     List<Target>. (Contributed by Dongkyu Hwangbo, Committed by jihoon)
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/0dcb702a/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 24c4399..7809e91 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
@@ -23,18 +23,21 @@ import com.google.gson.annotations.Expose;
 import com.google.gson.annotations.SerializedName;
 import org.apache.tajo.util.TUtil;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class Projection extends UnaryOperator implements Cloneable {
   @Expose @SerializedName("IsDistinct")
   private boolean distinct = false;
   @Expose @SerializedName("Projections")
-  private NamedExpr[] targets;
+  private List<NamedExpr> targets;
 
   public Projection() {
     super(OpType.Projection);
   }
 
   public int size() {
-    return targets.length;
+    return targets.size();
   }
 
   public boolean isDistinct() {
@@ -45,11 +48,11 @@ public class Projection extends UnaryOperator implements 
Cloneable {
     distinct = true;
   }
 
-       public NamedExpr[] getNamedExprs() {
+  public List<NamedExpr> getNamedExprs() {
          return this.targets;
        }
 
-  public void setNamedExprs(NamedExpr[] targets) {
+  public void setNamedExprs(List<NamedExpr> targets) {
     this.targets = targets;
   }
 
@@ -74,9 +77,9 @@ public class Projection extends UnaryOperator implements 
Cloneable {
     Projection projection = (Projection)super.clone();
     projection.distinct = distinct;
     if (targets != null) {
-      projection.targets = new NamedExpr[targets.length];
-      for (int i = 0; i < targets.length; i++) {
-        projection.targets[i] = targets[i].clone();
+      projection.targets = new ArrayList<>();
+      for (int i = 0; i < targets.size(); i++) {
+        projection.targets.add(targets.get(i).clone());
       }
     }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/0dcb702a/tajo-core/src/main/java/org/apache/tajo/parser/sql/SQLAnalyzer.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/main/java/org/apache/tajo/parser/sql/SQLAnalyzer.java 
b/tajo-core/src/main/java/org/apache/tajo/parser/sql/SQLAnalyzer.java
index 50a869c..3344e2d 100644
--- a/tajo-core/src/main/java/org/apache/tajo/parser/sql/SQLAnalyzer.java
+++ b/tajo-core/src/main/java/org/apache/tajo/parser/sql/SQLAnalyzer.java
@@ -295,9 +295,9 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> 
{
   @Override
   public Projection visitSelect_list(Select_listContext ctx) {
     Projection projection = new Projection();
-    NamedExpr[] targets = new NamedExpr[ctx.select_sublist().size()];
-    for (int i = 0; i < targets.length; i++) {
-      targets[i] = visitSelect_sublist(ctx.select_sublist(i));
+    List<NamedExpr> targets = new ArrayList<>();
+    for (int i = 0; i < ctx.select_sublist().size(); i++) {
+      targets.add(visitSelect_sublist(ctx.select_sublist(i)));
     }
     projection.setNamedExprs(targets);
 
@@ -1235,11 +1235,11 @@ public class SQLAnalyzer extends 
SQLParserBaseVisitor<Expr> {
     String tableName = buildIdentifierChain(ctx.table_name().identifier());
     Relation relation = new Relation(tableName);
     SortSpec[] sortSpecs = buildSortSpecs(ctx.sort_specifier_list());
-    NamedExpr[] targets = new NamedExpr[sortSpecs.length];
+    List<NamedExpr> targets = new ArrayList<>();
     Projection projection = new Projection();
     int i = 0;
     for (SortSpec sortSpec : sortSpecs) {
-      targets[i++] = new NamedExpr(sortSpec.getKey());
+      targets.add(new NamedExpr(sortSpec.getKey()));
     }
     projection.setNamedExprs(targets);
     projection.setChild(relation);
@@ -1678,7 +1678,7 @@ public class SQLAnalyzer extends 
SQLParserBaseVisitor<Expr> {
           .map(value -> new NamedExpr(visitRow_value_predicand(value)))
           .collect(Collectors.toList());
       Projection projection = new Projection();
-      projection.setNamedExprs(values.toArray(new NamedExpr[values.size()]));
+      projection.setNamedExprs(values);
       insertExpr.setSubQuery(projection);
     } else {
       insertExpr.setSubQuery(visitQuery_expression(ctx.query_expression()));

http://git-wip-us.apache.org/repos/asf/tajo/blob/0dcb702a/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java 
b/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java
index 10d3595..79dad04 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java
@@ -309,8 +309,8 @@ public class LogicalPlanner extends 
BaseAlgebraVisitor<LogicalPlanner.PlanContex
 
     // It's for debugging or unit tests.
     List<Target> rawTargets = new ArrayList<>();
-    for (int i = 0; i < projection.getNamedExprs().length; i++) {
-      NamedExpr namedExpr = projection.getNamedExprs()[i];
+    for (int i = 0; i < projection.getNamedExprs().size(); i++) {
+      NamedExpr namedExpr = projection.getNamedExprs().get(i);
       EvalNode evalNode = exprAnnotator.createEvalNode(context, 
namedExpr.getExpr(),
           NameResolvingMode.RELS_AND_SUBEXPRS);
       rawTargets.add(new Target(evalNode, referenceNames[i]));
@@ -406,7 +406,7 @@ public class LogicalPlanner extends 
BaseAlgebraVisitor<LogicalPlanner.PlanContex
                                  Matcher matcher) throws TajoException {
     List<Integer> targetIds = new ArrayList<>();
     for (int i = 0; i < projection.size(); i++) {
-      NamedExpr namedExpr = projection.getNamedExprs()[i];
+      NamedExpr namedExpr = projection.getNamedExprs().get(i);
 
       if (PlannerUtil.existsAggregationFunction(namedExpr)) {
         context.queryBlock.setAggregationRequire();
@@ -438,7 +438,7 @@ public class LogicalPlanner extends 
BaseAlgebraVisitor<LogicalPlanner.PlanContex
                              List<ExprNormalizer.WindowSpecReferences> 
windowSpecReferencesList, Projection projection,
                              List<Integer> targetIds) throws TajoException {
     for (int i : targetIds) {
-      NamedExpr namedExpr = projection.getNamedExprs()[i];
+      NamedExpr namedExpr = projection.getNamedExprs().get(i);
       // Get all projecting references
       if (namedExpr.hasAlias()) {
         NamedExpr aliasedExpr = new NamedExpr(normalizedExprList[i].baseExpr, 
namedExpr.getAlias());
@@ -464,11 +464,11 @@ public class LogicalPlanner extends 
BaseAlgebraVisitor<LogicalPlanner.PlanContex
     LogicalPlan plan = context.plan;
     QueryBlock block = context.queryBlock;
 
-    int finalTargetNum = projection.getNamedExprs().length;
+    int finalTargetNum = projection.getNamedExprs().size();
     List<Target> targets = new ArrayList<>();
 
     for (int i = 0; i < finalTargetNum; i++) {
-      NamedExpr namedExpr = projection.getNamedExprs()[i];
+      NamedExpr namedExpr = projection.getNamedExprs().get(i);
       EvalNode evalNode = exprAnnotator.createEvalNode(context, 
namedExpr.getExpr(), NameResolvingMode.RELS_ONLY);
       if (namedExpr.hasAlias()) {
         targets.add(new Target(evalNode, namedExpr.getAlias()));

http://git-wip-us.apache.org/repos/asf/tajo/blob/0dcb702a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/BaseSchemaBuildPhase.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/BaseSchemaBuildPhase.java
 
b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/BaseSchemaBuildPhase.java
index 8776d8f..a1306ad 100644
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/BaseSchemaBuildPhase.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/BaseSchemaBuildPhase.java
@@ -185,8 +185,8 @@ public class BaseSchemaBuildPhase extends 
LogicalPlanPreprocessPhase {
       return newTargetExprs;
     }
 
-    private static NamedExpr [] 
voidResolveAsteriskNamedExpr(LogicalPlanner.PlanContext context,
-                                                             NamedExpr [] 
namedExprs) throws TajoException {
+    private static List<NamedExpr> 
voidResolveAsteriskNamedExpr(LogicalPlanner.PlanContext context,
+                                                             List<NamedExpr> 
namedExprs) throws TajoException {
       List<NamedExpr> rewrittenTargets = TUtil.newList();
       for (NamedExpr originTarget : namedExprs) {
         if (originTarget.getExpr().getType() == OpType.Asterisk) {
@@ -196,7 +196,7 @@ public class BaseSchemaBuildPhase extends 
LogicalPlanPreprocessPhase {
           rewrittenTargets.add(originTarget);
         }
       }
-      return rewrittenTargets.toArray(new NamedExpr[rewrittenTargets.size()]);
+      return rewrittenTargets;
     }
 
     @Override
@@ -224,9 +224,9 @@ public class BaseSchemaBuildPhase extends 
LogicalPlanPreprocessPhase {
         expr.setNamedExprs(voidResolveAsteriskNamedExpr(ctx, 
expr.getNamedExprs()));
       }
 
-      NamedExpr[] projectTargetExprs = expr.getNamedExprs();
-      for (int i = 0; i < expr.getNamedExprs().length; i++) {
-        NamedExpr namedExpr = projectTargetExprs[i];
+      List<NamedExpr> projectTargetExprs = expr.getNamedExprs();
+      for (int i = 0; i < expr.getNamedExprs().size(); i++) {
+        NamedExpr namedExpr = projectTargetExprs.get(i);
 
         // 1) Normalize all field names occurred in each expr into full 
qualified names
         NameRefInSelectListNormalizer.normalize(ctx, namedExpr.getExpr());
@@ -254,7 +254,7 @@ public class BaseSchemaBuildPhase extends 
LogicalPlanPreprocessPhase {
       return projectionNode;
     }
 
-    private List<Target> buildTargets(LogicalPlanner.PlanContext context, 
NamedExpr [] exprs) throws TajoException {
+    private List<Target> buildTargets(LogicalPlanner.PlanContext context, 
List<NamedExpr> exprs) throws TajoException {
       List<Target> targets = new ArrayList<>();
       for (NamedExpr namedExpr : exprs) {
         TajoDataTypes.DataType dataType = 
typeDeterminant.determineDataType(context, namedExpr.getExpr());
@@ -314,7 +314,7 @@ public class BaseSchemaBuildPhase extends 
LogicalPlanPreprocessPhase {
       LogicalNode child = visit(ctx, stack, expr.getChild());
 
       Projection projection = 
ctx.getQueryBlock().getSingletonExpr(OpType.Projection);
-      int finalTargetNum = projection.getNamedExprs().length;
+      int finalTargetNum = projection.getNamedExprs().size();
       List<Target> targets = new ArrayList<>();
 
       if (PlannerUtil.hasAsterisk(projection.getNamedExprs())) {
@@ -322,7 +322,7 @@ public class BaseSchemaBuildPhase extends 
LogicalPlanPreprocessPhase {
       }
 
       for (int i = 0; i < finalTargetNum; i++) {
-        NamedExpr namedExpr = projection.getNamedExprs()[i];
+        NamedExpr namedExpr = projection.getNamedExprs().get(i);
         EvalNode evalNode = annotator.createEvalNode(ctx, namedExpr.getExpr(), 
NameResolvingMode.SUBEXPRS_AND_RELS, true);
 
         if (namedExpr.hasAlias()) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/0dcb702a/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java 
b/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
index f9a6a70..53ac00f 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
@@ -969,7 +969,7 @@ public class PlannerUtil {
     return finder.getEvalNodes();
   }
 
-  public static boolean hasAsterisk(NamedExpr [] namedExprs) {
+  public static boolean hasAsterisk(List<NamedExpr> namedExprs) {
     for (NamedExpr eachTarget : namedExprs) {
       if (eachTarget.getExpr().getType() == OpType.Asterisk) {
         return true;

http://git-wip-us.apache.org/repos/asf/tajo/blob/0dcb702a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java
 
b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java
index e50c478..7fab5ba 100644
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java
@@ -314,7 +314,7 @@ public class PreLogicalPlanVerifier extends 
BaseAlgebraVisitor<PreLogicalPlanVer
       // This verification will be in LogicalPlanVerifier.
       if (!includeAsterisk) {
 
-        int projectColumnNum = projection.getNamedExprs().length;
+        int projectColumnNum = projection.getNamedExprs().size();
 
         if (expr.hasTargetColumns()) {
           int targetColumnNum = expr.getTargetColumns().length;

Reply via email to