improved oracle parameterize support, fix #3966

This commit is contained in:
高铁
2020-10-07 01:05:41 +08:00
parent b6a0fb52f3
commit b9d6c01d99
3 changed files with 36 additions and 0 deletions
@@ -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<Object> parameters) {
super(DbType.oracle, parameters);
}
}
@@ -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();
}
@@ -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());
}
}