From 8b28bd4f5769e260e99a3e96dac0d5db639f5069 Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 27 Aug 2013 18:48:40 +0800 Subject: [PATCH] improve sql parser --- pom.xml | 10 +++- .../druid/support/json/JSONParser.java | 4 +- .../alibaba/druid/test/wall/ResourceTest.java | 46 +++++++++++++++++++ 3 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/test/wall/ResourceTest.java diff --git a/pom.xml b/pom.xml index a0fac6f6c3..1d892b8cdf 100644 --- a/pom.xml +++ b/pom.xml @@ -1,7 +1,14 @@ 4.0.0 - + + com.alibaba druid 0.2.26-SNAPSHOT @@ -41,7 +48,6 @@ dav:http://code.alibabatech.com/mvn/snapshots/ - wenshao diff --git a/src/main/java/com/alibaba/druid/support/json/JSONParser.java b/src/main/java/com/alibaba/druid/support/json/JSONParser.java index 9098b41994..d9802cef12 100644 --- a/src/main/java/com/alibaba/druid/support/json/JSONParser.java +++ b/src/main/java/com/alibaba/druid/support/json/JSONParser.java @@ -20,6 +20,8 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import com.alibaba.druid.sql.parser.CharTypes; + public class JSONParser { private String text; @@ -160,7 +162,7 @@ public class JSONParser { } for (;;) { - if (ch == ' ' || ch == '\r' || ch == '\n' || ch == '\t') { + if (CharTypes.isWhitespace(ch)) { nextChar(); continue; } diff --git a/src/test/java/com/alibaba/druid/test/wall/ResourceTest.java b/src/test/java/com/alibaba/druid/test/wall/ResourceTest.java new file mode 100644 index 0000000000..2ac9245005 --- /dev/null +++ b/src/test/java/com/alibaba/druid/test/wall/ResourceTest.java @@ -0,0 +1,46 @@ +package com.alibaba.druid.test.wall; + +import java.io.File; +import java.io.FileInputStream; + +import junit.framework.TestCase; + +import com.alibaba.druid.util.Utils; +import com.alibaba.druid.wall.Violation; +import com.alibaba.druid.wall.WallCheckResult; +import com.alibaba.druid.wall.WallProvider; +import com.alibaba.druid.wall.spi.MySqlWallProvider; + +public class ResourceTest extends TestCase { + + private String[] items; + + protected void setUp() throws Exception { + File file = new File("D:\\error_sql"); + FileInputStream is = new FileInputStream(file); + String all = Utils.read(is); + is.close(); + + items = all.split("\\|\\n\\|"); + } + + public void test_xx() throws Exception { + WallProvider provider = new MySqlWallProvider(); + + for (int i = 0; i < items.length; ++i) { + String sql = items[i]; + + WallCheckResult result = provider.check(sql); + if (result.getViolations().size() > 0) { + Violation violation = result.getViolations().get(0); + System.err.println("error (" + i + ") : " + violation.getMessage()); + System.out.println(sql); + System.out.println(); +// break; + } + } + + System.out.println("violaionCount : " + provider.getViolationCount()); + } + +}