From 126c79a8e97c7577569112c847704c3cd92cb1bf Mon Sep 17 00:00:00 2001 From: qxo <49526356@qq.com> Date: Thu, 27 Apr 2017 14:52:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3OracleExportParameterVisitor?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E8=A7=A3=E6=9E=90=E6=95=B0=E5=AD=97=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E7=9A=84=E5=8F=82=E6=95=B0=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OracleParameterizedOutputVisitor.java | 7 +++ .../visitor/ExportParameterDotNumberTest.java | 46 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/ExportParameterDotNumberTest.java diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleParameterizedOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleParameterizedOutputVisitor.java index 51af085664..f837c69877 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleParameterizedOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleParameterizedOutputVisitor.java @@ -22,6 +22,8 @@ import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr; import com.alibaba.druid.sql.ast.expr.SQLNCharExpr; import com.alibaba.druid.sql.ast.expr.SQLNullExpr; import com.alibaba.druid.sql.ast.expr.SQLNumberExpr; +import com.alibaba.druid.sql.visitor.ExportParameterVisitor; +import com.alibaba.druid.sql.visitor.ExportParameterVisitorUtils; import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils; import com.alibaba.druid.sql.visitor.ParameterizedVisitor; @@ -39,6 +41,7 @@ public class OracleParameterizedOutputVisitor extends OracleOutputVisitor implem public OracleParameterizedOutputVisitor(Appendable appender, boolean printPostSemi){ super(appender, printPostSemi); + this.parameterized = true; } public boolean visit(SQLBinaryOpExpr x) { @@ -54,6 +57,10 @@ public class OracleParameterizedOutputVisitor extends OracleOutputVisitor implem print('?'); incrementReplaceCunt(); + + if(this instanceof ExportParameterVisitor || this.parameters != null){ + ExportParameterVisitorUtils.exportParameter((this).getParameters(), x); + } return false; } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/ExportParameterDotNumberTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/ExportParameterDotNumberTest.java new file mode 100644 index 0000000000..bba13e6094 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/ExportParameterDotNumberTest.java @@ -0,0 +1,46 @@ +package com.alibaba.druid.bvt.sql.oracle.visitor; + +import java.util.List; + +import org.junit.Assert; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleExportParameterVisitor; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.visitor.ExportParameterVisitor; +import com.alibaba.druid.util.JdbcConstants; + +import junit.framework.TestCase; + +public class ExportParameterDotNumberTest extends TestCase { + /** + * Logger for this class + */ + private static final Logger LOG = LoggerFactory.getLogger(ExportParameterDotNumberTest.class); + + String dbType = JdbcConstants.MYSQL; + + public void test_exportParameter() throws Exception { + String[] sqls = { "INSERT INTO test_tab1 (name) VALUES ( 2.0 )", + "INSERT INTO test_tab1 (name) VALUES ( 2 )", + }; + for(String sql : sqls){ + final StringBuilder out = new StringBuilder(); + final ExportParameterVisitor visitor = new OracleExportParameterVisitor(out); + SQLStatementParser parser = new OracleStatementParser(sql); + final SQLStatement parseStatement = parser.parseStatement(); + parseStatement.accept(visitor); + final List plist = visitor.getParameters(); + LOG.info("from_sql:{}",sql); + sql = out.toString(); + + LOG.info("to_sql:{} ==> plist:{}",sql,plist); + + Assert.assertTrue(plist.size()>0); + } + } + +}