From f0bbca5e9ea50b441e8feead45e7c7ba1bf43eb5 Mon Sep 17 00:00:00 2001 From: kiki Date: Thu, 9 Jan 2014 10:39:32 +0800 Subject: [PATCH] support text [CHARACTER SET charset_name] [COLLATE collation_name] --- .../alibaba/druid/pool/DruidDataSource.java | 2 +- .../druid/sql/parser/SQLExprParser.java | 6 +- .../bvt/sql/mysql/MySqlCreateTableTest51.java | 61 +++++++++++++++++++ 3 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest51.java diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 0d291cc9a1..1ebeec5273 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -1057,7 +1057,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat buf.append(", "); } JdbcSqlStatValue sql = sqlList.get(i); - buf.append("runningCount "); + buf.append("runningSqlCount "); buf.append(sql.getRunningCount()); buf.append(" : "); buf.append(sql.getSql()); 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 7b1c10df9f..0d4c9ec3ca 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -1339,6 +1339,10 @@ public class SQLExprParser extends SQLParser { || "varchar".equalsIgnoreCase(dataTypeName) || "nchar".equalsIgnoreCase(dataTypeName) || "nvarchar".equalsIgnoreCase(dataTypeName) + || "tinytext".equalsIgnoreCase(dataTypeName) + || "text".equalsIgnoreCase(dataTypeName) + || "mediumtext".equalsIgnoreCase(dataTypeName) + || "longtext".equalsIgnoreCase(dataTypeName) // ; } @@ -1494,7 +1498,7 @@ public class SQLExprParser extends SQLParser { column.getConstaints().add(check); return parseColumnRest(column); } - + if (lexer.token() == Token.COMMENT) { lexer.nextToken(); column.setComment(primary()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest51.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest51.java new file mode 100644 index 0000000000..aefe24d2bc --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest51.java @@ -0,0 +1,61 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.mysql; + +import org.junit.Assert; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; + +public class MySqlCreateTableTest51 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE `test` (" // + + "`Id` int(11) NOT NULL," // + + "`text` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL"// + + ") ENGINE=InnoDB DEFAULT CHARSET=gbk"; + + MySqlStatementParser parser = new MySqlStatementParser(sql); + SQLStatement stmt = parser.parseCreateTable(); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + stmt.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(2, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("test"))); + + String output = SQLUtils.toMySqlString(stmt); + System.out.println(output); + Assert.assertEquals("CREATE TABLE `test` (" // + + "\n\t`Id` int(11) NOT NULL, "// + + "\n\t`text` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL"// + + "\n) ENGINE = InnoDB CHARSET = gbk",// + output); + + } +}