From 32fb4a135a7a6a5138fed45620efea076b134b73 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 27 Feb 2013 11:40:12 +0800 Subject: [PATCH] bug fixed for statementExecutableSqlLogEnable --- .../mysql/visitor/MySqlOutputVisitor.java | 14 ++++++++++- .../sql/visitor/SQLASTOutputVisitor.java | 23 +++++++++++-------- .../druid/bvt/sql/mysql/SQLUtilsTest.java | 21 +++++++++++++++++ 3 files changed, 47 insertions(+), 11 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/SQLUtilsTest.java diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java index 5afba62eb8..7b3b9d6e2c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java @@ -15,6 +15,7 @@ */ package com.alibaba.druid.sql.dialect.mysql.visitor; +import java.util.List; import java.util.Map; import com.alibaba.druid.sql.ast.SQLCommentHint; @@ -342,7 +343,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV printAndAccept(x.getArguments(), ", "); print(")"); } - + if (x.getCharSetName() != null) { print(" CHARACTER SET "); print(x.getCharSetName()); @@ -521,6 +522,17 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } public boolean visit(SQLVariantRefExpr x) { + { + List parameters = this.getParameters(); + int index = x.getIndex(); + + if (parameters != null && index >= 0 && index < parameters.size()) { + Object param = parameters.get(index); + printParameter(param); + return false; + } + } + if (x.isGlobal()) { print("@@global."); } else { 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 f1fc43ce06..6073bfe383 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -700,56 +700,59 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { } Object param = parameters.get(index); + printParameter(param); + return false; + } + public void printParameter(Object param) { if (param == null) { print("NULL"); - return false; + return; } if (param instanceof Number // || param instanceof Boolean) { print(param.toString()); - return false; + return; } if (param instanceof String) { SQLCharExpr charExpr = new SQLCharExpr((String) param); visit(charExpr); - return false; + return; } if (param instanceof Date) { print((Date) param); - return false; + return; } if (param instanceof InputStream) { print("'"); - return false; + return; } if (param instanceof Reader) { print("'"); - return false; + return; } if (param instanceof Blob) { print("'"); - return false; + return; } if (param instanceof NClob) { print("'"); - return false; + return; } if (param instanceof Clob) { print("'"); - return false; + return; } print("'" + param.getClass().getName() + "'"); - return false; } public boolean visit(SQLDropTableStatement x) { diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/SQLUtilsTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/SQLUtilsTest.java new file mode 100644 index 0000000000..a376d3b0a6 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/SQLUtilsTest.java @@ -0,0 +1,21 @@ +package com.alibaba.druid.bvt.sql.mysql; + +import java.util.Arrays; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.util.JdbcConstants; + +public class SQLUtilsTest extends TestCase { + + public void test_format() throws Exception { + String formattedSql = SQLUtils.format("select * from t where id = ?", JdbcConstants.MYSQL, + Arrays. asList("abc")); + Assert.assertEquals("SELECT *" + // + "\nFROM t" + // + "\nWHERE id = 'abc'", formattedSql); + } +}