提交 6c6fc7eb authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

ALTER TABLE ALTER COLUMN DROP DEFAULT is a part of standard

上级 a7c139bd
...@@ -355,11 +355,12 @@ ALTER TABLE [ IF EXISTS ] tableName ALTER COLUMN columnName ...@@ -355,11 +355,12 @@ ALTER TABLE [ IF EXISTS ] tableName ALTER COLUMN columnName
| { RESTART WITH long } | { RESTART WITH long }
| { SELECTIVITY int } | { SELECTIVITY int }
| { SET DEFAULT expression } | { SET DEFAULT expression }
| { DROP DEFAULT }
| { SET ON UPDATE expression } | { SET ON UPDATE expression }
| { SET NULL } | { SET NULL }
| { SET NOT NULL } | { SET NOT NULL }
| { SET { VISIBLE | INVISIBLE } } | { SET { VISIBLE | INVISIBLE } }
| { DROP { DEFAULT | ON UPDATE } } } | { DROP ON UPDATE } }
"," ","
Changes the data type of a column, rename a column, Changes the data type of a column, rename a column,
change the identity value, or change the selectivity. change the identity value, or change the selectivity.
...@@ -377,6 +378,8 @@ Selectivity 100 means values are unique, 10 means every distinct value appears 1 ...@@ -377,6 +378,8 @@ Selectivity 100 means values are unique, 10 means every distinct value appears 1
SET DEFAULT changes the default value of a column. SET DEFAULT changes the default value of a column.
DROP DEFAULT removes the default value of a column.
SET ON UPDATE changes the value that is set on update if value for this column is not specified in update statement. SET ON UPDATE changes the value that is set on update if value for this column is not specified in update statement.
SET NULL sets a column to allow NULL. The row may not be part of a primary key. SET NULL sets a column to allow NULL. The row may not be part of a primary key.
...@@ -387,8 +390,6 @@ SET NOT NULL sets a column to not allow NULL. Rows may not contains NULL in this ...@@ -387,8 +390,6 @@ SET NOT NULL sets a column to not allow NULL. Rows may not contains NULL in this
SET INVISIBLE makes the column hidden, i.e. it will not appear in SELECT * results. SET INVISIBLE makes the column hidden, i.e. it will not appear in SELECT * results.
SET VISIBLE has the reverse effect. SET VISIBLE has the reverse effect.
DROP DEFAULT removes the default value of a column.
DROP ON UPDATE removes the value that is set on update of a column. DROP ON UPDATE removes the value that is set on update of a column.
This command commits an open transaction in this connection. This command commits an open transaction in this connection.
......
...@@ -68,7 +68,8 @@ public interface CommandInterface { ...@@ -68,7 +68,8 @@ public interface CommandInterface {
int ALTER_TABLE_ALTER_COLUMN_NULL = 9; int ALTER_TABLE_ALTER_COLUMN_NULL = 9;
/** /**
* The type of a ALTER TABLE ALTER COLUMN SET DEFAULT statement. * The type of a ALTER TABLE ALTER COLUMN SET DEFAULT and ALTER TABLE ALTER
* COLUMN DROP DEFAULT statements.
*/ */
int ALTER_TABLE_ALTER_COLUMN_DEFAULT = 10; int ALTER_TABLE_ALTER_COLUMN_DEFAULT = 10;
......
...@@ -7247,10 +7247,8 @@ public class Parser { ...@@ -7247,10 +7247,8 @@ public class Parser {
command.setNewColumnName(newName); command.setNewColumnName(newName);
return command; return command;
} else if (readIf("DROP")) { } else if (readIf("DROP")) {
// PostgreSQL compatibility
if (readIf("DEFAULT")) { if (readIf("DEFAULT")) {
AlterTableAlterColumn command = new AlterTableAlterColumn( AlterTableAlterColumn command = new AlterTableAlterColumn(session, schema);
session, schema);
command.setTableName(tableName); command.setTableName(tableName);
command.setIfTableExists(ifTableExists); command.setIfTableExists(ifTableExists);
command.setOldColumn(column); command.setOldColumn(column);
......
...@@ -152,9 +152,9 @@ public class TestScript extends TestDb { ...@@ -152,9 +152,9 @@ public class TestScript extends TestDb {
"uuid", "varchar", "varchar-ignorecase" }) { "uuid", "varchar", "varchar-ignorecase" }) {
testScript("datatypes/" + s + ".sql"); testScript("datatypes/" + s + ".sql");
} }
for (String s : new String[] { "alterTableAdd", "alterTableDropColumn", "alterTableRename", for (String s : new String[] { "alterTableAdd", "alterTableAlterColumn", "alterTableDropColumn",
"createAlias", "createSequence", "createSynonym", "createTable", "createTrigger", "createView", "alterTableRename", "createAlias", "createSequence", "createSynonym", "createTable", "createTrigger",
"dropDomain", "dropIndex", "dropSchema", "truncateTable" }) { "createView", "dropDomain", "dropIndex", "dropSchema", "truncateTable" }) {
testScript("ddl/" + s + ".sql"); testScript("ddl/" + s + ".sql");
} }
for (String s : new String[] { "delete", "error_reporting", "insert", "insertIgnore", "merge", "mergeUsing", for (String s : new String[] { "delete", "error_reporting", "insert", "insertIgnore", "merge", "mergeUsing",
......
-- Copyright 2004-2019 H2 Group. Multiple-Licensed under the MPL 2.0,
-- and the EPL 1.0 (http://h2database.com/html/license.html).
-- Initial Developer: H2 Group
--
CREATE TABLE TEST(T INT);
> ok
SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'T';
>> INT
-- SET DEFAULT
ALTER TABLE TEST ALTER COLUMN T SET DEFAULT 1;
> ok
SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'T';
>> INT DEFAULT 1
-- DROP DEFAULT
ALTER TABLE TEST ALTER COLUMN T DROP DEFAULT;
> ok
SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'T';
>> INT
DROP TABLE TEST;
> ok
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论