mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-25971 Instant ADD COLUMN fails to issue truncation warnings
A table rebuild that would truncate the default value of a DATE column is expected to issue data truncation warnings. But, these warnings are not being issued if the ADD COLUMN is being executed with ALGORITHM=INSTANT. InnoDB sets the warning of the field while assigning the default value of the field during check_if_supported_inplace_alter().
This commit is contained in:
@ -1049,13 +1049,12 @@ a
|
|||||||
10
|
10
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
CREATE TABLE t1 (a INT NOT NULL DEFAULT 0) ENGINE=InnoDB;
|
CREATE TABLE t1 (a INT NOT NULL DEFAULT 0) ENGINE=InnoDB;
|
||||||
SET @save_allowed = @@GLOBAL.innodb_instant_alter_column_allowed;
|
INSERT INTO t1 VALUES (10);
|
||||||
SET GLOBAL innodb_instant_alter_column_allowed=never;
|
ALTER TABLE t1 ADD b DATE NOT NULL DEFAULT if(unix_timestamp()>1,TIMESTAMP'2001-01-01 10:20:30',0), algorithm=copy;
|
||||||
iNSERT INTO t1 VALUES (10);
|
affected rows: 1
|
||||||
ALTER TABLE t1 ADD b DATE NOT NULL DEFAULT if(unix_timestamp()>1,TIMESTAMP'2001-01-01 10:20:30',0);
|
info: Records: 1 Duplicates: 0 Warnings: 1
|
||||||
affected rows: 0
|
Warnings:
|
||||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
Note 1265 Data truncated for column 'b' at row 1
|
||||||
SET GLOBAL innodb_instant_alter_column_allowed=@save_allowed;
|
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
a b
|
a b
|
||||||
10 2001-01-01
|
10 2001-01-01
|
||||||
@ -1064,7 +1063,9 @@ CREATE TABLE t1 (a INT NOT NULL DEFAULT 0) ENGINE=InnoDB;
|
|||||||
iNSERT INTO t1 VALUES (10);
|
iNSERT INTO t1 VALUES (10);
|
||||||
ALTER TABLE t1 ADD b TIME NOT NULL DEFAULT if(unix_timestamp()>1,TIMESTAMP'2001-01-01 10:20:30',0);
|
ALTER TABLE t1 ADD b TIME NOT NULL DEFAULT if(unix_timestamp()>1,TIMESTAMP'2001-01-01 10:20:30',0);
|
||||||
affected rows: 0
|
affected rows: 0
|
||||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
info: Records: 0 Duplicates: 0 Warnings: 1
|
||||||
|
Warnings:
|
||||||
|
Note 1265 Data truncated for column 'b' at row 1
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
a b
|
a b
|
||||||
10 10:20:30
|
10 10:20:30
|
||||||
|
@ -308,10 +308,14 @@ id c2 c3 c4 c5 c6
|
|||||||
affected rows: 3
|
affected rows: 3
|
||||||
ALTER TABLE t3 ADD COLUMN c7 TIME NOT NULL DEFAULT current_timestamp();
|
ALTER TABLE t3 ADD COLUMN c7 TIME NOT NULL DEFAULT current_timestamp();
|
||||||
affected rows: 0
|
affected rows: 0
|
||||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
info: Records: 0 Duplicates: 0 Warnings: 1
|
||||||
|
Warnings:
|
||||||
|
Note 1265 Data truncated for column 'c7' at row 1
|
||||||
ALTER TABLE t3 ADD COLUMN c8 DATE NOT NULL DEFAULT current_timestamp();
|
ALTER TABLE t3 ADD COLUMN c8 DATE NOT NULL DEFAULT current_timestamp();
|
||||||
affected rows: 0
|
affected rows: 0
|
||||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
info: Records: 0 Duplicates: 0 Warnings: 1
|
||||||
|
Warnings:
|
||||||
|
Note 1265 Data truncated for column 'c8' at row 1
|
||||||
SELECT id, c2, ST_AsText(c3) c3, c4, c5, c6, c7, c8 FROM t3;
|
SELECT id, c2, ST_AsText(c3) c3, c4, c5, c6, c7, c8 FROM t3;
|
||||||
id c2 c3 c4 c5 c6 c7 c8
|
id c2 c3 c4 c5 c6 c7 c8
|
||||||
1 1 POLYGON((1 1,2 2,3 3,1 1)) 1970-01-01 03:00:42 1970-01-01 03:00:42 NULL 03:00:42 1970-01-01
|
1 1 POLYGON((1 1,2 2,3 3,1 1)) 1970-01-01 03:00:42 1970-01-01 03:00:42 NULL 03:00:42 1970-01-01
|
||||||
@ -788,10 +792,14 @@ id c2 c3 c4 c5 c6
|
|||||||
affected rows: 3
|
affected rows: 3
|
||||||
ALTER TABLE t3 ADD COLUMN c7 TIME NOT NULL DEFAULT current_timestamp();
|
ALTER TABLE t3 ADD COLUMN c7 TIME NOT NULL DEFAULT current_timestamp();
|
||||||
affected rows: 0
|
affected rows: 0
|
||||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
info: Records: 0 Duplicates: 0 Warnings: 1
|
||||||
|
Warnings:
|
||||||
|
Note 1265 Data truncated for column 'c7' at row 1
|
||||||
ALTER TABLE t3 ADD COLUMN c8 DATE NOT NULL DEFAULT current_timestamp();
|
ALTER TABLE t3 ADD COLUMN c8 DATE NOT NULL DEFAULT current_timestamp();
|
||||||
affected rows: 0
|
affected rows: 0
|
||||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
info: Records: 0 Duplicates: 0 Warnings: 1
|
||||||
|
Warnings:
|
||||||
|
Note 1265 Data truncated for column 'c8' at row 1
|
||||||
SELECT id, c2, ST_AsText(c3) c3, c4, c5, c6, c7, c8 FROM t3;
|
SELECT id, c2, ST_AsText(c3) c3, c4, c5, c6, c7, c8 FROM t3;
|
||||||
id c2 c3 c4 c5 c6 c7 c8
|
id c2 c3 c4 c5 c6 c7 c8
|
||||||
1 1 POLYGON((1 1,2 2,3 3,1 1)) 1970-01-01 03:00:42 1970-01-01 03:00:42 NULL 03:00:42 1970-01-01
|
1 1 POLYGON((1 1,2 2,3 3,1 1)) 1970-01-01 03:00:42 1970-01-01 03:00:42 NULL 03:00:42 1970-01-01
|
||||||
@ -1268,10 +1276,14 @@ id c2 c3 c4 c5 c6
|
|||||||
affected rows: 3
|
affected rows: 3
|
||||||
ALTER TABLE t3 ADD COLUMN c7 TIME NOT NULL DEFAULT current_timestamp();
|
ALTER TABLE t3 ADD COLUMN c7 TIME NOT NULL DEFAULT current_timestamp();
|
||||||
affected rows: 0
|
affected rows: 0
|
||||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
info: Records: 0 Duplicates: 0 Warnings: 1
|
||||||
|
Warnings:
|
||||||
|
Note 1265 Data truncated for column 'c7' at row 1
|
||||||
ALTER TABLE t3 ADD COLUMN c8 DATE NOT NULL DEFAULT current_timestamp();
|
ALTER TABLE t3 ADD COLUMN c8 DATE NOT NULL DEFAULT current_timestamp();
|
||||||
affected rows: 0
|
affected rows: 0
|
||||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
info: Records: 0 Duplicates: 0 Warnings: 1
|
||||||
|
Warnings:
|
||||||
|
Note 1265 Data truncated for column 'c8' at row 1
|
||||||
SELECT id, c2, ST_AsText(c3) c3, c4, c5, c6, c7, c8 FROM t3;
|
SELECT id, c2, ST_AsText(c3) c3, c4, c5, c6, c7, c8 FROM t3;
|
||||||
id c2 c3 c4 c5 c6 c7 c8
|
id c2 c3 c4 c5 c6 c7 c8
|
||||||
1 1 POLYGON((1 1,2 2,3 3,1 1)) 1970-01-01 03:00:42 1970-01-01 03:00:42 NULL 03:00:42 1970-01-01
|
1 1 POLYGON((1 1,2 2,3 3,1 1)) 1970-01-01 03:00:42 1970-01-01 03:00:42 NULL 03:00:42 1970-01-01
|
||||||
|
@ -652,13 +652,10 @@ DROP TABLE t1;
|
|||||||
|
|
||||||
# DATETIME-to-DATE truncation is OK
|
# DATETIME-to-DATE truncation is OK
|
||||||
CREATE TABLE t1 (a INT NOT NULL DEFAULT 0) ENGINE=InnoDB;
|
CREATE TABLE t1 (a INT NOT NULL DEFAULT 0) ENGINE=InnoDB;
|
||||||
SET @save_allowed = @@GLOBAL.innodb_instant_alter_column_allowed;
|
INSERT INTO t1 VALUES (10);
|
||||||
SET GLOBAL innodb_instant_alter_column_allowed=never;
|
|
||||||
iNSERT INTO t1 VALUES (10);
|
|
||||||
--enable_info
|
--enable_info
|
||||||
ALTER TABLE t1 ADD b DATE NOT NULL DEFAULT if(unix_timestamp()>1,TIMESTAMP'2001-01-01 10:20:30',0);
|
ALTER TABLE t1 ADD b DATE NOT NULL DEFAULT if(unix_timestamp()>1,TIMESTAMP'2001-01-01 10:20:30',0), algorithm=copy;
|
||||||
--disable_info
|
--disable_info
|
||||||
SET GLOBAL innodb_instant_alter_column_allowed=@save_allowed;
|
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
@ -10015,9 +10015,12 @@ do_continue:;
|
|||||||
if (alter_info->requested_lock == Alter_info::ALTER_TABLE_LOCK_NONE)
|
if (alter_info->requested_lock == Alter_info::ALTER_TABLE_LOCK_NONE)
|
||||||
ha_alter_info.online= true;
|
ha_alter_info.online= true;
|
||||||
// Ask storage engine whether to use copy or in-place
|
// Ask storage engine whether to use copy or in-place
|
||||||
ha_alter_info.inplace_supported=
|
{
|
||||||
table->file->check_if_supported_inplace_alter(altered_table,
|
Check_level_instant_set check_level_save(thd, CHECK_FIELD_WARN);
|
||||||
&ha_alter_info);
|
ha_alter_info.inplace_supported=
|
||||||
|
table->file->check_if_supported_inplace_alter(altered_table,
|
||||||
|
&ha_alter_info);
|
||||||
|
}
|
||||||
|
|
||||||
if (alter_info->supports_algorithm(thd, &ha_alter_info) ||
|
if (alter_info->supports_algorithm(thd, &ha_alter_info) ||
|
||||||
alter_info->supports_lock(thd, &ha_alter_info))
|
alter_info->supports_lock(thd, &ha_alter_info))
|
||||||
|
Reference in New Issue
Block a user