提交 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; ...@@ -373,13 +373,14 @@ ALTER TABLE TEST ALTER COLUMN NAME SET INVISIBLE;
"Commands (DDL)","ALTER TABLE DROP COLUMN"," "Commands (DDL)","ALTER TABLE DROP COLUMN","
ALTER TABLE [ IF EXISTS ] tableName DROP COLUMN [ IF EXISTS ] ALTER TABLE [ IF EXISTS ] tableName DROP COLUMN [ IF EXISTS ]
( columnName [,...] ) columnName [,...] | ( columnName [,...] )
"," ","
Removes column(s) from a table. Removes column(s) from a table.
This command commits an open transaction in this connection. This command commits an open transaction in this connection.
"," ","
ALTER TABLE TEST DROP COLUMN NAME ALTER TABLE TEST DROP COLUMN NAME
ALTER TABLE TEST DROP COLUMN NAME1, NAME2 ALTER TABLE TEST DROP COLUMN NAME1, NAME2
ALTER TABLE TEST DROP COLUMN (NAME1, NAME2)
" "
"Commands (DDL)","ALTER TABLE DROP CONSTRAINT"," "Commands (DDL)","ALTER TABLE DROP CONSTRAINT","
......
...@@ -6103,28 +6103,28 @@ public class Parser { ...@@ -6103,28 +6103,28 @@ public class Parser {
} else { } else {
readIf("COLUMN"); readIf("COLUMN");
boolean ifExists = readIfExists(false); boolean ifExists = readIfExists(false);
AlterTableAlterColumn command = new AlterTableAlterColumn(
session, schema);
command.setType(CommandInterface.ALTER_TABLE_DROP_COLUMN);
ArrayList<Column> columnsToRemove = New.arrayList(); ArrayList<Column> columnsToRemove = New.arrayList();
Table table = tableIfTableExists(schema, tableName, ifTableExists); Table table = tableIfTableExists(schema, tableName, ifTableExists);
// For Oracle compatibility - open bracket required // For Oracle compatibility - open bracket required
boolean openingBracketDetected = readIf("("); boolean openingBracketDetected = readIf("(");
do { do {
String columnName = readColumnIdentifier(); String columnName = readColumnIdentifier();
if (table == null) { if (table != null) {
return new NoOperation(session); if (!ifExists || table.doesColumnExist(columnName)) {
} Column column = table.getColumn(columnName);
if (ifExists && !table.doesColumnExist(columnName)) { columnsToRemove.add(column);
return new NoOperation(session); }
} }
Column column = table.getColumn(columnName);
columnsToRemove.add(column);
} while (readIf(",")); } while (readIf(","));
if (openingBracketDetected) { if (openingBracketDetected) {
// For Oracle compatibility - close bracket // For Oracle compatibility - close bracket
read(")"); 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.setTableName(tableName);
command.setIfTableExists(ifTableExists); command.setIfTableExists(ifTableExists);
command.setColumnsToRemove(columnsToRemove); command.setColumnsToRemove(columnsToRemove);
......
...@@ -11,3 +11,70 @@ ALTER TABLE TEST DROP COLUMN B; ...@@ -11,3 +11,70 @@ ALTER TABLE TEST DROP COLUMN B;
DROP TABLE TEST; DROP TABLE TEST;
> ok > 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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论