diff --git a/src/main/java/com/alibaba/druid/sql/SQLUtils.java b/src/main/java/com/alibaba/druid/sql/SQLUtils.java index 5c6f28222a..25e42c5d62 100644 --- a/src/main/java/com/alibaba/druid/sql/SQLUtils.java +++ b/src/main/java/com/alibaba/druid/sql/SQLUtils.java @@ -42,18 +42,19 @@ import com.alibaba.druid.support.logging.LogFactory; import com.alibaba.druid.util.JdbcUtils; public class SQLUtils { + private final static Log LOG = LogFactory.getLog(SQLUtils.class); public static String toSQLString(SQLObject sqlObject, String dbType) { if (JdbcUtils.MYSQL.equals(dbType)) { return toMySqlString(sqlObject); } - + if (JdbcUtils.H2.equals(dbType)) { return toMySqlString(sqlObject); } - if (JdbcUtils.ORACLE.equals(dbType)) { + if (JdbcUtils.ORACLE.equals(dbType) || JdbcUtils.ALI_ORACLE.equals(dbType)) { return toOracleString(sqlObject); } @@ -163,7 +164,7 @@ public class SQLUtils { public static SQLASTOutputVisitor createFormatOutputVisitor(Appendable out, List statementList, String dbType) { - if (JdbcUtils.ORACLE.equals(dbType)) { + if (JdbcUtils.ORACLE.equals(dbType) || JdbcUtils.ALI_ORACLE.equals(dbType)) { if (statementList.size() == 1) { return new OracleOutputVisitor(out, false); } else { @@ -191,7 +192,7 @@ public class SQLUtils { } public static SchemaStatVisitor createSchemaStatVisitor(List statementList, String dbType) { - if (JdbcUtils.ORACLE.equals(dbType)) { + if (JdbcUtils.ORACLE.equals(dbType) || JdbcUtils.ALI_ORACLE.equals(dbType)) { if (statementList.size() == 1) { return new OracleSchemaStatVisitor(); } else { diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLParserUtils.java b/src/main/java/com/alibaba/druid/sql/parser/SQLParserUtils.java index 8a7192e7d3..c4cd436f92 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLParserUtils.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLParserUtils.java @@ -28,7 +28,7 @@ import com.alibaba.druid.util.JdbcUtils; public class SQLParserUtils { public static SQLStatementParser createSQLStatementParser(String sql, String dbType) { - if (JdbcUtils.ORACLE.equals(dbType)) { + if (JdbcUtils.ORACLE.equals(dbType) || JdbcUtils.ALI_ORACLE.equals(dbType)) { return new OracleStatementParser(sql); } @@ -43,7 +43,7 @@ public class SQLParserUtils { if (JdbcUtils.SQL_SERVER.equals(dbType)) { return new SQLServerStatementParser(sql); } - + if (JdbcUtils.H2.equals(dbType)) { return new MySqlStatementParser(sql); } @@ -52,14 +52,14 @@ public class SQLParserUtils { } public static SQLExprParser createExprParser(String sql, String dbType) { - if (JdbcUtils.ORACLE.equals(dbType)) { + if (JdbcUtils.ORACLE.equals(dbType) || JdbcUtils.ALI_ORACLE.equals(dbType)) { return new OracleExprParser(sql); } if (JdbcUtils.H2.equals(dbType)) { return new MySqlExprParser(sql); } - + if (JdbcUtils.MYSQL.equals(dbType)) { return new MySqlExprParser(sql); } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitorUtils.java b/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitorUtils.java index 152ebb186d..895565a705 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitorUtils.java @@ -48,14 +48,14 @@ public class ParameterizedOutputVisitorUtils { } public static SQLASTOutputVisitor createParameterizedOutputVisitor(Appendable out, String dbType) { - if (JdbcUtils.ORACLE.equals(dbType)) { + if (JdbcUtils.ORACLE.equals(dbType) || JdbcUtils.ALI_ORACLE.equals(dbType)) { return new OracleParameterizedOutputVisitor(out); } if (JdbcUtils.MYSQL.equals(dbType)) { return new MySqlParameterizedOutputVisitor(out); } - + if (JdbcUtils.H2.equals(dbType)) { return new MySqlParameterizedOutputVisitor(out); } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java index f74248d20a..e0399eae82 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java @@ -91,7 +91,7 @@ public class SQLEvalVisitorUtils { return new MySqlEvalVisitorImpl(); } - if (JdbcUtils.ORACLE.equals(dbType)) { + if (JdbcUtils.ORACLE.equals(dbType) || JdbcUtils.ALI_ORACLE.equals(dbType)) { return new OracleEvalVisitor(); } @@ -623,11 +623,11 @@ public class SQLEvalVisitorUtils { if (a instanceof BigInteger || b instanceof BigInteger) { return _bigInt(a).add(_bigInt(b)); } - + if (a instanceof Double || b instanceof Double) { return _double(a) + _double(b); } - + if (a instanceof Float || b instanceof Float) { return _float(a) + _float(b); } @@ -671,11 +671,11 @@ public class SQLEvalVisitorUtils { if (a instanceof BigInteger || b instanceof BigInteger) { return _bigInt(a).subtract(_bigInt(b)); } - + if (a instanceof Double || b instanceof Double) { return _double(a) - _double(b); } - + if (a instanceof Float || b instanceof Float) { return _float(a) - _float(b); } diff --git a/src/main/java/com/alibaba/druid/util/JdbcUtils.java b/src/main/java/com/alibaba/druid/util/JdbcUtils.java index 6e01676113..166bb44ddf 100644 --- a/src/main/java/com/alibaba/druid/util/JdbcUtils.java +++ b/src/main/java/com/alibaba/druid/util/JdbcUtils.java @@ -47,43 +47,46 @@ import com.alibaba.druid.support.logging.LogFactory; */ public final class JdbcUtils { - public static final String JTDS = "jtds"; + public static final String JTDS = "jtds"; - public static final String MOCK = "mock"; + public static final String MOCK = "mock"; - public static final String HSQL = "hsql"; + public static final String HSQL = "hsql"; - public static final String DB2 = "db2"; + public static final String DB2 = "db2"; - private static final String DB2_DRIVER = "COM.ibm.db2.jdbc.app.DB2Driver"; + private static final String DB2_DRIVER = "COM.ibm.db2.jdbc.app.DB2Driver"; - public static final String POSTGRESQL = "postgresql"; + public static final String POSTGRESQL = "postgresql"; - public static final String SYBASE = "sybase"; + public static final String SYBASE = "sybase"; - public static final String SQL_SERVER = "sqlserver"; + public static final String SQL_SERVER = "sqlserver"; - public static final String ORACLE = "oracle"; + public static final String ORACLE = "oracle"; + public static final String ALI_ORACLE = "AliOracle"; - private static final String ORACLE_DRIVER = "oracle.jdbc.driver.OracleDriver"; + private static final String ORACLE_DRIVER = "oracle.jdbc.driver.OracleDriver"; - public static final String MYSQL = "mysql"; + private static final String ALI_ORACLE_DRIVER = "com.alibaba.jdbc.AlibabaDriver"; - private static final String MYSQL_DRIVER = "com.mysql.jdbc.Driver"; + public static final String MYSQL = "mysql"; - public static final String DERBY = "derby"; + private static final String MYSQL_DRIVER = "com.mysql.jdbc.Driver"; - public static final String HBASE = "hbase"; + public static final String DERBY = "derby"; - public static final String HIVE = "hive"; + public static final String HBASE = "hbase"; - public static final String H2 = "h2"; + public static final String HIVE = "hive"; - private static final String H2_DRIVER = "org.h2.Driver"; + public static final String H2 = "h2"; - private final static Log LOG = LogFactory.getLog(JdbcUtils.class); + private static final String H2_DRIVER = "org.h2.Driver"; - private static final Properties driverUrlMapping = new Properties(); + private final static Log LOG = LogFactory.getLog(JdbcUtils.class); + + private static final Properties driverUrlMapping = new Properties(); static { try { @@ -376,6 +379,8 @@ public final class JdbcUtils { return MYSQL_DRIVER; } else if (rawUrl.startsWith("jdbc:oracle:")) { return ORACLE_DRIVER; + } else if (rawUrl.startsWith("jdbc:alibaba:oracle:")) { + return ALI_ORACLE_DRIVER; } else if (rawUrl.startsWith("jdbc:microsoft:")) { return "com.microsoft.jdbc.sqlserver.SQLServerDriver"; } else if (rawUrl.startsWith("jdbc:sqlserver:")) { @@ -438,14 +443,10 @@ public final class JdbcUtils { return DERBY; } else if (rawUrl.startsWith("jdbc:mysql:")) { return MYSQL; - } else if (rawUrl.startsWith("jdbc:wrap-jdbc:filters=default:name=com.alibaba.dragoon.master:jdbc:mysql:")) { - return MYSQL; } else if (rawUrl.startsWith("jdbc:oracle:")) { return ORACLE; } else if (rawUrl.startsWith("jdbc:alibaba:oracle:")) { - return ORACLE; - } else if (rawUrl.startsWith("jdbc:wrap-jdbc:driver=com.alibaba.jdbc.AlibabaDriver")) { - return ORACLE; + return ALI_ORACLE; } else if (rawUrl.startsWith("jdbc:microsoft:")) { return SQL_SERVER; } else if (rawUrl.startsWith("jdbc:sybase:Tds:")) { diff --git a/src/main/java/com/alibaba/druid/wall/WallFilter.java b/src/main/java/com/alibaba/druid/wall/WallFilter.java index 45a24adfdf..ed2c9bf779 100644 --- a/src/main/java/com/alibaba/druid/wall/WallFilter.java +++ b/src/main/java/com/alibaba/druid/wall/WallFilter.java @@ -65,7 +65,7 @@ public class WallFilter extends FilterAdapter implements WallFilterMBean { } provider = new MySqlWallProvider(config); - } else if (JdbcUtils.ORACLE.equals(dbType)) { + } else if (JdbcUtils.ORACLE.equals(dbType) || JdbcUtils.ALI_ORACLE.equals(dbType)) { if (config == null) { config = new WallConfig(OracleWallProvider.DEFAULT_CONFIG_DIR); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/DistinctTest.java b/src/test/java/com/alibaba/druid/bvt/sql/DistinctTest.java index ae956a18b8..23616b4cfc 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/DistinctTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/DistinctTest.java @@ -21,26 +21,30 @@ import junit.framework.TestCase; import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.util.JdbcUtils; - public class DistinctTest extends TestCase { + private String sql = "select count(distinct *) from t"; - + public void test_mysql() throws Exception { Assert.assertEquals("SELECT COUNT(DISTINCT *)\nFROM t", SQLUtils.format(sql, JdbcUtils.MYSQL)); } - + public void test_oracle() throws Exception { Assert.assertEquals("SELECT COUNT(DISTINCT *)\nFROM t", SQLUtils.format(sql, JdbcUtils.ORACLE)); + Assert.assertEquals("SELECT COUNT(DISTINCT *)\nFROM t", SQLUtils.format(sql, JdbcUtils.ALI_ORACLE)); } - + public void test_oracle_unique() throws Exception { - Assert.assertEquals("SELECT COUNT(UNIQUE *)\nFROM t", SQLUtils.format("select count(unique *) from t", JdbcUtils.ORACLE)); + Assert.assertEquals("SELECT COUNT(UNIQUE *)\nFROM t", + SQLUtils.format("select count(unique *) from t", JdbcUtils.ORACLE)); + Assert.assertEquals("SELECT COUNT(UNIQUE *)\nFROM t", + SQLUtils.format("select count(unique *) from t", JdbcUtils.ALI_ORACLE)); } - + public void test_postgres() throws Exception { Assert.assertEquals("SELECT COUNT(DISTINCT *)\nFROM t", SQLUtils.format(sql, JdbcUtils.POSTGRESQL)); } - + public void test_sql92() throws Exception { Assert.assertEquals("SELECT COUNT(DISTINCT *)\nFROM t", SQLUtils.format(sql, null)); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/MybatisTest.java b/src/test/java/com/alibaba/druid/bvt/sql/MybatisTest.java index c4dea474ff..6c934cdd72 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/MybatisTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/MybatisTest.java @@ -21,22 +21,23 @@ import junit.framework.TestCase; import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.util.JdbcUtils; - public class MybatisTest extends TestCase { + private String sql = "select * from t where id = #{id}"; - + public void test_mysql() throws Exception { Assert.assertEquals("SELECT *\nFROM t\nWHERE id = #{id}", SQLUtils.format(sql, JdbcUtils.MYSQL)); } - + public void test_oracle() throws Exception { Assert.assertEquals("SELECT *\nFROM t\nWHERE id = #{id}", SQLUtils.format(sql, JdbcUtils.ORACLE)); + Assert.assertEquals("SELECT *\nFROM t\nWHERE id = #{id}", SQLUtils.format(sql, JdbcUtils.ALI_ORACLE)); } - + public void test_postgres() throws Exception { Assert.assertEquals("SELECT *\nFROM t\nWHERE id = #{id}", SQLUtils.format(sql, JdbcUtils.POSTGRESQL)); } - + public void test_sql92() throws Exception { Assert.assertEquals("SELECT *\nFROM t\nWHERE id = #{id}", SQLUtils.format(sql, null)); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/MybatisTest2.java b/src/test/java/com/alibaba/druid/bvt/sql/MybatisTest2.java index 4b93ebbfa5..c96e1501ac 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/MybatisTest2.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/MybatisTest2.java @@ -21,22 +21,23 @@ import junit.framework.TestCase; import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.util.JdbcUtils; - public class MybatisTest2 extends TestCase { + private String sql = "select * from t where id = ${id}"; - + public void test_mysql() throws Exception { Assert.assertEquals("SELECT *\nFROM t\nWHERE id = ${id}", SQLUtils.format(sql, JdbcUtils.MYSQL)); } - + public void test_oracle() throws Exception { Assert.assertEquals("SELECT *\nFROM t\nWHERE id = ${id}", SQLUtils.format(sql, JdbcUtils.ORACLE)); + Assert.assertEquals("SELECT *\nFROM t\nWHERE id = ${id}", SQLUtils.format(sql, JdbcUtils.ALI_ORACLE)); } - + public void test_postgres() throws Exception { Assert.assertEquals("SELECT *\nFROM t\nWHERE id = ${id}", SQLUtils.format(sql, JdbcUtils.POSTGRESQL)); } - + public void test_sql92() throws Exception { Assert.assertEquals("SELECT *\nFROM t\nWHERE id = ${id}", SQLUtils.format(sql, null)); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/MergeTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/MergeTest.java index 9d6244a5bb..2d92a28f05 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/MergeTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/MergeTest.java @@ -32,11 +32,12 @@ public class MergeTest extends TestCase { String sql = "{ call INTERFACE_DATA_EXTRACTION.INVOICE_INFO(?,?,?)}"; ParameterizedOutputVisitorUtils.parameterize(sql, JdbcUtils.ORACLE); + ParameterizedOutputVisitorUtils.parameterize(sql, JdbcUtils.ALI_ORACLE); } - + public void test_mergeCall_mysql() throws Exception { String sql = "{ call INTERFACE_DATA_EXTRACTION.INVOICE_INFO(?,?,?)}"; - + ParameterizedOutputVisitorUtils.parameterize(sql, JdbcUtils.MYSQL); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleFormatTest2.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleFormatTest2.java index be20bc89d0..d141ca034f 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleFormatTest2.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleFormatTest2.java @@ -27,5 +27,7 @@ public class OracleFormatTest2 extends TestCase { String formatedText = SQLUtils.format(text, JdbcUtils.ORACLE); System.out.println(formatedText); + String formatedText2 = SQLUtils.format(text, JdbcUtils.ALI_ORACLE); + System.out.println(formatedText2); } }