From 77da0001feade1b4cb1e4dd9f019cc950734c097 Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 14 Sep 2017 10:25:29 +0800 Subject: [PATCH] improved sql parser. --- .../com/alibaba/druid/sql/SQLTransformUtils.java | 10 +++++----- .../com/alibaba/druid/sql/ast/SQLDataType.java | 3 +++ .../Oracle2MySql_DataTypeTest_number_int.java | 2 +- .../oracle2pg}/Oracle2PG_DataTypeTest_chars.java | 2 +- .../Oracle2PG_DataTypeTest_datetime.java | 4 ++-- .../oracle2pg}/Oracle2PG_DataTypeTest_double.java | 14 +++++++------- .../oracle2pg}/Oracle2PG_DataTypeTest_int.java | 3 ++- .../oracle2pg}/Oracle2PG_DataTypeTest_lob.java | 2 +- .../Oracle2PG_DataTypeTest_number_int.java | 2 +- 9 files changed, 23 insertions(+), 19 deletions(-) rename src/test/java/com/alibaba/druid/bvt/sql/transform/{ => datatype}/Oracle2MySql_DataTypeTest_number_int.java (99%) rename src/test/java/com/alibaba/druid/bvt/sql/transform/{ => datatype/oracle2pg}/Oracle2PG_DataTypeTest_chars.java (98%) rename src/test/java/com/alibaba/druid/bvt/sql/transform/{ => datatype/oracle2pg}/Oracle2PG_DataTypeTest_datetime.java (93%) rename src/test/java/com/alibaba/druid/bvt/sql/transform/{ => datatype/oracle2pg}/Oracle2PG_DataTypeTest_double.java (82%) rename src/test/java/com/alibaba/druid/bvt/sql/transform/{ => datatype/oracle2pg}/Oracle2PG_DataTypeTest_int.java (95%) rename src/test/java/com/alibaba/druid/bvt/sql/transform/{ => datatype/oracle2pg}/Oracle2PG_DataTypeTest_lob.java (96%) rename src/test/java/com/alibaba/druid/bvt/sql/transform/{ => datatype/oracle2pg}/Oracle2PG_DataTypeTest_number_int.java (99%) diff --git a/src/main/java/com/alibaba/druid/sql/SQLTransformUtils.java b/src/main/java/com/alibaba/druid/sql/SQLTransformUtils.java index 720e8406d7..6cf05df59f 100644 --- a/src/main/java/com/alibaba/druid/sql/SQLTransformUtils.java +++ b/src/main/java/com/alibaba/druid/sql/SQLTransformUtils.java @@ -428,14 +428,14 @@ public class SQLTransformUtils { dataType = new SQLDataTypeImpl(SQLDataType.Constants.DECIMAL, 38); } else if (nameHash == FnvHash.Constants.BINARY_FLOAT) { - dataType = new SQLDataTypeImpl("real"); + dataType = new SQLDataTypeImpl(SQLDataType.Constants.REAL); } else if (nameHash == FnvHash.Constants.BINARY_DOUBLE || nameHash == FnvHash.Constants.FLOAT || nameHash == FnvHash.Constants.DOUBLE || nameHash == FnvHash.Constants.REAL || nameHash == FnvHash.Constants.DOUBLE_PRECISION) { - dataType = new SQLDataTypeImpl("double precision"); + dataType = new SQLDataTypeImpl(SQLDataType.Constants.DOUBLE_PRECISION); } else if (nameHash == FnvHash.Constants.NUMBER) { if (argumentns.size() == 0) { @@ -579,9 +579,9 @@ public class SQLTransformUtils { } else if (nameHash == FnvHash.Constants.BFILE) { dataType = new SQLCharacterDataType(SQLDataType.Constants.VARCHAR, 255); - - } else if (nameHash == FnvHash.Constants.DATE - || nameHash == FnvHash.Constants.DATETIME + } else if (nameHash == FnvHash.Constants.DATE) { + dataType = new SQLDataTypeImpl(SQLDataType.Constants.TIMESTAMP, 0); + } else if (nameHash == FnvHash.Constants.DATETIME || nameHash == FnvHash.Constants.TIMESTAMP) { int len = -1; if (argumentns.size() > 0) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/SQLDataType.java b/src/main/java/com/alibaba/druid/sql/ast/SQLDataType.java index 2e15d03348..a1ab24ef73 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/SQLDataType.java +++ b/src/main/java/com/alibaba/druid/sql/ast/SQLDataType.java @@ -46,6 +46,9 @@ public interface SQLDataType extends SQLObject { String DECIMAL = "DECIMAL"; String NUMBER = "NUMBER"; + String REAL = "REAL"; + String DOUBLE_PRECISION = "DOUBLE PRECISION"; + String TINYINT = "TINYINT"; String SMALLINT = "SMALLINT"; String INT = "INT"; diff --git a/src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2MySql_DataTypeTest_number_int.java b/src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/Oracle2MySql_DataTypeTest_number_int.java similarity index 99% rename from src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2MySql_DataTypeTest_number_int.java rename to src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/Oracle2MySql_DataTypeTest_number_int.java index 410e1305a7..48105df1f6 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2MySql_DataTypeTest_number_int.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/Oracle2MySql_DataTypeTest_number_int.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.bvt.sql.transform; +package com.alibaba.druid.bvt.sql.transform.datatype; import com.alibaba.druid.sql.SQLTransformUtils; import com.alibaba.druid.sql.ast.SQLDataType; diff --git a/src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2PG_DataTypeTest_chars.java b/src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/oracle2pg/Oracle2PG_DataTypeTest_chars.java similarity index 98% rename from src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2PG_DataTypeTest_chars.java rename to src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/oracle2pg/Oracle2PG_DataTypeTest_chars.java index 1b5cc677a6..d34cb48bf2 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2PG_DataTypeTest_chars.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/oracle2pg/Oracle2PG_DataTypeTest_chars.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.bvt.sql.transform; +package com.alibaba.druid.bvt.sql.transform.datatype.oracle2pg; import com.alibaba.druid.sql.SQLTransformUtils; import com.alibaba.druid.sql.ast.SQLDataType; diff --git a/src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2PG_DataTypeTest_datetime.java b/src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/oracle2pg/Oracle2PG_DataTypeTest_datetime.java similarity index 93% rename from src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2PG_DataTypeTest_datetime.java rename to src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/oracle2pg/Oracle2PG_DataTypeTest_datetime.java index 791150403e..e78d016363 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2PG_DataTypeTest_datetime.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/oracle2pg/Oracle2PG_DataTypeTest_datetime.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.bvt.sql.transform; +package com.alibaba.druid.bvt.sql.transform.datatype.oracle2pg; import com.alibaba.druid.sql.SQLTransformUtils; import com.alibaba.druid.sql.ast.SQLDataType; @@ -25,7 +25,7 @@ public class Oracle2PG_DataTypeTest_datetime extends TestCase { String sql = "date"; SQLDataType dataType = SQLParserUtils.createExprParser(sql, JdbcConstants.ORACLE).parseDataType(); SQLDataType pgDataType = SQLTransformUtils.transformOracleToPostgresql(dataType); - assertEquals("TIMESTAMP", pgDataType.toString()); + assertEquals("TIMESTAMP(0)", pgDataType.toString()); } public void test_oracle2pg_datetime() throws Exception { diff --git a/src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2PG_DataTypeTest_double.java b/src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/oracle2pg/Oracle2PG_DataTypeTest_double.java similarity index 82% rename from src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2PG_DataTypeTest_double.java rename to src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/oracle2pg/Oracle2PG_DataTypeTest_double.java index 6e051ca44d..162570d79e 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2PG_DataTypeTest_double.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/oracle2pg/Oracle2PG_DataTypeTest_double.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.bvt.sql.transform; +package com.alibaba.druid.bvt.sql.transform.datatype.oracle2pg; import com.alibaba.druid.sql.SQLTransformUtils; import com.alibaba.druid.sql.ast.SQLDataType; @@ -11,42 +11,42 @@ public class Oracle2PG_DataTypeTest_double extends TestCase { String sql = "float"; SQLDataType dataType = SQLParserUtils.createExprParser(sql, JdbcConstants.ORACLE).parseDataType(); SQLDataType pgDataType = SQLTransformUtils.transformOracleToPostgresql(dataType); - assertEquals("double precision", pgDataType.toString()); + assertEquals("DOUBLE PRECISION", pgDataType.toString()); } public void test_oracle2pg_double() throws Exception { String sql = "double"; SQLDataType dataType = SQLParserUtils.createExprParser(sql, JdbcConstants.ORACLE).parseDataType(); SQLDataType pgDataType = SQLTransformUtils.transformOracleToPostgresql(dataType); - assertEquals("double precision", pgDataType.toString()); + assertEquals("DOUBLE PRECISION", pgDataType.toString()); } public void test_oracle2pg_real() throws Exception { String sql = "real"; SQLDataType dataType = SQLParserUtils.createExprParser(sql, JdbcConstants.ORACLE).parseDataType(); SQLDataType pgDataType = SQLTransformUtils.transformOracleToPostgresql(dataType); - assertEquals("double precision", pgDataType.toString()); + assertEquals("DOUBLE PRECISION", pgDataType.toString()); } public void test_oracle2pg_binary_float() throws Exception { String sql = "BINARY_FLOAT"; SQLDataType dataType = SQLParserUtils.createExprParser(sql, JdbcConstants.ORACLE).parseDataType(); SQLDataType pgDataType = SQLTransformUtils.transformOracleToPostgresql(dataType); - assertEquals("real", pgDataType.toString()); + assertEquals("REAL", pgDataType.toString()); } public void test_oracle2pg_binary_double() throws Exception { String sql = "BINARY_DOUBLE"; SQLDataType dataType = SQLParserUtils.createExprParser(sql, JdbcConstants.ORACLE).parseDataType(); SQLDataType pgDataType = SQLTransformUtils.transformOracleToPostgresql(dataType); - assertEquals("double precision", pgDataType.toString()); + assertEquals("DOUBLE PRECISION", pgDataType.toString()); } public void test_oracle2pg_binary_double_precision() throws Exception { String sql = "double precision"; SQLDataType dataType = SQLParserUtils.createExprParser(sql, JdbcConstants.ORACLE).parseDataType(); SQLDataType pgDataType = SQLTransformUtils.transformOracleToPostgresql(dataType); - assertEquals("double precision", pgDataType.toString()); + assertEquals("DOUBLE PRECISION", pgDataType.toString()); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2PG_DataTypeTest_int.java b/src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/oracle2pg/Oracle2PG_DataTypeTest_int.java similarity index 95% rename from src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2PG_DataTypeTest_int.java rename to src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/oracle2pg/Oracle2PG_DataTypeTest_int.java index 2b41ebedc5..c3f7c5a2a6 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2PG_DataTypeTest_int.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/oracle2pg/Oracle2PG_DataTypeTest_int.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.bvt.sql.transform; +package com.alibaba.druid.bvt.sql.transform.datatype.oracle2pg; import com.alibaba.druid.sql.SQLTransformUtils; import com.alibaba.druid.sql.ast.SQLDataType; @@ -27,5 +27,6 @@ public class Oracle2PG_DataTypeTest_int extends TestCase { SQLDataType pgDataType = SQLTransformUtils.transformOracleToPostgresql(dataType); assertEquals("SMALLINT", pgDataType.toString()); } + } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2PG_DataTypeTest_lob.java b/src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/oracle2pg/Oracle2PG_DataTypeTest_lob.java similarity index 96% rename from src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2PG_DataTypeTest_lob.java rename to src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/oracle2pg/Oracle2PG_DataTypeTest_lob.java index 441821b7c3..705ed47bff 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2PG_DataTypeTest_lob.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/oracle2pg/Oracle2PG_DataTypeTest_lob.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.bvt.sql.transform; +package com.alibaba.druid.bvt.sql.transform.datatype.oracle2pg; import com.alibaba.druid.sql.SQLTransformUtils; import com.alibaba.druid.sql.ast.SQLDataType; diff --git a/src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2PG_DataTypeTest_number_int.java b/src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/oracle2pg/Oracle2PG_DataTypeTest_number_int.java similarity index 99% rename from src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2PG_DataTypeTest_number_int.java rename to src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/oracle2pg/Oracle2PG_DataTypeTest_number_int.java index 20024f5b6c..3220ad8d65 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/transform/Oracle2PG_DataTypeTest_number_int.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/transform/datatype/oracle2pg/Oracle2PG_DataTypeTest_number_int.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.bvt.sql.transform; +package com.alibaba.druid.bvt.sql.transform.datatype.oracle2pg; import com.alibaba.druid.sql.SQLTransformUtils; import com.alibaba.druid.sql.ast.SQLDataType;