提交 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
| { RESTART WITH long }
| { SELECTIVITY int }
| { SET DEFAULT expression }
| { DROP DEFAULT }
| { SET ON UPDATE expression }
| { SET NULL }
| { SET NOT NULL }
| { SET { VISIBLE | INVISIBLE } }
| { DROP { DEFAULT | ON UPDATE } } }
| { DROP ON UPDATE } }
","
Changes the data type of a column, rename a column,
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
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 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
SET INVISIBLE makes the column hidden, i.e. it will not appear in SELECT * results.
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.
This command commits an open transaction in this connection.
......
......@@ -68,7 +68,8 @@ public interface CommandInterface {
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;
......
......@@ -7247,10 +7247,8 @@ public class Parser {
command.setNewColumnName(newName);
return command;
} else if (readIf("DROP")) {
// PostgreSQL compatibility
if (readIf("DEFAULT")) {
AlterTableAlterColumn command = new AlterTableAlterColumn(
session, schema);
AlterTableAlterColumn command = new AlterTableAlterColumn(session, schema);
command.setTableName(tableName);
command.setIfTableExists(ifTableExists);
command.setOldColumn(column);
......
......@@ -152,9 +152,9 @@ public class TestScript extends TestDb {
"uuid", "varchar", "varchar-ignorecase" }) {
testScript("datatypes/" + s + ".sql");
}
for (String s : new String[] { "alterTableAdd", "alterTableDropColumn", "alterTableRename",
"createAlias", "createSequence", "createSynonym", "createTable", "createTrigger", "createView",
"dropDomain", "dropIndex", "dropSchema", "truncateTable" }) {
for (String s : new String[] { "alterTableAdd", "alterTableAlterColumn", "alterTableDropColumn",
"alterTableRename", "createAlias", "createSequence", "createSynonym", "createTable", "createTrigger",
"createView", "dropDomain", "dropIndex", "dropSchema", "truncateTable" }) {
testScript("ddl/" + s + ".sql");
}
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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论