You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by bl...@apache.org on 2014/02/25 04:12:11 UTC
git commit: TAJO-218: HiveQLAnalyzer has to support cast expression.
(jaehwa)
Repository: incubator-tajo
Updated Branches:
refs/heads/master 5eafede2f -> a33b83665
TAJO-218: HiveQLAnalyzer has to support cast expression. (jaehwa)
Project: http://git-wip-us.apache.org/repos/asf/incubator-tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tajo/commit/a33b8366
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tajo/tree/a33b8366
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tajo/diff/a33b8366
Branch: refs/heads/master
Commit: a33b836659fe1236db8d9ea3883b3bddefe131a1
Parents: 5eafede
Author: blrunner <jh...@gruter.com>
Authored: Tue Feb 25 12:11:42 2014 +0900
Committer: blrunner <jh...@gruter.com>
Committed: Tue Feb 25 12:11:42 2014 +0900
----------------------------------------------------------------------
CHANGES.txt | 2 +
.../tajo/engine/parser/HiveQLAnalyzer.java | 66 +++++++++++---------
.../tajo/engine/parser/TestHiveQLAnalyzer.java | 5 ++
.../resources/queries/default/select_15.hiveql | 1 +
.../resources/queries/default/select_15.sql | 1 +
5 files changed, 47 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/a33b8366/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 31d8942..6d08c67 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -475,6 +475,8 @@ Release 0.8.0 - unreleased
TASKS
+ TAJO-218: HiveQLAnalyzer has to support cast expression. (jaehwa)
+
TAJO-621: Add DOAP file for Tajo. (hyunsik)
TAJO-622: Add TM mark and navigation links required for TLP project.
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/a33b8366/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/HiveQLAnalyzer.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/HiveQLAnalyzer.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/HiveQLAnalyzer.java
index dd8c405..6d95fe1 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/HiveQLAnalyzer.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/parser/HiveQLAnalyzer.java
@@ -1188,7 +1188,10 @@ public class HiveQLAnalyzer extends HiveQLParserBaseVisitor<Expr> {
*/
@Override
public Expr visitCastExpression(HiveQLParser.CastExpressionContext ctx) {
- return visitExpression(ctx.expression());
+ DataTypeExpr castTarget = getDataTypeExpr(ctx.primitiveType());
+ Expr expr = visitExpression(ctx.expression());
+ Expr current = new CastExpr(expr, castTarget);
+ return current;
}
@Override
@@ -1455,33 +1458,7 @@ public class HiveQLAnalyzer extends HiveQLParserBaseVisitor<Expr> {
if (eachColumn.colType().type() != null) {
if (eachColumn.colType().type().primitiveType() != null) {
HiveQLParser.PrimitiveTypeContext primitiveType = eachColumn.colType().type().primitiveType();
-
- if (primitiveType.KW_STRING() != null) {
- type = TajoDataTypes.Type.TEXT.name();
- } else if (primitiveType.KW_TINYINT() != null) {
- type = TajoDataTypes.Type.INT1.name();
- } else if (primitiveType.KW_SMALLINT() != null) {
- type = TajoDataTypes.Type.INT2.name();
- } else if (primitiveType.KW_INT() != null) {
- type = TajoDataTypes.Type.INT4.name();
- } else if (primitiveType.KW_BIGINT() != null) {
- type = TajoDataTypes.Type.INT8.name();
- } else if (primitiveType.KW_FLOAT() != null) {
- type = TajoDataTypes.Type.FLOAT4.name();
- } else if (primitiveType.KW_DOUBLE() != null) {
- type = TajoDataTypes.Type.FLOAT8.name();
- } else if (primitiveType.KW_DECIMAL() != null) {
- type = TajoDataTypes.Type.DECIMAL.name();
- } else if (primitiveType.KW_BOOLEAN() != null) {
- type = TajoDataTypes.Type.BOOLEAN.name();
- } else if (primitiveType.KW_DATE() != null) {
- type = TajoDataTypes.Type.DATE.name();
- } else if (primitiveType.KW_DATETIME() != null) {
- //TODO
- } else if (primitiveType.KW_TIMESTAMP() != null) {
- type = TajoDataTypes.Type.TIMESTAMP.name();
- }
-
+ type = getDataTypeExpr(primitiveType).getTypeName();
columns[i] = new CreateTable.ColumnDefinition(eachColumn.colName.Identifier().getText(), type);
}
}
@@ -1499,6 +1476,39 @@ public class HiveQLAnalyzer extends HiveQLParserBaseVisitor<Expr> {
return createTable;
}
+
+ private DataTypeExpr getDataTypeExpr(HiveQLParser.PrimitiveTypeContext primitiveType) {
+ DataTypeExpr typeDefinition = null;
+
+ if (primitiveType.KW_STRING() != null) {
+ typeDefinition = new DataTypeExpr(TajoDataTypes.Type.TEXT.name());
+ } else if (primitiveType.KW_TINYINT() != null) {
+ typeDefinition = new DataTypeExpr(TajoDataTypes.Type.INT1.name());
+ } else if (primitiveType.KW_SMALLINT() != null) {
+ typeDefinition = new DataTypeExpr(TajoDataTypes.Type.INT2.name());
+ } else if (primitiveType.KW_INT() != null) {
+ typeDefinition = new DataTypeExpr(TajoDataTypes.Type.INT4.name());
+ } else if (primitiveType.KW_BIGINT() != null) {
+ typeDefinition = new DataTypeExpr(TajoDataTypes.Type.INT8.name());
+ } else if (primitiveType.KW_FLOAT() != null) {
+ typeDefinition = new DataTypeExpr(TajoDataTypes.Type.FLOAT4.name());
+ } else if (primitiveType.KW_DOUBLE() != null) {
+ typeDefinition = new DataTypeExpr(TajoDataTypes.Type.FLOAT8.name());
+ } else if (primitiveType.KW_DECIMAL() != null) {
+ typeDefinition = new DataTypeExpr(TajoDataTypes.Type.DECIMAL.name());
+ } else if (primitiveType.KW_BOOLEAN() != null) {
+ typeDefinition = new DataTypeExpr(TajoDataTypes.Type.BOOLEAN.name());
+ } else if (primitiveType.KW_DATE() != null) {
+ } else if (primitiveType.KW_DATETIME() != null) {
+ //TODO
+ } else if (primitiveType.KW_TIMESTAMP() != null) {
+ typeDefinition = new DataTypeExpr(TajoDataTypes.Type.TIMESTAMP.name());
+ }
+
+ return typeDefinition;
+ }
+
+
@Override
public Expr visitDropTableStatement(HiveQLParser.DropTableStatementContext ctx) {
DropTable dropTable = new DropTable(ctx.tableName().getText(), false);
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/a33b8366/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/parser/TestHiveQLAnalyzer.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/parser/TestHiveQLAnalyzer.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/parser/TestHiveQLAnalyzer.java
index 240f082..ef21dc3 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/parser/TestHiveQLAnalyzer.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/parser/TestHiveQLAnalyzer.java
@@ -134,6 +134,11 @@ public class TestHiveQLAnalyzer {
}
@Test
+ public void testSelect15() throws IOException {
+ compareJsonResult("select_15.sql", "select_15.hiveql");
+ }
+
+ @Test
public void testAsterisk1() throws IOException {
compareJsonResult("asterisk_1.sql");
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/a33b8366/tajo-core/tajo-core-backend/src/test/resources/queries/default/select_15.hiveql
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/queries/default/select_15.hiveql b/tajo-core/tajo-core-backend/src/test/resources/queries/default/select_15.hiveql
new file mode 100644
index 0000000..37c1c83
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/test/resources/queries/default/select_15.hiveql
@@ -0,0 +1 @@
+select id, cast(point as string) as point, cast(score as int) as score from table1
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/a33b8366/tajo-core/tajo-core-backend/src/test/resources/queries/default/select_15.sql
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/resources/queries/default/select_15.sql b/tajo-core/tajo-core-backend/src/test/resources/queries/default/select_15.sql
new file mode 100644
index 0000000..7c942b1
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/test/resources/queries/default/select_15.sql
@@ -0,0 +1 @@
+select id, point::text as point, score::INT4 as score from table1
\ No newline at end of file