diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTParameterizedVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTParameterizedVisitor.java new file mode 100644 index 0000000000..4f3e7b1d90 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTParameterizedVisitor.java @@ -0,0 +1,16 @@ +package com.alibaba.druid.sql.dialect.oracle.visitor; + +import com.alibaba.druid.DbType; +import com.alibaba.druid.sql.visitor.SQLASTParameterizedVisitor; + +import java.util.List; + +public class OracleASTParameterizedVisitor extends SQLASTParameterizedVisitor implements OracleASTVisitor { + public OracleASTParameterizedVisitor() { + super(DbType.oracle); + } + + public OracleASTParameterizedVisitor(List parameters) { + super(DbType.oracle, parameters); + } +} 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 6c9e438058..a07a3669eb 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitorUtils.java @@ -30,6 +30,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedVisitor; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTParameterizedVisitor; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleParameterizedOutputVisitor; import com.alibaba.druid.sql.dialect.phoenix.visitor.PhoenixOutputVisitor; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor; @@ -372,6 +373,11 @@ public class ParameterizedOutputVisitorUtils { MySqlParameterizedVisitor visitor = new MySqlParameterizedVisitor(outParameters); stmt.accept(visitor); return stmt; + } else if (dbType == DbType.oracle) { + SQLStatement stmt = SQLUtils.parseSingleStatement(sql, DbType.oracle); + OracleASTParameterizedVisitor visitor = new OracleASTParameterizedVisitor(outParameters); + stmt.accept(visitor); + return stmt; } else { throw new UnsupportedOperationException(); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_80.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_80.java index f599bf0be9..9e1fb278a5 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_80.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_80.java @@ -47,4 +47,18 @@ public class MySqlParameterizedOutputVisitorTest_80 extends TestCase { "ORDER BY 1;", stmt.toString()); } + public void test3() { + + String sql = "/*test*/ select * from test ;"; + + assertEquals("/*test*/\n" + + "SELECT *\n" + + "FROM test;", ParameterizedOutputVisitorUtils.parameterizeOf(sql, DbType.mysql) + .toString()); + + assertEquals("/*test*/\n" + + "SELECT *\n" + + "FROM test;", ParameterizedOutputVisitorUtils.parameterizeOf(sql, DbType.oracle) + .toString()); + } }