1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
# ==== Purpose ====
#
# Test errors/warnings for Unsafe statement generated inside DEFAULT expression
#
# ==== Implementation ====
#
# CREATE TABLE with DEFAULT expression defined by a non-deterministic function
#
# ==== References ====
# WL#9418 Permit default value to be a function or expression, support for LOBs
#
--source include/have_binlog_format_statement.inc
--source include/master-slave.inc
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
--echo # Create tables on master
CREATE TABLE v1 (i VARCHAR(36) DEFAULT (RAND()), j VARCHAR(36) DEFAULT (PI()));
--echo # No warning expected as both columns are defined
INSERT INTO v1(i, j) VALUES ("a","b");
--echo # No warning expected as both columns are defined
INSERT INTO v1 VALUES ("a","b");
--echo # No warning expected as j is deterministic
INSERT INTO v1(i) VALUES ("a");
--echo # No warning expected as j is deterministic
INSERT INTO v1(i,j) VALUES ("a",DEFAULT);
--echo # Warning expected as i is non-deterministic
INSERT INTO v1(j) VALUES ("b");
--echo # Warning expected as i is non-deterministic
INSERT INTO v1(i,j) VALUES (DEFAULT,"b");
--echo # Warning expected as i is non-deterministic
INSERT INTO v1() VALUES();
DROP TABLE v1;
CREATE TABLE t1(
id INTEGER NOT NULL AUTO_INCREMENT,
token VARCHAR(255) DEFAULT (UUID()),
PRIMARY KEY (id),
KEY token (token)
);
--echo # Warning expected as token is non-deterministic
INSERT INTO t1 VALUES (3, "abc"), (DEFAULT, DEFAULT);
--echo # No warning expected as token is defined
INSERT INTO t1 VALUES (1, "abc"), (2, "def");
DROP TABLE t1;
CREATE TABLE t2 (i VARCHAR(36) DEFAULT (UUID()));
--echo # Regular insert, no warnings
INSERT INTO t2(i) VALUES('MySQL');
--echo # Making sure that warnings are shown
INSERT INTO t2(i) VALUES(DEFAULT);
INSERT INTO t2() VALUES();
# random values
SELECT COUNT(*) from t2;
create table t1 ( i double DEFAULT ( RAND() ) ) ;
insert into t1 values (1),(2) ;
#expect warning here
update t1 set i = DEFAULT where i = 2 ;
drop table t1;
SET @start_enforce_gtid_consistency = @@GLOBAL.ENFORCE_GTID_CONSISTENCY;
SET GLOBAL ENFORCE_GTID_CONSISTENCY = WARN;
ALTER TABLE t2 ADD COLUMN c char(36) DEFAULT (PI());
SET GLOBAL ENFORCE_GTID_CONSISTENCY = @start_enforce_gtid_consistency;
--source include/sync_slave_sql_with_master.inc
--echo [ slave connection ]
SHOW TABLES;
SHOW CREATE TABLE t2 ;
SELECT COUNT(*) from t2;
--echo # clean up
--source include/rpl_connection_master.inc
DROP TABLE t2;
--source include/rpl_end.inc
|