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;
