Skip to content

Commit

Permalink
Bug#31331454: ALTER TABLE WITH AUTO_INCREMENT AND DEFAULT EXPRESSION …
Browse files Browse the repository at this point in the history
…SHOULD BE REJECTED

Fix for Bug#30331053: CREATE TABLE WITH AUTO_INCREMENT AND DEFAULT EXPRESSION...
did not take ALTER TABLE ... SET DEFAULT into account. Hence, we need to add
a check to be done during ALTER TABLE.

Change-Id: I6be6af529d1a2767a927296b128e5f84605a2974
  • Loading branch information
ssorumgard committed May 27, 2020
1 parent 743a061 commit 56c9683
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 1 deletion.
11 changes: 11 additions & 0 deletions mysql-test/r/default_as_expr.result
Original file line number Diff line number Diff line change
Expand Up @@ -1089,6 +1089,17 @@ DROP TABLE pk_t1;
CREATE TABLE t2 (a INT AUTO_INCREMENT DEFAULT(0));
ERROR 42000: Invalid default value for 'a'
#
# Bug#31331454: ALTER TABLE WITH AUTO_INCREMENT AND DEFAULT EXPRESSION
# SHOULD BE REJECTED
#
CREATE TABLE t1 (i INT);
ALTER TABLE t1 MODIFY COLUMN i INT AUTO_INCREMENT PRIMARY KEY DEFAULT(GROUPING(r));
ERROR 42000: Invalid default value for 'i'
ALTER TABLE t1 MODIFY COLUMN i INT AUTO_INCREMENT PRIMARY KEY;
ALTER TABLE t1 ALTER COLUMN i SET DEFAULT(GROUPING(r));
ERROR 42000: Invalid default value for 'i'
DROP TABLE t1;
#
# Bug#30302907 "ADDITION OF COLUMNS WITH GENERATED DEFAULTS IS
# BROKEN IN ALTER TABLE COPY".
#
Expand Down
14 changes: 13 additions & 1 deletion mysql-test/t/default_as_expr.test
Original file line number Diff line number Diff line change
Expand Up @@ -970,6 +970,18 @@ DROP TABLE pk_t1;
--error ER_INVALID_DEFAULT
CREATE TABLE t2 (a INT AUTO_INCREMENT DEFAULT(0));

--echo #
--echo # Bug#31331454: ALTER TABLE WITH AUTO_INCREMENT AND DEFAULT EXPRESSION
--echo # SHOULD BE REJECTED
--echo #
CREATE TABLE t1 (i INT);
--error ER_INVALID_DEFAULT
ALTER TABLE t1 MODIFY COLUMN i INT AUTO_INCREMENT PRIMARY KEY DEFAULT(GROUPING(r));
ALTER TABLE t1 MODIFY COLUMN i INT AUTO_INCREMENT PRIMARY KEY;
--error ER_INVALID_DEFAULT
ALTER TABLE t1 ALTER COLUMN i SET DEFAULT(GROUPING(r));
DROP TABLE t1;

--echo #
--echo # Bug#30302907 "ADDITION OF COLUMNS WITH GENERATED DEFAULTS IS
--echo # BROKEN IN ALTER TABLE COPY".
Expand Down Expand Up @@ -1071,4 +1083,4 @@ DROP TABLE t1;

CREATE TABLE t2(i INT, j DATETIME DEFAULT(0) );
ALTER TABLE t2 DROP COLUMN i ;
DROP TABLE t2;
DROP TABLE t2;
11 changes: 11 additions & 0 deletions sql/sql_table.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13825,6 +13825,17 @@ static bool alter_column_name_or_default(
Field::GENERATED_FROM_EXPRESSION)) == 0);
def->auto_flags &= ~Field::DEFAULT_NOW;
}
/*
Columns can't have AUTO_INCREMENT and DEFAULT/ON UPDATE
CURRENT_TIMESTAMP/ default from expression the same time.
*/
if ((def->auto_flags & Field::NEXT_NUMBER) != 0 &&
((def->auto_flags & (Field::DEFAULT_NOW | Field::ON_UPDATE_NOW)) !=
0 ||
def->m_default_val_expr != nullptr)) {
my_error(ER_INVALID_DEFAULT, MYF(0), def->field_name);
return true;
}
} break;

case Alter_column::Type::DROP_DEFAULT: {
Expand Down

0 comments on commit 56c9683

Please sign in to comment.