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 2013/12/16 18:58:37 UTC
git commit: TAJO-419: Add missing visitor methods of AlgebraVisitor
and BaseAlgebraVisitor. (hyunsik)
Updated Branches:
refs/heads/master d930a90d5 -> 775cfaaad
TAJO-419: Add missing visitor methods of AlgebraVisitor and BaseAlgebraVisitor. (hyunsik)
Project: http://git-wip-us.apache.org/repos/asf/incubator-tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tajo/commit/775cfaaa
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tajo/tree/775cfaaa
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tajo/diff/775cfaaa
Branch: refs/heads/master
Commit: 775cfaaad49fee4e79b7cd582b381740461fa6b9
Parents: d930a90
Author: Hyunsik Choi <hy...@apache.org>
Authored: Tue Dec 17 02:58:17 2013 +0900
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Tue Dec 17 02:58:17 2013 +0900
----------------------------------------------------------------------
CHANGES.txt | 3 +
.../org/apache/tajo/algebra/Aggregation.java | 6 +-
.../java/org/apache/tajo/algebra/CastExpr.java | 6 +-
.../org/apache/tajo/algebra/CreateTable.java | 4 +-
.../java/org/apache/tajo/algebra/DataType.java | 68 ---
.../org/apache/tajo/algebra/DataTypeExpr.java | 68 +++
.../java/org/apache/tajo/algebra/OpType.java | 49 +-
.../org/apache/tajo/algebra/Projection.java | 6 +-
.../java/org/apache/tajo/algebra/Target.java | 67 ---
.../org/apache/tajo/algebra/TargetExpr.java | 67 +++
.../java/org/apache/tajo/algebra/TestExpr.java | 8 +-
.../tajo/engine/parser/HiveConverter.java | 10 +-
.../apache/tajo/engine/parser/SQLAnalyzer.java | 66 +--
.../tajo/engine/planner/AlgebraVisitor.java | 61 +-
.../tajo/engine/planner/BaseAlgebraVisitor.java | 587 +++++++++++++++----
.../engine/planner/BasicLogicalPlanVisitor.java | 2 +-
.../tajo/engine/planner/LogicalPlanner.java | 60 +-
17 files changed, 780 insertions(+), 358 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/775cfaaa/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 96a3b77..341787c 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -94,6 +94,9 @@ Release 0.8.0 - unreleased
IMPROVEMENTS
+ TAJO-419: Add missing visitor methods of AlgebraVisitor and
+ BaseAlgebraVisitor. (hyunsik)
+
TAJO-421: Improve split for compression file. (jinho)
TAJO-327: Add testcase to verify TAJO-16. (jaehwa)
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/775cfaaa/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 eccb873..72acaa9 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
@@ -21,7 +21,7 @@ package org.apache.tajo.algebra;
import org.apache.tajo.util.TUtil;
public class Aggregation extends UnaryOperator {
- private Target[] targets;
+ private TargetExpr[] targets;
private GroupElement [] groups;
private Expr havingCondition;
@@ -29,11 +29,11 @@ public class Aggregation extends UnaryOperator {
super(OpType.Aggregation);
}
- public Target[] getTargets() {
+ public TargetExpr[] getTargets() {
return this.targets;
}
- public void setTargets(Target[] targets) {
+ public void setTargets(TargetExpr[] targets) {
this.targets = targets;
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/775cfaaa/tajo-algebra/src/main/java/org/apache/tajo/algebra/CastExpr.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/CastExpr.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/CastExpr.java
index 349617f..ad793cd 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/CastExpr.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/CastExpr.java
@@ -20,9 +20,9 @@ package org.apache.tajo.algebra;
public class CastExpr extends Expr {
private Expr operand;
- private DataType target;
+ private DataTypeExpr target;
- public CastExpr(Expr operand, DataType target) {
+ public CastExpr(Expr operand, DataTypeExpr target) {
super(OpType.Cast);
this.operand = operand;
this.target = target;
@@ -32,7 +32,7 @@ public class CastExpr extends Expr {
return operand;
}
- public DataType getTarget() {
+ public DataTypeExpr getTarget() {
return target;
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/775cfaaa/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 41276ad..a6bc1e7 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
@@ -138,7 +138,7 @@ public class CreateTable extends Expr {
TUtil.checkEquals(params, another.params);
}
- public static class ColumnDefinition extends DataType {
+ public static class ColumnDefinition extends DataTypeExpr {
String col_name;
public ColumnDefinition(String columnName, String dataType) {
@@ -146,7 +146,7 @@ public class CreateTable extends Expr {
this.col_name = columnName;
}
- public ColumnDefinition(String columnName, DataType dataType) {
+ public ColumnDefinition(String columnName, DataTypeExpr dataType) {
super(dataType.getTypeName());
if (dataType.hasLengthOrPrecision()) {
setLengthOrPrecision(dataType.lengthOrPrecision);
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/775cfaaa/tajo-algebra/src/main/java/org/apache/tajo/algebra/DataType.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/DataType.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/DataType.java
deleted file mode 100644
index ed8a4a6..0000000
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/DataType.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tajo.algebra;
-
-import org.apache.tajo.util.TUtil;
-
-public class DataType extends Expr {
- String typeName;
- Integer lengthOrPrecision;
- Integer scale;
-
- public DataType(String typeName) {
- super(OpType.DataType);
- this.typeName = typeName;
- }
-
- public String getTypeName() {
- return this.typeName;
- }
-
- public boolean hasLengthOrPrecision() {
- return lengthOrPrecision != null;
- }
-
- public void setLengthOrPrecision(int lengthOrPrecision) {
- this.lengthOrPrecision = lengthOrPrecision;
- }
-
- public Integer getLengthOrPrecision() {
- return this.lengthOrPrecision;
- }
-
- public boolean hasScale() {
- return this.scale != null;
- }
-
- public void setScale(int scale) {
- this.scale = scale;
- }
-
- public Integer getScale() {
- return this.scale;
- }
-
- @Override
- boolean equalsTo(Expr expr) {
- DataType another = (DataType) expr;
- return typeName.equals(another.typeName) &&
- TUtil.checkEquals(lengthOrPrecision, another.lengthOrPrecision) &&
- TUtil.checkEquals(scale, another.scale);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/775cfaaa/tajo-algebra/src/main/java/org/apache/tajo/algebra/DataTypeExpr.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/DataTypeExpr.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/DataTypeExpr.java
new file mode 100644
index 0000000..7b2b903
--- /dev/null
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/DataTypeExpr.java
@@ -0,0 +1,68 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tajo.algebra;
+
+import org.apache.tajo.util.TUtil;
+
+public class DataTypeExpr extends Expr {
+ String typeName;
+ Integer lengthOrPrecision;
+ Integer scale;
+
+ public DataTypeExpr(String typeName) {
+ super(OpType.DataType);
+ this.typeName = typeName;
+ }
+
+ public String getTypeName() {
+ return this.typeName;
+ }
+
+ public boolean hasLengthOrPrecision() {
+ return lengthOrPrecision != null;
+ }
+
+ public void setLengthOrPrecision(int lengthOrPrecision) {
+ this.lengthOrPrecision = lengthOrPrecision;
+ }
+
+ public Integer getLengthOrPrecision() {
+ return this.lengthOrPrecision;
+ }
+
+ public boolean hasScale() {
+ return this.scale != null;
+ }
+
+ public void setScale(int scale) {
+ this.scale = scale;
+ }
+
+ public Integer getScale() {
+ return this.scale;
+ }
+
+ @Override
+ boolean equalsTo(Expr expr) {
+ DataTypeExpr another = (DataTypeExpr) expr;
+ return typeName.equals(another.typeName) &&
+ TUtil.checkEquals(lengthOrPrecision, another.lengthOrPrecision) &&
+ TUtil.checkEquals(scale, another.scale);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/775cfaaa/tajo-algebra/src/main/java/org/apache/tajo/algebra/OpType.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/OpType.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/OpType.java
index 3f8868b..cddba5d 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/OpType.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/OpType.java
@@ -25,21 +25,20 @@ import java.lang.reflect.Type;
public enum OpType {
// relational operators
- Relation(Relation.class),
- RelationList(RelationList.class),
- Rename,
- SimpleTableSubQuery(SimpleTableSubQuery.class),
- TablePrimaryTableSubQuery(TablePrimarySubQuery.class),
- Except(SetOperation.class),
- Having(Having.class),
- Aggregation(Aggregation.class),
- Intersect(SetOperation.class),
- Join(Join.class),
- Projection(Projection.class),
- Filter(Selection.class),
- Sort(Sort.class),
- Union(SetOperation.class),
- Limit(Limit.class),
+ Projection(Projection.class), // 0
+ Limit(Limit.class), // 1
+ Sort(Sort.class), // 2
+ Having(Having.class), // 3
+ Aggregation(Aggregation.class), // 4
+ Join(Join.class), // 5
+ Filter(Selection.class), // 6
+ Union(SetOperation.class), // 7
+ Except(SetOperation.class), // 8
+ Intersect(SetOperation.class), // 9
+ SimpleTableSubQuery(SimpleTableSubQuery.class), // 10
+ TablePrimaryTableSubQuery(TablePrimarySubQuery.class), // 11
+ RelationList(RelationList.class), // 12
+ Relation(Relation.class), // 13
// Data definition language
CreateTable(CreateTable.class),
@@ -48,12 +47,12 @@ public enum OpType {
// Insert or Update
Insert(Insert.class),
- // logical operators
+ // Logical Operators
And(BinaryOperator.class),
Or(BinaryOperator.class),
Not(NotExpr.class),
- // comparison predicates
+ // Comparison Predicates
Equals(BinaryOperator.class),
NotEquals(BinaryOperator.class),
LessThan(BinaryOperator.class),
@@ -61,43 +60,43 @@ public enum OpType {
GreaterThan(BinaryOperator.class),
GreaterThanOrEquals(BinaryOperator.class),
- // other predicates
+ // Other predicates
Between(BetweenPredicate.class),
CaseWhen(CaseWhenPredicate.class),
IsNullPredicate(IsNullPredicate.class),
InPredicate(InPredicate.class),
ValueList(ValueListExpr.class),
- Is,
ExistsPredicate(ExistsPredicate.class),
- // string operator or pattern matching predicates
+ // String Operator or Pattern Matching Predicates
LikePredicate(PatternMatchPredicate.class),
SimilarToPredicate(PatternMatchPredicate.class),
Regexp(PatternMatchPredicate.class),
Concatenate(BinaryOperator.class),
- // arithmetic operators
+ // Arithmetic Operators
Plus(BinaryOperator.class),
Minus(BinaryOperator.class),
Multiply(BinaryOperator.class),
Divide(BinaryOperator.class),
Modular(BinaryOperator.class),
- // other expressions
+ // Other Expressions
Sign(SignedExpr.class),
Column(ColumnReferenceExpr.class),
- Target(Target.class),
+ Target(TargetExpr.class),
Function(FunctionExpr.class),
- // set functions
+ // Set Functions
CountRowsFunction(CountRowsFunctionExpr.class),
GeneralSetFunction(GeneralSetFunctionExpr.class),
+ // Literal
Cast(CastExpr.class),
ScalarSubQuery(ScalarSubQuery.class),
Literal(LiteralValue.class),
Null(NullValue.class),
- DataType(org.apache.tajo.algebra.DataType.class);
+ DataType(DataTypeExpr.class);
private Class baseClass;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/775cfaaa/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 38520ae..958f20c 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
@@ -24,7 +24,7 @@ public class Projection extends UnaryOperator implements Cloneable {
private boolean all;
private boolean distinct = false;
- private Target[] targets;
+ private TargetExpr [] targets;
public Projection() {
super(OpType.Projection);
@@ -50,11 +50,11 @@ public class Projection extends UnaryOperator implements Cloneable {
return all;
}
- public Target[] getTargets() {
+ public TargetExpr[] getTargets() {
return this.targets;
}
- public void setTargets(Target[] targets) {
+ public void setTargets(TargetExpr[] targets) {
this.targets = targets;
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/775cfaaa/tajo-algebra/src/main/java/org/apache/tajo/algebra/Target.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Target.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Target.java
deleted file mode 100644
index 9172d6c..0000000
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Target.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tajo.algebra;
-
-import org.apache.tajo.util.TUtil;
-
-public class Target extends Expr {
- private Expr expr;
- private String alias;
-
- public Target(Expr expr) {
- super(OpType.Target);
- this.expr = expr;
- }
-
- public Target(Expr expr, String alias) {
- this(expr);
- setAlias(alias);
- }
-
- public Expr getExpr() {
- return expr;
- }
-
- public boolean hasAlias() {
- return this.alias != null;
- }
-
- public String getAlias() {
- return this.alias;
- }
-
- public void setAlias(String alias) {
- this.alias = alias;
- }
-
- @Override
- public boolean equalsTo(Expr obj) {
- if (obj instanceof Target) {
- Target another = (Target) obj;
- return expr.equals(another.expr) && TUtil.checkEquals(alias, another.alias);
- }
-
- return false;
- }
-
- @Override
- public String toJson() {
- return JsonHelper.toJson(this);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/775cfaaa/tajo-algebra/src/main/java/org/apache/tajo/algebra/TargetExpr.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/TargetExpr.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/TargetExpr.java
new file mode 100644
index 0000000..393790b
--- /dev/null
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/TargetExpr.java
@@ -0,0 +1,67 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tajo.algebra;
+
+import org.apache.tajo.util.TUtil;
+
+public class TargetExpr extends Expr {
+ private Expr expr;
+ private String alias;
+
+ public TargetExpr(Expr expr) {
+ super(OpType.Target);
+ this.expr = expr;
+ }
+
+ public TargetExpr(Expr expr, String alias) {
+ this(expr);
+ setAlias(alias);
+ }
+
+ public Expr getExpr() {
+ return expr;
+ }
+
+ public boolean hasAlias() {
+ return this.alias != null;
+ }
+
+ public String getAlias() {
+ return this.alias;
+ }
+
+ public void setAlias(String alias) {
+ this.alias = alias;
+ }
+
+ @Override
+ public boolean equalsTo(Expr obj) {
+ if (obj instanceof TargetExpr) {
+ TargetExpr another = (TargetExpr) obj;
+ return expr.equals(another.expr) && TUtil.checkEquals(alias, another.alias);
+ }
+
+ return false;
+ }
+
+ @Override
+ public String toJson() {
+ return JsonHelper.toJson(this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/775cfaaa/tajo-algebra/src/test/java/org/apache/tajo/algebra/TestExpr.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/test/java/org/apache/tajo/algebra/TestExpr.java b/tajo-algebra/src/test/java/org/apache/tajo/algebra/TestExpr.java
index 24b535b..660176d 100644
--- a/tajo-algebra/src/test/java/org/apache/tajo/algebra/TestExpr.java
+++ b/tajo-algebra/src/test/java/org/apache/tajo/algebra/TestExpr.java
@@ -102,8 +102,8 @@ public class TestExpr {
selection.setChild(relation);
Aggregation aggregation = new Aggregation();
- aggregation.setTargets(new Target[]{
- new Target(new ColumnReferenceExpr("col1"))
+ aggregation.setTargets(new TargetExpr[]{
+ new TargetExpr(new ColumnReferenceExpr("col1"))
}
);
@@ -129,8 +129,8 @@ public class TestExpr {
selection.setChild(relation);
Aggregation aggregation = new Aggregation();
- aggregation.setTargets(new Target[]{
- new Target(new ColumnReferenceExpr("col1"))
+ aggregation.setTargets(new TargetExpr[]{
+ new TargetExpr(new ColumnReferenceExpr("col1"))
});
aggregation.setChild(selection);
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/775cfaaa/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/HiveConverter.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/HiveConverter.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/HiveConverter.java
index 120f828..6de1bff 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/HiveConverter.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/HiveConverter.java
@@ -542,7 +542,7 @@ public class HiveConverter extends HiveParserBaseVisitor<Expr> {
public Expr visitSelectList(HiveParser.SelectListContext ctx) {
Expr current = null;
Projection projection = new Projection();
- Target[] targets = new Target[ctx.selectItem().size()];
+ TargetExpr[] targets = new TargetExpr[ctx.selectItem().size()];
for (int i = 0; i < targets.length; i++) {
targets[i] = visitSelectItem(ctx.selectItem(i));
}
@@ -564,9 +564,9 @@ public class HiveConverter extends HiveParserBaseVisitor<Expr> {
}
@Override
- public Target visitSelectItem(HiveParser.SelectItemContext ctx) {
+ public TargetExpr visitSelectItem(HiveParser.SelectItemContext ctx) {
ColumnReferenceExpr columnReference;
- Target target = null;
+ TargetExpr target = null;
String tableName = "", itemName = "", alias = "";
@@ -587,9 +587,9 @@ public class HiveConverter extends HiveParserBaseVisitor<Expr> {
if (ctx.selectExpression() != null) {
if (ctx.selectExpression().expression() != null) {
- target = new Target(visitSelectExpression(ctx.selectExpression()));
+ target = new TargetExpr(visitSelectExpression(ctx.selectExpression()));
} else {
- target = new Target(columnReference);
+ target = new TargetExpr(columnReference);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/775cfaaa/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
index 6d1ca3e..2cd91f9 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
@@ -226,7 +226,7 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
if (ctx.MULTIPLY() != null) {
projection.setAll();
} else {
- Target [] targets = new Target[ctx.select_sublist().size()];
+ TargetExpr[] targets = new TargetExpr[ctx.select_sublist().size()];
for (int i = 0; i < targets.length; i++) {
targets[i] = visitSelect_sublist(ctx.select_sublist(i));
}
@@ -247,9 +247,9 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
* @return
*/
@Override
- public Target visitSelect_sublist(SQLParser.Select_sublistContext ctx) {
+ public TargetExpr visitSelect_sublist(SQLParser.Select_sublistContext ctx) {
if (ctx.asterisked_qualifier != null) {
- return new Target(new ColumnReferenceExpr(ctx.asterisked_qualifier.getText(), "*"));
+ return new TargetExpr(new ColumnReferenceExpr(ctx.asterisked_qualifier.getText(), "*"));
} else {
return visitDerived_column(ctx.derived_column());
}
@@ -801,8 +801,8 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
}
@Override
- public Target visitDerived_column(SQLParser.Derived_columnContext ctx) {
- Target target = new Target(visitValue_expression(ctx.value_expression()));
+ public TargetExpr visitDerived_column(SQLParser.Derived_columnContext ctx) {
+ TargetExpr target = new TargetExpr(visitValue_expression(ctx.value_expression()));
if (ctx.as_clause() != null) {
target.setAlias(ctx.as_clause().Identifier().getText());
}
@@ -918,7 +918,7 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
CreateTable.ColumnDefinition [] elements = new CreateTable.ColumnDefinition[size];
for (int i = 0; i < size; i++) {
String name = ctx.field_element(i).name.getText();
- DataType typeDef = visitData_type(ctx.field_element(i).field_type().data_type());
+ DataTypeExpr typeDef = visitData_type(ctx.field_element(i).field_type().data_type());
elements[i] = new CreateTable.ColumnDefinition(name, typeDef);
}
@@ -985,10 +985,10 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
}
@Override
- public DataType visitData_type(SQLParser.Data_typeContext ctx) {
+ public DataTypeExpr visitData_type(SQLParser.Data_typeContext ctx) {
SQLParser.Predefined_typeContext predefined_type = ctx.predefined_type();
- DataType typeDefinition = null;
+ DataTypeExpr typeDefinition = null;
if (predefined_type.character_string_type() != null) {
SQLParser.Character_string_typeContext character_string_type =
predefined_type.character_string_type();
@@ -996,7 +996,7 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
if ((character_string_type.CHARACTER() != null || character_string_type.CHAR() != null) &&
character_string_type.VARYING() == null) {
- typeDefinition = new DataType(Type.CHAR.name());
+ typeDefinition = new DataTypeExpr(Type.CHAR.name());
if (character_string_type.type_length() != null) {
typeDefinition.setLengthOrPrecision(
@@ -1006,7 +1006,7 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
} else if (character_string_type.VARCHAR() != null
|| character_string_type.VARYING() != null) {
- typeDefinition = new DataType(Type.VARCHAR.name());
+ typeDefinition = new DataTypeExpr(Type.VARCHAR.name());
if (character_string_type.type_length() != null) {
typeDefinition.setLengthOrPrecision(
@@ -1014,7 +1014,7 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
}
} else if (character_string_type.TEXT() != null) {
- typeDefinition = new DataType(Type.TEXT.name());
+ typeDefinition = new DataTypeExpr(Type.TEXT.name());
}
} else if (predefined_type.national_character_string_type() != null) {
@@ -1022,9 +1022,9 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
predefined_type.national_character_string_type();
if ((nchar_type.CHAR() != null || nchar_type.CHARACTER() != null
|| nchar_type.NCHAR() != null) && nchar_type.VARYING() == null) {
- typeDefinition = new DataType(Type.NCHAR.name());
+ typeDefinition = new DataTypeExpr(Type.NCHAR.name());
} else if (nchar_type.NVARCHAR() != null || nchar_type.VARYING() != null) {
- typeDefinition = new DataType(Type.NVARCHAR.name());
+ typeDefinition = new DataTypeExpr(Type.NVARCHAR.name());
}
if (nchar_type.type_length() != null) {
@@ -1035,7 +1035,7 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
} else if (predefined_type.binary_large_object_string_type() != null) {
SQLParser.Binary_large_object_string_typeContext blob_type =
predefined_type.binary_large_object_string_type();
- typeDefinition = new DataType(Type.BLOB.name());
+ typeDefinition = new DataTypeExpr(Type.BLOB.name());
if (blob_type.type_length() != null) {
typeDefinition.setLengthOrPrecision(
Integer.parseInt(blob_type.type_length().NUMBER().getText()));
@@ -1046,18 +1046,18 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
SQLParser.Exact_numeric_typeContext exactType =
predefined_type.numeric_type().exact_numeric_type();
if (exactType.TINYINT() != null || exactType.INT1() != null) {
- typeDefinition = new DataType(Type.INT1.name());
+ typeDefinition = new DataTypeExpr(Type.INT1.name());
} else if (exactType.INT2() != null || exactType.SMALLINT() != null) {
- typeDefinition = new DataType(Type.INT2.name());
+ typeDefinition = new DataTypeExpr(Type.INT2.name());
} else if (exactType.INT4() != null || exactType.INTEGER() != null ||
exactType.INT() != null) {
- typeDefinition = new DataType(Type.INT4.name());
+ typeDefinition = new DataTypeExpr(Type.INT4.name());
} else if (exactType.INT8() != null || exactType.BIGINT() != null) {
- typeDefinition = new DataType(Type.INT8.name());
+ typeDefinition = new DataTypeExpr(Type.INT8.name());
} else if (exactType.NUMERIC() != null) {
- typeDefinition = new DataType(Type.NUMERIC.name());
+ typeDefinition = new DataTypeExpr(Type.NUMERIC.name());
} else if (exactType.DECIMAL() != null || exactType.DEC() != null) {
- typeDefinition = new DataType(Type.DECIMAL.name());
+ typeDefinition = new DataTypeExpr(Type.DECIMAL.name());
}
if (typeDefinition.getTypeName().equals(Type.NUMERIC.name()) ||
@@ -1076,34 +1076,34 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
predefined_type.numeric_type().approximate_numeric_type();
if (approximateType.FLOAT() != null || approximateType.FLOAT4() != null
|| approximateType.REAL() != null) {
- typeDefinition = new DataType(Type.FLOAT4.name());
+ typeDefinition = new DataTypeExpr(Type.FLOAT4.name());
} else if (approximateType.FLOAT8() != null || approximateType.DOUBLE() != null) {
- typeDefinition = new DataType(Type.FLOAT8.name());
+ typeDefinition = new DataTypeExpr(Type.FLOAT8.name());
}
}
} else if (predefined_type.boolean_type() != null) {
- typeDefinition = new DataType(Type.BOOLEAN.name());
+ typeDefinition = new DataTypeExpr(Type.BOOLEAN.name());
} else if (predefined_type.datetime_type() != null) {
SQLParser.Datetime_typeContext dateTimeType = predefined_type.datetime_type();
if (dateTimeType.DATE() != null) {
- typeDefinition = new DataType(Type.DATE.name());
+ typeDefinition = new DataTypeExpr(Type.DATE.name());
} else if (dateTimeType.TIME(0) != null && dateTimeType.ZONE() == null) {
- typeDefinition = new DataType(Type.TIME.name());
+ typeDefinition = new DataTypeExpr(Type.TIME.name());
} else if ((dateTimeType.TIME(0) != null && dateTimeType.ZONE() != null) ||
dateTimeType.TIMETZ() != null) {
- typeDefinition = new DataType(Type.TIMEZ.name());
+ typeDefinition = new DataTypeExpr(Type.TIMEZ.name());
} else if (dateTimeType.TIMESTAMP() != null && dateTimeType.ZONE() == null) {
- typeDefinition = new DataType(Type.TIMESTAMP.name());
+ typeDefinition = new DataTypeExpr(Type.TIMESTAMP.name());
} else if ((dateTimeType.TIMESTAMP() != null && dateTimeType.ZONE() != null) ||
dateTimeType.TIMESTAMPTZ() != null) {
- typeDefinition = new DataType(Type.TIMESTAMPZ.name());
+ typeDefinition = new DataTypeExpr(Type.TIMESTAMPZ.name());
}
} else if (predefined_type.bit_type() != null) {
SQLParser.Bit_typeContext bitType = predefined_type.bit_type();
if (bitType.VARBIT() != null || bitType.VARYING() != null) {
- typeDefinition = new DataType(Type.VARBIT.name());
+ typeDefinition = new DataTypeExpr(Type.VARBIT.name());
} else {
- typeDefinition = new DataType(Type.BIT.name());
+ typeDefinition = new DataTypeExpr(Type.BIT.name());
}
if (bitType.type_length() != null) {
typeDefinition.setLengthOrPrecision(
@@ -1112,9 +1112,9 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
} else if (predefined_type.binary_type() != null) {
SQLParser.Binary_typeContext binaryType = predefined_type.binary_type();
if (binaryType.VARBINARY() != null || binaryType.VARYING() != null) {
- typeDefinition = new DataType(Type.VARBINARY.name());
+ typeDefinition = new DataTypeExpr(Type.VARBINARY.name());
} else {
- typeDefinition = new DataType(Type.BINARY.name());
+ typeDefinition = new DataTypeExpr(Type.BINARY.name());
}
if (binaryType.type_length() != null) {
@@ -1211,7 +1211,7 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
@Override public Expr visitCast_specification(SQLParser.Cast_specificationContext ctx) {
Expr operand = visitChildren(ctx.cast_operand());
- DataType castTarget = visitData_type(ctx.cast_target().data_type());
+ DataTypeExpr castTarget = visitData_type(ctx.cast_target().data_type());
return new CastExpr(operand, castTarget);
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/775cfaaa/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/AlgebraVisitor.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/AlgebraVisitor.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/AlgebraVisitor.java
index 345320c..0bc957d 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/AlgebraVisitor.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/AlgebraVisitor.java
@@ -23,6 +23,7 @@ import org.apache.tajo.algebra.*;
import java.util.Stack;
public interface AlgebraVisitor<CONTEXT, RESULT> {
+ // Relational Operators
RESULT visitProjection(CONTEXT ctx, Stack<OpType> stack, Projection expr) throws PlanningException;
RESULT visitLimit(CONTEXT ctx, Stack<OpType> stack, Limit expr) throws PlanningException;
RESULT visitSort(CONTEXT ctx, Stack<OpType> stack, Sort expr) throws PlanningException;
@@ -33,9 +34,67 @@ public interface AlgebraVisitor<CONTEXT, RESULT> {
RESULT visitUnion(CONTEXT ctx, Stack<OpType> stack, SetOperation expr) throws PlanningException;
RESULT visitExcept(CONTEXT ctx, Stack<OpType> stack, SetOperation expr) throws PlanningException;
RESULT visitIntersect(CONTEXT ctx, Stack<OpType> stack, SetOperation expr) throws PlanningException;
- RESULT visitRelationList(CONTEXT ctx, Stack<OpType> stack, RelationList expr) throws PlanningException;
+ RESULT visitSimpleTableSubQuery(CONTEXT ctx, Stack<OpType> stack, SimpleTableSubQuery expr) throws PlanningException;
RESULT visitTableSubQuery(CONTEXT ctx, Stack<OpType> stack, TablePrimarySubQuery expr) throws PlanningException;
+ RESULT visitRelationList(CONTEXT ctx, Stack<OpType> stack, RelationList expr) throws PlanningException;
RESULT visitRelation(CONTEXT ctx, Stack<OpType> stack, Relation expr) throws PlanningException;
+
+ // Data definition language
RESULT visitCreateTable(CONTEXT ctx, Stack<OpType> stack, CreateTable expr) throws PlanningException;
RESULT visitDropTable(CONTEXT ctx, Stack<OpType> stack, DropTable expr) throws PlanningException;
+
+ // Insert or Update
+ RESULT visitInsert(CONTEXT ctx, Stack<OpType> stack, Insert expr) throws PlanningException;
+
+ // Logical operators
+ RESULT visitAnd(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException;
+ RESULT visitOr(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException;
+ RESULT visitNot(CONTEXT ctx, Stack<OpType> stack, NotExpr expr) throws PlanningException;
+
+ // comparison predicates
+ RESULT visitEquals(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException;
+ RESULT visitNotEquals(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException;
+ RESULT visitLessThan(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException;
+ RESULT visitLessThanOrEquals(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException;
+ RESULT visitGreaterThan(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException;
+ RESULT visitGreaterThanOrEquals(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException;
+
+ // Other Predicates
+ RESULT visitBetween(CONTEXT ctx, Stack<OpType> stack, BetweenPredicate expr) throws PlanningException;
+ RESULT visitCaseWhen(CONTEXT ctx, Stack<OpType> stack, CaseWhenPredicate expr) throws PlanningException;
+ RESULT visitIsNullPredicate(CONTEXT ctx, Stack<OpType> stack, IsNullPredicate expr) throws PlanningException;
+ RESULT visitInPredicate(CONTEXT ctx, Stack<OpType> stack, InPredicate expr) throws PlanningException;
+ RESULT visitValueListExpr(CONTEXT ctx, Stack<OpType> stack, ValueListExpr expr) throws PlanningException;
+ RESULT visitExistsPredicate(CONTEXT ctx, Stack<OpType> stack, ExistsPredicate expr) throws PlanningException;
+
+ // String Operator or Pattern Matching Predicates
+ RESULT visitLikePredicate(CONTEXT ctx, Stack<OpType> stack, PatternMatchPredicate expr) throws PlanningException;
+ RESULT visitSimilarToPredicate(CONTEXT ctx, Stack<OpType> stack, PatternMatchPredicate expr) throws PlanningException;
+ RESULT visitRegexpPredicate(CONTEXT ctx, Stack<OpType> stack, PatternMatchPredicate expr) throws PlanningException;
+ RESULT visitConcatenate(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException;
+
+ // arithmetic operators
+ RESULT visitPlus(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException;
+ RESULT visitMinus(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException;
+ RESULT visitMultiply(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException;
+ RESULT visitDivide(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException;
+ RESULT visitModular(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException;
+
+ // other expressions
+ RESULT visitSign(CONTEXT ctx, Stack<OpType> stack, SignedExpr expr) throws PlanningException;
+ RESULT visitColumnReference(CONTEXT ctx, Stack<OpType> stack, ColumnReferenceExpr expr) throws PlanningException;
+ RESULT visitTargetExpr(CONTEXT ctx, Stack<OpType> stack, TargetExpr expr) throws PlanningException;
+ RESULT visitFunction(CONTEXT ctx, Stack<OpType> stack, FunctionExpr expr) throws PlanningException;
+
+ // set functions
+ RESULT visitCountRowsFunction(CONTEXT ctx, Stack<OpType> stack, CountRowsFunctionExpr expr) throws PlanningException;
+ RESULT visitGeneralSetFunction(CONTEXT ctx, Stack<OpType> stack, GeneralSetFunctionExpr expr)
+ throws PlanningException;
+
+ // Literal
+ RESULT visitCastExpr(CONTEXT ctx, Stack<OpType> stack, CastExpr expr) throws PlanningException;
+ RESULT visitScalarSubQuery(CONTEXT ctx, Stack<OpType> stack, ScalarSubQuery expr) throws PlanningException;
+ RESULT visitLiteral(CONTEXT ctx, Stack<OpType> stack, LiteralValue expr) throws PlanningException;
+ RESULT visitNullValue(CONTEXT ctx, Stack<OpType> stack, NullValue expr) throws PlanningException;
+ RESULT visitDataType(CONTEXT ctx, Stack<OpType> stack, DataTypeExpr expr) throws PlanningException;
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/775cfaaa/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/BaseAlgebraVisitor.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/BaseAlgebraVisitor.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/BaseAlgebraVisitor.java
index f974e1d..2195e9d 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/BaseAlgebraVisitor.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/BaseAlgebraVisitor.java
@@ -22,7 +22,7 @@ import org.apache.tajo.algebra.*;
import java.util.Stack;
-public abstract class BaseAlgebraVisitor<CONTEXT, RESULT> implements AlgebraVisitor<CONTEXT, RESULT> {
+public class BaseAlgebraVisitor<CONTEXT, RESULT> implements AlgebraVisitor<CONTEXT, RESULT> {
/**
* The prehook is called before each expression is visited.
@@ -39,66 +39,192 @@ public abstract class BaseAlgebraVisitor<CONTEXT, RESULT> implements AlgebraVisi
}
/**
- * visitChild visits each relational operator expression recursively.
+ * visit visits each relational operator expression recursively.
*
* @param stack The stack contains the upper operators' type.
* @param expr The visiting relational operator
*/
- public RESULT visitChild(CONTEXT ctx, Stack<OpType> stack, Expr expr) throws PlanningException {
+ public RESULT visit(CONTEXT ctx, Stack<OpType> stack, Expr expr) throws PlanningException {
preHook(ctx, stack, expr);
- RESULT current;
+ RESULT current = null;
+
switch (expr.getType()) {
- case Projection:
- current = visitProjection(ctx, stack, (Projection) expr);
- break;
- case Limit:
- current = visitLimit(ctx, stack, (Limit) expr);
- break;
- case Sort:
- current = visitSort(ctx, stack, (Sort) expr);
- break;
- case Having:
- current = visitHaving(ctx, stack, (Having) expr);
- break;
- case Aggregation:
- current = visitGroupBy(ctx, stack, (Aggregation) expr);
- break;
- case Join:
- current = visitJoin(ctx, stack, (Join) expr);
- break;
- case Filter:
- current = visitFilter(ctx, stack, (Selection) expr);
- break;
- case Union:
- current = visitUnion(ctx, stack, (SetOperation) expr);
- break;
- case Except:
- current = visitExcept(ctx, stack, (SetOperation) expr);
- break;
- case Intersect:
- current = visitIntersect(ctx, stack, (SetOperation) expr);
- break;
- case RelationList:
- current = visitRelationList(ctx, stack, (RelationList) expr);
- break;
- case TablePrimaryTableSubQuery:
- current = visitTableSubQuery(ctx, stack, (TablePrimarySubQuery) expr);
- break;
- case Relation:
- current = visitRelation(ctx, stack, (Relation) expr);
- break;
- case Insert:
- current = visitInsert(ctx, stack, (Insert) expr);
- break;
- case CreateTable:
- current = visitCreateTable(ctx, stack, (CreateTable) expr);
- break;
- case DropTable:
- current = visitDropTable(ctx, stack, (DropTable) expr);
- break;
- default:
- throw new PlanningException("Cannot support this type algebra \"" + expr.getType() + "\"");
+
+ case Projection:
+ current = visitProjection(ctx, stack, (Projection) expr);
+ break;
+ case Limit:
+ current = visitLimit(ctx, stack, (Limit) expr);
+ break;
+ case Sort:
+ current = visitSort(ctx, stack, (Sort) expr);
+ break;
+ case Having:
+ current = visitHaving(ctx, stack, (Having) expr);
+ break;
+ case Aggregation:
+ current = visitGroupBy(ctx, stack, (Aggregation) expr);
+ break;
+ case Join:
+ current = visitJoin(ctx, stack, (Join) expr);
+ break;
+ case Filter:
+ current = visitFilter(ctx, stack, (Selection) expr);
+ break;
+ case Union:
+ current = visitUnion(ctx, stack, (SetOperation) expr);
+ break;
+ case Except:
+ current = visitExcept(ctx, stack, (SetOperation) expr);
+ break;
+ case Intersect:
+ current = visitIntersect(ctx, stack, (SetOperation) expr);
+ break;
+ case SimpleTableSubQuery:
+ current = visitSimpleTableSubQuery(ctx, stack, (SimpleTableSubQuery) expr);
+ break;
+ case TablePrimaryTableSubQuery:
+ current = visitTableSubQuery(ctx, stack, (TablePrimarySubQuery) expr);
+ break;
+ case RelationList:
+ current = visitRelationList(ctx, stack, (RelationList) expr);
+ break;
+ case Relation:
+ current = visitRelation(ctx, stack, (Relation) expr);
+ break;
+
+ case CreateTable:
+ current = visitCreateTable(ctx, stack, (CreateTable) expr);
+ break;
+ case DropTable:
+ current = visitDropTable(ctx, stack, (DropTable) expr);
+ break;
+
+ case Insert:
+ current = visitInsert(ctx, stack, (Insert) expr);
+ break;
+
+ case And:
+ current = visitAnd(ctx, stack, (BinaryOperator) expr);
+ break;
+ case Or:
+ current = visitOr(ctx, stack, (BinaryOperator) expr);
+ break;
+ case Not:
+ current = visitNot(ctx, stack, (NotExpr) expr);
+ break;
+
+ case Equals:
+ current = visitEquals(ctx, stack, (BinaryOperator) expr);
+ break;
+ case NotEquals:
+ current = visitNotEquals(ctx, stack, (BinaryOperator) expr);
+ break;
+ case LessThan:
+ current = visitLessThan(ctx, stack, (BinaryOperator) expr);
+ break;
+ case LessThanOrEquals:
+ current = visitLessThanOrEquals(ctx, stack, (BinaryOperator) expr);
+ break;
+ case GreaterThan:
+ current = visitGreaterThan(ctx, stack, (BinaryOperator) expr);
+ break;
+ case GreaterThanOrEquals:
+ current = visitGreaterThanOrEquals(ctx, stack, (BinaryOperator) expr);
+ break;
+
+ // Other Predicates
+ case Between:
+ current = visitBetween(ctx, stack, (BetweenPredicate) expr);
+ break;
+ case CaseWhen:
+ current = visitCaseWhen(ctx, stack, (CaseWhenPredicate) expr);
+ break;
+ case IsNullPredicate:
+ current = visitIsNullPredicate(ctx, stack, (IsNullPredicate) expr);
+ break;
+ case InPredicate:
+ current = visitInPredicate(ctx, stack, (InPredicate) expr);
+ break;
+ case ValueList:
+ current = visitValueListExpr(ctx, stack, (ValueListExpr) expr);
+ break;
+ case ExistsPredicate:
+ current = visitExistsPredicate(ctx, stack, (ExistsPredicate) expr);
+ break;
+
+ // String Operator or Pattern Matching Predicates
+ case LikePredicate:
+ current = visitLikePredicate(ctx, stack, (PatternMatchPredicate) expr);
+ break;
+ case SimilarToPredicate:
+ current = visitSimilarToPredicate(ctx, stack, (PatternMatchPredicate) expr);
+ break;
+ case Regexp:
+ current = visitRegexpPredicate(ctx, stack, (PatternMatchPredicate) expr);
+ break;
+ case Concatenate:
+ current = visitConcatenate(ctx, stack, (BinaryOperator) expr);
+ break;
+
+ // Arithmetic Operators
+ case Plus:
+ current = visitPlus(ctx, stack, (BinaryOperator) expr);
+ break;
+ case Minus:
+ current = visitMinus(ctx, stack, (BinaryOperator) expr);
+ break;
+ case Multiply:
+ current = visitMultiply(ctx, stack, (BinaryOperator) expr);
+ break;
+ case Divide:
+ current = visitDivide(ctx, stack, (BinaryOperator) expr);
+ break;
+ case Modular:
+ current = visitModular(ctx, stack, (BinaryOperator) expr);
+ break;
+
+ // Other Expressions
+ case Sign:
+ current = visitSign(ctx, stack, (SignedExpr) expr);
+ break;
+ case Column:
+ current = visitColumnReference(ctx, stack, (ColumnReferenceExpr) expr);
+ break;
+ case Target:
+ current = visitTargetExpr(ctx, stack, (TargetExpr) expr);
+ break;
+ case Function:
+ current = visitFunction(ctx, stack, (FunctionExpr) expr);
+ break;
+
+
+ case CountRowsFunction:
+ current = visitCountRowsFunction(ctx, stack, (CountRowsFunctionExpr) expr);
+ break;
+ case GeneralSetFunction:
+ current = visitGeneralSetFunction(ctx, stack, (GeneralSetFunctionExpr) expr);
+ break;
+
+ case Cast:
+ current = visitCastExpr(ctx, stack, (CastExpr) expr);
+ break;
+ case ScalarSubQuery:
+ current = visitScalarSubQuery(ctx, stack, (ScalarSubQuery) expr);
+ break;
+ case Literal:
+ current = visitLiteral(ctx, stack, (LiteralValue) expr);
+ break;
+ case Null:
+ current = visitNullValue(ctx, stack, (NullValue) expr);
+ break;
+ case DataType:
+ current = visitDataType(ctx, stack, (DataTypeExpr) expr);
+ break;
+
+ default:
+ throw new PlanningException("Cannot support this type algebra \"" + expr.getType() + "\"");
}
postHook(ctx, stack, expr, current);
@@ -106,112 +232,97 @@ public abstract class BaseAlgebraVisitor<CONTEXT, RESULT> implements AlgebraVisi
return current;
}
- protected RESULT visitInsert(CONTEXT ctx, Stack<OpType> stack, Insert expr) throws PlanningException {
+ private RESULT visitDefaultUnaryExpr(CONTEXT ctx, Stack<OpType> stack, UnaryOperator expr) throws PlanningException {
stack.push(expr.getType());
- RESULT child = visitChild(ctx, stack, expr.getSubQuery());
+ RESULT child = visit(ctx, stack, expr.getChild());
stack.pop();
return child;
}
- @Override
- public RESULT visitProjection(CONTEXT ctx, Stack<OpType> stack, Projection expr) throws PlanningException {
+ private RESULT visitDefaultBinaryExpr(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr)
+ throws PlanningException {
stack.push(expr.getType());
- RESULT child = visitChild(ctx, stack, expr.getChild());
+ RESULT child = visit(ctx, stack, expr.getLeft());
+ visit(ctx, stack, expr.getRight());
stack.pop();
return child;
}
@Override
+ public RESULT visitProjection(CONTEXT ctx, Stack<OpType> stack, Projection expr) throws PlanningException {
+ return visitDefaultUnaryExpr(ctx, stack, expr);
+ }
+
+ @Override
public RESULT visitLimit(CONTEXT ctx, Stack<OpType> stack, Limit expr) throws PlanningException {
- stack.push(expr.getType());
- RESULT child = visitChild(ctx, stack, expr.getChild());
- stack.pop();
- return child;
+ return visitDefaultUnaryExpr(ctx, stack, expr);
}
@Override
public RESULT visitSort(CONTEXT ctx, Stack<OpType> stack, Sort expr) throws PlanningException {
- stack.push(expr.getType());
- RESULT child = visitChild(ctx, stack, expr.getChild());
- stack.pop();
- return child;
+ return visitDefaultUnaryExpr(ctx, stack, expr);
}
@Override
public RESULT visitHaving(CONTEXT ctx, Stack<OpType> stack, Having expr) throws PlanningException {
- stack.push(expr.getType());
- RESULT child = visitChild(ctx, stack, expr.getChild());
- stack.pop();
- return child;
+ return visitDefaultUnaryExpr(ctx, stack, expr);
}
@Override
public RESULT visitGroupBy(CONTEXT ctx, Stack<OpType> stack, Aggregation expr) throws PlanningException {
- stack.push(expr.getType());
- RESULT child = visitChild(ctx, stack, expr.getChild());
- stack.pop();
- return child;
+ return visitDefaultUnaryExpr(ctx, stack, expr);
}
@Override
public RESULT visitJoin(CONTEXT ctx, Stack<OpType> stack, Join expr) throws PlanningException {
- stack.push(expr.getType());
- RESULT child = visitChild(ctx, stack, expr.getLeft());
- visitChild(ctx, stack, expr.getRight());
- stack.pop();
- return child;
+ return visitDefaultBinaryExpr(ctx, stack, expr);
}
@Override
public RESULT visitFilter(CONTEXT ctx, Stack<OpType> stack, Selection expr) throws PlanningException {
- stack.push(expr.getType());
- RESULT child = visitChild(ctx, stack, expr.getChild());
- stack.pop();
- return child;
+ return visitDefaultUnaryExpr(ctx, stack, expr);
}
@Override
public RESULT visitUnion(CONTEXT ctx, Stack<OpType> stack, SetOperation expr) throws PlanningException {
- stack.push(expr.getType());
- RESULT child = visitChild(ctx, stack, expr.getLeft());
- visitChild(ctx, stack, expr.getRight());
- stack.pop();
- return child;
+ return visitDefaultBinaryExpr(ctx, stack, expr);
}
@Override
public RESULT visitExcept(CONTEXT ctx, Stack<OpType> stack, SetOperation expr) throws PlanningException {
- stack.push(expr.getType());
- RESULT child = visitChild(ctx, stack, expr.getLeft());
- visitChild(ctx, stack, expr.getRight());
- stack.pop();
- return child;
+ return visitDefaultBinaryExpr(ctx, stack, expr);
}
@Override
public RESULT visitIntersect(CONTEXT ctx, Stack<OpType> stack, SetOperation expr) throws PlanningException {
+ return visitDefaultBinaryExpr(ctx, stack, expr);
+ }
+
+ @Override
+ public RESULT visitSimpleTableSubQuery(CONTEXT ctx, Stack<OpType> stack, SimpleTableSubQuery expr)
+ throws PlanningException {
stack.push(expr.getType());
- RESULT child = visitChild(ctx, stack, expr.getLeft());
- visitChild(ctx, stack, expr.getRight());
+ RESULT child = visit(ctx, stack, expr.getSubQuery());
stack.pop();
return child;
}
@Override
- public RESULT visitRelationList(CONTEXT ctx, Stack<OpType> stack, RelationList expr) throws PlanningException {
+ public RESULT visitTableSubQuery(CONTEXT ctx, Stack<OpType> stack, TablePrimarySubQuery expr)
+ throws PlanningException {
stack.push(expr.getType());
- RESULT child = null;
- for (Expr e : expr.getRelations()) {
- child = visitChild(ctx, stack, e);
- }
+ RESULT child = visit(ctx, stack, expr.getSubQuery());
stack.pop();
return child;
}
@Override
- public RESULT visitTableSubQuery(CONTEXT ctx, Stack<OpType> stack, TablePrimarySubQuery expr) throws PlanningException {
+ public RESULT visitRelationList(CONTEXT ctx, Stack<OpType> stack, RelationList expr) throws PlanningException {
stack.push(expr.getType());
- RESULT child = visitChild(ctx, stack, expr.getSubQuery());
+ RESULT child = null;
+ for (Expr e : expr.getRelations()) {
+ child = visit(ctx, stack, e);
+ }
stack.pop();
return child;
}
@@ -221,12 +332,16 @@ public abstract class BaseAlgebraVisitor<CONTEXT, RESULT> implements AlgebraVisi
return null;
}
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Data Definition Language Section
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////
+
@Override
public RESULT visitCreateTable(CONTEXT ctx, Stack<OpType> stack, CreateTable expr) throws PlanningException {
stack.push(expr.getType());
RESULT child = null;
if (expr.hasSubQuery()) {
- child = visitChild(ctx, stack, expr.getSubQuery());
+ child = visit(ctx, stack, expr.getSubQuery());
}
stack.pop();
return child;
@@ -236,4 +351,268 @@ public abstract class BaseAlgebraVisitor<CONTEXT, RESULT> implements AlgebraVisi
public RESULT visitDropTable(CONTEXT ctx, Stack<OpType> stack, DropTable expr) throws PlanningException {
return null;
}
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Insert or Update Section
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ public RESULT visitInsert(CONTEXT ctx, Stack<OpType> stack, Insert expr) throws PlanningException {
+ stack.push(expr.getType());
+ RESULT child = visit(ctx, stack, expr.getSubQuery());
+ stack.pop();
+ return child;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Logical Operator Section
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ @Override
+ public RESULT visitAnd(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException {
+ return visitDefaultBinaryExpr(ctx, stack, expr);
+ }
+
+ @Override
+ public RESULT visitOr(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException {
+ return visitDefaultBinaryExpr(ctx, stack, expr);
+ }
+
+ @Override
+ public RESULT visitNot(CONTEXT ctx, Stack<OpType> stack, NotExpr expr) throws PlanningException {
+ return visitDefaultUnaryExpr(ctx, stack, expr);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Comparison Predicates Section
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////
+ @Override
+ public RESULT visitEquals(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException {
+ return visitDefaultBinaryExpr(ctx, stack, expr);
+ }
+
+ @Override
+ public RESULT visitNotEquals(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException {
+ return visitDefaultBinaryExpr(ctx, stack, expr);
+ }
+
+ @Override
+ public RESULT visitLessThan(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException {
+ return visitDefaultBinaryExpr(ctx, stack, expr);
+ }
+
+ @Override
+ public RESULT visitLessThanOrEquals(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException {
+ return visitDefaultBinaryExpr(ctx, stack, expr);
+ }
+
+ @Override
+ public RESULT visitGreaterThan(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException {
+ return visitDefaultBinaryExpr(ctx, stack, expr);
+ }
+
+ @Override
+ public RESULT visitGreaterThanOrEquals(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr)
+ throws PlanningException {
+ return visitDefaultBinaryExpr(ctx, stack, expr);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Other Predicates Section
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ @Override
+ public RESULT visitBetween(CONTEXT ctx, Stack<OpType> stack, BetweenPredicate expr) throws PlanningException {
+ stack.push(OpType.Between);
+ RESULT result = visit(ctx, stack, expr.predicand());
+ visit(ctx, stack, expr.begin());
+ visit(ctx, stack, expr.end());
+ stack.pop();
+ return result;
+ }
+
+ @Override
+ public RESULT visitCaseWhen(CONTEXT ctx, Stack<OpType> stack, CaseWhenPredicate expr) throws PlanningException {
+ stack.push(OpType.CaseWhen);
+ RESULT result = null;
+ for (CaseWhenPredicate.WhenExpr when : expr.getWhens()) {
+ result = visit(ctx, stack, when.getCondition());
+ visit(ctx, stack, when.getResult());
+ }
+ if (expr.hasElseResult()) {
+ visit(ctx, stack, expr.getElseResult());
+ }
+ stack.pop();
+ return result;
+ }
+
+ @Override
+ public RESULT visitIsNullPredicate(CONTEXT ctx, Stack<OpType> stack, IsNullPredicate expr) throws PlanningException {
+ stack.push(OpType.IsNullPredicate);
+ RESULT result = visit(ctx, stack, expr.getPredicand());
+ stack.pop();
+ return result;
+ }
+
+ @Override
+ public RESULT visitInPredicate(CONTEXT ctx, Stack<OpType> stack, InPredicate expr) throws PlanningException {
+ return visitDefaultBinaryExpr(ctx, stack, expr);
+ }
+
+ @Override
+ public RESULT visitValueListExpr(CONTEXT ctx, Stack<OpType> stack, ValueListExpr expr) throws PlanningException {
+ stack.push(OpType.ValueList);
+ RESULT result = null;
+ for (Expr value : expr.getValues()) {
+ result = visit(ctx, stack, value);
+ }
+ stack.pop();
+ return result;
+ }
+
+ @Override
+ public RESULT visitExistsPredicate(CONTEXT ctx, Stack<OpType> stack, ExistsPredicate expr) throws PlanningException {
+ stack.push(OpType.ExistsPredicate);
+ RESULT result = visit(ctx, stack, expr.getSubQuery());
+ stack.pop();
+ return result;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // String Operator or Pattern Matching Predicates Section
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ private RESULT visitPatternMatchPredicate(CONTEXT ctx, Stack<OpType> stack, PatternMatchPredicate expr)
+ throws PlanningException {
+ stack.push(expr.getType());
+ RESULT result = visit(ctx, stack, expr.getPredicand());
+ visit(ctx, stack, expr.getPattern());
+ stack.pop();
+ return result;
+ }
+ @Override
+ public RESULT visitLikePredicate(CONTEXT ctx, Stack<OpType> stack, PatternMatchPredicate expr)
+ throws PlanningException {
+ return visitPatternMatchPredicate(ctx, stack, expr);
+ }
+
+ @Override
+ public RESULT visitSimilarToPredicate(CONTEXT ctx, Stack<OpType> stack, PatternMatchPredicate expr)
+ throws PlanningException {
+ return visitPatternMatchPredicate(ctx, stack, expr);
+ }
+
+ @Override
+ public RESULT visitRegexpPredicate(CONTEXT ctx, Stack<OpType> stack, PatternMatchPredicate expr)
+ throws PlanningException {
+ return visitPatternMatchPredicate(ctx, stack, expr);
+ }
+
+ @Override
+ public RESULT visitConcatenate(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException {
+ return visitDefaultBinaryExpr(ctx, stack, expr);
+ }
+
+ @Override
+ public RESULT visitPlus(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException {
+ return visitDefaultBinaryExpr(ctx, stack, expr);
+ }
+
+ @Override
+ public RESULT visitMinus(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException {
+ return visitDefaultBinaryExpr(ctx, stack, expr);
+ }
+
+ @Override
+ public RESULT visitMultiply(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException {
+ return visitDefaultBinaryExpr(ctx, stack, expr);
+ }
+
+ @Override
+ public RESULT visitDivide(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException {
+ return visitDefaultBinaryExpr(ctx, stack, expr);
+ }
+
+ @Override
+ public RESULT visitModular(CONTEXT ctx, Stack<OpType> stack, BinaryOperator expr) throws PlanningException {
+ return visitDefaultBinaryExpr(ctx, stack, expr);
+ }
+
+ @Override
+ public RESULT visitSign(CONTEXT ctx, Stack<OpType> stack, SignedExpr expr) throws PlanningException {
+ return visitDefaultUnaryExpr(ctx, stack, expr);
+ }
+
+ @Override
+ public RESULT visitColumnReference(CONTEXT ctx, Stack<OpType> stack, ColumnReferenceExpr expr)
+ throws PlanningException {
+ return null;
+ }
+
+ @Override
+ public RESULT visitTargetExpr(CONTEXT ctx, Stack<OpType> stack, TargetExpr expr) throws PlanningException {
+ stack.push(OpType.Target);
+ RESULT result = visit(ctx, stack, expr.getExpr());
+ stack.pop();
+ return result;
+ }
+
+ @Override
+ public RESULT visitFunction(CONTEXT ctx, Stack<OpType> stack, FunctionExpr expr) throws PlanningException {
+ stack.push(OpType.Function);
+ RESULT result = null;
+ for (Expr param : expr.getParams()) {
+ result = visit(ctx, stack, param);
+ }
+ stack.pop();
+ return result;
+ }
+
+ @Override
+ public RESULT visitCountRowsFunction(CONTEXT ctx, Stack<OpType> stack, CountRowsFunctionExpr expr)
+ throws PlanningException {
+ return null;
+ }
+
+ @Override
+ public RESULT visitGeneralSetFunction(CONTEXT ctx, Stack<OpType> stack, GeneralSetFunctionExpr expr)
+ throws PlanningException {
+ stack.push(OpType.GeneralSetFunction);
+ RESULT result = null;
+ for (Expr param : expr.getParams()) {
+ result = visit(ctx, stack, param);
+ }
+ stack.pop();
+ return result;
+ }
+
+ @Override
+ public RESULT visitCastExpr(CONTEXT ctx, Stack<OpType> stack, CastExpr expr) throws PlanningException {
+ stack.push(OpType.Cast);
+ RESULT result = visit(ctx, stack, expr.getOperand());
+ stack.pop();
+ return result;
+ }
+
+ @Override
+ public RESULT visitScalarSubQuery(CONTEXT ctx, Stack<OpType> stack, ScalarSubQuery expr) throws PlanningException {
+ stack.push(OpType.ScalarSubQuery);
+ RESULT result = visit(ctx, stack, expr.getSubQuery());
+ stack.pop();
+ return result;
+ }
+
+ @Override
+ public RESULT visitLiteral(CONTEXT ctx, Stack<OpType> stack, LiteralValue expr) throws PlanningException {
+ return null;
+ }
+
+ @Override
+ public RESULT visitNullValue(CONTEXT ctx, Stack<OpType> stack, NullValue expr) throws PlanningException {
+ return null;
+ }
+
+ @Override
+ public RESULT visitDataType(CONTEXT ctx, Stack<OpType> stack, DataTypeExpr expr) throws PlanningException {
+ return null;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/775cfaaa/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/BasicLogicalPlanVisitor.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/BasicLogicalPlanVisitor.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/BasicLogicalPlanVisitor.java
index 78c7c22..9478648 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/BasicLogicalPlanVisitor.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/BasicLogicalPlanVisitor.java
@@ -50,7 +50,7 @@ public class BasicLogicalPlanVisitor<CONTEXT, RESULT> implements LogicalPlanVisi
}
/**
- * visitChild visits each logicalNode recursively.
+ * visit visits each logicalNode recursively.
*/
public RESULT visitChild(CONTEXT context, LogicalPlan plan, LogicalNode node, Stack<LogicalNode> stack)
throws PlanningException {
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/775cfaaa/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanner.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanner.java
index f43566d..63b7985 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanner.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanner.java
@@ -103,7 +103,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
QueryBlock rootBlock = plan.newAndGetBlock(LogicalPlan.ROOT_BLOCK);
PlanContext context = new PlanContext(plan, rootBlock);
- subroot = visitChild(context, stack, expr);
+ subroot = visit(context, stack, expr);
LogicalRootNode root = new LogicalRootNode(plan.newPID());
root.setInSchema(subroot.getOutSchema());
@@ -155,7 +155,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
QueryBlock newBlock = context.plan.newAndGetBlock(expr.getName());
PlanContext newContext = new PlanContext(context.plan, newBlock);
Stack<OpType> newStack = new Stack<OpType>();
- LogicalNode child = visitChild(newContext, newStack, expr.getSubQuery());
+ LogicalNode child = visit(newContext, newStack, expr.getSubQuery());
context.plan.connectBlocks(newContext.block, context.block, BlockType.TableSubQuery);
return new TableSubQueryNode(context.plan.newPID(), expr.getName(), child);
}
@@ -209,7 +209,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
public LogicalNode visitRelationList(PlanContext context, Stack<OpType> stack, RelationList relations)
throws PlanningException {
- LogicalNode current = visitChild(context, stack, relations.getRelations()[0]);
+ LogicalNode current = visit(context, stack, relations.getRelations()[0]);
LogicalNode left;
LogicalNode right;
@@ -217,7 +217,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
for (int i = 1; i < relations.size(); i++) {
left = current;
- right = visitChild(context, stack, relations.getRelations()[i]);
+ right = visit(context, stack, relations.getRelations()[i]);
current = createCatasianProduct(context.plan, left, right);
}
}
@@ -234,8 +234,8 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
// Phase 2: build child plans
stack.push(OpType.Join);
- LogicalNode left = visitChild(context, stack, join.getLeft());
- LogicalNode right = visitChild(context, stack, join.getRight());
+ LogicalNode left = visit(context, stack, join.getLeft());
+ LogicalNode right = visit(context, stack, join.getRight());
stack.pop();
// Phase 3: build this plan
@@ -353,13 +353,13 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
// 2. Build Child Plans
PlanContext leftContext = new PlanContext(plan, plan.newNoNameBlock());
Stack<OpType> leftStack = new Stack<OpType>();
- LogicalNode left = visitChild(leftContext, leftStack, setOperation.getLeft());
+ LogicalNode left = visit(leftContext, leftStack, setOperation.getLeft());
TableSubQueryNode leftSubQuery = new TableSubQueryNode(plan.newPID(), leftContext.block.getName(), left);
context.plan.connectBlocks(leftContext.block, context.block, BlockType.TableSubQuery);
PlanContext rightContext = new PlanContext(plan, plan.newNoNameBlock());
Stack<OpType> rightStack = new Stack<OpType>();
- LogicalNode right = visitChild(rightContext, rightStack, setOperation.getRight());
+ LogicalNode right = visit(rightContext, rightStack, setOperation.getRight());
TableSubQueryNode rightSubQuery = new TableSubQueryNode(plan.newPID(), rightContext.block.getName(), right);
context.plan.connectBlocks(rightContext.block, context.block, BlockType.TableSubQuery);
@@ -398,9 +398,11 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
LogicalPlan plan = context.plan;
QueryBlock block = context.block;
+ // 1.1 finding pushable expressions from search condition
+
// 2. build child plans:
stack.push(OpType.Filter);
- LogicalNode child = visitChild(context, stack, selection.getChild());
+ LogicalNode child = visit(context, stack, selection.getChild());
stack.pop();
// 3. build this plan:
@@ -432,7 +434,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
// 2. Build Child Plan Phase:
stack.push(OpType.Aggregation);
- LogicalNode child = visitChild(context, stack, aggregation.getChild());
+ LogicalNode child = visit(context, stack, aggregation.getChild());
stack.pop();
// 3. Build This Plan:
@@ -586,7 +588,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
// 2. Build Child Plans:
stack.push(OpType.Sort);
- LogicalNode child = visitChild(context, stack, sort.getChild());
+ LogicalNode child = visit(context, stack, sort.getChild());
child = insertGroupbyNodeIfUnresolved(plan, block, child, stack);
stack.pop();
@@ -617,7 +619,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
// build child plans
stack.push(OpType.Limit);
- LogicalNode child = visitChild(context, stack, limit.getChild());
+ LogicalNode child = visit(context, stack, limit.getChild());
stack.pop();
// build limit plan
@@ -661,7 +663,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
// 2: Build Child Plans
stack.push(OpType.Projection);
- LogicalNode child = visitChild(context, stack, projection.getChild());
+ LogicalNode child = visit(context, stack, projection.getChild());
child = insertGroupbyNodeIfUnresolved(plan, block, child, stack);
stack.pop();
@@ -741,7 +743,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
if (expr.hasSubQuery()) {
stack.add(OpType.CreateTable);
- LogicalNode subQuery = visitChild(context, stack, expr.getSubQuery());
+ LogicalNode subQuery = visit(context, stack, expr.getSubQuery());
stack.pop();
StoreTableNode storeNode = new StoreTableNode(context.plan.newPID(), tableName);
storeNode.setCreateTable();
@@ -946,7 +948,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
return columnList;
}
- private DataType convertDataType(org.apache.tajo.algebra.DataType dataType) {
+ private DataType convertDataType(DataTypeExpr dataType) {
TajoDataTypes.Type type = TajoDataTypes.Type.valueOf(dataType.getTypeName());
DataType.Builder builder = DataType.newBuilder();
@@ -961,12 +963,12 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
return new Column(columnDefinition.getColumnName(), convertDataType(columnDefinition));
}
- protected LogicalNode visitInsert(PlanContext context, Stack<OpType> stack, Insert expr) throws PlanningException {
+ public LogicalNode visitInsert(PlanContext context, Stack<OpType> stack, Insert expr) throws PlanningException {
stack.push(expr.getType());
QueryBlock newQueryBlock = context.plan.newNoNameBlock();
PlanContext newContext = new PlanContext(context.plan, newQueryBlock);
Stack<OpType> subStack = new Stack<OpType>();
- LogicalNode subQuery = visitChild(newContext, subStack, expr.getSubQuery());
+ LogicalNode subQuery = visit(newContext, subStack, expr.getSubQuery());
context.plan.connectBlocks(newQueryBlock, context.block, BlockType.TableSubQuery);
stack.pop();
@@ -1011,23 +1013,6 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
return insertNode;
}
- /**
- * This ensures that corresponding columns in both tables are equivalent to each other.
- */
- private static void ensureDomains(Schema targetTableScheme, Schema schema)
- throws PlanningException {
- for (int i = 0; i < schema.getColumnNum(); i++) {
- if (!schema.getColumn(i).getDataType().equals(targetTableScheme.getColumn(i).getDataType())) {
- Column targetColumn = targetTableScheme.getColumn(i);
- Column insertColumn = schema.getColumn(i);
- throw new PlanningException("ERROR: " +
- insertColumn.getColumnName() + " is of type " + insertColumn.getDataType().getType().name() +
- ", but target column '" + targetColumn.getColumnName() + "' is of type " +
- targetColumn.getDataType().getType().name());
- }
- }
- }
-
@Override
public LogicalNode visitDropTable(PlanContext context, Stack<OpType> stack, DropTable dropTable) {
DropTableNode dropTableNode = new DropTableNode(context.plan.newPID(), dropTable.getTableName(),
@@ -1131,9 +1116,6 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
return new InEval(predicand, rowConstantEval, inPredicate.isNot());
}
- case Is:
- break;
-
case And:
case Or:
case Equals:
@@ -1303,7 +1285,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
return caseEval;
}
- Target[] annotateTargets(LogicalPlan plan, QueryBlock block, org.apache.tajo.algebra.Target [] targets)
+ Target[] annotateTargets(LogicalPlan plan, QueryBlock block, TargetExpr[] targets)
throws PlanningException {
Target annotatedTargets [] = new Target[targets.length];
@@ -1314,7 +1296,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
}
Target createTarget(LogicalPlan plan, QueryBlock block,
- org.apache.tajo.algebra.Target target) throws PlanningException {
+ TargetExpr target) throws PlanningException {
if (target.hasAlias()) {
return new Target(createEvalTree(plan, block, target.getExpr()),
target.getAlias());