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/07/29 06:03:42 UTC
[13/13] git commit: TAJO-87: Integration of tajo algebra module and
SQL parser
TAJO-87: Integration of tajo algebra module and SQL parser
Project: http://git-wip-us.apache.org/repos/asf/incubator-tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tajo/commit/00c3ee2b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tajo/tree/00c3ee2b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tajo/diff/00c3ee2b
Branch: refs/heads/master
Commit: 00c3ee2bdb9dd047485ab6ec52cd2284f0b1980a
Parents: ed25aa8
Author: Hyunsik Choi <hy...@apache.org>
Authored: Fri Jul 26 18:33:54 2013 +0900
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Mon Jul 29 12:01:11 2013 +0900
----------------------------------------------------------------------
CHANGES.txt | 2 +
pom.xml | 7 +-
.../org/apache/tajo/algebra/Aggregation.java | 24 +-
.../org/apache/tajo/algebra/BinaryOperator.java | 8 +-
.../org/apache/tajo/algebra/CaseWhenExpr.java | 88 --
.../apache/tajo/algebra/CaseWhenPredicate.java | 89 ++
.../tajo/algebra/ColumnReferenceExpr.java | 34 +-
.../tajo/algebra/CountRowsFunctionExpr.java | 21 +
.../tajo/algebra/CountValueFunctionExpr.java | 21 +
.../org/apache/tajo/algebra/CreateTable.java | 71 +-
.../java/org/apache/tajo/algebra/DropTable.java | 41 +
.../main/java/org/apache/tajo/algebra/Expr.java | 34 +-
.../java/org/apache/tajo/algebra/ExprType.java | 99 --
.../org/apache/tajo/algebra/ExprVisitor.java | 19 +
.../org/apache/tajo/algebra/FunctionExpr.java | 32 +-
.../java/org/apache/tajo/algebra/Having.java | 56 +
.../org/apache/tajo/algebra/InPredicate.java | 34 +
.../apache/tajo/algebra/IsNullPredicate.java | 44 +
.../main/java/org/apache/tajo/algebra/Join.java | 44 +-
.../org/apache/tajo/algebra/JsonHelper.java | 2 +-
.../java/org/apache/tajo/algebra/LikeExpr.java | 51 -
.../org/apache/tajo/algebra/LikePredicate.java | 51 +
.../java/org/apache/tajo/algebra/Limit.java | 12 +-
.../org/apache/tajo/algebra/LiteralExpr.java | 53 -
.../org/apache/tajo/algebra/LiteralValue.java | 53 +
.../java/org/apache/tajo/algebra/NotExpr.java | 31 +
.../java/org/apache/tajo/algebra/NullValue.java | 31 +
.../java/org/apache/tajo/algebra/OpType.java | 117 ++
.../org/apache/tajo/algebra/Projection.java | 20 +-
.../java/org/apache/tajo/algebra/Relation.java | 18 +-
.../org/apache/tajo/algebra/RelationList.java | 62 +
.../org/apache/tajo/algebra/ScalarSubQuery.java | 3 +-
.../java/org/apache/tajo/algebra/Selection.java | 17 +-
.../org/apache/tajo/algebra/SetOperation.java | 9 +-
.../main/java/org/apache/tajo/algebra/Sort.java | 26 +-
.../org/apache/tajo/algebra/TableSubQuery.java | 15 +-
.../java/org/apache/tajo/algebra/Target.java | 15 +-
.../org/apache/tajo/algebra/UnaryOperator.java | 6 +-
.../org/apache/tajo/algebra/ValueListExpr.java | 40 +
.../java/org/apache/tajo/algebra/TestExpr.java | 86 +-
.../java/org/apache/tajo/catalog/Options.java | 6 +
.../java/org/apache/tajo/catalog/Schema.java | 2 +-
.../org/apache/tajo/catalog/CatalogServer.java | 10 +-
.../apache/tajo/annotation/NotThreadSafe.java | 30 +
.../org/apache/tajo/annotation/ThreadSafe.java | 30 +
.../main/java/org/apache/tajo/util/TUtil.java | 33 +-
tajo-core/tajo-core-backend/pom.xml | 20 +-
.../org/apache/tajo/engine/parser/SQLLexer.g | 391 -----
.../org/apache/tajo/engine/parser/SQLParser.g | 789 ----------
.../org/apache/tajo/engine/parser/SQLLexer.g4 | 367 +++++
.../org/apache/tajo/engine/parser/SQLParser.g4 | 788 ++++++++++
.../java/org/apache/tajo/benchmark/TPCH.java | 2 +-
.../java/org/apache/tajo/client/TajoClient.java | 21 +-
.../apache/tajo/engine/eval/EvalTreeUtil.java | 46 +-
.../engine/exception/NTAQueryException.java | 42 -
.../engine/function/builtin/CountValue.java | 5 +-
.../tajo/engine/json/FromTableDeserializer.java | 2 +-
.../apache/tajo/engine/parser/CommandType.java | 41 -
.../org/apache/tajo/engine/parser/CopyStmt.java | 72 -
.../tajo/engine/parser/CreateIndexStmt.java | 107 --
.../tajo/engine/parser/CreateTableStmt.java | 134 --
.../tajo/engine/parser/DropTableStmt.java | 34 -
.../apache/tajo/engine/parser/ParseTree.java | 63 -
.../apache/tajo/engine/parser/ParseUtil.java | 76 -
.../tajo/engine/parser/ParserException.java | 54 -
.../tajo/engine/parser/QueryAnalyzer.java | 1347 ------------------
.../apache/tajo/engine/parser/QueryBlock.java | 586 --------
.../apache/tajo/engine/parser/SQLAnalyzer.java | 900 ++++++++++++
.../org/apache/tajo/engine/parser/SetStmt.java | 60 -
.../tajo/engine/parser/StatementType.java | 53 -
.../org/apache/tajo/engine/parser/TableMap.java | 68 -
.../apache/tajo/engine/planner/FromTable.java | 105 ++
.../tajo/engine/planner/GroupElement.java | 65 +
.../apache/tajo/engine/planner/JoinClause.java | 126 ++
.../apache/tajo/engine/planner/JoinType.java | 28 -
.../tajo/engine/planner/LogicalOptimizer.java | 754 ++++------
.../apache/tajo/engine/planner/LogicalPlan.java | 564 ++++++++
.../tajo/engine/planner/LogicalPlanner.java | 1333 ++++++++++-------
.../engine/planner/NoSuchColumnException.java | 25 +
.../engine/planner/PhysicalPlannerImpl.java | 13 -
.../apache/tajo/engine/planner/PlannerUtil.java | 206 ++-
.../tajo/engine/planner/PlanningContext.java | 40 -
.../engine/planner/PlanningContextImpl.java | 94 --
.../apache/tajo/engine/planner/Projector.java | 3 -
.../org/apache/tajo/engine/planner/Target.java | 115 ++
.../tajo/engine/planner/TargetListManager.java | 168 +++
.../tajo/engine/planner/VerifyException.java | 25 +
.../engine/planner/logical/CreateTableNode.java | 2 +-
.../engine/planner/logical/DropTableNode.java | 71 +
.../engine/planner/logical/EvalExprNode.java | 27 +-
.../tajo/engine/planner/logical/ExprType.java | 3 +-
.../engine/planner/logical/GroupbyNode.java | 29 +-
.../engine/planner/logical/IndexWriteNode.java | 95 --
.../tajo/engine/planner/logical/JoinNode.java | 43 +-
.../tajo/engine/planner/logical/LimitNode.java | 25 +-
.../engine/planner/logical/LogicalNode.java | 12 +-
.../engine/planner/logical/Projectable.java | 27 +
.../engine/planner/logical/ProjectionNode.java | 24 +-
.../tajo/engine/planner/logical/ScanNode.java | 33 +-
.../planner/physical/AggregationExec.java | 4 +-
.../engine/planner/physical/BNLJoinExec.java | 4 +-
.../engine/planner/physical/EvalExprExec.java | 2 +-
.../engine/planner/physical/IndexWriteExec.java | 88 --
.../engine/planner/physical/NLJoinExec.java | 4 +
.../apache/tajo/engine/utils/SchemaUtil.java | 33 +-
.../org/apache/tajo/master/ClientService.java | 7 +-
.../org/apache/tajo/master/ExecutionBlock.java | 6 +-
.../org/apache/tajo/master/GlobalEngine.java | 82 +-
.../org/apache/tajo/master/GlobalPlanner.java | 42 +-
.../apache/tajo/master/GlobalPlannerUtils.java | 164 +--
.../main/java/org/apache/tajo/master/Query.java | 29 +-
.../java/org/apache/tajo/master/QueryUnit.java | 7 +-
.../org/apache/tajo/BackendTestingUtil.java | 17 +-
.../org/apache/tajo/benchmark/TestTPCH.java | 8 +-
.../apache/tajo/engine/eval/TestEvalTree.java | 75 +-
.../tajo/engine/eval/TestEvalTreeUtil.java | 99 +-
.../tajo/engine/parser/TestQueryAnalyzer.java | 653 ---------
.../tajo/engine/parser/TestSQLAnalyzer.java | 297 ++++
.../tajo/engine/parser/TestSQLParser.java | 993 -------------
.../plan/global/TestGlobalQueryPlanner.java | 84 +-
.../engine/planner/TestLogicalOptimizer.java | 60 +-
.../tajo/engine/planner/TestLogicalPlanner.java | 448 +++---
.../tajo/engine/planner/TestPlannerUtil.java | 25 +-
.../global/TestGlobalQueryOptimizer.java | 26 +-
.../planner/physical/TestBNLJoinExec.java | 32 +-
.../planner/physical/TestBSTIndexExec.java | 21 +-
.../planner/physical/TestExternalSortExec.java | 25 +-
.../planner/physical/TestHashJoinExec.java | 22 +-
.../planner/physical/TestMergeJoinExec.java | 18 +-
.../engine/planner/physical/TestNLJoinExec.java | 21 +-
.../planner/physical/TestPhysicalPlanner.java | 295 ++--
.../engine/planner/physical/TestSortExec.java | 23 +-
.../apache/tajo/engine/query/TestJoinQuery.java | 10 +-
.../tajo/engine/query/TestSelectQuery.java | 18 +-
.../apache/tajo/engine/query/TestSortQuery.java | 19 +
.../tajo/master/TestExecutionBlockCursor.java | 21 +-
.../tajo/worker/TestRangeRetrieverHandler.java | 23 +-
.../src/test/queries/create_table_1.sql | 1 +
.../src/test/queries/create_table_10.sql | 1 +
.../src/test/queries/create_table_2.sql | 1 +
.../src/test/queries/create_table_3.sql | 1 +
.../src/test/queries/create_table_4.sql | 1 +
.../src/test/queries/create_table_5.sql | 1 +
.../src/test/queries/create_table_6.sql | 1 +
.../src/test/queries/create_table_7.sql | 1 +
.../src/test/queries/create_table_8.sql | 48 +
.../src/test/queries/create_table_9.sql | 1 +
.../src/test/queries/drop_table.sql | 1 +
.../src/test/queries/groupby_1.sql | 1 +
.../src/test/queries/insert_1.sql | 1 +
.../src/test/queries/insert_2.sql | 1 +
.../src/test/queries/join_1.sql | 1 +
.../src/test/queries/join_10.sql | 1 +
.../src/test/queries/join_11.sql | 1 +
.../src/test/queries/join_2.sql | 1 +
.../src/test/queries/join_3.sql | 1 +
.../src/test/queries/join_4.sql | 1 +
.../src/test/queries/join_5.sql | 1 +
.../src/test/queries/join_6.sql | 1 +
.../src/test/queries/join_7.sql | 1 +
.../src/test/queries/join_8.sql | 13 +
.../src/test/queries/join_9.sql | 5 +
.../src/test/queries/select_1.sql | 1 +
.../src/test/queries/select_2.sql | 1 +
.../src/test/queries/select_3.sql | 1 +
.../src/test/queries/select_4.sql | 1 +
.../src/test/queries/select_5.sql | 1 +
.../src/test/queries/select_6.sql | 1 +
.../src/test/queries/select_7.sql | 1 +
.../src/test/queries/select_8.sql | 1 +
.../src/test/queries/set_1.sql | 1 +
.../src/test/queries/set_2.sql | 1 +
.../src/test/queries/set_3.sql | 1 +
tajo-core/tajo-core-storage/pom.xml | 11 -
tajo-frontend/pom.xml | 149 --
tajo-frontend/tajo-frontend-sql/pom.xml | 187 ---
.../main/antlr3/tajo/frontend/sql/SQLLexer.g | 1152 ---------------
.../main/antlr3/tajo/frontend/sql/SQLParser.g | 956 -------------
.../apache/tajo/frontend/sql/QueryBlock.java | 133 --
.../apache/tajo/frontend/sql/SQLAnalyzer.java | 932 ------------
.../apache/tajo/frontend/sql/SQLParseError.java | 27 -
.../tajo/frontend/sql/SQLSyntaxError.java | 45 -
.../tajo/frontend/sql/TestSQLAnalyzer.java | 572 --------
.../apache/tajo/frontend/sql/TestSQLParser.java | 914 ------------
tajo-project/pom.xml | 12 +-
185 files changed, 7106 insertions(+), 13608 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 988324e..2c984ea 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -12,6 +12,8 @@ Release 0.2.0 - unreleased
IMPROVEMENTS
+ TAJO-87: Integration of tajo algebra module and SQL parser. (hyunsik)
+
TAJO-70: Refactor GlobalEngine to handle DDL statements. (hyunsik)
TAJO-86: Improved error messages in query analyzer. (jinho)
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 604ff83..e1e7b7d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -80,7 +80,6 @@
<module>tajo-project</module>
<module>tajo-common</module>
<module>tajo-algebra</module>
- <module>tajo-frontend</module>
<module>tajo-core</module>
<module>tajo-rpc</module>
<module>tajo-catalog</module>
@@ -249,11 +248,6 @@
</lifecycleMappingMetadata>
</configuration>
</plugin>
- <plugin>
- <groupId>org.antlr</groupId>
- <artifactId>antlr3-maven-plugin</artifactId>
- <version>3.4</version>
- </plugin>
</plugins>
</pluginManagement>
@@ -304,6 +298,7 @@
<excludes>
<exclude>CHANGES.txt</exclude>
<exclude>**/*.tql</exclude>
+ <exclude>**/*.sql</exclude>
<exclude>**/*.schema</exclude>
<exclude>**/*.tbl</exclude>
<!-- generated content -->
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/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 a70956b..eccb873 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,19 +21,19 @@ package org.apache.tajo.algebra;
import org.apache.tajo.util.TUtil;
public class Aggregation extends UnaryOperator {
- private Target [] targets;
+ private Target[] targets;
private GroupElement [] groups;
private Expr havingCondition;
public Aggregation() {
- super(ExprType.Aggregation);
+ super(OpType.Aggregation);
}
- public Target [] getTargets() {
+ public Target[] getTargets() {
return this.targets;
}
- public void setTargets(Target [] targets) {
+ public void setTargets(Target[] targets) {
this.targets = targets;
}
@@ -109,8 +109,18 @@ public class Aggregation extends UnaryOperator {
}
public static enum GroupType {
- GROUPBY,
- CUBE,
- ROLLUP
+ OrdinaryGroup(""),
+ Cube("Cube"),
+ Rollup("Rollup"),
+ EmptySet("()");
+
+ String displayName;
+ GroupType(String displayName) {
+ this.displayName = displayName;
+ }
+
+ public String toString() {
+ return displayName;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/BinaryOperator.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/BinaryOperator.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/BinaryOperator.java
index 1883df2..3e00e5e 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/BinaryOperator.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/BinaryOperator.java
@@ -19,14 +19,14 @@
package org.apache.tajo.algebra;
public class BinaryOperator extends Expr {
- Expr left;
- Expr right;
+ protected Expr left;
+ protected Expr right;
- BinaryOperator(ExprType opType) {
+ BinaryOperator(OpType opType) {
super(opType);
}
- public BinaryOperator(ExprType type, Expr left, Expr right) {
+ public BinaryOperator(OpType type, Expr left, Expr right) {
super(type);
this.left = left;
this.right = right;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/CaseWhenExpr.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/CaseWhenExpr.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/CaseWhenExpr.java
deleted file mode 100644
index 5e95b8a..0000000
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/CaseWhenExpr.java
+++ /dev/null
@@ -1,88 +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 java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-public class CaseWhenExpr extends Expr {
- private List<WhenExpr> whens = new ArrayList<WhenExpr>();
- private Expr else_result;
-
- public CaseWhenExpr() {
- super(ExprType.CaseWhen);
- }
-
- public void addWhen(Expr condition, Expr result) {
- whens.add(new WhenExpr(condition, result));
- }
-
- public Collection<WhenExpr> getWhens() {
- return this.whens;
- }
-
- public void setElseResult(Expr else_result) {
- this.else_result = else_result;
- }
-
- public Object getElseResult() {
- return this.else_result;
- }
-
- public boolean hasElseResult() {
- return else_result != null;
- }
-
- @Override
- boolean equalsTo(Expr expr) {
- return false;
- }
-
- @Override
- public String toJson() {
- return JsonHelper.toJson(this);
- }
-
- public static class WhenExpr {
- Expr condition;
- Expr result;
-
- public WhenExpr(Expr condition, Expr result) {
- this.condition = condition;
- this.result = result;
- }
-
- public Expr getCondition() {
- return this.condition;
- }
-
- public Expr getResult() {
- return this.result;
- }
-
- public boolean equals(Object obj) {
- if (obj instanceof WhenExpr) {
- WhenExpr another = (WhenExpr) obj;
- }
-
- return false;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/CaseWhenPredicate.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/CaseWhenPredicate.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/CaseWhenPredicate.java
new file mode 100644
index 0000000..398aa55
--- /dev/null
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/CaseWhenPredicate.java
@@ -0,0 +1,89 @@
+/**
+ * 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 java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+public class CaseWhenPredicate extends Expr {
+ private List<WhenExpr> whens = new ArrayList<WhenExpr>();
+ private Expr elseResult;
+
+ public CaseWhenPredicate() {
+ super(OpType.CaseWhen);
+ }
+
+ public void addWhen(Expr condition, Expr result) {
+ whens.add(new WhenExpr(condition, result));
+ }
+
+ public Collection<WhenExpr> getWhens() {
+ return this.whens;
+ }
+
+ public void setElseResult(Expr elseResult) {
+ this.elseResult = elseResult;
+ }
+
+ public Expr getElseResult() {
+ return this.elseResult;
+ }
+
+ public boolean hasElseResult() {
+ return elseResult != null;
+ }
+
+ @Override
+ boolean equalsTo(Expr expr) {
+ return false;
+ }
+
+ @Override
+ public String toJson() {
+ return JsonHelper.toJson(this);
+ }
+
+ public static class WhenExpr {
+ Expr condition;
+ Expr result;
+
+ public WhenExpr(Expr condition, Expr result) {
+ this.condition = condition;
+ this.result = result;
+ }
+
+ public Expr getCondition() {
+ return this.condition;
+ }
+
+ public Expr getResult() {
+ return this.result;
+ }
+
+ public boolean equals(Object obj) {
+ if (obj instanceof WhenExpr) {
+ WhenExpr another = (WhenExpr) obj;
+ return condition.equals(another.condition) && result.equals(result);
+ }
+
+ return false;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/ColumnReferenceExpr.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/ColumnReferenceExpr.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/ColumnReferenceExpr.java
index 888404d..dfc2584 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/ColumnReferenceExpr.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/ColumnReferenceExpr.java
@@ -21,29 +21,41 @@ package org.apache.tajo.algebra;
import org.apache.tajo.util.TUtil;
public class ColumnReferenceExpr extends Expr {
- private String rel_name;
- private String column_name;
+ private String tableName;
+ private String name;
public ColumnReferenceExpr(String columnName) {
- super(ExprType.Column);
- this.column_name = columnName;
+ super(OpType.Column);
+ this.name = columnName;
}
- public void setRelationName(String tableName) {
- this.rel_name = tableName;
+ public void setTableName(String tableName) {
+ this.tableName = tableName;
}
public String getName() {
- return this.column_name;
+ return this.name;
}
- public String getRelationName() {
- return this.rel_name;
+ public boolean hasTableName() {
+ return this.tableName != null;
+ }
+
+ public String getTableName() {
+ return this.tableName;
+ }
+
+ public String getCanonicalName() {
+ if (tableName != null) {
+ return tableName + "." + name;
+ } else {
+ return name;
+ }
}
public boolean equalsTo(Expr expr) {
ColumnReferenceExpr another = (ColumnReferenceExpr) expr;
- return column_name.equals(another.column_name) &&
- TUtil.checkEquals(rel_name, another.rel_name);
+ return name.equals(another.name) &&
+ TUtil.checkEquals(tableName, another.tableName);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/CountRowsFunctionExpr.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/CountRowsFunctionExpr.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/CountRowsFunctionExpr.java
new file mode 100644
index 0000000..77468fb
--- /dev/null
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/CountRowsFunctionExpr.java
@@ -0,0 +1,21 @@
+/*
+ * Licensed 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;
+
+public class CountRowsFunctionExpr extends FunctionExpr {
+ public CountRowsFunctionExpr() {
+ super(OpType.CountRowsFunction, "count");
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/CountValueFunctionExpr.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/CountValueFunctionExpr.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/CountValueFunctionExpr.java
new file mode 100644
index 0000000..80c527b
--- /dev/null
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/CountValueFunctionExpr.java
@@ -0,0 +1,21 @@
+/*
+ * Licensed 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;
+
+public class CountValueFunctionExpr extends FunctionExpr {
+ public CountValueFunctionExpr(Expr param) {
+ super(OpType.CountValueFunction, "count", new Expr[] {param});
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/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 92404ee..1552467 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
@@ -23,25 +23,34 @@ import org.apache.tajo.util.TUtil;
import java.util.Map;
public class CreateTable extends Expr {
- private String rel_name;
- private ColumnDefinition [] table_elements;
- private String storage_type;
+ private boolean external = false;
+ private String tableName;
+ private ColumnDefinition [] tableElements;
+ private String storageType;
private String location;
private Expr subquery;
private Map<String, String> params;
public CreateTable(final String tableName) {
- super(ExprType.CreateTable);
- this.rel_name = tableName;
+ super(OpType.CreateTable);
+ this.tableName = tableName;
}
- public CreateTable(final String relationName, final Expr subQuery) {
- this(relationName);
+ public CreateTable(final String tableName, final Expr subQuery) {
+ this(tableName);
this.subquery = subQuery;
}
- public String getRelationName() {
- return this.rel_name;
+ public void setExternal() {
+ external = true;
+ }
+
+ public boolean isExternal() {
+ return external;
+ }
+
+ public String getTableName() {
+ return this.tableName;
}
public boolean hasLocation() {
@@ -57,27 +66,27 @@ public class CreateTable extends Expr {
}
public boolean hasTableElements() {
- return this.table_elements != null;
+ return this.tableElements != null;
}
public ColumnDefinition [] getTableElements() {
- return table_elements;
+ return tableElements;
}
public void setTableElements(ColumnDefinition [] tableElements) {
- this.table_elements = tableElements;
+ this.tableElements = tableElements;
}
public boolean hasStorageType() {
- return storage_type != null;
+ return storageType != null;
}
public void setStorageType(String storageType) {
- this.storage_type = storageType;
+ this.storageType = storageType;
}
public String getStorageType() {
- return storage_type;
+ return storageType;
}
public boolean hasParams() {
@@ -96,6 +105,10 @@ public class CreateTable extends Expr {
return subquery != null;
}
+ public void setSubQuery(Expr subquery) {
+ this.subquery = subquery;
+ }
+
public Expr getSubQuery() {
return subquery;
}
@@ -103,9 +116,9 @@ public class CreateTable extends Expr {
@Override
boolean equalsTo(Expr expr) {
CreateTable another = (CreateTable) expr;
- return rel_name.equals(another.rel_name) &&
- TUtil.checkEquals(table_elements, another.table_elements) &&
- TUtil.checkEquals(storage_type, another.storage_type) &&
+ return tableName.equals(another.tableName) &&
+ TUtil.checkEquals(tableElements, another.tableElements) &&
+ TUtil.checkEquals(storageType, another.storageType) &&
TUtil.checkEquals(location, another.location) &&
TUtil.checkEquals(subquery, another.subquery) &&
TUtil.checkEquals(params, another.params);
@@ -114,6 +127,8 @@ public class CreateTable extends Expr {
public static class ColumnDefinition {
String col_name;
String data_type;
+ Integer length_or_precision;
+ Integer scale;
public ColumnDefinition(String columnName, String dataType) {
this.col_name = columnName;
@@ -128,10 +143,28 @@ public class CreateTable extends Expr {
return this.data_type;
}
+ public void setLengthOrPrecision(int lengthOrPrecision) {
+ this.length_or_precision = lengthOrPrecision;
+ }
+
+ public Integer getLengthOrPrecision() {
+ return this.length_or_precision;
+ }
+
+ public void setScale(int scale) {
+ this.scale = scale;
+ }
+
+ public Integer getScale() {
+ return this.scale;
+ }
+
public boolean equals(Object obj) {
if (obj instanceof ColumnDefinition) {
ColumnDefinition another = (ColumnDefinition) obj;
- return col_name.equals(another.col_name) && data_type.equals(another.data_type);
+ return col_name.equals(another.col_name) && data_type.equals(another.data_type) &&
+ TUtil.checkEquals(length_or_precision, another.length_or_precision) &&
+ TUtil.checkEquals(scale, another.scale);
}
return false;
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/DropTable.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/DropTable.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/DropTable.java
new file mode 100644
index 0000000..9544cf3
--- /dev/null
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/DropTable.java
@@ -0,0 +1,41 @@
+/**
+ * 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;
+
+public class DropTable extends Expr {
+ private final String tableName;
+
+ public DropTable(String tableName) {
+ super(OpType.DropTable);
+ this.tableName = tableName;
+ }
+
+ public String getTableName() {
+ return this.tableName;
+ }
+
+ @Override
+ boolean equalsTo(Expr expr) {
+ if (expr instanceof DropTable) {
+ DropTable another = (DropTable) expr;
+ return tableName.equals(another.tableName);
+ }
+ return false;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Expr.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Expr.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Expr.java
index 041ce1d..54c230b 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Expr.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Expr.java
@@ -23,14 +23,14 @@ import com.google.gson.*;
import java.lang.reflect.Type;
public abstract class Expr implements JsonSerializable {
- protected ExprType op_type;
+ protected OpType opType;
- public Expr(ExprType op_type) {
- this.op_type = op_type;
+ public Expr(OpType opType) {
+ this.opType = opType;
}
- public ExprType getType() {
- return this.op_type;
+ public OpType getType() {
+ return this.opType;
}
abstract boolean equalsTo(Expr expr);
@@ -40,7 +40,7 @@ public abstract class Expr implements JsonSerializable {
if (obj instanceof Expr) {
Expr casted = (Expr) obj;
- if (this.op_type == casted.op_type && equalsTo(casted)) {
+ if (this.opType == casted.opType && equalsTo(casted)) {
if (this instanceof UnaryOperator) {
UnaryOperator one = (UnaryOperator) this;
UnaryOperator another = (UnaryOperator) casted;
@@ -76,6 +76,24 @@ public abstract class Expr implements JsonSerializable {
return JsonHelper.toJson(this);
}
+ /**
+ * This method provides a visiting way in the post order.
+ *
+ * @param visitor
+ */
+ public void accept(ExprVisitor visitor) {
+ if (this instanceof UnaryOperator) {
+ UnaryOperator unary = (UnaryOperator) this;
+ unary.getChild().accept(visitor);
+ } else if (this instanceof BinaryOperator) {
+ BinaryOperator bin = (BinaryOperator) this;
+ bin.getLeft().accept(visitor);
+ bin.getRight().accept(visitor);
+ }
+
+ visitor.visit(this);
+ }
+
static class JsonSerDer
implements JsonSerializer<Expr>, JsonDeserializer<Expr> {
@@ -85,14 +103,14 @@ public abstract class Expr implements JsonSerializable {
throws JsonParseException {
JsonObject jsonObject = json.getAsJsonObject();
String operator = jsonObject.get("type").getAsString();
- return context.deserialize(json, ExprType.valueOf(operator).getBaseClass());
+ return context.deserialize(json, OpType.valueOf(operator).getBaseClass());
}
@Override
public JsonElement serialize(Expr src, Type typeOfSrc,
JsonSerializationContext context) {
- return context.serialize(src, src.op_type.getBaseClass());
+ return context.serialize(src, src.opType.getBaseClass());
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/ExprType.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/ExprType.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/ExprType.java
deleted file mode 100644
index f94e567..0000000
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/ExprType.java
+++ /dev/null
@@ -1,99 +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 com.google.gson.*;
-
-import java.lang.reflect.Type;
-
-public enum ExprType {
- // relational operators
- Relation(Relation.class),
- TableSubQuery(TableSubQuery.class),
- Except(SetOperation.class),
- Aggregation(org.apache.tajo.algebra.Aggregation.class),
- Intersect(SetOperation.class),
- Join(Join.class),
- Projection(Projection.class),
- Rename,
- Selection(Selection.class),
- Sort(Sort.class),
- Union(SetOperation.class),
- Limit(Limit.class),
-
- // extended relational operators
- CreateTable(CreateTable.class),
-
- // logical operators
- And(BinaryOperator.class),
- Or(BinaryOperator.class),
-
- // comparison operators
- Equals(BinaryOperator.class),
- NotEquals(BinaryOperator.class),
- LessThan(BinaryOperator.class),
- LessThanOrEquals(BinaryOperator.class),
- GreaterThan(BinaryOperator.class),
- GreaterThanOrEquals(BinaryOperator.class),
-
- // arithmetic operators
- Plus(BinaryOperator.class),
- Minus(BinaryOperator.class),
- Multiply(BinaryOperator.class),
- Divide(BinaryOperator.class),
- Mod(BinaryOperator.class),
-
- // other expressions
- Column(ColumnReferenceExpr.class),
- Function(FunctionExpr.class),
- CaseWhen(CaseWhenExpr.class),
- Like(LikeExpr.class),
- Literal(LiteralExpr.class),
- ScalarSubQuery(ScalarSubQuery.class);
-
- private Class baseClass;
-
- ExprType() {
- this.baseClass = Expr.class;
- }
- ExprType(Class clazz) {
- this.baseClass = clazz;
- }
-
- public Class getBaseClass() {
- return this.baseClass;
- }
-
- public static class JsonSerDer implements JsonSerializer<ExprType>,
- JsonDeserializer<ExprType> {
-
- @Override
- public JsonElement serialize(ExprType src, Type typeOfSrc,
- JsonSerializationContext context) {
- return new JsonPrimitive(src.name());
- }
-
- @Override
- public ExprType deserialize(JsonElement json, Type typeOfT,
- JsonDeserializationContext context)
- throws JsonParseException {
- return ExprType.valueOf(json.getAsString());
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/ExprVisitor.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/ExprVisitor.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/ExprVisitor.java
new file mode 100644
index 0000000..d05c1db
--- /dev/null
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/ExprVisitor.java
@@ -0,0 +1,19 @@
+/*
+ * Licensed 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;
+
+public interface ExprVisitor {
+ void visit(Expr expr);
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/FunctionExpr.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/FunctionExpr.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/FunctionExpr.java
index 3bab189..29188bf 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/FunctionExpr.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/FunctionExpr.java
@@ -25,7 +25,37 @@ public class FunctionExpr extends Expr {
private Expr[] params;
public FunctionExpr(String signature) {
- super(ExprType.Function);
+ this(OpType.Function, signature);
+ }
+
+ public FunctionExpr(String signature, Expr [] params) {
+ this(OpType.Function, signature);
+ setParams(params);
+ }
+
+ protected FunctionExpr(OpType type, String signature) {
+ super(type);
+ if (type != OpType.Function && type != OpType.CountRowsFunction) {
+ throw new IllegalArgumentException("FunctionExpr cannot accept " + type + "type");
+ }
+ this.signature = signature;
+ }
+
+ protected FunctionExpr(OpType type, String signature, Expr [] params) {
+ super(type);
+ if (type != OpType.Function && type != OpType.CountValueFunction) {
+ throw new IllegalArgumentException("FunctionExpr cannot accept " + type + "type");
+ }
+ this.signature = signature;
+ setParams(params);
+ }
+
+ public String getSignature() {
+ return this.signature;
+ }
+
+ public Expr[] getParams() {
+ return params;
}
public void setParams(Expr[] params) {
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Having.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Having.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Having.java
new file mode 100644
index 0000000..d48537a
--- /dev/null
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Having.java
@@ -0,0 +1,56 @@
+/**
+ * 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 Having extends UnaryOperator implements JsonSerializable {
+ private Expr qual;
+
+ public Having(Expr qual) {
+ super(OpType.Having);
+ this.qual = qual;
+ }
+
+ public boolean hasQual() {
+ return qual != null;
+ }
+
+ public void setQual(Expr expr) {
+ this.qual = expr;
+ }
+
+ public Expr getQual() {
+ return this.qual;
+ }
+
+ @Override
+ public String toJson() {
+ return JsonHelper.toJson(this);
+ }
+
+ @Override
+ public boolean equalsTo(Expr expr) {
+ if (expr instanceof Having) {
+ Having other = (Having) expr;
+ return TUtil.checkEquals(qual, other.qual);
+ }
+ return false;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/InPredicate.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/InPredicate.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/InPredicate.java
new file mode 100644
index 0000000..abdcc86
--- /dev/null
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/InPredicate.java
@@ -0,0 +1,34 @@
+/**
+ * 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;
+
+public class InPredicate extends BinaryOperator {
+
+ public InPredicate(Expr predicand, Expr in_values) {
+ super(OpType.InPredicate, predicand, in_values);
+ }
+
+ public Expr getPredicand() {
+ return left;
+ }
+
+ public Expr getInValue() {
+ return right;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/IsNullPredicate.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/IsNullPredicate.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/IsNullPredicate.java
new file mode 100644
index 0000000..610a81e
--- /dev/null
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/IsNullPredicate.java
@@ -0,0 +1,44 @@
+/**
+ * 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;
+
+public class IsNullPredicate extends Expr {
+ private final boolean not;
+ private final ColumnReferenceExpr columnRef;
+
+ public IsNullPredicate(boolean not, ColumnReferenceExpr column) {
+ super(OpType.IsNullPredicate);
+ this.not = not;
+ this.columnRef = column;
+ }
+
+ public boolean isNot() {
+ return not;
+ }
+
+ public ColumnReferenceExpr getColumnRef() {
+ return columnRef;
+ }
+
+ @Override
+ boolean equalsTo(Expr expr) {
+ IsNullPredicate nullPredicate = (IsNullPredicate) expr;
+ return not == nullPredicate.not && columnRef.equals(nullPredicate.columnRef);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Join.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Join.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Join.java
index c2316fd..51c84c2 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Join.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Join.java
@@ -20,43 +20,45 @@ package org.apache.tajo.algebra;
import org.apache.tajo.util.TUtil;
+import java.util.Arrays;
+
public class Join extends BinaryOperator {
- private JoinType join_type;
- private Expr join_qual;
- private ColumnReferenceExpr [] join_columns;
+ private JoinType joinType;
+ private Expr joinQual;
+ private ColumnReferenceExpr[] joinColumns;
private boolean natural = false;
public Join(JoinType joinType) {
- super(ExprType.Join);
- this.join_type = joinType;
+ super(OpType.Join);
+ this.joinType = joinType;
}
public JoinType getJoinType() {
- return this.join_type;
+ return this.joinType;
}
public boolean hasQual() {
- return this.join_qual != null;
+ return this.joinQual != null;
}
public Expr getQual() {
- return this.join_qual;
+ return this.joinQual;
}
public void setQual(Expr expr) {
- this.join_qual = expr;
+ this.joinQual = expr;
}
public boolean hasJoinColumns() {
- return join_columns != null;
+ return joinColumns != null;
}
- public ColumnReferenceExpr [] getJoinColumns() {
- return join_columns;
+ public ColumnReferenceExpr[] getJoinColumns() {
+ return joinColumns;
}
public void setJoinColumns(ColumnReferenceExpr[] columns) {
- join_columns = columns;
+ joinColumns = columns;
}
public void setNatural() {
@@ -69,9 +71,9 @@ public class Join extends BinaryOperator {
boolean equalsTo(Expr expr) {
Join another = (Join) expr;
- return join_type.equals(another.join_type) &&
- TUtil.checkEquals(join_qual, another.join_qual) &&
- TUtil.checkEquals(join_columns, another.join_columns) &&
+ return joinType.equals(another.joinType) &&
+ TUtil.checkEquals(joinQual, another.joinQual) &&
+ TUtil.checkEquals(joinColumns, another.joinColumns) &&
natural == another.natural;
}
@@ -79,4 +81,14 @@ public class Join extends BinaryOperator {
public String toJson() {
return JsonHelper.toJson(this);
}
+
+ @Override
+ public int hashCode() {
+ int result = getType().hashCode();
+ result = 31 * result + joinType.hashCode();
+ result = 31 * result + (joinQual != null ? joinQual.hashCode() : 0);
+ result = 31 * result + (joinColumns != null ? Arrays.hashCode(joinColumns) : 0);
+ result = 31 * result + (natural ? 1 : 0);
+ return result;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/JsonHelper.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/JsonHelper.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/JsonHelper.java
index 5cf0376..f05a4ea 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/JsonHelper.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/JsonHelper.java
@@ -38,7 +38,7 @@ public class JsonHelper {
private void initBuilder() {
builder = new GsonBuilder().setPrettyPrinting();
- builder.registerTypeAdapter(ExprType.class, new ExprType.JsonSerDer());
+ builder.registerTypeAdapter(OpType.class, new OpType.JsonSerDer());
builder.registerTypeAdapter(Expr.class, new Expr.JsonSerDer());
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/LikeExpr.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/LikeExpr.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/LikeExpr.java
deleted file mode 100644
index ac73d74..0000000
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/LikeExpr.java
+++ /dev/null
@@ -1,51 +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;
-
-public class LikeExpr extends BinaryOperator {
- private boolean not;
- private ColumnReferenceExpr column_ref;
- private Expr pattern;
-
- public LikeExpr(boolean not, ColumnReferenceExpr columnReferenceExpr, Expr pattern) {
- super(ExprType.Like);
- this.not = not;
- this.column_ref = columnReferenceExpr;
- this.pattern = pattern;
- }
-
- public boolean isNot() {
- return not;
- }
-
- public ColumnReferenceExpr getColumnRef() {
- return this.column_ref;
- }
-
- public Expr getPattern() {
- return this.pattern;
- }
-
- boolean equalsTo(Expr expr) {
- LikeExpr another = (LikeExpr) expr;
- return not == another.not &&
- column_ref.equals(another.column_ref) &&
- pattern.equals(another.pattern);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/LikePredicate.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/LikePredicate.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/LikePredicate.java
new file mode 100644
index 0000000..e091df1
--- /dev/null
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/LikePredicate.java
@@ -0,0 +1,51 @@
+/**
+ * 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;
+
+public class LikePredicate extends Expr {
+ private boolean not;
+ private ColumnReferenceExpr columnRef;
+ private Expr pattern;
+
+ public LikePredicate(boolean not, ColumnReferenceExpr columnReferenceExpr, Expr pattern) {
+ super(OpType.LikePredicate);
+ this.not = not;
+ this.columnRef = columnReferenceExpr;
+ this.pattern = pattern;
+ }
+
+ public boolean isNot() {
+ return not;
+ }
+
+ public ColumnReferenceExpr getColumnRef() {
+ return this.columnRef;
+ }
+
+ public Expr getPattern() {
+ return this.pattern;
+ }
+
+ boolean equalsTo(Expr expr) {
+ LikePredicate another = (LikePredicate) expr;
+ return not == another.not &&
+ columnRef.equals(another.columnRef) &&
+ pattern.equals(another.pattern);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Limit.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Limit.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Limit.java
index e3ded02..dd3aee9 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Limit.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Limit.java
@@ -20,15 +20,15 @@ package org.apache.tajo.algebra;
public class Limit extends UnaryOperator {
- private Expr fetch_first_num;
+ private Expr fetchFirstNum;
- public Limit(Expr fetch_first_num) {
- super(ExprType.Limit);
- this.fetch_first_num = fetch_first_num;
+ public Limit(Expr fetchFirstNum) {
+ super(OpType.Limit);
+ this.fetchFirstNum = fetchFirstNum;
}
public Expr getFetchFirstNum() {
- return this.fetch_first_num;
+ return this.fetchFirstNum;
}
@Override
@@ -44,6 +44,6 @@ public class Limit extends UnaryOperator {
@Override
boolean equalsTo(Expr expr) {
Limit another = (Limit) expr;
- return fetch_first_num.equals(another.fetch_first_num);
+ return fetchFirstNum.equals(another.fetchFirstNum);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/LiteralExpr.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/LiteralExpr.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/LiteralExpr.java
deleted file mode 100644
index df8f4dd..0000000
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/LiteralExpr.java
+++ /dev/null
@@ -1,53 +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;
-
-public class LiteralExpr extends Expr {
- private String value;
- private LiteralType value_type;
-
- public static enum LiteralType {
- String,
- Unsigned_Integer,
- Unsigned_Float,
- Unsigned_Large_Integer,
- }
-
- public LiteralExpr(String value, LiteralType value_type) {
- super(ExprType.Literal);
- this.value = value;
- this.value_type = value_type;
- }
-
- public String getValue() {
- return this.value;
- }
-
- public LiteralType getValueType() {
- return this.value_type;
- }
-
- public boolean equalsTo(Expr expr) {
- LiteralExpr another = (LiteralExpr) expr;
- boolean a = value_type.equals(another.value_type);
- boolean b = value.equals(another.value);
-
- return a && b;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/LiteralValue.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/LiteralValue.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/LiteralValue.java
new file mode 100644
index 0000000..02445f0
--- /dev/null
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/LiteralValue.java
@@ -0,0 +1,53 @@
+/**
+ * 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;
+
+public class LiteralValue extends Expr {
+ private String value;
+ private LiteralType valueType;
+
+ public static enum LiteralType {
+ String,
+ Unsigned_Integer,
+ Unsigned_Float,
+ Unsigned_Large_Integer,
+ }
+
+ public LiteralValue(String value, LiteralType valueType) {
+ super(OpType.Literal);
+ this.value = value;
+ this.valueType = valueType;
+ }
+
+ public String getValue() {
+ return this.value;
+ }
+
+ public LiteralType getValueType() {
+ return this.valueType;
+ }
+
+ public boolean equalsTo(Expr expr) {
+ LiteralValue another = (LiteralValue) expr;
+ boolean a = valueType.equals(another.valueType);
+ boolean b = value.equals(another.value);
+
+ return a && b;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/NotExpr.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/NotExpr.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/NotExpr.java
new file mode 100644
index 0000000..aba2f0e
--- /dev/null
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/NotExpr.java
@@ -0,0 +1,31 @@
+/**
+ * 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;
+
+public class NotExpr extends UnaryOperator {
+ public NotExpr(Expr child) {
+ super(OpType.Not);
+ setChild(child);
+ }
+
+ @Override
+ boolean equalsTo(Expr expr) {
+ return expr instanceof NotExpr;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/NullValue.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/NullValue.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/NullValue.java
new file mode 100644
index 0000000..9be1a2f
--- /dev/null
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/NullValue.java
@@ -0,0 +1,31 @@
+/*
+ * 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;
+
+public class NullValue extends Expr {
+
+ public NullValue() {
+ super(OpType.Null);
+ }
+
+ @Override
+ boolean equalsTo(Expr expr) {
+ return expr instanceof NullValue;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/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
new file mode 100644
index 0000000..7be2ea9
--- /dev/null
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/OpType.java
@@ -0,0 +1,117 @@
+/**
+ * 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 com.google.gson.*;
+
+import java.lang.reflect.Type;
+
+public enum OpType {
+
+ // relational operators
+ Relation(Relation.class),
+ RelationList(RelationList.class),
+ TableSubQuery(TableSubQuery.class),
+ Except(SetOperation.class),
+ Having(Having.class),
+ Aggregation(Aggregation.class),
+ Intersect(SetOperation.class),
+ Join(Join.class),
+ Projection(Projection.class),
+ Rename,
+ Filter(Selection.class),
+ Sort(Sort.class),
+ Union(SetOperation.class),
+ Limit(Limit.class),
+
+ // Data definition language
+ CreateTable(CreateTable.class),
+ DropTable(DropTable.class),
+
+ // logical operators
+ And(BinaryOperator.class),
+ Or(BinaryOperator.class),
+ Not(NotExpr.class),
+
+ // comparison predicates
+ Equals(BinaryOperator.class),
+ NotEquals(BinaryOperator.class),
+ LessThan(BinaryOperator.class),
+ LessThanOrEquals(BinaryOperator.class),
+ GreaterThan(BinaryOperator.class),
+ GreaterThanOrEquals(BinaryOperator.class),
+
+ // other predicates
+ CaseWhen(CaseWhenPredicate.class),
+ IsNullPredicate(IsNullPredicate.class),
+ InPredicate(InPredicate.class),
+ LikePredicate(LikePredicate.class),
+ ValueList(ValueListExpr.class),
+ Is,
+
+ // arithmetic operators
+ Plus(BinaryOperator.class),
+ Minus(BinaryOperator.class),
+ Multiply(BinaryOperator.class),
+ Divide(BinaryOperator.class),
+ Modular(BinaryOperator.class),
+
+ // other expressions
+ Column(ColumnReferenceExpr.class),
+ Target(Target.class),
+ Function(FunctionExpr.class),
+
+ // set functions
+ CountRowsFunction(CountRowsFunctionExpr.class),
+ CountValueFunction(CountValueFunctionExpr.class),
+
+ Literal(LiteralValue.class),
+ Null(NullValue.class),
+ ScalarSubQuery(ScalarSubQuery.class);
+
+ private Class baseClass;
+
+ OpType() {
+ this.baseClass = Expr.class;
+ }
+ OpType(Class clazz) {
+ this.baseClass = clazz;
+ }
+
+ public Class getBaseClass() {
+ return this.baseClass;
+ }
+
+ public static class JsonSerDer implements JsonSerializer<OpType>,
+ JsonDeserializer<OpType> {
+
+ @Override
+ public JsonElement serialize(OpType src, Type typeOfSrc,
+ JsonSerializationContext context) {
+ return new JsonPrimitive(src.name());
+ }
+
+ @Override
+ public OpType deserialize(JsonElement json, Type typeOfT,
+ JsonDeserializationContext context)
+ throws JsonParseException {
+ return OpType.valueOf(json.getAsString());
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/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 bc66bc0..38520ae 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
@@ -21,13 +21,17 @@ package org.apache.tajo.algebra;
import org.apache.tajo.util.TUtil;
public class Projection extends UnaryOperator implements Cloneable {
- private boolean project_all;
+ private boolean all;
private boolean distinct = false;
- private Target [] targets;
+ private Target[] targets;
public Projection() {
- super(ExprType.Projection);
+ super(OpType.Projection);
+ }
+
+ public int size() {
+ return targets.length;
}
public boolean isDistinct() {
@@ -39,25 +43,25 @@ public class Projection extends UnaryOperator implements Cloneable {
}
public void setAll() {
- project_all = true;
+ all = true;
}
public boolean isAllProjected() {
- return project_all;
+ return all;
}
- public Target [] getTargets() {
+ public Target[] getTargets() {
return this.targets;
}
- public void setTargets(Target [] targets) {
+ public void setTargets(Target[] targets) {
this.targets = targets;
}
@Override
boolean equalsTo(Expr expr) {
Projection another = (Projection) expr;
- return TUtil.checkEquals(project_all, another.project_all) &&
+ return TUtil.checkEquals(all, another.all) &&
TUtil.checkEquals(targets, another.targets);
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Relation.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Relation.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Relation.java
index df44b12..0cb0bbe 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Relation.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Relation.java
@@ -21,20 +21,24 @@ package org.apache.tajo.algebra;
import org.apache.tajo.util.TUtil;
public class Relation extends Expr {
- private String rel_name;
+ private String tableName;
private String alias;
- protected Relation(ExprType type, String relationName) {
+ protected Relation(OpType type, String relationName) {
super(type);
- this.rel_name = relationName;
+ this.tableName = relationName;
}
public Relation(String relationName) {
- this(ExprType.Relation, relationName);
+ this(OpType.Relation, relationName);
+ }
+
+ public String getCanonicalName() {
+ return alias == null ? tableName : alias;
}
public String getName() {
- return rel_name;
+ return tableName;
}
public boolean hasAlias() {
@@ -57,13 +61,13 @@ public class Relation extends Expr {
@Override
boolean equalsTo(Expr expr) {
Relation other = (Relation) expr;
- return TUtil.checkEquals(rel_name, other.rel_name) &&
+ return TUtil.checkEquals(tableName, other.tableName) &&
TUtil.checkEquals(alias, other.alias);
}
@Override
public int hashCode() {
- int result = rel_name.hashCode();
+ int result = tableName.hashCode();
result = 31 * result + (alias != null ? alias.hashCode() : 0);
return result;
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/RelationList.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/RelationList.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/RelationList.java
new file mode 100644
index 0000000..8e9f878
--- /dev/null
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/RelationList.java
@@ -0,0 +1,62 @@
+/**
+ * Licensed 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 com.google.common.base.Preconditions;
+import org.apache.tajo.util.TUtil;
+
+import java.util.Set;
+
+public class RelationList extends Expr {
+ private Expr[] relations;
+
+ public RelationList(Expr[] relations) {
+ super(OpType.RelationList);
+ checkRelations(relations);
+ this.relations = relations;
+ }
+
+ private void checkRelations(Expr[] relations) {
+ for (Expr rel : relations) {
+ Preconditions.checkArgument(
+ rel.getType() == OpType.Relation ||
+ rel.getType() == OpType.Join ||
+ rel.getType() == OpType.TableSubQuery,
+ "Only Relation, Join, or TableSubQuery can be given to RelationList, but this expr "
+ + " is " + rel.getType());
+ }
+ }
+
+ public Expr[] getRelations() {
+ return this.relations;
+ }
+
+ public int size() {
+ return this.relations.length;
+ }
+
+ @Override
+ public String toString() {
+ return toJson();
+ }
+
+ @Override
+ boolean equalsTo(Expr expr) {
+ Set<Expr> thisSet = TUtil.newHashSet(relations);
+ RelationList another = (RelationList) expr;
+ Set<Expr> anotherSet = TUtil.newHashSet(another.relations);
+ return thisSet.equals(anotherSet);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/ScalarSubQuery.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/ScalarSubQuery.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/ScalarSubQuery.java
index f07cb31..2273a48 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/ScalarSubQuery.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/ScalarSubQuery.java
@@ -20,8 +20,9 @@ package org.apache.tajo.algebra;
public class ScalarSubQuery extends Expr {
private Expr subquery;
+
public ScalarSubQuery(Expr subQuery) {
- super(ExprType.ScalarSubQuery);
+ super(OpType.ScalarSubQuery);
this.subquery = subQuery;
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Selection.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Selection.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Selection.java
index d9f68bc..f43c252 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Selection.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Selection.java
@@ -21,24 +21,23 @@ package org.apache.tajo.algebra;
import org.apache.tajo.util.TUtil;
public class Selection extends UnaryOperator implements JsonSerializable {
- private Expr search_condition;
+ private Expr qual;
- public Selection(Expr relation, Expr qual) {
- super(ExprType.Selection);
- setChild(relation);
- search_condition = qual;
+ public Selection(Expr qual) {
+ super(OpType.Filter);
+ this.qual = qual;
}
public boolean hasQual() {
- return search_condition != null;
+ return qual != null;
}
public void setQual(Expr expr) {
- this.search_condition = expr;
+ this.qual = expr;
}
public Expr getQual() {
- return this.search_condition;
+ return this.qual;
}
@Override
@@ -50,7 +49,7 @@ public class Selection extends UnaryOperator implements JsonSerializable {
public boolean equalsTo(Expr expr) {
if (expr instanceof Selection) {
Selection other = (Selection) expr;
- return TUtil.checkEquals(search_condition, other.search_condition);
+ return TUtil.checkEquals(qual, other.qual);
}
return false;
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/SetOperation.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/SetOperation.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/SetOperation.java
index 8a5ff9e..47ab44a 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/SetOperation.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/SetOperation.java
@@ -24,11 +24,12 @@ import com.google.common.base.Preconditions;
public class SetOperation extends BinaryOperator {
private boolean distinct = true;
- public SetOperation(ExprType type, Expr left, Expr right, boolean distinct) {
+ public SetOperation(OpType type, Expr left, Expr right, boolean distinct) {
super(type, left, right);
- Preconditions.checkArgument(type == ExprType.Union ||
- type == ExprType.Intersect ||
- type == ExprType.Except);
+ Preconditions.checkArgument(type == OpType.Union ||
+ type == OpType.Intersect ||
+ type == OpType.Except);
+ this.distinct = distinct;
}
public boolean isDistinct() {
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Sort.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Sort.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Sort.java
index 7260e97..f57cd89 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Sort.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Sort.java
@@ -18,28 +18,29 @@
package org.apache.tajo.algebra;
+import com.google.gson.annotations.SerializedName;
import org.apache.tajo.util.TUtil;
public class Sort extends UnaryOperator {
- private SortSpec [] sort_specs;
+ private SortSpec [] sortSpecs;
public Sort(final SortSpec [] sortSpecs) {
- super(ExprType.Sort);
- this.sort_specs = sortSpecs;
+ super(OpType.Sort);
+ this.sortSpecs = sortSpecs;
}
- public void setSortSpecs(SortSpec[] sort_specs) {
- this.sort_specs = sort_specs;
+ public void setSortSpecs(SortSpec[] sortSpecs) {
+ this.sortSpecs = sortSpecs;
}
public SortSpec [] getSortSpecs() {
- return this.sort_specs;
+ return this.sortSpecs;
}
@Override
public boolean equalsTo(Expr expr) {
Sort another = (Sort) expr;
- return TUtil.checkEquals(sort_specs, another.sort_specs);
+ return TUtil.checkEquals(sortSpecs, another.sortSpecs);
}
@Override
@@ -50,7 +51,8 @@ public class Sort extends UnaryOperator {
public static class SortSpec {
private ColumnReferenceExpr key;
private boolean asc = true;
- private boolean null_first = false;
+ @SerializedName("null_first")
+ private boolean nullFirst = false;
public SortSpec(final ColumnReferenceExpr key) {
this.key = key;
@@ -67,7 +69,7 @@ public class Sort extends UnaryOperator {
final boolean nullFirst) {
this(sortKey);
this.asc = asc;
- this.null_first = nullFirst;
+ this.nullFirst = nullFirst;
}
public final boolean isAscending() {
@@ -79,11 +81,11 @@ public class Sort extends UnaryOperator {
}
public final boolean isNullFirst() {
- return this.null_first;
+ return this.nullFirst;
}
public final void setNullFirst() {
- this.null_first = true;
+ this.nullFirst = true;
}
public final ColumnReferenceExpr getKey() {
@@ -95,7 +97,7 @@ public class Sort extends UnaryOperator {
SortSpec other = (SortSpec) obj;
return TUtil.checkEquals(key, other.key) &&
TUtil.checkEquals(asc, other.asc) &&
- TUtil.checkEquals(null_first, other.null_first);
+ TUtil.checkEquals(nullFirst, other.nullFirst);
}
return false;
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/TableSubQuery.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/TableSubQuery.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/TableSubQuery.java
index d46dc4a..55c44ba 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/TableSubQuery.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/TableSubQuery.java
@@ -20,12 +20,25 @@ package org.apache.tajo.algebra;
public class TableSubQuery extends Relation {
private Expr subquery;
+ private String [] columnNames;
public TableSubQuery(String relName, Expr subquery) {
- super(ExprType.TableSubQuery, relName);
+ super(OpType.TableSubQuery, relName);
this.subquery = subquery;
}
+ public boolean hasColumnNames() {
+ return this.columnNames != null;
+ }
+
+ public void setColumnNames(String[] aliasList) {
+ this.columnNames = aliasList;
+ }
+
+ public String [] getColumnNames() {
+ return columnNames;
+ }
+
public Expr getSubQuery() {
return subquery;
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/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
index f7019ea..2de5057 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/Target.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/Target.java
@@ -20,11 +20,12 @@ package org.apache.tajo.algebra;
import org.apache.tajo.util.TUtil;
-public class Target implements JsonSerializable {
+public class Target extends Expr {
private Expr expr;
private String alias;
public Target(Expr expr) {
+ super(OpType.Target);
this.expr = expr;
}
@@ -45,12 +46,7 @@ public class Target implements JsonSerializable {
}
@Override
- public String toJson() {
- return JsonHelper.toJson(this);
- }
-
- @Override
- public boolean equals(Object obj) {
+ public boolean equalsTo(Expr obj) {
if (obj instanceof Target) {
Target another = (Target) obj;
return expr.equals(another.expr) && TUtil.checkEquals(alias, another.alias);
@@ -58,4 +54,9 @@ public class Target implements JsonSerializable {
return false;
}
+
+ @Override
+ public String toJson() {
+ return JsonHelper.toJson(this);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/UnaryOperator.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/UnaryOperator.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/UnaryOperator.java
index 59db158..fec87d0 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/UnaryOperator.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/UnaryOperator.java
@@ -21,7 +21,7 @@ package org.apache.tajo.algebra;
public abstract class UnaryOperator extends Expr {
private Expr child;
- public UnaryOperator(ExprType type) {
+ public UnaryOperator(OpType type) {
super(type);
}
@@ -29,6 +29,10 @@ public abstract class UnaryOperator extends Expr {
return this.child;
}
+ public boolean hasChild() {
+ return child != null;
+ }
+
public void setChild(Expr op) {
this.child = op;
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/00c3ee2b/tajo-algebra/src/main/java/org/apache/tajo/algebra/ValueListExpr.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/ValueListExpr.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/ValueListExpr.java
new file mode 100644
index 0000000..bbcbd21
--- /dev/null
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/ValueListExpr.java
@@ -0,0 +1,40 @@
+/**
+ * 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 ValueListExpr extends Expr {
+ private Expr[] values;
+
+ public ValueListExpr(Expr[] values) {
+ super(OpType.ValueList);
+ this.values = values;
+ }
+
+ public Expr[] getValues() {
+ return values;
+ }
+
+ @Override
+ boolean equalsTo(Expr expr) {
+ ValueListExpr valueListExpr = (ValueListExpr) expr;
+ return TUtil.checkEquals(values, valueListExpr.values);
+ }
+}