From ac3fd5615a54e718e8b748fe525b6a8620a01e83 Mon Sep 17 00:00:00 2001 From: wenshao Date: Mon, 16 Jul 2012 21:17:14 +0800 Subject: [PATCH 01/12] testcase refactor --- .../alibaba/druid/benckmark/pool/Case0.java | 18 +++++++++--------- .../java/com/alibaba/druid/bvt/pool/Case2.java | 3 ++- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/test/java/com/alibaba/druid/benckmark/pool/Case0.java b/src/test/java/com/alibaba/druid/benckmark/pool/Case0.java index 3302034561..999503cab0 100644 --- a/src/test/java/com/alibaba/druid/benckmark/pool/Case0.java +++ b/src/test/java/com/alibaba/druid/benckmark/pool/Case0.java @@ -49,14 +49,14 @@ public class Case0 extends TestCase { public final int COUNT = 1000 * 1000 * 1; protected void setUp() throws Exception { -// jdbcUrl = "jdbc:fake:dragoon_v25masterdb"; -// user = "dragoon25"; -// password = "dragoon25"; -// driverClass = "com.alibaba.druid.mock.MockDriver"; + jdbcUrl = "jdbc:fake:dragoon_v25masterdb"; + user = "dragoon25"; + password = "dragoon25"; + driverClass = "com.alibaba.druid.mock.MockDriver"; - jdbcUrl = "jdbc:mysql://10.20.159.104:3306/masterdb"; - user = "dragoon"; - password = "dragoon"; +// jdbcUrl = "jdbc:mysql://10.20.159.104:3306/masterdb"; +// user = "dragoon"; +// password = "dragoon"; } public void test_0() throws Exception { @@ -135,8 +135,8 @@ public class Case0 extends TestCase { for (int i = 0; i < COUNT; ++i) { Connection conn = dataSource.getConnection(); Statement stmt = conn.createStatement(); -// ResultSet rs = stmt.executeQuery("SELECT 1"); -// rs.close(); + ResultSet rs = stmt.executeQuery("SELECT 1"); + rs.close(); stmt.close(); conn.close(); } diff --git a/src/test/java/com/alibaba/druid/bvt/pool/Case2.java b/src/test/java/com/alibaba/druid/bvt/pool/Case2.java index 1e52994441..3c05c545d1 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/Case2.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/Case2.java @@ -22,6 +22,7 @@ import junit.framework.Assert; import junit.framework.TestCase; import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.pool.DruidDataSourceFactory; import com.alibaba.druid.stat.DruidDataSourceStatManager; import com.alibaba.druid.util.JMXUtils; @@ -51,7 +52,7 @@ public class Case2 extends TestCase { properties.put("url", "jdbc:mock:"); properties.put("filters", "stat"); properties.put("validationQuery", "SELECT 1"); - final DruidDataSource dataSource = (DruidDataSource) com.alibaba.druid.pool.DruidDataSourceFactory.createDataSource(properties); + DruidDataSource dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); JMXUtils.register("com.alibaba.druid:type=DruidDataSource", dataSource); final int COUNT = 10; From 0492b77082c972c50e2e9050d91e07171a373190 Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 17 Jul 2012 17:33:31 +0800 Subject: [PATCH 02/12] sql parser support mybatis --- .../sql/dialect/mysql/parser/MySqlLexer.java | 27 +++++++++++++++++- .../mysql/visitor/MySqlOutputVisitor.java | 3 +- .../dialect/oracle/parser/OracleLexer.java | 17 ++++++++++- .../com/alibaba/druid/sql/parser/Lexer.java | 25 +++++++++++++++-- .../alibaba/druid/bvt/sql/MybatisTest.java | 28 +++++++++++++++++++ .../alibaba/druid/bvt/sql/MybatisTest2.java | 28 +++++++++++++++++++ 6 files changed, 122 insertions(+), 6 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/MybatisTest.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/MybatisTest2.java diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlLexer.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlLexer.java index f4e3c300e0..ea624747e1 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlLexer.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlLexer.java @@ -63,7 +63,7 @@ public class MySqlLexer extends Lexer { public void scanVariable() { final char first = ch; - if (ch != '@' && ch != ':' && ch != '#') { + if (ch != '@' && ch != ':' && ch != '#' && ch != '$') { throw new SQLParseException("illegal variable"); } @@ -104,6 +104,31 @@ public class MySqlLexer extends Lexer { stringVal = symbolTable.addSymbol(buf, np, sp, hash); token = Token.VARIANT; + } else if (buf[bp + 1] == '{') { + ++bp; + ++sp; + char ch; + for (;;) { + ch = buf[++bp]; + + if (ch == '}') { + sp++; + ch = buf[++bp]; + break; + } else if (ch == EOI) { + throw new SQLParseException("illegal identifier"); + } + + hash = 31 * hash + ch; + + sp++; + continue; + } + + this.ch = buf[bp]; + + stringVal = symbolTable.addSymbol(buf, np, sp, hash); + token = Token.VARIANT; } else { for (;;) { ch = buf[++bp]; 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 94da69584b..29a75b2a98 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 @@ -494,7 +494,8 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV if (x.isGlobal()) { print("@@global."); } else { - if ((!x.getName().startsWith("@")) && (!x.getName().equals("?"))) { + String varName = x.getName(); + if ((!varName.startsWith("@")) && (!varName.equals("?")) && (!varName.startsWith("#")) && (!varName.startsWith("$"))) { print("@@"); } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleLexer.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleLexer.java index 658a20a017..1065cbcf2e 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleLexer.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleLexer.java @@ -87,7 +87,7 @@ public class OracleLexer extends Lexer { return; } - if (ch != ':' && ch != '#') { + if (ch != ':' && ch != '#' && ch != '$') { throw new SQLParseException("illegal variable"); } @@ -98,12 +98,19 @@ public class OracleLexer extends Lexer { char ch; boolean quoteFlag = false; + boolean mybatisFlag = false; if (buf[bp + 1] == '"') { hash = 31 * hash + '"'; bp++; sp++; quoteFlag = true; + } else if (buf[bp + 1] == '{') { + hash = 31 * hash + '"'; + bp++; + sp++; + mybatisFlag = true; } + for (;;) { ch = buf[++bp]; @@ -116,6 +123,7 @@ public class OracleLexer extends Lexer { sp++; continue; } + if (quoteFlag) { if (ch != '"') { throw new SQLParseException("syntax error"); @@ -123,6 +131,13 @@ public class OracleLexer extends Lexer { hash = 31 * hash + '"'; ++bp; sp++; + } else if (mybatisFlag) { + if (ch != '}') { + throw new SQLParseException("syntax error"); + } + hash = 31 * hash + '"'; + ++bp; + sp++; } this.ch = buf[bp]; diff --git a/src/main/java/com/alibaba/druid/sql/parser/Lexer.java b/src/main/java/com/alibaba/druid/sql/parser/Lexer.java index 15a58a62ee..de8fe9813d 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/Lexer.java +++ b/src/main/java/com/alibaba/druid/sql/parser/Lexer.java @@ -205,9 +205,13 @@ public class Lexer { if (isWhitespace(ch)) { scanChar(); continue; - }// QS_TODO skip comment + } + + if (ch == '$' && buf[bp + 1] == '{') { + scanVariable(); + return; + } - // QS_TODO id may start from digit if (isFirstIdentifierChar(ch)) { if (ch == 'N') { if (buf[bp + 1] == '\'') { @@ -571,7 +575,7 @@ public class Lexer { public void scanVariable() { final char first = ch; - if (ch != '@' && ch != ':' && ch != '#') { + if (ch != '@' && ch != ':' && ch != '#' && ch != '$') { throw new SQLParseException("illegal variable"); } @@ -581,11 +585,17 @@ public class Lexer { sp = 1; char ch; + boolean mybatisFlag = false; if (buf[bp + 1] == '@') { ch = buf[++bp]; hash = 31 * hash + ch; sp++; + } else if (buf[bp + 1] == '{') { + hash = 31 * hash + '"'; + bp++; + sp++; + mybatisFlag = true; } for (;;) { @@ -600,6 +610,15 @@ public class Lexer { sp++; continue; } + + if (mybatisFlag) { + if (ch != '}') { + throw new SQLParseException("syntax error"); + } + hash = 31 * hash + '"'; + ++bp; + sp++; + } this.ch = buf[bp]; diff --git a/src/test/java/com/alibaba/druid/bvt/sql/MybatisTest.java b/src/test/java/com/alibaba/druid/bvt/sql/MybatisTest.java new file mode 100644 index 0000000000..e403c518f1 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/MybatisTest.java @@ -0,0 +1,28 @@ +package com.alibaba.druid.bvt.sql; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.util.JdbcUtils; + + +public class MybatisTest extends TestCase { + private String sql = "select * from t where id = #{id}"; + + public void test_mysql() throws Exception { + Assert.assertEquals("SELECT *\nFROM t\nWHERE id = #{id}", SQLUtils.format(sql, JdbcUtils.MYSQL)); + } + + public void test_oracle() throws Exception { + Assert.assertEquals("SELECT *\nFROM t\nWHERE id = #{id}", SQLUtils.format(sql, JdbcUtils.ORACLE)); + } + + public void test_postgres() throws Exception { + Assert.assertEquals("SELECT *\nFROM t\nWHERE id = #{id}", SQLUtils.format(sql, JdbcUtils.POSTGRESQL)); + } + + public void test_sql92() throws Exception { + Assert.assertEquals("SELECT *\nFROM t\nWHERE id = #{id}", SQLUtils.format(sql, null)); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/MybatisTest2.java b/src/test/java/com/alibaba/druid/bvt/sql/MybatisTest2.java new file mode 100644 index 0000000000..df44ae013b --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/MybatisTest2.java @@ -0,0 +1,28 @@ +package com.alibaba.druid.bvt.sql; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.util.JdbcUtils; + + +public class MybatisTest2 extends TestCase { + private String sql = "select * from t where id = ${id}"; + + public void test_mysql() throws Exception { + Assert.assertEquals("SELECT *\nFROM t\nWHERE id = ${id}", SQLUtils.format(sql, JdbcUtils.MYSQL)); + } + + public void test_oracle() throws Exception { + Assert.assertEquals("SELECT *\nFROM t\nWHERE id = ${id}", SQLUtils.format(sql, JdbcUtils.ORACLE)); + } + + public void test_postgres() throws Exception { + Assert.assertEquals("SELECT *\nFROM t\nWHERE id = ${id}", SQLUtils.format(sql, JdbcUtils.POSTGRESQL)); + } + + public void test_sql92() throws Exception { + Assert.assertEquals("SELECT *\nFROM t\nWHERE id = ${id}", SQLUtils.format(sql, null)); + } +} From 57d0d78bf9cb0c5e4b2c9394aaa3c35b5a5b8fff Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 17 Jul 2012 20:08:32 +0800 Subject: [PATCH 03/12] test refactor --- pom.xml | 17 +- ...rTest.java => SpringIbatisFilterTest.java} | 4 +- .../{spring-config-1.xml => dataSource.xml} | 162 ++++++++---------- .../druid/pool/{ => ibatis}/Sequence.xml | 0 .../alibaba/druid/pool/{ => ibatis}/User.xml | 0 .../{ => ibatis}/ibatis-config-druid-test.xml | 4 +- .../pool/ibatis/spring-config-ibatis.xml | 32 ++++ .../pool/mbatis/spring-config-mbatis.xml | 32 ++++ 8 files changed, 148 insertions(+), 103 deletions(-) rename src/test/java/com/alibaba/druid/bvt/pool/{SpringFilterTest.java => SpringIbatisFilterTest.java} (93%) rename src/test/resources/com/alibaba/druid/pool/{spring-config-1.xml => dataSource.xml} (67%) rename src/test/resources/com/alibaba/druid/pool/{ => ibatis}/Sequence.xml (100%) rename src/test/resources/com/alibaba/druid/pool/{ => ibatis}/User.xml (100%) rename src/test/resources/com/alibaba/druid/pool/{ => ibatis}/ibatis-config-druid-test.xml (74%) create mode 100644 src/test/resources/com/alibaba/druid/pool/ibatis/spring-config-ibatis.xml create mode 100644 src/test/resources/com/alibaba/druid/pool/mbatis/spring-config-mbatis.xml diff --git a/pom.xml b/pom.xml index 045a650bd4..0f20a9303b 100644 --- a/pom.xml +++ b/pom.xml @@ -170,25 +170,20 @@ - javax.servlet servlet-api 2.5 provided - - - org.mortbay.jetty - jetty - 6.1.26 - provided + true commons-logging commons-logging 1.1.1 provided + true @@ -196,6 +191,14 @@ spring 2.0 provided + true + + + org.mybatis + mybatis + 3.1.1 + provided + true diff --git a/src/test/java/com/alibaba/druid/bvt/pool/SpringFilterTest.java b/src/test/java/com/alibaba/druid/bvt/pool/SpringIbatisFilterTest.java similarity index 93% rename from src/test/java/com/alibaba/druid/bvt/pool/SpringFilterTest.java rename to src/test/java/com/alibaba/druid/bvt/pool/SpringIbatisFilterTest.java index 8c2ddf4702..bdbc293d32 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/SpringFilterTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/SpringIbatisFilterTest.java @@ -20,7 +20,7 @@ import com.alibaba.druid.spring.IUserService; import com.alibaba.druid.spring.User; import com.alibaba.druid.stat.DruidDataSourceStatManager; -public class SpringFilterTest extends TestCase { +public class SpringIbatisFilterTest extends TestCase { protected void setUp() throws Exception { Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); @@ -34,7 +34,7 @@ public class SpringFilterTest extends TestCase { Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( - "com/alibaba/druid/pool/spring-config-1.xml"); + "com/alibaba/druid/pool/ibatis/spring-config-ibatis.xml"); DataSource dataSource = (DataSource) context.getBean("dataSource"); diff --git a/src/test/resources/com/alibaba/druid/pool/spring-config-1.xml b/src/test/resources/com/alibaba/druid/pool/dataSource.xml similarity index 67% rename from src/test/resources/com/alibaba/druid/pool/spring-config-1.xml rename to src/test/resources/com/alibaba/druid/pool/dataSource.xml index 05f9399abb..839872d2dd 100644 --- a/src/test/resources/com/alibaba/druid/pool/spring-config-1.xml +++ b/src/test/resources/com/alibaba/druid/pool/dataSource.xml @@ -1,92 +1,70 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - jdbc:derby:memory:spring-test;create=true - - - 1 - - - 20 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + jdbc:derby:memory:spring-test;create=true + + + 1 + + + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/com/alibaba/druid/pool/Sequence.xml b/src/test/resources/com/alibaba/druid/pool/ibatis/Sequence.xml similarity index 100% rename from src/test/resources/com/alibaba/druid/pool/Sequence.xml rename to src/test/resources/com/alibaba/druid/pool/ibatis/Sequence.xml diff --git a/src/test/resources/com/alibaba/druid/pool/User.xml b/src/test/resources/com/alibaba/druid/pool/ibatis/User.xml similarity index 100% rename from src/test/resources/com/alibaba/druid/pool/User.xml rename to src/test/resources/com/alibaba/druid/pool/ibatis/User.xml diff --git a/src/test/resources/com/alibaba/druid/pool/ibatis-config-druid-test.xml b/src/test/resources/com/alibaba/druid/pool/ibatis/ibatis-config-druid-test.xml similarity index 74% rename from src/test/resources/com/alibaba/druid/pool/ibatis-config-druid-test.xml rename to src/test/resources/com/alibaba/druid/pool/ibatis/ibatis-config-druid-test.xml index 29c36cb346..dc30d76ec7 100644 --- a/src/test/resources/com/alibaba/druid/pool/ibatis-config-druid-test.xml +++ b/src/test/resources/com/alibaba/druid/pool/ibatis/ibatis-config-druid-test.xml @@ -4,6 +4,6 @@ - - + + \ No newline at end of file diff --git a/src/test/resources/com/alibaba/druid/pool/ibatis/spring-config-ibatis.xml b/src/test/resources/com/alibaba/druid/pool/ibatis/spring-config-ibatis.xml new file mode 100644 index 0000000000..ea987687cb --- /dev/null +++ b/src/test/resources/com/alibaba/druid/pool/ibatis/spring-config-ibatis.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/com/alibaba/druid/pool/mbatis/spring-config-mbatis.xml b/src/test/resources/com/alibaba/druid/pool/mbatis/spring-config-mbatis.xml new file mode 100644 index 0000000000..e68729677a --- /dev/null +++ b/src/test/resources/com/alibaba/druid/pool/mbatis/spring-config-mbatis.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + From 5a3237cd1f491fc26d1b2adfe7871fec3d18128f Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 17 Jul 2012 20:51:24 +0800 Subject: [PATCH 04/12] add mybatis test --- pom.xml | 25 +++++- .../bvt/pool/SpringMybatisFilterTest.java | 79 +++++++++++++++++++ .../com/alibaba/druid/pool/dataSource.xml | 2 +- .../pool/mbatis/spring-config-mbatis.xml | 32 -------- .../pool/mybatis/spring-config-mybatis.xml | 22 ++++++ 5 files changed, 125 insertions(+), 35 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/pool/SpringMybatisFilterTest.java delete mode 100644 src/test/resources/com/alibaba/druid/pool/mbatis/spring-config-mbatis.xml create mode 100644 src/test/resources/com/alibaba/druid/pool/mybatis/spring-config-mybatis.xml diff --git a/pom.xml b/pom.xml index 0f20a9303b..63ed95a808 100644 --- a/pom.xml +++ b/pom.xml @@ -188,8 +188,22 @@ org.springframework - spring - 2.0 + spring-core + 3.1.1.RELEASE + provided + true + + + org.springframework + spring-beans + 3.1.1.RELEASE + provided + true + + + org.springframework + spring-ibatis + 2.0.8 provided true @@ -200,6 +214,13 @@ provided true + + org.mybatis + mybatis-spring + 1.1.1 + provided + true + log4j diff --git a/src/test/java/com/alibaba/druid/bvt/pool/SpringMybatisFilterTest.java b/src/test/java/com/alibaba/druid/bvt/pool/SpringMybatisFilterTest.java new file mode 100644 index 0000000000..2bc99da8ca --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/SpringMybatisFilterTest.java @@ -0,0 +1,79 @@ +package com.alibaba.druid.bvt.pool; + +import java.sql.Connection; +import java.sql.Statement; + +import javax.sql.DataSource; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Param; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.alibaba.druid.spring.User; +import com.alibaba.druid.stat.DruidDataSourceStatManager; + +public class SpringMybatisFilterTest extends TestCase { + + protected void setUp() throws Exception { + Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); + } + + protected void tearDown() throws Exception { + Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); + } + + public void test_spring() throws Exception { + Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); + + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( + "com/alibaba/druid/pool/mybatis/spring-config-mybatis.xml"); + + DataSource dataSource = (DataSource) context.getBean("dataSource"); + + { + Connection conn = dataSource.getConnection(); + Statement stmt = conn.createStatement(); + stmt.execute("CREATE TABLE sequence_seed (value INTEGER, name VARCHAR(50))"); + stmt.close(); + conn.close(); + } + { + Connection conn = dataSource.getConnection(); + Statement stmt = conn.createStatement(); + stmt.execute("CREATE TABLE t_User (id BIGINT, name VARCHAR(50))"); + stmt.close(); + conn.close(); + } + { + Connection conn = dataSource.getConnection(); + conn.setAutoCommit(false); + Statement stmt = conn.createStatement(); + stmt.execute("insert into sequence_seed (value ,name) values (0, 'druid-spring-test')"); + stmt.close(); + conn.commit(); + conn.close(); + } + + UserMapper userMapper = (UserMapper) context.getBean("userMapper"); + + { + User user = new User(); + user.setName("xx"); + + userMapper.addUser(user); + } + + context.close(); + + Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); + } + + public static interface UserMapper { + + @Insert(value = "insert into t_User (id, name) values (#{user.id}, #{user.name})") + void addUser(@Param("user") User user); + } +} diff --git a/src/test/resources/com/alibaba/druid/pool/dataSource.xml b/src/test/resources/com/alibaba/druid/pool/dataSource.xml index 839872d2dd..976ca8a8ba 100644 --- a/src/test/resources/com/alibaba/druid/pool/dataSource.xml +++ b/src/test/resources/com/alibaba/druid/pool/dataSource.xml @@ -7,7 +7,7 @@ http://www.springframework.org/schema/beans http://www.springframework.org/schem http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd" default-lazy-init="false"> - + diff --git a/src/test/resources/com/alibaba/druid/pool/mbatis/spring-config-mbatis.xml b/src/test/resources/com/alibaba/druid/pool/mbatis/spring-config-mbatis.xml deleted file mode 100644 index e68729677a..0000000000 --- a/src/test/resources/com/alibaba/druid/pool/mbatis/spring-config-mbatis.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/test/resources/com/alibaba/druid/pool/mybatis/spring-config-mybatis.xml b/src/test/resources/com/alibaba/druid/pool/mybatis/spring-config-mybatis.xml new file mode 100644 index 0000000000..bc802baddd --- /dev/null +++ b/src/test/resources/com/alibaba/druid/pool/mybatis/spring-config-mybatis.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + From 4b64b07e3828dad77849c3f2447059ce6f5f01a2 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 18 Jul 2012 07:29:47 +0800 Subject: [PATCH 05/12] bug fixed sql parser aggregate distinct output --- .../druid/sql/ast/expr/SQLAggregateExpr.java | 15 ++++++---- .../oracle/ast/expr/OracleAggregateExpr.java | 2 +- .../oracle/parser/OracleExprParser.java | 11 +++++--- .../oracle/visitor/OracleOutputVisitor.java | 6 ++++ .../postgresql/ast/PGAggregateExpr.java | 2 +- .../postgresql/parser/PGExprParser.java | 10 ++++--- .../postgresql/visitor/PGOutputVisitor.java | 9 ++++++ .../druid/sql/parser/SQLExprParser.java | 10 ++++--- .../sql/visitor/SQLASTOutputVisitor.java | 6 ++++ .../stat/JdbcStatManagerFactoryBean.java | 4 +-- .../spring/MBeanServerFactoryBean.java | 2 +- .../alibaba/druid/bvt/sql/DistinctTest.java | 28 +++++++++++++++++++ 12 files changed, 82 insertions(+), 23 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/DistinctTest.java diff --git a/src/main/java/com/alibaba/druid/sql/ast/expr/SQLAggregateExpr.java b/src/main/java/com/alibaba/druid/sql/ast/expr/SQLAggregateExpr.java index 8abf08b232..f928dde609 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/expr/SQLAggregateExpr.java +++ b/src/main/java/com/alibaba/druid/sql/ast/expr/SQLAggregateExpr.java @@ -27,16 +27,15 @@ public class SQLAggregateExpr extends SQLExprImpl implements Serializable { private static final long serialVersionUID = 1L; protected String methodName; - protected int option; + protected Option option; protected final List arguments = new ArrayList(); public SQLAggregateExpr(String methodName){ this.methodName = methodName; - this.option = 1; } - public SQLAggregateExpr(String methodName, int option){ + public SQLAggregateExpr(String methodName, Option option){ this.methodName = methodName; this.option = option; } @@ -49,11 +48,11 @@ public class SQLAggregateExpr extends SQLExprImpl implements Serializable { this.methodName = methodName; } - public int getOption() { + public Option getOption() { return this.option; } - public void setOption(int option) { + public void setOption(Option option) { this.option = option; } @@ -86,7 +85,7 @@ public class SQLAggregateExpr extends SQLExprImpl implements Serializable { int result = 1; result = prime * result + ((arguments == null) ? 0 : arguments.hashCode()); result = prime * result + ((methodName == null) ? 0 : methodName.hashCode()); - result = prime * result + option; + result = prime * result + ((option == null) ? 0 : option.hashCode()); return result; } @@ -121,4 +120,8 @@ public class SQLAggregateExpr extends SQLExprImpl implements Serializable { } return true; } + + public static enum Option { + DISTINCT, ALL + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OracleAggregateExpr.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OracleAggregateExpr.java index f1619e5157..c87bc58921 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OracleAggregateExpr.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OracleAggregateExpr.java @@ -49,7 +49,7 @@ public class OracleAggregateExpr extends SQLAggregateExpr implements Serializabl super(methodName); } - public OracleAggregateExpr(String methodName, int option){ + public OracleAggregateExpr(String methodName, Option option){ super(methodName, option); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java index bce3bfc56d..a71bab7efe 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java @@ -22,6 +22,7 @@ import com.alibaba.druid.sql.ast.SQLDataTypeImpl; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLOrderingSpecification; +import com.alibaba.druid.sql.ast.expr.SQLAggregateExpr; import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator; import com.alibaba.druid.sql.ast.expr.SQLCharExpr; @@ -524,9 +525,11 @@ public class OracleExprParser extends SQLExprParser { return null; } - protected OracleAggregateExpr parseAggregateExpr(String method_name) { + protected OracleAggregateExpr parseAggregateExpr(String methodName) { boolean unique = false; + methodName = methodName.toUpperCase(); + if (lexer.token() == Token.UNIQUE) { lexer.nextToken(); unique = true; @@ -534,13 +537,13 @@ public class OracleExprParser extends SQLExprParser { OracleAggregateExpr aggregateExpr; if (lexer.token() == (Token.ALL)) { - aggregateExpr = new OracleAggregateExpr(method_name, 1); + aggregateExpr = new OracleAggregateExpr(methodName, SQLAggregateExpr.Option.ALL); lexer.nextToken(); } else if (lexer.token() == (Token.DISTINCT)) { - aggregateExpr = new OracleAggregateExpr(method_name, 0); + aggregateExpr = new OracleAggregateExpr(methodName, SQLAggregateExpr.Option.DISTINCT); lexer.nextToken(); } else { - aggregateExpr = new OracleAggregateExpr(method_name, 1); + aggregateExpr = new OracleAggregateExpr(methodName); } aggregateExpr.setUnique(unique); exprList(aggregateExpr.getArguments()); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java index d36d120b78..6c2c2c47cb 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java @@ -211,6 +211,12 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS public boolean visit(OracleAggregateExpr expr) { print(expr.getMethodName()); print("("); + + if (expr.getOption() != null) { + print(expr.getOption().toString()); + print(' '); + } + if (expr.isUnique()) { print("UNIQUE "); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/PGAggregateExpr.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/PGAggregateExpr.java index 390aed24a9..8a6cf87318 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/PGAggregateExpr.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/PGAggregateExpr.java @@ -20,7 +20,7 @@ public class PGAggregateExpr extends SQLAggregateExpr implements PGSQLObject { private static final long serialVersionUID = 1L; - public PGAggregateExpr(String methodName, int option) { + public PGAggregateExpr(String methodName, Option option) { super(methodName, option); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGExprParser.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGExprParser.java index 4d4ec91164..5ace50df14 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGExprParser.java @@ -19,16 +19,18 @@ public class PGExprParser extends SQLExprParser{ super(lexer); } - protected SQLAggregateExpr parseAggregateExpr(String method_name) throws ParserException { + protected SQLAggregateExpr parseAggregateExpr(String methodName) throws ParserException { + methodName = methodName.toUpperCase(); + PGAggregateExpr aggregateExpr; if (lexer.token() == Token.ALL) { - aggregateExpr = new PGAggregateExpr(method_name, 1); + aggregateExpr = new PGAggregateExpr(methodName, SQLAggregateExpr.Option.ALL); lexer.nextToken(); } else if (lexer.token() == Token.DISTINCT) { - aggregateExpr = new PGAggregateExpr(method_name, 0); + aggregateExpr = new PGAggregateExpr(methodName, SQLAggregateExpr.Option.DISTINCT); lexer.nextToken(); } else { - aggregateExpr = new PGAggregateExpr(method_name, 1); + aggregateExpr = new PGAggregateExpr(methodName); } exprList(aggregateExpr.getArguments()); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java index 38ddec0c02..23784425f3 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java @@ -433,12 +433,21 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor @Override public boolean visit(PGAggregateExpr x) { print(x.getMethodName()); + print("("); + + if (x.getOption() != null) { + print(x.getOption().toString()); + print(' '); + } + printAndAccept(x.getArguments(), ", "); print(")"); + if (x.getOver() != null) { x.getOver().accept(this); } + return false; } diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java index 3d8f089750..9c5aa476d1 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -675,16 +675,18 @@ public class SQLExprParser extends SQLParser { return false; } - protected SQLAggregateExpr parseAggregateExpr(String method_name) throws ParserException { + protected SQLAggregateExpr parseAggregateExpr(String methodName) throws ParserException { + methodName = methodName.toUpperCase(); + SQLAggregateExpr aggregateExpr; if (lexer.token() == Token.ALL) { - aggregateExpr = new SQLAggregateExpr(method_name, 1); + aggregateExpr = new SQLAggregateExpr(methodName, SQLAggregateExpr.Option.ALL); lexer.nextToken(); } else if (lexer.token() == Token.DISTINCT) { - aggregateExpr = new SQLAggregateExpr(method_name, 0); + aggregateExpr = new SQLAggregateExpr(methodName, SQLAggregateExpr.Option.DISTINCT); lexer.nextToken(); } else { - aggregateExpr = new SQLAggregateExpr(method_name, 1); + aggregateExpr = new SQLAggregateExpr(methodName); } exprList(aggregateExpr.getArguments()); 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 7686462365..3ea42f7244 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -426,6 +426,12 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { public boolean visit(SQLAggregateExpr x) { print(x.getMethodName()); print("("); + + if (x.getOption() != null) { + print(x.getOption().toString()); + print(' '); + } + printAndAccept(x.getArguments(), ", "); print(")"); return false; diff --git a/src/main/java/com/alibaba/druid/stat/JdbcStatManagerFactoryBean.java b/src/main/java/com/alibaba/druid/stat/JdbcStatManagerFactoryBean.java index 9bc3f85a4b..68cc92360f 100644 --- a/src/main/java/com/alibaba/druid/stat/JdbcStatManagerFactoryBean.java +++ b/src/main/java/com/alibaba/druid/stat/JdbcStatManagerFactoryBean.java @@ -17,10 +17,10 @@ package com.alibaba.druid.stat; import org.springframework.beans.factory.FactoryBean; -public class JdbcStatManagerFactoryBean implements FactoryBean { +public class JdbcStatManagerFactoryBean implements FactoryBean { @Override - public Object getObject() throws Exception { + public JdbcStatManager getObject() throws Exception { return JdbcStatManager.getInstance(); } diff --git a/src/main/java/com/alibaba/druid/support/spring/MBeanServerFactoryBean.java b/src/main/java/com/alibaba/druid/support/spring/MBeanServerFactoryBean.java index 23e117e639..5ba4e3e697 100644 --- a/src/main/java/com/alibaba/druid/support/spring/MBeanServerFactoryBean.java +++ b/src/main/java/com/alibaba/druid/support/spring/MBeanServerFactoryBean.java @@ -6,7 +6,7 @@ import javax.management.MBeanServer; import org.springframework.beans.factory.FactoryBean; -public class MBeanServerFactoryBean implements FactoryBean { +public class MBeanServerFactoryBean implements FactoryBean { public MBeanServer getObject() throws Exception { return ManagementFactory.getPlatformMBeanServer(); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/DistinctTest.java b/src/test/java/com/alibaba/druid/bvt/sql/DistinctTest.java new file mode 100644 index 0000000000..1eb807dd2e --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/DistinctTest.java @@ -0,0 +1,28 @@ +package com.alibaba.druid.bvt.sql; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.util.JdbcUtils; + + +public class DistinctTest extends TestCase { + private String sql = "select count(distinct *) from t"; + + public void test_mysql() throws Exception { + Assert.assertEquals("SELECT COUNT(DISTINCT *)\nFROM t", SQLUtils.format(sql, JdbcUtils.MYSQL)); + } + + public void test_oracle() throws Exception { + Assert.assertEquals("SELECT COUNT(DISTINCT *)\nFROM t", SQLUtils.format(sql, JdbcUtils.ORACLE)); + } + + public void test_postgres() throws Exception { + Assert.assertEquals("SELECT COUNT(DISTINCT *)\nFROM t", SQLUtils.format(sql, JdbcUtils.POSTGRESQL)); + } + + public void test_sql92() throws Exception { + Assert.assertEquals("SELECT COUNT(DISTINCT *)\nFROM t", SQLUtils.format(sql, null)); + } +} From 236561d6c33feb20e2c25ee1607baf0e05c0b9b3 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 18 Jul 2012 07:42:37 +0800 Subject: [PATCH 06/12] sql parser refactor --- .../druid/sql/ast/expr/SQLAggregateExpr.java | 2 +- .../oracle/ast/expr/OracleAggregateExpr.java | 5 ++--- .../sql/dialect/oracle/parser/OracleExprParser.java | 13 ++++--------- .../dialect/oracle/visitor/OracleOutputVisitor.java | 3 --- .../com/alibaba/druid/bvt/sql/DistinctTest.java | 4 ++++ 5 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/alibaba/druid/sql/ast/expr/SQLAggregateExpr.java b/src/main/java/com/alibaba/druid/sql/ast/expr/SQLAggregateExpr.java index f928dde609..d608cdb019 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/expr/SQLAggregateExpr.java +++ b/src/main/java/com/alibaba/druid/sql/ast/expr/SQLAggregateExpr.java @@ -122,6 +122,6 @@ public class SQLAggregateExpr extends SQLExprImpl implements Serializable { } public static enum Option { - DISTINCT, ALL + DISTINCT, ALL, UNIQUE } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OracleAggregateExpr.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OracleAggregateExpr.java index c87bc58921..ec22e01cda 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OracleAggregateExpr.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OracleAggregateExpr.java @@ -24,17 +24,16 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class OracleAggregateExpr extends SQLAggregateExpr implements Serializable, OracleExpr { - private boolean unique = false; private static final long serialVersionUID = 1L; private OracleAnalytic over; private boolean ignoreNulls = false; public boolean isUnique() { - return unique; + return Option.UNIQUE.equals(this.getOption()); } public void setUnique(boolean unique) { - this.unique = unique; + this.setOption(Option.UNIQUE); } public boolean isIgnoreNulls() { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java index a71bab7efe..fc6d3e9d76 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java @@ -526,17 +526,13 @@ public class OracleExprParser extends SQLExprParser { } protected OracleAggregateExpr parseAggregateExpr(String methodName) { - boolean unique = false; - methodName = methodName.toUpperCase(); - if (lexer.token() == Token.UNIQUE) { - lexer.nextToken(); - unique = true; - } - OracleAggregateExpr aggregateExpr; - if (lexer.token() == (Token.ALL)) { + if (lexer.token() == Token.UNIQUE) { + aggregateExpr = new OracleAggregateExpr(methodName, SQLAggregateExpr.Option.UNIQUE); + lexer.nextToken(); + } else if (lexer.token() == (Token.ALL)) { aggregateExpr = new OracleAggregateExpr(methodName, SQLAggregateExpr.Option.ALL); lexer.nextToken(); } else if (lexer.token() == (Token.DISTINCT)) { @@ -545,7 +541,6 @@ public class OracleExprParser extends SQLExprParser { } else { aggregateExpr = new OracleAggregateExpr(methodName); } - aggregateExpr.setUnique(unique); exprList(aggregateExpr.getArguments()); if (lexer.stringVal().equalsIgnoreCase("IGNORE")) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java index 6c2c2c47cb..fe2c6bbafd 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java @@ -217,9 +217,6 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS print(' '); } - if (expr.isUnique()) { - print("UNIQUE "); - } printAndAccept(expr.getArguments(), ", "); print(")"); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/DistinctTest.java b/src/test/java/com/alibaba/druid/bvt/sql/DistinctTest.java index 1eb807dd2e..8b6299dfd4 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/DistinctTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/DistinctTest.java @@ -18,6 +18,10 @@ public class DistinctTest extends TestCase { Assert.assertEquals("SELECT COUNT(DISTINCT *)\nFROM t", SQLUtils.format(sql, JdbcUtils.ORACLE)); } + public void test_oracle_unique() throws Exception { + Assert.assertEquals("SELECT COUNT(UNIQUE *)\nFROM t", SQLUtils.format("select count(unique *) from t", JdbcUtils.ORACLE)); + } + public void test_postgres() throws Exception { Assert.assertEquals("SELECT COUNT(DISTINCT *)\nFROM t", SQLUtils.format(sql, JdbcUtils.POSTGRESQL)); } From ffa45255ab5ad19e19452aad70c8a3d3be37a142 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 18 Jul 2012 08:00:13 +0800 Subject: [PATCH 07/12] fix testcase --- .../druid/bvt/pool/SpringIbatisFilterTest.java | 16 ++++++++++++++++ .../druid/bvt/pool/SpringMybatisFilterTest.java | 15 +++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/test/java/com/alibaba/druid/bvt/pool/SpringIbatisFilterTest.java b/src/test/java/com/alibaba/druid/bvt/pool/SpringIbatisFilterTest.java index bdbc293d32..745f72c785 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/SpringIbatisFilterTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/SpringIbatisFilterTest.java @@ -71,6 +71,22 @@ public class SpringIbatisFilterTest extends TestCase { TestFilter filter = (TestFilter) context.getBean("test-filter"); Assert.assertEquals(2, filter.getConnectCount()); + { + Connection conn = dataSource.getConnection(); + Statement stmt = conn.createStatement(); + stmt.execute("DROP TABLE sequence_seed"); + stmt.close(); + conn.close(); + } + { + Connection conn = dataSource.getConnection(); + Statement stmt = conn.createStatement(); + stmt.execute("DROP TABLE t_User"); + stmt.close(); + conn.close(); + } + + context.close(); Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); diff --git a/src/test/java/com/alibaba/druid/bvt/pool/SpringMybatisFilterTest.java b/src/test/java/com/alibaba/druid/bvt/pool/SpringMybatisFilterTest.java index 2bc99da8ca..3b18be631c 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/SpringMybatisFilterTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/SpringMybatisFilterTest.java @@ -65,6 +65,21 @@ public class SpringMybatisFilterTest extends TestCase { userMapper.addUser(user); } + + { + Connection conn = dataSource.getConnection(); + Statement stmt = conn.createStatement(); + stmt.execute("DROP TABLE sequence_seed"); + stmt.close(); + conn.close(); + } + { + Connection conn = dataSource.getConnection(); + Statement stmt = conn.createStatement(); + stmt.execute("DROP TABLE t_User"); + stmt.close(); + conn.close(); + } context.close(); From fb06c9a0b433a5830922aabab00db095696b1d6d Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 18 Jul 2012 08:09:09 +0800 Subject: [PATCH 08/12] add jmx export testcase --- .../druid/bvt/jmx/JMXExporterTest.java | 29 +++++++++++++++++++ .../alibaba/druid/jmx/spring_stat_export.xml | 24 +++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 src/test/java/com/alibaba/druid/bvt/jmx/JMXExporterTest.java create mode 100644 src/test/resources/com/alibaba/druid/jmx/spring_stat_export.xml diff --git a/src/test/java/com/alibaba/druid/bvt/jmx/JMXExporterTest.java b/src/test/java/com/alibaba/druid/bvt/jmx/JMXExporterTest.java new file mode 100644 index 0000000000..f3b42f6880 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/jmx/JMXExporterTest.java @@ -0,0 +1,29 @@ +package com.alibaba.druid.bvt.jmx; + +import java.lang.management.ManagementFactory; + +import javax.management.ObjectName; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class JMXExporterTest extends TestCase { + + public void test_export() throws Exception { + String file = "com/alibaba/druid/jmx/spring_stat_export.xml"; + + ObjectName objectName = new ObjectName("com.alibaba.druid:type=JdbcStatManager"); + + Assert.assertFalse(ManagementFactory.getPlatformMBeanServer().isRegistered(objectName)); // before jmx register + + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(file); + + Assert.assertTrue(ManagementFactory.getPlatformMBeanServer().isRegistered(objectName)); // after jmx register + + context.close(); + + Assert.assertFalse(ManagementFactory.getPlatformMBeanServer().isRegistered(objectName)); + } +} diff --git a/src/test/resources/com/alibaba/druid/jmx/spring_stat_export.xml b/src/test/resources/com/alibaba/druid/jmx/spring_stat_export.xml new file mode 100644 index 0000000000..00ac5adb07 --- /dev/null +++ b/src/test/resources/com/alibaba/druid/jmx/spring_stat_export.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + \ No newline at end of file From 002b2fbceef11222def861a2e0b064d3e7e197bc Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 18 Jul 2012 08:21:52 +0800 Subject: [PATCH 09/12] fixed testcase --- .../com/alibaba/druid/bvt/sql/cobar/DMLSelectParserTest.java | 2 +- src/test/resources/bvt/parser/mysql-5.txt | 2 +- src/test/resources/bvt/parser/mysql-6.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/alibaba/druid/bvt/sql/cobar/DMLSelectParserTest.java b/src/test/java/com/alibaba/druid/bvt/sql/cobar/DMLSelectParserTest.java index a9866aa337..4304b9dce6 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/cobar/DMLSelectParserTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/cobar/DMLSelectParserTest.java @@ -152,7 +152,7 @@ public class DMLSelectParserTest extends TestCase { SQLStatement stmt = parser.parseStatementList().get(0); parser.match(Token.EOF); String output = SQLUtils.toMySqlString(stmt); - Assert.assertEquals("SELECT SQL_CACHE id1, max(id2)\nFROM tb1\nGROUP BY id1\nHAVING id1 > 10\nORDER BY id3 DESC", output); + Assert.assertEquals("SELECT SQL_CACHE id1, MAX(id2)\nFROM tb1\nGROUP BY id1\nHAVING id1 > 10\nORDER BY id3 DESC", output); } public void test_select_10() throws Exception { diff --git a/src/test/resources/bvt/parser/mysql-5.txt b/src/test/resources/bvt/parser/mysql-5.txt index ed0add5358..5aea645438 100644 --- a/src/test/resources/bvt/parser/mysql-5.txt +++ b/src/test/resources/bvt/parser/mysql-5.txt @@ -8,7 +8,7 @@ ORDER BY e.word_alias,a.createtime DESC --------------------------- -SELECT Count(*) +SELECT COUNT(*) FROM q_matchrelation a, q_offerdetail b, q_keyword e, Q_ADCREATIVE f WHERE a.offerid = b.offerid AND a.keywordid = e.keywordid diff --git a/src/test/resources/bvt/parser/mysql-6.txt b/src/test/resources/bvt/parser/mysql-6.txt index 05959e231b..9045779040 100644 --- a/src/test/resources/bvt/parser/mysql-6.txt +++ b/src/test/resources/bvt/parser/mysql-6.txt @@ -37,7 +37,7 @@ from ( --------------------------- -SELECT count(*) +SELECT COUNT(*) FROM (SELECT a.activity_offer_id AS adResourceId, a.title AS adResourceName, a.b2boffer_url AS adResourceURL, a.custid, b.memberid , c.position_name AS positionName, c.charge_setting AS feeRegulation, a.priority_weight AS priorityWeight, a.audit_state AS adResourceState, 0 AS adResourceType , a.gmt_create, a.refuse_remark From bd004dc78a5a9e2bb6249efeeca1645ac1debe2f Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 18 Jul 2012 08:43:15 +0800 Subject: [PATCH 10/12] fixed testcase --- .../com/alibaba/druid/bvt/sql/oracle/OracleGroupingSetTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleGroupingSetTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleGroupingSetTest.java index e93675d69a..feed4b884f 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleGroupingSetTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleGroupingSetTest.java @@ -21,7 +21,7 @@ public class OracleGroupingSetTest extends TestCase { + "( calendar_month_desc, co.country_id) );\n"; String expected = "SELECT channel_desc, calendar_month_desc, co.country_id, " // - + "TO_CHAR(sum(amount_sold), '9,999,999,999') AS SALES$\n" // + + "TO_CHAR(SUM(amount_sold), '9,999,999,999') AS SALES$\n" // + "FROM sales, customers, times, channels, countries co\n" // + "WHERE sales.time_id = times.time_id" // + "\n\tAND sales.cust_id = customers.cust_id" // From cafb7c5814efc7b0a3dae940e5b6a593dc904a43 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 18 Jul 2012 08:54:20 +0800 Subject: [PATCH 11/12] 0.2.5-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 63ed95a808..ff0647eab9 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.alibaba druid - 0.2.4 + 0.2.5-SNAPSHOT jar druid From 8a15c7749f250eed5713f86245abeff2d1f57686 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 18 Jul 2012 09:12:04 +0800 Subject: [PATCH 12/12] testcase fixed --- src/test/resources/com/alibaba/druid/jmx/spring_stat_export.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/resources/com/alibaba/druid/jmx/spring_stat_export.xml b/src/test/resources/com/alibaba/druid/jmx/spring_stat_export.xml index 00ac5adb07..1fed66031a 100644 --- a/src/test/resources/com/alibaba/druid/jmx/spring_stat_export.xml +++ b/src/test/resources/com/alibaba/druid/jmx/spring_stat_export.xml @@ -7,7 +7,7 @@ http://www.springframework.org/schema/beans http://www.springframework.org/schem http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd" default-lazy-init="false"> - +