From 1a8330b6c9685dce8d5223fb1b651be03bfef4fd Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 28 Apr 2013 21:21:23 +0800 Subject: [PATCH] improve mysql ddl parver --- .../statement/MySqlCreateTableStatement.java | 46 +++++++- .../ast/statement/MySqlPartitionByHash.java | 60 ++++++++++ .../mysql/parser/MySqlCreateTableParser.java | 103 ++++++++++-------- .../mysql/visitor/MySqlASTVisitor.java | 9 ++ .../mysql/visitor/MySqlASTVisitorAdapter.java | 22 ++++ .../mysql/visitor/MySqlOutputVisitor.java | 71 ++++++++---- .../mysql/visitor/MySqlSchemaStatVisitor.java | 22 ++++ .../bvt/sql/mysql/MySqlCreateTableTest24.java | 64 +++++++++++ .../bvt/sql/mysql/MySqlCreateTableTest25.java | 64 +++++++++++ .../bvt/sql/mysql/MySqlCreateTableTest26.java | 64 +++++++++++ .../bvt/sql/mysql/MySqlCreateTableTest27.java | 64 +++++++++++ .../bvt/sql/mysql/MySqlCreateTableTest28.java | 64 +++++++++++ .../bvt/sql/mysql/MySqlCreateTableTest29.java | 64 +++++++++++ .../bvt/sql/mysql/MySqlCreateTableTest30.java | 64 +++++++++++ .../bvt/sql/mysql/MySqlCreateTableTest31.java | 64 +++++++++++ .../bvt/sql/mysql/MySqlCreateTableTest32.java | 64 +++++++++++ .../bvt/sql/mysql/MySqlCreateTableTest33.java | 64 +++++++++++ .../bvt/sql/mysql/MySqlCreateTableTest34.java | 64 +++++++++++ .../bvt/sql/mysql/MySqlCreateTableTest35.java | 64 +++++++++++ .../bvt/sql/mysql/MySqlCreateTableTest36.java | 64 +++++++++++ .../bvt/sql/mysql/MySqlCreateTableTest37.java | 64 +++++++++++ .../bvt/sql/mysql/MySqlCreateTableTest38.java | 64 +++++++++++ .../bvt/sql/mysql/MySqlCreateTableTest39.java | 64 +++++++++++ .../bvt/sql/mysql/MySqlCreateTableTest40.java | 63 +++++++++++ .../bvt/sql/mysql/MySqlCreateTableTest5.java | 2 +- 25 files changed, 1352 insertions(+), 70 deletions(-) create mode 100644 src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlPartitionByHash.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest24.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest25.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest26.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest27.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest28.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest29.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest30.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest31.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest32.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest33.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest34.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest35.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest36.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest37.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest38.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest39.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest40.java diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java index 26d42187f9..2dbb45cbd4 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java @@ -21,11 +21,14 @@ import java.util.List; import java.util.Map; import com.alibaba.druid.sql.ast.SQLCommentHint; +import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.ast.SQLPartitioningClause; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLSelect; +import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; @@ -34,7 +37,7 @@ public class MySqlCreateTableStatement extends SQLCreateTableStatement implement private boolean ifNotExiists = false; - private Map tableOptions = new LinkedHashMap(); + private Map tableOptions = new LinkedHashMap(); protected SQLSelect query; @@ -43,15 +46,16 @@ public class MySqlCreateTableStatement extends SQLCreateTableStatement implement private List hints = new ArrayList(); private SQLExprTableSource like; - + public MySqlCreateTableStatement(){ } + public SQLExprTableSource getLike() { return like; } - + public void setLike(SQLName like) { this.setLike(new SQLExprTableSource(like)); } @@ -71,7 +75,7 @@ public class MySqlCreateTableStatement extends SQLCreateTableStatement implement this.hints = hints; } - public void setTableOptions(Map tableOptions) { + public void setTableOptions(Map tableOptions) { this.tableOptions = tableOptions; } @@ -83,7 +87,7 @@ public class MySqlCreateTableStatement extends SQLCreateTableStatement implement this.partitioning = partitioning; } - public Map getTableOptions() { + public Map getTableOptions() { return tableOptions; } @@ -122,4 +126,36 @@ public class MySqlCreateTableStatement extends SQLCreateTableStatement implement } visitor.endVisit(this); } + + public static class TableSpaceOption extends MySqlObjectImpl { + + private SQLName name; + private SQLExpr storage; + + public SQLName getName() { + return name; + } + + public void setName(SQLName name) { + this.name = name; + } + + public SQLExpr getStorage() { + return storage; + } + + public void setStorage(SQLExpr storage) { + this.storage = storage; + } + + @Override + public void accept0(MySqlASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, getName()); + acceptChild(visitor, getStorage()); + } + visitor.endVisit(this); + } + + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlPartitionByHash.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlPartitionByHash.java new file mode 100644 index 0000000000..0231cb823f --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlPartitionByHash.java @@ -0,0 +1,60 @@ +/* + * 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.sql.dialect.mysql.ast.statement; + +import java.util.List; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.ast.SQLPartitioningClause; +import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; + +public class MySqlPartitionByHash extends MySqlObjectImpl implements SQLPartitioningClause { + + private static final long serialVersionUID = 1L; + + private SQLExpr expr; + + private SQLExpr partitionCount; + + @Override + public void accept0(MySqlASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, expr); + acceptChild(visitor, partitionCount); + } + visitor.endVisit(this); + } + + public SQLExpr getPartitionCount() { + return partitionCount; + } + + public void setPartitionCount(SQLExpr partitionCount) { + this.partitionCount = partitionCount; + } + + + public SQLExpr getExpr() { + return expr; + } + + + public void setExpr(SQLExpr expr) { + this.expr = expr; + } +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlCreateTableParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlCreateTableParser.java index 2d88141b62..e2b54a2073 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlCreateTableParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlCreateTableParser.java @@ -24,6 +24,8 @@ import com.alibaba.druid.sql.ast.statement.SQLTableConstaint; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlForeignKey; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlKey; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement.TableSpaceOption; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPartitionByHash; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPartitionByKey; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlTableIndex; import com.alibaba.druid.sql.parser.ParserException; @@ -156,8 +158,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("ENGINE", lexer.stringVal()); - lexer.nextToken(); + stmt.getTableOptions().put("ENGINE", this.exprParser.expr()); continue; } @@ -166,8 +167,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("AUTO_INCREMENT", lexer.numberString()); - lexer.nextToken(); + stmt.getTableOptions().put("AUTO_INCREMENT", this.exprParser.expr()); continue; } @@ -176,8 +176,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("AVG_ROW_LENGTH", lexer.numberString()); - lexer.nextToken(); + stmt.getTableOptions().put("AVG_ROW_LENGTH", this.exprParser.expr()); continue; } @@ -196,8 +195,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("CHECKSUM", lexer.numberString()); - lexer.nextToken(); + stmt.getTableOptions().put("CHECKSUM", this.exprParser.expr()); continue; } @@ -206,8 +204,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("COMMENT", lexer.stringVal()); - lexer.nextToken(); + stmt.getTableOptions().put("COMMENT", this.exprParser.expr()); continue; } @@ -216,8 +213,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("CONNECTION", lexer.stringVal()); - lexer.nextToken(); + stmt.getTableOptions().put("CONNECTION", this.exprParser.expr()); continue; } @@ -227,8 +223,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("DATA DIRECTORY", lexer.stringVal()); - lexer.nextToken(); + stmt.getTableOptions().put("DATA DIRECTORY", this.exprParser.expr()); continue; } @@ -237,8 +232,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("DELAY_KEY_WRITE", lexer.stringVal()); - lexer.nextToken(); + stmt.getTableOptions().put("DELAY_KEY_WRITE", this.exprParser.expr()); continue; } @@ -248,8 +242,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("INDEX DIRECTORY", lexer.stringVal()); - lexer.nextToken(); + stmt.getTableOptions().put("INDEX DIRECTORY", this.exprParser.expr()); continue; } @@ -258,8 +251,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("INSERT_METHOD", lexer.stringVal()); - lexer.nextToken(); + stmt.getTableOptions().put("INSERT_METHOD", this.exprParser.expr()); continue; } @@ -268,8 +260,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("KEY_BLOCK_SIZE", lexer.stringVal()); - lexer.nextToken(); + stmt.getTableOptions().put("KEY_BLOCK_SIZE", this.exprParser.expr()); continue; } @@ -278,8 +269,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("MAX_ROWS", lexer.stringVal()); - lexer.nextToken(); + stmt.getTableOptions().put("MAX_ROWS", this.exprParser.expr()); continue; } @@ -288,8 +278,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("MIN_ROWS", lexer.stringVal()); - lexer.nextToken(); + stmt.getTableOptions().put("MIN_ROWS", this.exprParser.expr()); continue; } @@ -298,8 +287,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("PACK_KEYS", lexer.stringVal()); - lexer.nextToken(); + stmt.getTableOptions().put("PACK_KEYS", this.exprParser.expr()); continue; } @@ -308,8 +296,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("PASSWORD", lexer.stringVal()); - lexer.nextToken(); + stmt.getTableOptions().put("PASSWORD", this.exprParser.expr()); continue; } @@ -318,29 +305,49 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("ROW_FORMAT", lexer.stringVal()); + stmt.getTableOptions().put("ROW_FORMAT", this.exprParser.expr()); + continue; + } + + if (identifierEquals("STATS_AUTO_RECALC")) { lexer.nextToken(); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + + stmt.getTableOptions().put("STATS_AUTO_RECALC", this.exprParser.expr()); + continue; + } + + if (identifierEquals("STATS_PERSISTENT")) { + lexer.nextToken(); + if (lexer.token() == Token.EQ) { + lexer.nextToken(); + } + + stmt.getTableOptions().put("STATS_PERSISTENT", this.exprParser.expr()); continue; } if (identifierEquals("TABLESPACE")) { lexer.nextToken(); - String tablespace_name = lexer.stringVal(); - accept(Token.IDENTIFIER); + TableSpaceOption option = new TableSpaceOption(); + option.setName(this.exprParser.name()); if (identifierEquals("STORAGE")) { - throw new ParserException("TODO STORAGE"); + lexer.nextToken(); + option.setStorage(this.exprParser.name()); } - - stmt.getTableOptions().put("TABLESPACE", tablespace_name); + + stmt.getTableOptions().put("TABLESPACE", option); continue; } if (identifierEquals("TYPE")) { lexer.nextToken(); accept(Token.EQ); - stmt.getTableOptions().put("TYPE", lexer.stringVal()); + stmt.getTableOptions().put("TYPE", this.exprParser.expr()); lexer.nextToken(); continue; } @@ -364,6 +371,19 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { accept(Token.RPAREN); stmt.setPartitioning(clause); + if (identifierEquals("PARTITIONS")) { + lexer.nextToken(); + clause.setPartitionCount(this.exprParser.expr()); + } + } else if (identifierEquals("HASH")) { + lexer.nextToken(); + MySqlPartitionByHash clause = new MySqlPartitionByHash(); + + accept(Token.LPAREN); + clause.setExpr(this.exprParser.expr()); + accept(Token.RPAREN); + stmt.setPartitioning(clause); + if (identifierEquals("PARTITIONS")) { lexer.nextToken(); clause.setPartitionCount(this.exprParser.expr()); @@ -395,8 +415,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("CHARACTER SET", lexer.stringVal()); - lexer.nextToken(); + stmt.getTableOptions().put("CHARACTER SET", this.exprParser.expr()); return true; } @@ -405,8 +424,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("CHARSET", lexer.stringVal()); - lexer.nextToken(); + stmt.getTableOptions().put("CHARSET", this.exprParser.expr()); return true; } @@ -415,8 +433,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("COLLATE", lexer.stringVal()); - lexer.nextToken(); + stmt.getTableOptions().put("COLLATE", this.exprParser.expr()); return true; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java index edb597fb17..68ff64f268 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java @@ -58,6 +58,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlKillStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadDataInFileStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadXmlStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLockTableStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPartitionByHash; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPartitionByKey; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPrepareStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRenameTableStatement; @@ -540,4 +541,12 @@ public interface MySqlASTVisitor extends SQLASTVisitor { boolean visit(MySqlAlterTableImportTablespace x); void endVisit(MySqlAlterTableImportTablespace x); + + boolean visit(MySqlCreateTableStatement.TableSpaceOption x); + + void endVisit(MySqlCreateTableStatement.TableSpaceOption x); + + boolean visit(MySqlPartitionByHash x); + + void endVisit(MySqlPartitionByHash x); } // diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java index 1c98aade48..408385db90 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java @@ -45,6 +45,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBinlogStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateIndexStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement.TableSpaceOption; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement.UserSpecification; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; @@ -59,6 +60,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlKillStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadDataInFileStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadXmlStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLockTableStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPartitionByHash; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPartitionByKey; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPrepareStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRenameTableStatement; @@ -1193,4 +1195,24 @@ public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements public void endVisit(MySqlAlterTableImportTablespace x) { } + + @Override + public boolean visit(TableSpaceOption x) { + return true; + } + + @Override + public void endVisit(TableSpaceOption x) { + + } + + @Override + public boolean visit(MySqlPartitionByHash x) { + return true; + } + + @Override + public void endVisit(MySqlPartitionByHash x) { + + } } // 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 e182ffc1b9..f11d8a7f03 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 @@ -21,6 +21,7 @@ import java.util.Map; import com.alibaba.druid.sql.ast.SQLCommentHint; import com.alibaba.druid.sql.ast.SQLDataType; import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.ast.SQLSetQuantifier; import com.alibaba.druid.sql.ast.expr.SQLCharExpr; import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; @@ -64,6 +65,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBinlogStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateIndexStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement.TableSpaceOption; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement.UserSpecification; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; @@ -78,6 +80,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlKillStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadDataInFileStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadXmlStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLockTableStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPartitionByHash; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPartitionByKey; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPrepareStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRenameTableStatement; @@ -295,7 +298,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV x.getDefaultExpr().accept(this); } } - + if (mysqlColumn != null && mysqlColumn.getStorage() != null) { print(" STORAGE "); mysqlColumn.getStorage().accept(this); @@ -431,12 +434,12 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } x.getName().accept(this); - + if (x.getLike() != null) { print(" LIKE "); x.getLike().accept(this); } - + int size = x.getTableElementList().size(); if (size > 0) { print(" ("); @@ -454,37 +457,29 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV print(")"); } - for (Map.Entry option : x.getTableOptions().entrySet()) { + for (Map.Entry option : x.getTableOptions().entrySet()) { String key = option.getKey(); print(' '); print(key); - + if ("TABLESPACE".equals(key)) { print(' '); - print(option.getValue()); + option.getValue().accept(this); continue; } - + print(" = "); - if ("COMMENT".equals(key)) { - new SQLCharExpr(option.getValue()).accept(this); - } else if ("CONNECTION".equals(key)) { - new SQLCharExpr(option.getValue()).accept(this); - } else if ("DATA DIRECTORY".equals(key)) { - new SQLCharExpr(option.getValue()).accept(this); - } else if ("INDEX DIRECTORY".equals(key)) { - new SQLCharExpr(option.getValue()).accept(this); - } else if ("PASSWORD".equals(key)) { - new SQLCharExpr(option.getValue()).accept(this); - } else { - print(option.getValue()); - } + option.getValue().accept(this); + } + + if (x.getPartitioning() != null) { + print(' '); + x.getPartitioning().accept(this); } if (x.getQuery() != null) { - print(" "); incrementIndent(); println(); x.getQuery().accept(this); @@ -1512,6 +1507,24 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV return false; } + @Override + public void endVisit(MySqlPartitionByHash x) { + + } + + @Override + public boolean visit(MySqlPartitionByHash x) { + print("PARTITION BY HASH ("); + x.getExpr().accept(this); + print(")"); + + if (x.getPartitionCount() != null) { + print(" PARTITIONS "); + x.getPartitionCount().accept(this); + } + return false; + } + @Override public void endVisit(MySqlSelectQueryBlock x) { @@ -2867,4 +2880,20 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV x.getValue().accept(this); return false; } + + @Override + public boolean visit(TableSpaceOption x) { + x.getName().accept(this); + + if (x.getStorage() != null) { + print(' '); + x.getStorage().accept(this); + } + return false; + } + + @Override + public void endVisit(TableSpaceOption x) { + + } } // diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java index 6724fe0938..c7d9586141 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java @@ -58,6 +58,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBinlogStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateIndexStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement.TableSpaceOption; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement.UserSpecification; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; @@ -72,6 +73,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlKillStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadDataInFileStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadXmlStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLockTableStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPartitionByHash; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPartitionByKey; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPrepareStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRenameTableStatement; @@ -1277,4 +1279,24 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS } + @Override + public boolean visit(TableSpaceOption x) { + return false; + } + + @Override + public void endVisit(TableSpaceOption x) { + + } + + @Override + public boolean visit(MySqlPartitionByHash x) { + return false; + } + + @Override + public void endVisit(MySqlPartitionByHash x) { + + } + } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest24.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest24.java new file mode 100644 index 0000000000..8cd62e49aa --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest24.java @@ -0,0 +1,64 @@ +/* + * 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 java.util.List; + +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 MySqlCreateTableTest24 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE lookup" + // + " (id INT, INDEX USING BTREE (id))" + // + " AVG_ROW_LENGTH = 1024;"; // + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + 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(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("lookup"))); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLE lookup (" + // + "\n\tid INT, " + // + "\n\tINDEX USING BTREE(id)" + // + "\n) AVG_ROW_LENGTH = 1024", output); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest25.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest25.java new file mode 100644 index 0000000000..e3021c3a32 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest25.java @@ -0,0 +1,64 @@ +/* + * 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 java.util.List; + +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 MySqlCreateTableTest25 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE lookup" + // + " (id INT, INDEX USING BTREE (id))" + // + " AVG_ROW_LENGTH 1024;"; // + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + 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(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("lookup"))); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLE lookup (" + // + "\n\tid INT, " + // + "\n\tINDEX USING BTREE(id)" + // + "\n) AVG_ROW_LENGTH = 1024", output); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest26.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest26.java new file mode 100644 index 0000000000..9e79c2276c --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest26.java @@ -0,0 +1,64 @@ +/* + * 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 java.util.List; + +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 MySqlCreateTableTest26 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE lookup" + // + " (id INT, INDEX USING BTREE (id))" + // + " MAX_ROWS 1024;"; // + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + 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(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("lookup"))); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLE lookup (" + // + "\n\tid INT, " + // + "\n\tINDEX USING BTREE(id)" + // + "\n) MAX_ROWS = 1024", output); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest27.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest27.java new file mode 100644 index 0000000000..c754f9d6ee --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest27.java @@ -0,0 +1,64 @@ +/* + * 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 java.util.List; + +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 MySqlCreateTableTest27 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE lookup" + // + " (id INT, INDEX USING BTREE (id))" + // + " MAX_ROWS = 1024;"; // + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + 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(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("lookup"))); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLE lookup (" + // + "\n\tid INT, " + // + "\n\tINDEX USING BTREE(id)" + // + "\n) MAX_ROWS = 1024", output); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest28.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest28.java new file mode 100644 index 0000000000..e8a4c9e08c --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest28.java @@ -0,0 +1,64 @@ +/* + * 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 java.util.List; + +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 MySqlCreateTableTest28 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE lookup" + // + " (id INT, INDEX USING BTREE (id))" + // + " MIN_ROWS = 1024;"; // + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + 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(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("lookup"))); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLE lookup (" + // + "\n\tid INT, " + // + "\n\tINDEX USING BTREE(id)" + // + "\n) MIN_ROWS = 1024", output); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest29.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest29.java new file mode 100644 index 0000000000..311a4cafbf --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest29.java @@ -0,0 +1,64 @@ +/* + * 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 java.util.List; + +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 MySqlCreateTableTest29 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE lookup" + // + " (id INT, INDEX USING BTREE (id))" + // + " MIN_ROWS 1024;"; // + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + 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(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("lookup"))); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLE lookup (" + // + "\n\tid INT, " + // + "\n\tINDEX USING BTREE(id)" + // + "\n) MIN_ROWS = 1024", output); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest30.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest30.java new file mode 100644 index 0000000000..7a47373f8f --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest30.java @@ -0,0 +1,64 @@ +/* + * 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 java.util.List; + +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 MySqlCreateTableTest30 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE lookup" + // + " (id INT, INDEX USING BTREE (id))" + // + " DELAY_KEY_WRITE 0;"; // + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + 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(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("lookup"))); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLE lookup (" + // + "\n\tid INT, " + // + "\n\tINDEX USING BTREE(id)" + // + "\n) DELAY_KEY_WRITE = 0", output); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest31.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest31.java new file mode 100644 index 0000000000..16dfb2d8a1 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest31.java @@ -0,0 +1,64 @@ +/* + * 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 java.util.List; + +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 MySqlCreateTableTest31 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE lookup" + // + " (id INT, INDEX USING BTREE (id))" + // + " DELAY_KEY_WRITE = 1;"; // + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + 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(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("lookup"))); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLE lookup (" + // + "\n\tid INT, " + // + "\n\tINDEX USING BTREE(id)" + // + "\n) DELAY_KEY_WRITE = 1", output); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest32.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest32.java new file mode 100644 index 0000000000..b094e1f682 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest32.java @@ -0,0 +1,64 @@ +/* + * 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 java.util.List; + +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 MySqlCreateTableTest32 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE lookup" + // + " (id INT, INDEX USING BTREE (id))" + // + " DATA DIRECTORY = 'aaa';"; // + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + 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(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("lookup"))); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLE lookup (" + // + "\n\tid INT, " + // + "\n\tINDEX USING BTREE(id)" + // + "\n) DATA DIRECTORY = 'aaa'", output); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest33.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest33.java new file mode 100644 index 0000000000..8a46e0804b --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest33.java @@ -0,0 +1,64 @@ +/* + * 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 java.util.List; + +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 MySqlCreateTableTest33 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE lookup" + // + " (id INT, INDEX USING BTREE (id))" + // + " CONNECTION = 'aaa';"; // + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + 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(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("lookup"))); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLE lookup (" + // + "\n\tid INT, " + // + "\n\tINDEX USING BTREE(id)" + // + "\n) CONNECTION = 'aaa'", output); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest34.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest34.java new file mode 100644 index 0000000000..619bf6fac8 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest34.java @@ -0,0 +1,64 @@ +/* + * 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 java.util.List; + +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 MySqlCreateTableTest34 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE lookup" + // + " (id INT, INDEX USING BTREE (id))" + // + " CHECKSUM = 1;"; // + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + 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(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("lookup"))); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLE lookup (" + // + "\n\tid INT, " + // + "\n\tINDEX USING BTREE(id)" + // + "\n) CHECKSUM = 1", output); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest35.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest35.java new file mode 100644 index 0000000000..24db0fe215 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest35.java @@ -0,0 +1,64 @@ +/* + * 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 java.util.List; + +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 MySqlCreateTableTest35 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE lookup" + // + " (id INT, INDEX USING BTREE (id))" + // + " AUTO_INCREMENT = 1;"; // + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + 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(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("lookup"))); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLE lookup (" + // + "\n\tid INT, " + // + "\n\tINDEX USING BTREE(id)" + // + "\n) AUTO_INCREMENT = 1", output); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest36.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest36.java new file mode 100644 index 0000000000..74a00bc2a3 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest36.java @@ -0,0 +1,64 @@ +/* + * 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 java.util.List; + +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 MySqlCreateTableTest36 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE lookup" + // + " (id INT, INDEX USING BTREE (id))" + // + " STATS_AUTO_RECALC = 1;"; // + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + 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(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("lookup"))); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLE lookup (" + // + "\n\tid INT, " + // + "\n\tINDEX USING BTREE(id)" + // + "\n) STATS_AUTO_RECALC = 1", output); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest37.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest37.java new file mode 100644 index 0000000000..29174aaaef --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest37.java @@ -0,0 +1,64 @@ +/* + * 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 java.util.List; + +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 MySqlCreateTableTest37 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE lookup" + // + " (id INT, INDEX USING BTREE (id))" + // + " STATS_AUTO_RECALC DEFAULT;"; // + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + 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(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("lookup"))); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLE lookup (" + // + "\n\tid INT, " + // + "\n\tINDEX USING BTREE(id)" + // + "\n) STATS_AUTO_RECALC = DEFAULT", output); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest38.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest38.java new file mode 100644 index 0000000000..865e75e38e --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest38.java @@ -0,0 +1,64 @@ +/* + * 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 java.util.List; + +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 MySqlCreateTableTest38 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE lookup" + // + " (id INT, INDEX USING BTREE (id))" + // + " STATS_PERSISTENT DEFAULT;"; // + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + 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(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("lookup"))); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLE lookup (" + // + "\n\tid INT, " + // + "\n\tINDEX USING BTREE(id)" + // + "\n) STATS_PERSISTENT = DEFAULT", output); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest39.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest39.java new file mode 100644 index 0000000000..7f062f8453 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest39.java @@ -0,0 +1,64 @@ +/* + * 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 java.util.List; + +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 MySqlCreateTableTest39 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE lookup" + // + " (id INT, INDEX USING BTREE (id))" + // + " STATS_PERSISTENT 1;"; // + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + 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(1, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("lookup"))); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLE lookup (" + // + "\n\tid INT, " + // + "\n\tINDEX USING BTREE(id)" + // + "\n) STATS_PERSISTENT = 1", output); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest40.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest40.java new file mode 100644 index 0000000000..f6ae565d5a --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest40.java @@ -0,0 +1,63 @@ +/* + * 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 java.util.List; + +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 MySqlCreateTableTest40 extends MysqlTest { + + public void test_0() throws Exception { + String sql = "CREATE TABLE t1 (col1 INT, col2 CHAR(5))" + // + " PARTITION BY HASH(col1);"; // + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + 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("t1"))); + + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("CREATE TABLE t1 (" + // + "\n\tcol1 INT, " + // + "\n\tcol2 CHAR(5)" + // + "\n) PARTITION BY HASH (col1)", output); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest5.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest5.java index 76547b82db..833693c7b1 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest5.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlCreateTableTest5.java @@ -47,7 +47,7 @@ public class MySqlCreateTableTest5 extends MysqlTest { MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); stmt.accept(visitor); - Assert.assertEquals("utf8", stmt.getTableOptions().get("CHARSET")); + Assert.assertEquals("utf8", stmt.getTableOptions().get("CHARSET").toString()); System.out.println("Tables : " + visitor.getTables()); System.out.println("fields : " + visitor.getColumns());