diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index bf6dfa029c..7f9499155f 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -654,6 +654,24 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet break; } } + + if (isNumber) { + int pos2 = name.lastIndexOf('_', pos - 1); + if (pos2 != -1) { + boolean isNumber2 = true; + for (int i = pos2 + 1; i < pos; ++i) { + char ch = name.charAt(i); + if (ch < '0' || ch > '9') { + isNumber2 = false; + break; + } + } + if (isNumber2) { + pos = pos2; + } + } + } + if (isNumber) { boolean isAlias = false; for (SQLObject parent = x.getParent();parent != null; parent = parent.getParent()) { diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_37.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_37.java new file mode 100644 index 0000000000..474c8bd47e --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_37.java @@ -0,0 +1,36 @@ +package com.alibaba.druid.bvt.sql.mysql.param; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.parser.SQLParserUtils; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; +import com.alibaba.druid.util.JdbcConstants; +import junit.framework.TestCase; + +import java.util.List; + +/** + * Created by wenshao on 16/8/23. + */ +public class MySqlParameterizedOutputVisitorTest_37 extends TestCase { + public void test_for_parameterize() throws Exception { + final String dbType = JdbcConstants.MYSQL; + String sql = "insert into fc_sms_0011_201704 (c1, c2, c3) values (1, 'a', 'b')"; + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, dbType); + List stmtList = parser.parseStatementList(); + SQLStatement statement = stmtList.get(0); + + StringBuilder out = new StringBuilder(); + // List parameters = new ArrayList(); + SQLASTOutputVisitor visitor = SQLUtils.createOutputVisitor(out, JdbcConstants.MYSQL); + visitor.setParameterized(true); + visitor.setParameterizedMergeInList(true); + // visitor.setParameters(parameters); + visitor.setExportTables(true); + visitor.setPrettyFormat(false); + statement.accept(visitor); + assertEquals("INSERT INTO fc_sms (c1, c2, c3) VALUES (?, ?, ?)", out.toString()); + } +}