--echo # --echo # CREATE TABLE - column with func as DEFAULT then test DROP column. --echo # CREATE TABLE t1 (i int, b JSON DEFAULT (JSON_OBJECT("key", i))); INSERT INTO t1(i) VALUES (1); INSERT INTO t1 SET i = 10; INSERT INTO t1(i, b) VALUES (2, DEFAULT); INSERT INTO t1 SET i = 20, b = DEFAULT; INSERT INTO t1(i, b) VALUES (3, JSON_OBJECT("key", 3)); INSERT INTO t1 SET i = 30, b = JSON_OBJECT("key", 30); SELECT * FROM t1; ALTER TABLE t1 DROP COLUMN b; DROP TABLE t1; --echo # --echo # CREATE TABLE - column with INDEX and func as DEFAULT --echo # CREATE TABLE t1 (i int, b char(255) DEFAULT (md5(i)), INDEX (b(10))); INSERT INTO t1(i) VALUES (1); INSERT INTO t1(i, b) VALUES (2, DEFAULT); INSERT INTO t1(i, b) VALUES (3, "some string"); SELECT * FROM t1; DROP TABLE t1; --echo # --echo # Test ALTER table ADD column with DEFAULT --echo # CREATE TABLE t1 (i int); INSERT INTO t1(i) VALUES (1),(2); ALTER TABLE t1 ADD COLUMN b JSON DEFAULT (JSON_OBJECT("key",i)); INSERT INTO t1(i) VALUES (3); INSERT INTO t1(i, b) VALUES (4, DEFAULT); INSERT INTO t1(i, b) VALUES (5, JSON_OBJECT("key", 5)); SELECT * FROM t1; DROP TABLE t1; --echo # --echo # Test ALTER table ADD column with DEFAULT then ALTER TABLE SET DEFAULT func --echo # CREATE TABLE t1 (i int); INSERT INTO t1(i) VALUES (1),(2); ALTER TABLE t1 ADD COLUMN b JSON; ALTER TABLE t1 ALTER COLUMN b SET DEFAULT (JSON_OBJECT("key",i)); INSERT INTO t1(i) VALUES (3); INSERT INTO t1(i, b) VALUES (4, DEFAULT); INSERT INTO t1(i, b) VALUES (5, JSON_OBJECT("key", 5)); SELECT * FROM t1; DROP TABLE t1; --echo # --echo # Test ALTER table CHANGE column --echo # CREATE TABLE t1 (i int); INSERT INTO t1(i) VALUES (1),(2); ALTER TABLE t1 ADD COLUMN b JSON DEFAULT (JSON_ARRAY()); INSERT INTO t1(i) VALUES (4); ALTER TABLE t1 CHANGE COLUMN b new_b JSON DEFAULT (JSON_OBJECT("key",i)); INSERT INTO t1(i) VALUES (5); INSERT INTO t1(i, new_b) VALUES (6, DEFAULT); INSERT INTO t1(i, new_b) VALUES (7, JSON_OBJECT("key", 7)); SELECT * FROM t1; DROP TABLE t1; CREATE TABLE t1 (i int, b int DEFAULT (123 * 1)); --error ER_DEFAULT_VAL_GENERATED_NON_PRIOR ALTER TABLE t1 CHANGE COLUMN i new_i JSON DEFAULT (JSON_ARRAY(b)); DROP TABLE t1; --echo # --echo # Test ALTER table MODIFY column --echo # CREATE TABLE t1 (i int); INSERT INTO t1(i) VALUES (1),(2); ALTER TABLE t1 ADD COLUMN b JSON DEFAULT (JSON_ARRAY()); INSERT INTO t1(i) VALUES (4); ALTER TABLE t1 MODIFY COLUMN b JSON DEFAULT (JSON_OBJECT("key",i)) FIRST; INSERT INTO t1(i) VALUES (5); INSERT INTO t1(i, b) VALUES (6, DEFAULT); INSERT INTO t1(i, b) VALUES (7, JSON_OBJECT("key", 7)); SELECT * FROM t1; DROP TABLE t1; CREATE TABLE t1 (i int, b int DEFAULT (123 * 1)); --error ER_DEFAULT_VAL_GENERATED_NON_PRIOR ALTER TABLE t1 MODIFY COLUMN i JSON DEFAULT (JSON_ARRAY(b)) FIRST; DROP TABLE t1; --echo # --echo # Column order with expression or literal as default value --echo # CREATE TABLE t1 (i JSON DEFAULT (JSON_ARRAY(b)), b int DEFAULT 123); DROP TABLE t1; CREATE TABLE t1 (b int DEFAULT 123, i JSON DEFAULT (JSON_ARRAY(b))); DROP TABLE t1; --error ER_DEFAULT_VAL_GENERATED_NON_PRIOR CREATE TABLE t1 (i JSON DEFAULT (JSON_ARRAY(b)), b int DEFAULT (123 * 1)); CREATE TABLE t1 (b int DEFAULT (123 * 1), i JSON DEFAULT (JSON_ARRAY(b))); DROP TABLE t1; --echo # --echo # Test CREATE TABLE with column without default then SET a DEFAULT. --echo # ALSO TEST DROP DEFAULT --echo # CREATE TABLE t1 (i int, b JSON); INSERT INTO t1(i) VALUES (1),(2); ALTER TABLE t1 ALTER COLUMN b SET DEFAULT (JSON_OBJECT("key",i)); INSERT INTO t1(i) VALUES (3); INSERT INTO t1(i, b) VALUES (4, DEFAULT); INSERT INTO t1(i, b) VALUES (5, JSON_OBJECT("key", 5)); ALTER TABLE t1 ALTER COLUMN b DROP DEFAULT; INSERT INTO t1(i, b) VALUES (6, NULL); SELECT * FROM t1; DROP TABLE t1; --echo # --echo # Test func as DEFAULT with auto_increment --echo # --error ER_DEFAULT_VAL_GENERATED_REF_AUTO_INC CREATE TABLE t1 (id int(11) PRIMARY KEY auto_increment, f1 JSON DEFAULT (JSON_OBJECT("key", id))); --echo # --echo # Test with not-allowed function --echo # --error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a varchar(64), b varchar(1024) DEFAULT (load_file(a))); --echo # --echo # Test func as DEFAULT with different order --echo # CREATE TABLE t1 (f1 JSON DEFAULT (JSON_OBJECT("key", id)), id int(11)); INSERT INTO t1(id) VALUES(1), (2), (3); SELECT * FROM t1; DROP TABLE t1; --echo # --echo # Test function set as DEFAULT value which exceeds size --echo # CREATE TABLE t1 (id char(2) DEFAULT (uuid())); --error ER_DATA_TOO_LONG INSERT INTO t1 VALUES (),(),(); DROP TABLE t1; --echo # --echo # Test generated funcs with default value. --echo # -- error ER_WRONG_USAGE CREATE TABLE t3 (a INT PRIMARY KEY, b INT GENERATED ALWAYS AS (-a) VIRTUAL UNIQUE DEFAULT (-1 * 128)); -- error ER_WRONG_USAGE CREATE TABLE t3 (a INT PRIMARY KEY, c INT GENERATED ALWAYS AS (-a) STORED DEFAULT (-1 * 128)); --echo # --echo # Test SHOW CREATE TABLE, DESCRIBE TABLE and CREATE as SELECT --echo # CREATE TABLE t1 (id char(36) DEFAULT (uuid())); INSERT INTO t1 VALUES (),(),(); CREATE TABLE t2 as SELECT * from t1; SHOW CREATE TABLE t2; CREATE TABLE t3 LIKE t1; SHOW CREATE TABLE t3; # select just length as results are different for each run SELECT LENGTH(id) FROM t1; SHOW CREATE TABLE t1; SHOW COLUMNS FROM t1; DESCRIBE t1; DROP TABLE t1; DROP TABLE t2; DROP TABLE t3; --echo # --echo # Create table with DEFAULT() --echo # --error ER_DEFAULT_AS_VAL_GENERATED CREATE TABLE t3 (a INT PRIMARY KEY, d INT DEFAULT (-a + 1), c INT DEFAULT (DEFAULT(d)) ); --echo # --echo # DROP column that it depends on --echo # CREATE TABLE t3 (a INT PRIMARY KEY, d INT DEFAULT (-a + 1), c INT DEFAULT (-d) ); --error ER_DEFAULT_AS_VAL_GENERATED SELECT DEFAULT(d) from t3; --error ER_DEFAULT_AS_VAL_GENERATED SELECT DEFAULT(c) from t3; --error ER_DEPENDENT_BY_DEFAULT_GENERATED_VALUE ALTER TABLE t3 DROP COLUMN d; DROP TABLE t3; --echo # --echo # Test UTF8 --echo # CREATE TABLE `t1` (i varchar(200) DEFAULT (_utf8mb4"\U+1F9DB♀")); SELECT COLUMN_NAME, COLUMN_DEFAULT, DATA_TYPE, EXTRA, GENERATION_EXPRESSION FROM information_schema.columns WHERE table_name= "t1"; INSERT INTO t1 values (),(); SELECT * from t1; DESCRIBE t1; DROP TABLE t1; --echo # --echo # Test with REPLACE INTO .. --echo # CREATE TABLE test ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, data VARCHAR(64) DEFAULT NULL, something VARCHAR(64) NOT NULL DEFAULT (CONCAT ('[', data, ']')), PRIMARY KEY (id) ); REPLACE INTO test VALUES (1, 'Old', DEFAULT); SELECT * FROM test; REPLACE INTO test VALUES (1, 'New', DEFAULT); SELECT * FROM test; DROP TABLE test; --echo # --echo # TINYBLOB tests --echo # CREATE TABLE t(i INT, b TINYBLOB DEFAULT (repeat('b', i))); SHOW CREATE TABLE t; INSERT INTO t values(254, DEFAULT); INSERT INTO t values(255, DEFAULT); -- error ER_DATA_TOO_LONG INSERT INTO t values(256, DEFAULT); SELECT i, length(b) FROM t; DROP TABLE t; CREATE TABLE t(i INT); INSERT INTO t values(254), (255), (256); -- error ER_DATA_TOO_LONG ALTER TABLE t ADD COLUMN b TINYBLOB DEFAULT (repeat('b', i)); SELECT * FROM t; DELETE FROM t where i = 256; ALTER TABLE t ADD COLUMN b TINYBLOB; SELECT i, length(b) FROM t; ALTER TABLE t ALTER COLUMN b SET DEFAULT (repeat('b', i)); SELECT i, length(b) FROM t; INSERT INTO t values(254, DEFAULT); INSERT INTO t values(255, DEFAULT); -- error ER_DATA_TOO_LONG INSERT INTO t values(256, DEFAULT); ALTER TABLE t ALTER COLUMN b DROP DEFAULT; -- error ER_NO_DEFAULT_FOR_FIELD INSERT INTO t(i) values(128); SELECT i, length(b) FROM t; DROP TABLE t; --echo # --echo # MEDIUMBLOB tests --echo # SET GLOBAL max_allowed_packet = 1073741824; CREATE TABLE t(i BIGINT, b MEDIUMBLOB DEFAULT (repeat('b', i))); SHOW CREATE TABLE t; INSERT INTO t values(16777214, DEFAULT); INSERT INTO t values(16777215, DEFAULT); -- error ER_DATA_TOO_LONG INSERT INTO t values(16777216, DEFAULT); SELECT i, length(b) FROM t; DROP TABLE t; CREATE TABLE t(i BIGINT); INSERT INTO t values(16777214), (16777215), (16777216); -- error ER_DATA_TOO_LONG ALTER TABLE t ADD COLUMN b MEDIUMBLOB DEFAULT (repeat('b', i)); SELECT * FROM t; DELETE FROM t where i = 16777216; ALTER TABLE t ADD COLUMN b MEDIUMBLOB; SELECT i, length(b) FROM t; ALTER TABLE t ALTER COLUMN b SET DEFAULT (repeat('b', i)); SELECT i, length(b) FROM t; INSERT INTO t values(16777214, DEFAULT); INSERT INTO t values(16777215, DEFAULT); -- error ER_DATA_TOO_LONG INSERT INTO t values(16777216, DEFAULT); ALTER TABLE t ALTER COLUMN b DROP DEFAULT; -- error ER_NO_DEFAULT_FOR_FIELD INSERT INTO t(i) values(128); SELECT i, length(b) FROM t; DROP TABLE t; SET GLOBAL max_allowed_packet=default; --echo # --echo # tests with BLOB --echo # CREATE TABLE t(i INT, b BLOB DEFAULT (repeat('b', i))); SHOW CREATE TABLE t; INSERT INTO t values(65534, DEFAULT); INSERT INTO t values(65535, DEFAULT); -- error ER_DATA_TOO_LONG INSERT INTO t values(65536, DEFAULT); SELECT i, length(b) FROM t; DROP TABLE t; CREATE TABLE t(i INT); INSERT INTO t values(65534), (65535), (65536); -- error ER_DATA_TOO_LONG ALTER TABLE t ADD COLUMN b BLOB DEFAULT (repeat('b', i)); SELECT * FROM t; DELETE FROM t where i = 65536; ALTER TABLE t ADD COLUMN b BLOB; SELECT i, length(b) FROM t; ALTER TABLE t ALTER COLUMN b SET DEFAULT (repeat('b', i)); SELECT i, length(b) FROM t; INSERT INTO t values(65534, DEFAULT); INSERT INTO t values(65535, DEFAULT); -- error ER_DATA_TOO_LONG INSERT INTO t values(65536, DEFAULT); ALTER TABLE t ALTER COLUMN b DROP DEFAULT; -- error ER_NO_DEFAULT_FOR_FIELD INSERT INTO t(i) values(128); SELECT i, length(b) FROM t; DROP TABLE t; --echo # --echo # MEDIUMBLOB tests --echo # max value for max_allowed_packet is 1073741824 which is < 4294967295 --echo # CREATE TABLE t(i BIGINT, b LONGBLOB DEFAULT (repeat('b', i))); SHOW CREATE TABLE t; -- error ER_WARN_ALLOWED_PACKET_OVERFLOWED INSERT INTO t values(4294967295, DEFAULT); DROP TABLE t; CREATE TABLE t(i INT, b BLOB DEFAULT (repeat('b', i))); INSERT INTO t values(65534, DEFAULT); INSERT INTO t values(65535, DEFAULT); -- error ER_DATA_TOO_LONG INSERT INTO t values(65536, DEFAULT); SELECT i, length(b) FROM t; DROP TABLE t; CREATE TABLE t(i INT); INSERT INTO t values(65534), (65535), (65536); -- error ER_DATA_TOO_LONG ALTER TABLE t ADD COLUMN b BLOB DEFAULT (repeat('b', i)); SELECT * FROM t; DELETE FROM t where i = 65536; ALTER TABLE t ADD COLUMN b BLOB; SELECT i, length(b) FROM t; ALTER TABLE t ALTER COLUMN b SET DEFAULT (repeat('b', i)); SELECT i, length(b) FROM t; INSERT INTO t values(65534, DEFAULT); INSERT INTO t values(65535, DEFAULT); -- error ER_DATA_TOO_LONG INSERT INTO t values(65536, DEFAULT); ALTER TABLE t ALTER COLUMN b DROP DEFAULT; -- error ER_NO_DEFAULT_FOR_FIELD INSERT INTO t(i) values(128); SELECT i, length(b) FROM t; DROP TABLE t; --echo # --echo # Test other functions --echo # CREATE TABLE t(i INT, b VARCHAR(20) DEFAULT (repeat('b', i))); INSERT INTO t values(14, DEFAULT); INSERT INTO t values(16, DEFAULT); SELECT * FROM t; DROP TABLE t; CREATE TABLE t1(a INT PRIMARY KEY, b GEOMETRY NOT NULL DEFAULT (ST_GEOMFROMTEXT('LINESTRING(0 0,9.299720368548e18 0,0 0,0 0)'))); INSERT INTO t1 VALUES(1, DEFAULT); INSERT INTO t1 VALUES(2, DEFAULT); INSERT INTO t1 VALUES(3, (ST_GEOMFROMTEXT('LINESTRING(0 0,9.2234818 0,0 0,0 0)'))); SELECT a, ST_AsText(b) FROM t1; DROP TABLE t1; --echo # --echo # Test with TIMESTAMP with and without ON UPDATE --echo # CREATE TABLE t1 (a INT, b TIMESTAMP DEFAULT (TIMESTAMPADD(MINUTE, 1,'2003-01-02')) ON UPDATE NOW()); SHOW CREATE TABLE t1; INSERT INTO t1(a) VALUES (5); SELECT * FROM t1; SET timestamp= 1038401397; UPDATE t1 SET a = 10 WHERE a = 5; SELECT * FROM t1; DROP TABLE t1; CREATE TABLE t1 (a INT, b TIMESTAMP NOT NULL DEFAULT (TIMESTAMPADD(MINUTE, 1,'2003-01-02'))); SHOW CREATE TABLE t1; insert into t1(a) values (1); DROP TABLE t1; CREATE TABLE t1 (a INT, c TIMESTAMP DEFAULT (TIMESTAMPADD(MINUTE, 5,'2003-01-02'))); SHOW CREATE TABLE t1; INSERT INTO t1(a) VALUES (5),(6); ALTER TABLE t1 ADD COLUMN d TIMESTAMP DEFAULT (TIMESTAMPADD(MINUTE, 10,'2003-01-03')) ON UPDATE CURRENT_TIMESTAMP; SHOW CREATE TABLE t1; SELECT * from t1; UPDATE t1 SET a = 10 WHERE a = 5; SELECT * from t1; ALTER TABLE t1 DROP COLUMN d; ALTER TABLE t1 ADD COLUMN d TIMESTAMP DEFAULT (TIMESTAMPADD(MINUTE, 15,'2003-01-04')); SELECT * from t1; DROP TABLE t1; --echo # --echo # Check default expressions together with Generated Columns --echo # CREATE TABLE t1 (i INT, b char(255) DEFAULT (md5(i))); SHOW COLUMNS FROM t1; INSERT INTO t1(i) VALUES (1); INSERT INTO t1(i, b) VALUES (2, DEFAULT); INSERT INTO t1(i, b) VALUES (3, "some string"); INSERT INTO t1(i, b) VALUES (NULL, DEFAULT); SELECT * FROM t1; DROP TABLE t1; CREATE TABLE t1 (i INT, b char(255) DEFAULT (md5(i)), j INT GENERATED ALWAYS AS (i*2)); SHOW COLUMNS FROM t1; INSERT INTO t1(i) VALUES (1); INSERT INTO t1(i, b) VALUES (2, DEFAULT); INSERT INTO t1(i, b) VALUES (3, "some string"); INSERT INTO t1(i, b) VALUES (NULL, DEFAULT); SELECT * FROM t1; DROP TABLE t1; --echo # --echo # Make sure there's no memory leaking after failed ALTER TABLE. --echo # (coverage for err tag in open_table_from_share) --echo # CREATE TABLE t(a int); ALTER TABLE t ADD COLUMN b int DEFAULT( date_sub(a, INTERVAL A MONTH)); --error ER_INVALID_GROUP_FUNC_USE ALTER TABLE t ADD COLUMN c int DEFAULT (SUM(a)); DROP TABLE t; --echo # Function that are now allowed. --echo # result is not shown as the data is non-deterministic CREATE TABLE t1 (b double DEFAULT (rand())); INSERT INTO t1 VALUES (); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a varchar(30), b VARCHAR(100) DEFAULT (statement_digest(a))); INSERT INTO t1 (a) VALUES ("SELECT 1;"); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a varchar(30), b varchar(100) DEFAULT (statement_digest_text(a))); INSERT INTO t1 (a) VALUES ("SELECT 2;"); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a datetime DEFAULT (curdate())); INSERT INTO t1 VALUES (); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a datetime DEFAULT (current_date())); INSERT INTO t1 VALUES (); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a datetime DEFAULT (current_date)); INSERT INTO t1 VALUES (); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a datetime DEFAULT (current_time())); INSERT INTO t1 VALUES (); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a datetime DEFAULT (current_time)); INSERT INTO t1 VALUES (); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a datetime DEFAULT (current_timestamp())); INSERT INTO t1 VALUES (); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a datetime DEFAULT (current_timestamp)); INSERT INTO t1 VALUES (); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a datetime DEFAULT (localtime())); INSERT INTO t1 VALUES (); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a datetime DEFAULT (localtime)); INSERT INTO t1 VALUES (); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a datetime DEFAULT (curtime())); INSERT INTO t1 VALUES (); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a datetime, b varchar(20) DEFAULT (localtimestamp())); INSERT INTO t1(a) VALUES (now()); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a datetime, b varchar(20) DEFAULT (localtimestamp)); INSERT INTO t1(a) VALUES (now()); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a datetime, b varchar(20) DEFAULT (now())); INSERT INTO t1(a) VALUES (now()); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (b varchar(100) DEFAULT (sysdate())); INSERT INTO t1() VALUES (); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a datetime, b INT DEFAULT (unix_timestamp())); INSERT INTO t1() VALUES (); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a datetime, b datetime DEFAULT (utc_date())); INSERT INTO t1(a) VALUES (now()); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a datetime, b datetime DEFAULT (utc_time())); INSERT INTO t1(a) VALUES (now()); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a datetime, b datetime DEFAULT (utc_timestamp())); INSERT INTO t1(a) VALUES (now()); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a int DEFAULT (connection_id())); INSERT INTO t1 VALUES (); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; CREATE TABLE t1 (a varchar(1024), b varchar(1024) DEFAULT (database())); INSERT INTO t1 VALUES (); --disable_result_log SELECT * FROM t1; --enable_result_log DROP TABLE t1; --echo # Function that are still not allowed -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a varchar(64), b varchar(1024) DEFAULT (load_file(a))); -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a varchar(1024), b varchar(1024) DEFAULT (found_rows())); -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a varchar(1024), b varchar(1024) DEFAULT (get_lock(a,10))); -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a varchar(1024), b varchar(1024) DEFAULT (is_free_lock(a))); -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a varchar(1024), b varchar(1024) DEFAULT (is_used_lock(a))); -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a int DEFAULT (last_insert_id())); -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a int DEFAULT (row_count())); -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a int, b int DEFAULT (sleep(a))); -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a varchar(32) DEFAULT (current_user())); -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a varchar(32) DEFAULT (session_user())); -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a varchar(1024), b varchar(1024) DEFAULT (version())); -- error ER_INVALID_DEFAULT CREATE TABLE t1 (id char(40) DEFAULT (uuid()) DEFAULT 4); -- error ER_INVALID_DEFAULT CREATE TABLE t1 (id char(40) DEFAULT 4 DEFAULT (uuid())); -- error ER_INVALID_DEFAULT CREATE TABLE t1 (id char(40) DEFAULT 4 DEFAULT (uuid()) DEFAULT 10); CREATE TABLE t1 (id char(40) DEFAULT 4 DEFAULT 5); DROP TABLE t1; DELIMITER |; CREATE FUNCTION CURRENT_TIMESTAMPfoo() RETURNS INT BEGIN RETURN 1; END| DELIMITER ;| -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a INT DEFAULT (CURRENT_TIMESTAMPfoo())); DROP FUNCTION CURRENT_TIMESTAMPfoo; -- error ER_DEFAULT_VAL_GENERATED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a VARCHAR(32) DEFAULT (NAME_CONST('test',1))); -- error ER_DEFAULT_VAL_GENERATED_ROW_VALUE CREATE TABLE t1 (a VARCHAR(32) DEFAULT ((1,1))); -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a VARCHAR(1024), b VARCHAR(1024) DEFAULT (VALUES(a))); --echo # --echo # Stored procedures/functions --echo # DELIMITER //; CREATE PROCEDURE p1() BEGIN SELECT 42; END // CREATE FUNCTION f1() RETURNS INT BEGIN RETURN 42; END // DELIMITER ;// -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a INT DEFAULT (p1())); -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a INT DEFAULT (f1())); -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a INT DEFAULT (1 + f1())); CREATE TABLE t1 (a INT); -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED ALTER TABLE t1 ADD COLUMN b INT DEFAULT (1 + f1()); -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED ALTER TABLE t1 ALTER COLUMN a SET DEFAULT (1 + f1()); DROP TABLE t1; DROP PROCEDURE p1; DROP FUNCTION f1; -- echo # -- echo # UDFs -- echo # --source include/have_udf.inc # # To run this test, "sql/udf_example.cc" need to be compiled into # udf_example.so and LD_LIBRARY_PATH should be setup to point out where # the library are. The regular CMake build system takes care of this # automatically. # DROP FUNCTION IF EXISTS metaphon; --replace_result $UDF_EXAMPLE_LIB UDF_EXAMPLE_LIB eval CREATE FUNCTION metaphon RETURNS STRING SONAME "$UDF_EXAMPLE_LIB"; -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a VARCHAR(128) DEFAULT (metaphon("testval"))); -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED CREATE TABLE t1 (a VARCHAR(128) DEFAULT (concat("1", metaphon("testval")))); CREATE TABLE t1 (a VARCHAR(100)); -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED ALTER TABLE t1 ADD COLUMN b VARCHAR(256) DEFAULT (concat("1", metaphon("testval"))); -- error ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED ALTER TABLE t1 ALTER COLUMN a SET DEFAULT (concat("1", metaphon("testval"))); DROP TABLE t1; DROP FUNCTION metaphon; CREATE TABLE t1 (a INT); -- error 1064 CREATE TABLE t2 (a INT, b INT DEFAULT (select count(*) from t1)); -- error 1064 CREATE TABLE t2 (a INT, b INT DEFAULT (select * from t1)); -- error 1064 CREATE TABLE t2 (a INT, b INT DEFAULT (select 1)); DROP TABLE t1; SET @my_var= "something"; -- error ER_DEFAULT_VAL_GENERATED_VARIABLES CREATE TABLE t1 (i INT, b VARCHAR(256) DEFAULT (@my_var)); -- error ER_DEFAULT_VAL_GENERATED_VARIABLES CREATE TABLE t1 (i INT, b VARCHAR(256) DEFAULT (@my_var + 1)); -- error ER_DEFAULT_VAL_GENERATED_VARIABLES CREATE TABLE t1 (i INT, b VARCHAR(256) DEFAULT (@@global.sort_buffer_size)); -- error ER_DEFAULT_VAL_GENERATED_VARIABLES CREATE TABLE t1 (i INT, b VARCHAR(256) DEFAULT (@@session.sort_buffer_size)); CREATE TABLE t1(i INT); -- error ER_DEFAULT_VAL_GENERATED_VARIABLES ALTER TABLE t1 ADD COLUMN b VARCHAR(256) DEFAULT (@@session.sort_buffer_size); -- error ER_DEFAULT_VAL_GENERATED_VARIABLES ALTER TABLE t1 ADD COLUMN b VARCHAR(256) DEFAULT (@@global.sort_buffer_size); -- error ER_DEFAULT_VAL_GENERATED_VARIABLES ALTER TABLE t1 ADD COLUMN b VARCHAR(256) DEFAULT (@my_var); -- error ER_DEFAULT_VAL_GENERATED_VARIABLES ALTER TABLE t1 ADD COLUMN b VARCHAR(256) DEFAULT (@my_var + 1); -- error ER_DEFAULT_VAL_GENERATED_VARIABLES ALTER TABLE t1 ALTER COLUMN i SET DEFAULT (@@session.sort_buffer_size); -- error ER_DEFAULT_VAL_GENERATED_VARIABLES ALTER TABLE t1 ALTER COLUMN i SET DEFAULT (@@global.sort_buffer_size); -- error ER_DEFAULT_VAL_GENERATED_VARIABLES ALTER TABLE t1 ALTER COLUMN i SET DEFAULT (@my_var); -- error ER_DEFAULT_VAL_GENERATED_VARIABLES ALTER TABLE t1 ALTER COLUMN i SET DEFAULT (@my_var + 1); DROP TABLE t1; CREATE TABLE t2 (i INT, j DOUBLE DEFAULT (i)) PARTITION BY KEY(j) PARTITIONS 4; INSERT INTO t2(i) VALUES (1),(2); DROP TABLE t2; --echo # --echo # Bug#28075950 WL#9418: INCORRECT ERROR THROWN WHEN DEFAULT() IS USED WITHIN DEFAULT CLAUSE --echo # --error ER_DEFAULT_AS_VAL_GENERATED CREATE TABLE t2 (i INT, j DOUBLE DEFAULT (SQRT(i)), k DOUBLE DEFAULT (DEFAULT(j))); --echo # --echo # Bug#28075770 WL#9418: INCORRECT ERROR THROWN WHEN DEFAULT COLUMN IS MADE PRIMARY KEY --echo # create table t1 ( i int, j int default ( i * i ), primary key(j)); insert into t1 (i) values (4), (5); --error ER_DUP_ENTRY insert into t1 values (4, DEFAULT), (5, DEFAULT); insert into t1 values (6, DEFAULT), (7, DEFAULT); select * from t1; DROP TABLE t1; --echo # --echo # Bug#28016783 WL#9418: SIG6 IN MY_EVAL_GCOLUMN_EXPR_HELPER() AT SQL/HANDLER.CC --echo # CREATE TABLE IF NOT EXISTS D1 (i2 INT DEFAULT 568447044, d1 DOUBLE, d2 DOUBLE DEFAULT 0.0, c2 CHAR(255), def2 DOUBLE DEFAULT( i2 DIV d2 ), v1 INT AS ( d2 = c2 % ASIN( d1 ) > i2 ) VIRTUAL); INSERT ignore INTO D1 ( i2, d1, d2, c2, def2) VALUES ( 1548385958 , d1 ,128158532 , 0.0 , DEFAULT); --error ER_DIVISION_BY_ZERO ALTER TABLE D1 ADD UNIQUE KEY uidx ( def2 , v1 , d2 ); DROP TABLE D1; CREATE TABLE IF NOT EXISTS D1 (def2 DOUBLE DEFAULT( 100 DIV 0 ), v1 INT AS (1) VIRTUAL); INSERT IGNORE INTO D1 (def2) VALUES (1); --error ER_DIVISION_BY_ZERO ALTER TABLE D1 ADD UNIQUE KEY uidx ( def2 , v1 ); DROP TABLE D1; --echo # --echo # Bug#28046624 WL#9418: INCORRECT BEHAVIOR OF DEFAULT WITH MODIFY COLUMN --echo # CREATE TABLE t1 ( i int, j int DEFAULT (i) ) ; INSERT INTO t1(i) VALUES (4),(5),(6) ; SELECT * FROM t1 ; ALTER TABLE t1 MODIFY COLUMN j DOUBLE DEFAULT(i*i); SELECT * FROM t1 ; INSERT INTO t1(i) VALUES (7); SELECT * FROM t1 ; DROP TABLE t1; CREATE TABLE t2 ( i int, j int DEFAULT (i) ) ; INSERT INTO t2(i) VALUES (4),(5),(6) ; SELECT * FROM t2 ; ALTER TABLE t2 MODIFY COLUMN j INT DEFAULT(i*i); SELECT * FROM t2 ; INSERT INTO t2(i) VALUES (7); ALTER TABLE t2 MODIFY COLUMN j DOUBLE DEFAULT(i*100); INSERT INTO t2(i) VALUES (8); SELECT * FROM t2 ; DROP TABLE t2; --echo # --echo # BUG#28040739 - WL#9418: INCORRECT ERROR THROWN WITH RENAME COLUMN --echo # CREATE TABLE t1 ( i INT, j INT DEFAULT( i * i) ) ; --error ER_DEPENDENT_BY_DEFAULT_GENERATED_VALUE ALTER TABLE t1 RENAME COLUMN i to i1 ; DROP TABLE t1; CREATE TABLE t1 ( i INT, j INT DEFAULT (i * i) ) ; --error ER_DEPENDENT_BY_DEFAULT_GENERATED_VALUE ALTER TABLE t1 CHANGE COLUMN i i1 DOUBLE DEFAULT ( 4 * 4 ) ; DROP TABLE t1; create table t1 (i int, j double DEFAULT (i * i) ) ; --echo # "Unknown column 'z' in 'default value expression'" --error 1054 alter table t1 add column k double DEFAULT (SQRT(z)) ; #column z does not exist DROP TABLE t1; CREATE TABLE t1 ( i1 INTEGER, i2 INTEGER DEFAULT (i1 + i1) ); INSERT INTO t1 (i1, i2) SELECT 5, 6; INSERT INTO t1 (i1) SELECT 5; INSERT INTO t1 (i1) SELECT 5 ON DUPLICATE KEY UPDATE i2= 4; INSERT INTO t1 (i1) SELECT 5 ON DUPLICATE KEY UPDATE i2= DEFAULT; SELECT * FROM t1; DROP TABLE t1; CREATE TABLE t1 ( i1 INTEGER, i2 INTEGER DEFAULT (i1 + RAND()) ); INSERT INTO t1 (i1, i2) SELECT 5, 6; INSERT INTO t1 (i1) SELECT 5; INSERT INTO t1 (i1) SELECT 5 ON DUPLICATE KEY UPDATE i2= 4; INSERT INTO t1 (i1) SELECT 5 ON DUPLICATE KEY UPDATE i2= DEFAULT; SELECT count(*) FROM t1; DROP TABLE t1; CREATE TABLE t1 (a INT UNIQUE DEFAULT (PI() + 3), b INT DEFAULT (-a)); INSERT INTO t1 (a) VALUES (1), (2); --sorted_result SELECT * FROM t1; INSERT INTO t1(a) VALUES (1) ON DUPLICATE KEY UPDATE a=DEFAULT; --sorted_result SELECT * FROM t1; DELETE FROM t1 WHERE a = 6; UPDATE t1 SET a=DEFAULT WHERE a=2; --sorted_result SELECT * FROM t1; DROP TABLE t1; CREATE TABLE t1 (a datetime, b varchar(10) DEFAULT (localtimestamp())); --error ER_DATA_TOO_LONG INSERT INTO t1(a) VALUES (now()); SELECT * FROM t1; DROP TABLE t1; --echo # --echo # Bug#29480711 DEBUG ASSERTION IN CREATE TABLE WITH ENUM OR SET --echo # COLUMNS HAVING EXPLICIT DEFAULT --echo # CREATE TABLE t1 (truth ENUM('y','n') DEFAULT('y')); CREATE TABLE t2 (truths SET('y','n') DEFAULT('y')); INSERT INTO t1 values (DEFAULT); INSERT INTO t1 values (); INSERT INTO t2 values (DEFAULT); INSERT INTO t2 values (); SELECT * from t1; SELECT * from t2; DROP TABLE t1; DROP TABLE t2; CREATE TABLE t1 (truth ENUM('y','n') DEFAULT('s')); CREATE TABLE t2 (truths SET('y','n') DEFAULT('p')); --error 1265 INSERT INTO t1 values (DEFAULT); --error 1265 INSERT INTO t1 values (); --error 1265 INSERT INTO t2 values (DEFAULT); --error 1265 INSERT INTO t2 values (); SELECT * from t1; SELECT * from t2; DROP TABLE t1; DROP TABLE t2;