diff --git a/pom.xml b/pom.xml
index 64e5fd4b1d..eea92f3ee2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@
-->
com.alibaba
druid
- 1.1.2
+ 1.1.3-preview_11
jar
druid
diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java
index fa0e82b174..52fd9c8660 100644
--- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java
+++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java
@@ -257,6 +257,10 @@ public class SQLCreateTableStatement extends SQLStatementImpl implements SQLDDLS
if (element instanceof MySqlUnique) {
MySqlUnique unique = (MySqlUnique) element;
+ if (unique.getColumns().size() == 0) {
+ continue;
+ }
+
SQLExpr column = unique.getColumns().get(0).getExpr();
if (column instanceof SQLIdentifierExpr
&& SQLUtils.nameEquals(columnName, ((SQLIdentifierExpr) column).getName())) {
@@ -738,9 +742,20 @@ public class SQLCreateTableStatement extends SQLStatementImpl implements SQLDDLS
}
}
- for (SQLTableElement e : tableElementList) {
+ for (int i = tableElementList.size() - 1; i >= 0; --i) {
+ SQLTableElement e = tableElementList.get(i);
if (e instanceof SQLUnique) {
- ((SQLUnique) e).applyDropColumn(column);
+ SQLUnique unique = (SQLUnique) e;
+ unique.applyDropColumn(column);
+ if (unique.getColumns().size() == 0) {
+ tableElementList.remove(i);
+ }
+ } else if (e instanceof MySqlTableIndex) {
+ MySqlTableIndex index = (MySqlTableIndex) e;
+ index.applyDropColumn(column);
+ if (index.getColumns().size() == 0) {
+ tableElementList.remove(i);
+ }
}
}
}
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 0774614f26..b5dd86e7c3 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
@@ -314,11 +314,13 @@ public class MySqlCreateTableStatement extends SQLCreateTableStatement implement
}
}
- for (SQLTableElement e : tableElementList) {
+ for (int i = 0; i < tableElementList.size(); i++) {
+ SQLTableElement e = tableElementList.get(i);
if(e instanceof MySqlTableIndex) {
- ((MySqlTableIndex) e).apply(item);
- } else if (e instanceof MySqlKey) {
- ((MySqlKey) e).applyColumnRename(columnName, column.getName());
+ ((MySqlTableIndex) e).applyColumnRename(columnName, column.getName());
+ } else if (e instanceof SQLUnique) {
+ SQLUnique unique = (SQLUnique) e;
+ unique.applyColumnRename(columnName, column.getName());
}
}
diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlTableIndex.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlTableIndex.java
index b254b889af..7dbd304482 100644
--- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlTableIndex.java
+++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlTableIndex.java
@@ -18,6 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement;
import java.util.ArrayList;
import java.util.List;
+import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
@@ -85,7 +86,27 @@ public class MySqlTableIndex extends MySqlObjectImpl implements SQLTableElement
return x;
}
- public boolean apply(MySqlAlterTableChangeColumn x) {
+ public boolean applyColumnRename(SQLName columnName, SQLName to) {
+ for (SQLSelectOrderByItem orderByItem : columns) {
+ SQLExpr expr = orderByItem.getExpr();
+ if (expr instanceof SQLName
+ && SQLUtils.nameEquals((SQLName) expr, columnName)) {
+ orderByItem.setExpr(to.clone());
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean applyDropColumn(SQLName columnName) {
+ for (int i = columns.size() - 1; i >= 0; i--) {
+ SQLExpr expr = columns.get(i).getExpr();
+ if (expr instanceof SQLName
+ && SQLUtils.nameEquals((SQLName) expr, columnName)) {
+ columns.remove(i);
+ return true;
+ }
+ }
return false;
}
}
diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlCreateTable_showColumns_repository_test.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlCreateTable_showColumns_repository_test.java
index d2cbb99f8b..565c14b7ef 100644
--- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlCreateTable_showColumns_repository_test.java
+++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlCreateTable_showColumns_repository_test.java
@@ -654,5 +654,28 @@ public class MySqlCreateTable_showColumns_repository_test extends MysqlTest {
") ENGINE = InnoDB AUTO_INCREMENT = 1769503 CHARSET = utf8mb4 COMMENT = '10000000'"
, repository.console("show create table test1"));
+
+ assertEquals("+--------------+--------------+------+-----+---------------------+-----------------------------+\n" +
+ "| Field | Type | Null | Key | Default | Extra |\n" +
+ "+--------------+--------------+------+-----+---------------------+-----------------------------+\n" +
+ "| c_decimal_1 | INT(11) | YES | | NULL | |\n" +
+ "| id | bigint(20) | YES | | NULL | auto_increment |\n" +
+ "| c_char | char(32) | NO | | NULL | |\n" +
+ "| c_smallint | smallint(6) | NO | | 0 | |\n" +
+ "| c_mediumint | mediumint(9) | NO | | NULL | |\n" +
+ "| c_int | int(11) | NO | MUL | NULL | |\n" +
+ "| c_bigint | bigint(20) | NO | | NULL | |\n" +
+ "| c_date | date | NO | | 0000-00-00 | |\n" +
+ "| c_datetime | datetime | NO | | 0000-00-00 00:00:00 | |\n" +
+ "| c_timestamp | timestamp | NO | | NULL | on update CURRENT_TIMESTAMP |\n" +
+ "| c_time | time | NO | | NULL | |\n" +
+ "| c_varchar | varchar(10) | NO | | hello | |\n" +
+ "| c_blob | blob | NO | | NULL | |\n" +
+ "| c_text | text | NO | | NULL | |\n" +
+ "| c_mediumtext | mediumtext | NO | | NULL | |\n" +
+ "| c_longblob | longblob | NO | | NULL | |\n" +
+ "+--------------+--------------+------+-----+---------------------+-----------------------------+\n"
+
+ , repository.console("show columns from test1"));
}
}