提交 2954c1ff authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Make implementation, description, and examples for ALTER TABLE DROP COLUMN consistent

上级 f43b0476
......@@ -373,13 +373,14 @@ ALTER TABLE TEST ALTER COLUMN NAME SET INVISIBLE;
"Commands (DDL)","ALTER TABLE DROP COLUMN","
ALTER TABLE [ IF EXISTS ] tableName DROP COLUMN [ IF EXISTS ]
( columnName [,...] )
columnName [,...] | ( columnName [,...] )
","
Removes column(s) from a table.
This command commits an open transaction in this connection.
","
ALTER TABLE TEST DROP COLUMN NAME
ALTER TABLE TEST DROP COLUMN NAME1, NAME2
ALTER TABLE TEST DROP COLUMN (NAME1, NAME2)
"
"Commands (DDL)","ALTER TABLE DROP CONSTRAINT","
......
......@@ -6103,28 +6103,28 @@ public class Parser {
} else {
readIf("COLUMN");
boolean ifExists = readIfExists(false);
AlterTableAlterColumn command = new AlterTableAlterColumn(
session, schema);
command.setType(CommandInterface.ALTER_TABLE_DROP_COLUMN);
ArrayList<Column> columnsToRemove = New.arrayList();
Table table = tableIfTableExists(schema, tableName, ifTableExists);
// For Oracle compatibility - open bracket required
boolean openingBracketDetected = readIf("(");
do {
String columnName = readColumnIdentifier();
if (table == null) {
return new NoOperation(session);
}
if (ifExists && !table.doesColumnExist(columnName)) {
return new NoOperation(session);
if (table != null) {
if (!ifExists || table.doesColumnExist(columnName)) {
Column column = table.getColumn(columnName);
columnsToRemove.add(column);
}
}
Column column = table.getColumn(columnName);
columnsToRemove.add(column);
} while (readIf(","));
if (openingBracketDetected) {
// For Oracle compatibility - close bracket
read(")");
}
if (table == null || columnsToRemove.isEmpty()) {
return new NoOperation(session);
}
AlterTableAlterColumn command = new AlterTableAlterColumn(session, schema);
command.setType(CommandInterface.ALTER_TABLE_DROP_COLUMN);
command.setTableName(tableName);
command.setIfTableExists(ifTableExists);
command.setColumnsToRemove(columnsToRemove);
......
......@@ -11,3 +11,70 @@ ALTER TABLE TEST DROP COLUMN B;
DROP TABLE TEST;
> ok
ALTER TABLE IF EXISTS TEST DROP COLUMN A;
> ok
ALTER TABLE TEST DROP COLUMN A;
> exception
CREATE TABLE TEST(A INT, B INT, C INT, D INT, E INT, F INT, G INT, H INT, I INT, J INT);
> ok
ALTER TABLE TEST DROP COLUMN IF EXISTS J;
> ok
ALTER TABLE TEST DROP COLUMN J;
> exception
ALTER TABLE TEST DROP COLUMN B;
> ok
ALTER TABLE TEST DROP COLUMN IF EXISTS C;
> ok
SELECT * FROM TEST;
> A D E F G H I
> - - - - - - -
> rows: 0
ALTER TABLE TEST DROP COLUMN B, D;
> exception
ALTER TABLE TEST DROP COLUMN IF EXISTS B, D;
> ok
SELECT * FROM TEST;
> A E F G H I
> - - - - - -
> rows: 0
ALTER TABLE TEST DROP COLUMN E, F;
> ok
SELECT * FROM TEST;
> A G H I
> - - - -
> rows: 0
ALTER TABLE TEST DROP COLUMN (B, H);
> exception
ALTER TABLE TEST DROP COLUMN IF EXISTS (B, H);
> ok
SELECT * FROM TEST;
> A G I
> - - -
> rows: 0
ALTER TABLE TEST DROP COLUMN (G, I);
> ok
SELECT * FROM TEST;
> A
> -
> rows: 0
DROP TABLE TEST;
> ok
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论