summaryrefslogtreecommitdiff
path: root/mysql-test/main/default.test
diff options
context:
space:
mode:
authorMichael Widenius <monty@mariadb.org>2018-03-09 14:05:35 +0200
committerMonty <monty@mariadb.org>2018-03-29 13:59:44 +0300
commita7abddeffa6a760ce948c2dfb007cdf3f1a369d5 (patch)
tree70eb743fa965a17380bbc0ac88ae79ca1075b896 /mysql-test/main/default.test
parentab1941266c59a19703a74b5593cf3f508a5752d7 (diff)
downloadmariadb-git-a7abddeffa6a760ce948c2dfb007cdf3f1a369d5.tar.gz
Create 'main' test directory and move 't' and 'r' there
Diffstat (limited to 'mysql-test/main/default.test')
-rw-r--r--mysql-test/main/default.test2106
1 files changed, 2106 insertions, 0 deletions
diff --git a/mysql-test/main/default.test b/mysql-test/main/default.test
new file mode 100644
index 00000000000..44778bc568a
--- /dev/null
+++ b/mysql-test/main/default.test
@@ -0,0 +1,2106 @@
+#
+# test of already fixed bugs
+#
+--disable_warnings
+drop table if exists t1,t2,t3,t4,t5,t6;
+drop database if exists mysqltest;
+
+#
+# Bug 10838
+# Insert causes warnings for no default values and corrupts tables
+#
+set sql_mode="";
+CREATE TABLE t1 (a varchar(30) binary NOT NULL DEFAULT ' ',
+ b varchar(1) binary NOT NULL DEFAULT ' ',
+ c varchar(4) binary NOT NULL DEFAULT '0000',
+ d tinyblob NULL,
+ e tinyblob NULL,
+ f tinyblob NULL,
+ g tinyblob NULL,
+ h tinyblob NULL,
+ i tinyblob NULL,
+ j tinyblob NULL,
+ k tinyblob NULL,
+ l tinyblob NULL,
+ m tinyblob NULL,
+ n tinyblob NULL,
+ o tinyblob NULL,
+ p tinyblob NULL,
+ q varchar(30) binary NOT NULL DEFAULT ' ',
+ r varchar(30) binary NOT NULL DEFAULT ' ',
+ s tinyblob NULL,
+ t varchar(4) binary NOT NULL DEFAULT ' ',
+ u varchar(1) binary NOT NULL DEFAULT ' ',
+ v varchar(30) binary NOT NULL DEFAULT ' ',
+ w varchar(30) binary NOT NULL DEFAULT ' ',
+ x tinyblob NULL,
+ y varchar(5) binary NOT NULL DEFAULT ' ',
+ z varchar(20) binary NOT NULL DEFAULT ' ',
+ a1 varchar(30) binary NOT NULL DEFAULT ' ',
+ b1 tinyblob NULL)
+ENGINE=InnoDB DEFAULT CHARACTER SET = latin1 COLLATE latin1_bin;
+--enable_warnings
+set sql_mode=default;
+
+INSERT into t1 (b) values ('1');
+SHOW WARNINGS;
+SELECT * from t1;
+
+CREATE TABLE t2 (a varchar(30) binary NOT NULL DEFAULT ' ',
+ b varchar(1) binary NOT NULL DEFAULT ' ',
+ c varchar(4) binary NOT NULL DEFAULT '0000',
+ d tinyblob NULL,
+ e tinyblob NULL,
+ f tinyblob NULL,
+ g tinyblob NULL,
+ h tinyblob NULL,
+ i tinyblob NULL,
+ j tinyblob NULL,
+ k tinyblob NULL,
+ l tinyblob NULL,
+ m tinyblob NULL,
+ n tinyblob NULL,
+ o tinyblob NULL,
+ p tinyblob NULL,
+ q varchar(30) binary NOT NULL DEFAULT ' ',
+ r varchar(30) binary NOT NULL DEFAULT ' ',
+ s tinyblob NULL,
+ t varchar(4) binary NOT NULL DEFAULT ' ',
+ u varchar(1) binary NOT NULL DEFAULT ' ',
+ v varchar(30) binary NOT NULL DEFAULT ' ',
+ w varchar(30) binary NOT NULL DEFAULT ' ',
+ x tinyblob NULL,
+ y varchar(5) binary NOT NULL DEFAULT ' ',
+ z varchar(20) binary NOT NULL DEFAULT ' ',
+ a1 varchar(30) binary NOT NULL DEFAULT ' ',
+ b1 tinyblob NULL)
+ENGINE=MyISAM DEFAULT CHARACTER SET = latin1 COLLATE latin1_bin;
+
+SHOW CREATE TABLE t2;
+INSERT into t2 (b) values ('1');
+SHOW WARNINGS;
+SELECT * from t2;
+
+drop table t1;
+drop table t2;
+
+
+#
+# Bug#20691: DATETIME col (NOT NULL, NO DEFAULT) may insert garbage when specifying DEFAULT
+#
+# From the docs:
+# If the column can take NULL as a value, the column is defined with an
+# explicit DEFAULT NULL clause. This is the same as before 5.0.2.
+#
+# If the column cannot take NULL as the value, MySQL defines the column with
+# no explicit DEFAULT clause. For data entry, if an INSERT or REPLACE
+# statement includes no value for the column, MySQL handles the column
+# according to the SQL mode in effect at the time:
+#
+# * If strict SQL mode is not enabled, MySQL sets the column to the
+# implicit default value for the column data type.
+#
+# * If strict mode is enabled, an error occurs for transactional tables and
+# the statement is rolled back. For non-transactional tables, an error
+# occurs, but if this happens for the second or subsequent row of a
+# multiple-row statement, the preceding rows will have been inserted.
+#
+create table bug20691 (i int, d datetime NOT NULL, dn datetime not null default '0000-00-00 00:00:00');
+insert ignore into bug20691 values (1, DEFAULT, DEFAULT), (1, '1975-07-10 07:10:03', '1978-01-13 14:08:51'), (1, DEFAULT, DEFAULT);
+insert ignore into bug20691 (i) values (2);
+desc bug20691;
+insert ignore into bug20691 values (3, DEFAULT, DEFAULT), (3, '1975-07-10 07:10:03', '1978-01-13 14:08:51'), (3, DEFAULT, DEFAULT);
+insert ignore into bug20691 (i) values (4);
+insert ignore into bug20691 values (5, DEFAULT, DEFAULT), (5, '1975-07-10 07:10:03', '1978-01-13 14:08:51'), (5, DEFAULT, DEFAULT);
+SET sql_mode = 'ALLOW_INVALID_DATES';
+insert into bug20691 values (6, DEFAULT, DEFAULT), (6, '1975-07-10 07:10:03', '1978-01-13 14:08:51'), (6, DEFAULT, DEFAULT);
+SET sql_mode = 'STRICT_ALL_TABLES';
+--error 1364
+insert into bug20691 values (7, DEFAULT, DEFAULT), (7, '1975-07-10 07:10:03', '1978-01-13 14:08:51'), (7, DEFAULT, DEFAULT);
+select * from bug20691 order by i asc;
+drop table bug20691;
+
+SET sql_mode = '';
+create table bug20691 (
+ a set('one', 'two', 'three') not null,
+ b enum('small', 'medium', 'large', 'enormous', 'ellisonego') not null,
+ c time not null,
+ d date not null,
+ e int not null,
+ f long not null,
+ g blob not null,
+ h datetime not null,
+ i decimal not null,
+ x int);
+insert into bug20691 values (2, 3, 5, '0007-01-01', 11, 13, 17, '0019-01-01 00:00:00', 23, 1);
+insert into bug20691 (x) values (2);
+insert into bug20691 values (2, 3, 5, '0007-01-01', 11, 13, 17, '0019-01-01 00:00:00', 23, 3);
+insert into bug20691 values (DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, 4);
+select * from bug20691 order by x asc;
+drop table bug20691;
+
+create table t1 (id int not null);
+insert into t1 values(default);
+
+create view v1 (c) as select id from t1;
+insert into t1 values(default);
+drop view v1;
+drop table t1;
+
+#
+# Bug #39002: crash with
+# INSERT ... SELECT ... ON DUPLICATE KEY UPDATE col=DEFAULT
+#
+
+create table t1 (a int unique);
+create table t2 (b int default 10);
+insert into t1 (a) values (1);
+insert into t2 (b) values (1);
+
+insert into t1 (a) select b from t2 on duplicate key update a=default;
+select * from t1;
+
+insert into t1 (a) values (1);
+insert into t1 (a) select b from t2 on duplicate key update a=default(b);
+select * from t1;
+
+drop table t1, t2;
+
+--echo # End of 5.0 tests
+
+--echo #
+--echo # Start of 10.0 tests
+--echo #
+
+--echo #
+--echo # MDEV-11265 Access defied when CREATE VIIEW v1 AS SELECT DEFAULT(column) FROM t1
+--echo #
+
+CREATE TABLE t1 (a INT DEFAULT 10);
+INSERT INTO t1 VALUES (11);
+CREATE VIEW v1 AS SELECT a AS a FROM t1;
+CREATE VIEW v2 AS SELECT DEFAULT(a) AS a FROM t1;
+CREATE VIEW v3 AS SELECT VALUE(a) AS a FROM t1;
+SELECT * FROM v1;
+SELECT * FROM v2;
+SELECT * FROM v3;
+--error ER_NONUPDATEABLE_COLUMN
+UPDATE v2 SET a=123;
+--error ER_NONUPDATEABLE_COLUMN
+UPDATE v3 SET a=123;
+DROP VIEW v3;
+DROP VIEW v2;
+DROP VIEW v1;
+DROP TABLE t1;
+
+--echo #
+--echo # MDEV-10780 Server crashes in in create_tmp_table
+--echo #
+
+# Note, the problem was not repeatable with a non-fresh connection.
+--connect (con1,localhost,root,,test)
+CREATE TABLE t1 (pk INT AUTO_INCREMENT PRIMARY KEY) ENGINE=MyISAM;
+INSERT INTO t1 VALUES ();
+INSERT INTO t1 VALUES ();
+SELECT DISTINCT DEFAULT (pk) FROM t1 GROUP BY RAND() WITH ROLLUP;
+--disconnect con1
+--connection default
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.0 tests
+--echo #
+
+--echo #
+--echo # Start of 10.1 tests
+--echo #
+
+# Using DEFAULT(col) in WHERE condition
+CREATE TABLE t1 (a INT DEFAULT 100, b INT DEFAULT NULL);
+INSERT INTO t1 VALUES ();
+SELECT * FROM t1 WHERE DEFAULT(a);
+SELECT * FROM t1 WHERE DEFAULT(b);
+DROP TABLE IF EXISTS t1;
+
+
+--echo #
+--echo # End of 10.1 tests
+--echo #
+
+--echo #
+--echo # Start of 10.2 tests
+--echo #
+
+SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30.123456');
+
+--echo #
+--echo # Check that CURRENT_TIMESTAMP works as before
+--echo #
+
+CREATE or replace TABLE t1 (event_time TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
+SHOW CREATE TABLE t1;
+
+CREATE or replace TABLE t1 (event_time TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(2) ON UPDATE CURRENT_TIMESTAMP);
+SHOW CREATE TABLE t1;
+
+CREATE or replace TABLE t1 (event_time TIMESTAMP(6) NOT NULL DEFAULT SYSDATE(2) ON UPDATE CURRENT_TIMESTAMP);
+SHOW CREATE TABLE t1;
+
+drop table t1;
+
+--echo #
+--echo # Check default expressions
+--echo #
+
+create or replace table t1 (a int default 1, b int default (a+1), c int default (a+b)) engine myisam;
+show create table t1;
+insert into t1 values ();
+insert into t1 (a) values (2);
+insert into t1 (a,b) values (10,20);
+insert into t1 (a,b,c) values (100,200,400);
+select * from t1;
+truncate table t1;
+insert delayed into t1 values ();
+insert delayed into t1 (a) values (2);
+insert delayed into t1 (a,b) values (10,20);
+insert delayed into t1 (a,b,c) values (100,200,400);
+flush tables t1;
+select * from t1;
+
+create or replace table t1 (a int, b blob default (1), c blob default "hello", t text default concat(a,b,c)) engine=myisam;
+show create table t1;
+insert into t1 (a) values (2);
+insert into t1 (a,b) values (10,"test1");
+insert into t1 (a,b,c) values (10,"test2","test3");
+insert delayed into t1 (a,b) values (10,"test4");
+flush tables t1;
+select * from t1;
+drop table t1;
+
+create or replace table t1 (a bigint default uuid_short());
+insert into t1 values();
+select a > 0 from t1;
+drop table t1;
+
+create or replace table t1 (param_list int DEFAULT (1+1) NOT NULL);
+--error ER_PARSE_ERROR
+create or replace table t1 (param_list int DEFAULT 1+1 NOT NULL);
+create or replace table t1 (param_list blob DEFAULT "" NOT NULL);
+
+drop table t1;
+
+create table t1 (a int);
+insert into t1 values(-1);
+alter table t1 add b int default 1, add c int default -1, add d int default (1+1), add e timestamp;
+select a,b,c,d,e from t1;
+insert into t1 values(10,10,10,10,0);
+alter table t1 add f int default (1+1+1) null, add g int default (1+1+1+1) not null,add h int default (2+2+2+2);
+select a,b,c,d,e,f,g,h from t1;
+show create table t1;
+
+create table t2 like t1;
+show create table t2;
+insert into t2 (a) values (100);
+select a,b,c,d,e,f,g,h from t2;
+drop table t1,t2;
+
+create table t1 (a int default (1----1), b int default - 1, c int default +1, e int default (--1));
+show create table t1;
+insert into t1 values();
+insert into t1 values();
+select * from t1;
+drop table t1;
+
+--echo #
+--echo # Create or replace can delete a table on error
+--echo #
+create table t1 (a int);
+--error ER_EXPRESSION_REFERS_TO_UNINIT_FIELD
+create or replace table t1 (a int default b, b int default a);
+--error ER_NO_SUCH_TABLE
+show create table t1;
+
+--echo #
+--echo # Refering to other columns
+--echo #
+
+create or replace table t1 (a int default 1, b int default a);
+create or replace table t1 (a int default 1, b int as (a));
+create or replace table t1 (a int default b, b int default 1);
+create or replace table t1 (a int as (b), b int default 1);
+create or replace table t1 (a int as (b), b int default (1+1));
+create or replace table t1 (a int default 1, b int as (c), c int default (a+1));
+create or replace table t1 (a int default (1+1), b int as (c), c int default (a+1));
+create or replace table t1 (a varchar(128) default @@version);
+create or replace table t1 (a int not null, b int as (a));
+create or replace table t1 (a int not null, b int default (a+1));
+
+
+--error ER_EXPRESSION_REFERS_TO_UNINIT_FIELD
+create or replace table t1 (a int default a);
+create or replace table t1 (a int default b, b int default (1+1));
+--error ER_EXPRESSION_REFERS_TO_UNINIT_FIELD
+create or replace table t1 (a int default 1, b int as (c), c int as (a+1));
+--error ER_EXPRESSION_REFERS_TO_UNINIT_FIELD
+CREATE TABLE t1 (a INT DEFAULT (DEFAULT(a)));
+--error ER_EXPRESSION_REFERS_TO_UNINIT_FIELD
+CREATE TABLE t1 (a INT DEFAULT(DEFAULT(b)), b INT DEFAULT(DEFAULT(a)));
+--error ER_EXPRESSION_REFERS_TO_UNINIT_FIELD
+CREATE TABLE t1 (a INT DEFAULT(DEFAULT(b)) NOT NULL, b INT DEFAULT(DEFAULT(a)) NOT NULL);
+
+--echo #
+--echo # Allow defaults to refer to not default fields
+--echo #
+
+create or replace table t1 (a int default b, b int not null);
+insert into t1 values();
+insert into t1 (a) values(1);
+insert into t1 (b) values(2);
+insert into t1 (a,b) values(3,4);
+select * from t1;
+drop table t1;
+CREATE OR REPLACE TABLE t1 (a INT DEFAULT @v); drop table t1;
+CREATE TABLE t1 (a INT DEFAULT @v:=1); drop table t1;
+
+--echo #
+--echo # Error handling
+--echo #
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+create or replace table t1 (a bigint default xxx());
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+create or replace table t1 (a bigint default (select (1)));
+--error ER_OPERAND_COLUMNS
+create or replace table t1 (a bigint default (1,2,3));
+--error ER_OPERAND_COLUMNS
+create or replace table t1 (a bigint default ((1,2,3)));
+--error ER_PARSE_ERROR
+CREATE TABLE t1 (a INT, b INT, c INT DEFAULT a DIV b);
+--error ER_PARSE_ERROR
+CREATE TABLE t1 (a INT, b INT DEFAULT -a);
+
+--echo #
+--echo # Invalid DEFAULT expressions
+--echo #
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT ((SELECT 1)));
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT (EXISTS (SELECT 1)));
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT (1=ANY (SELECT 1)));
+
+--error ER_OPERAND_COLUMNS
+CREATE TABLE t1 (a INT DEFAULT ROW(1,1));
+
+--error ER_OPERAND_COLUMNS
+CREATE TABLE t1 (a INT DEFAULT (1,1));
+
+--error ER_OPERAND_COLUMNS
+CREATE TABLE t1 (a INT DEFAULT ((1,1)));
+
+--error ER_PARSE_ERROR,2031
+CREATE TABLE t1 (a INT DEFAULT ?);
+--error ER_PARSE_ERROR,2031
+CREATE TABLE t1 (a INT DEFAULT(?));
+
+--error ER_EXPRESSION_REFERS_TO_UNINIT_FIELD
+CREATE TABLE t1 (a INT DEFAULT (b), b INT DEFAULT(a));
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT(NAME_CONST('xxx', 'yyy'));
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT COUNT(*));
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT COUNT(1));
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT AVG(1));
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT MIN(1));
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT GROUP_CONCAT(1));
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT ROW_NUMBER() OVER ());
+
+CREATE FUNCTION f1() RETURNS INT RETURN 1;
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT f1());
+DROP FUNCTION f1;
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE PROCEDURE p1(par INT) CREATE TABLE t1 (a INT DEFAULT par);
+
+--error ER_BAD_FIELD_ERROR
+CREATE TABLE t1 (a INT DEFAULT par);
+
+CREATE PROCEDURE p1() CREATE TABLE t1 (a INT DEFAULT par);
+--error ER_BAD_FIELD_ERROR
+CALL p1;
+DROP PROCEDURE p1;
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT VALUE(a));
+
+
+CREATE TABLE t1 (a INT);
+# "Explicit or implicit commit is not allowed in stored function or trigger
+# because the entire CREATE TABLE is actually not allowed in triggers!
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TRIGGER tr1 AFTER INSERT ON t1 FOR EACH ROW CREATE TABLE t2 (a INT DEFAULT NEW.a);
+# This is OK to return Function or expression is not allowed for 'DEFAULT'
+# because CREATE TEMPORARY TABLE is allowed in triggers
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TRIGGER tr1 AFTER INSERT ON t1 FOR EACH ROW CREATE TEMPORARY TABLE t2 (a INT DEFAULT NEW.a);
+DROP TABLE t1;
+
+--echo #
+--echo # Prepared statements
+--echo #
+
+PREPARE stmt FROM 'CREATE TABLE t1 (a INT DEFAULT(?))';
+set @a=1;
+execute stmt using @a;
+show create table t1;
+drop table t1;
+set @a=-1;
+execute stmt using @a;
+show create table t1;
+drop table t1;
+DEALLOCATE PREPARE stmt;
+
+PREPARE stmt FROM 'CREATE TABLE t1 (a INT DEFAULT(?), b INT DEFAULT(?))';
+set @a=1, @b=2;
+execute stmt using @a,@b;
+show create table t1;
+drop table t1;
+DEALLOCATE PREPARE stmt;
+
+#
+# We can't have an expression for prepared statements
+#
+
+prepare stmt from 'create table t1 (a int default(?+?))';
+set @a=1;
+execute stmt using @a,@a;
+deallocate prepare stmt;
+show create table t1;
+drop table t1;
+
+--echo #
+--echo # Parenthesized Item_basic_constant
+--echo #
+
+
+# It would be better if SHOW would display PI() rather than '3.141592653589793'
+# The problem is that PI() is declared as a basic constant item and it
+# could cause some problems changing it.
+
+CREATE TABLE t1 (
+ i01 INT DEFAULT (((1))),
+ i02 INT DEFAULT (((0x3939))),
+ i03 INT DEFAULT (((1.0))),
+ i04 INT DEFAULT (((1e0))),
+ i05 INT DEFAULT (((NULL))),
+
+ f01 DOUBLE DEFAULT (((PI()))),
+
+ s01 VARCHAR(10) DEFAULT (((_latin1'test'))),
+ s02 VARCHAR(10) DEFAULT ((('test'))),
+ s03 VARCHAR(10) DEFAULT (((0x40))),
+ s04 VARCHAR(10) DEFAULT (((X'40'))),
+ s05 VARCHAR(10) DEFAULT (((B'1000000'))),
+
+ d01 TIME DEFAULT (((TIME'10:20:30'))),
+ d02 DATE DEFAULT (((DATE'2001-01-01'))),
+ d03 DATETIME DEFAULT (((TIMESTAMP'2001-01-01 10:20:30')))
+);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ();
+--vertical_results
+SELECT * FROM t1;
+--horizontal_results
+DROP TABLE t1;
+
+
+--echo #
+--echo # COALESCE(Item_basic_constant)
+--echo #
+
+# i02 INT DEFAULT 0x3939 -- gives 14649 (see the previous query),
+# because it treats as a number
+# i02 INT DEFAULT COALESCE(0x3939) -- gives 99, because it converts to string
+#
+# should be at least documented
+
+CREATE TABLE t1 (
+ i01 INT DEFAULT COALESCE(1),
+ i02 INT DEFAULT COALESCE(0x3939),
+ i03 INT DEFAULT COALESCE(1.0),
+ i04 INT DEFAULT COALESCE(1e0),
+ i05 INT DEFAULT COALESCE(NULL),
+
+ f01 DOUBLE DEFAULT COALESCE(PI()),
+
+ s01 VARCHAR(10) DEFAULT COALESCE(_latin1'test'),
+ s02 VARCHAR(10) DEFAULT COALESCE('test'),
+ s03 VARCHAR(10) DEFAULT COALESCE(0x40),
+ s04 VARCHAR(10) DEFAULT COALESCE(X'40'),
+ s05 VARCHAR(10) DEFAULT COALESCE(B'1000000'),
+
+ d01 TIME DEFAULT COALESCE(TIME'10:20:30'),
+ d02 DATE DEFAULT COALESCE(DATE'2001-01-01'),
+ d03 DATETIME DEFAULT COALESCE(TIMESTAMP'2001-01-01 10:20:30')
+);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ();
+--vertical_results
+SELECT * FROM t1;
+--horizontal_results
+DROP TABLE t1;
+
+
+--echo #
+--echo # TINYINT: out of range
+--echo #
+--error ER_INVALID_DEFAULT
+CREATE TABLE t1 (a TINYINT DEFAULT 300 NOT NULL);
+--error ER_INVALID_DEFAULT
+CREATE TABLE t1 (a TINYINT DEFAULT 128 NOT NULL);
+--error ER_INVALID_DEFAULT
+CREATE TABLE t1 (a TINYINT DEFAULT -500 NOT NULL);
+
+--echo #
+--echo # INT: simple numeric expressions
+--echo #
+CREATE TABLE t1 (a INT DEFAULT 1 NOT NULL);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT DEFAULT COALESCE(1) NOT NULL);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # INT: simple string expressions
+--echo #
+
+CREATE TABLE t1 (a INT DEFAULT '1' NOT NULL);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT DEFAULT CONCAT('1') NOT NULL);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT DEFAULT COALESCE('1') NOT NULL);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # INT: string expressions with garbage
+--echo #
+--error ER_INVALID_DEFAULT
+CREATE TABLE t1 (a INT DEFAULT 'x');
+--error ER_INVALID_DEFAULT
+CREATE TABLE t1 (a INT DEFAULT CONCAT('x'));
+--error ER_INVALID_DEFAULT
+CREATE TABLE t1 (a INT DEFAULT COALESCE('x'));
+--error ER_INVALID_DEFAULT
+CREATE TABLE t1 (a INT DEFAULT (((((COALESCE('x')))))));
+
+--echo #
+--echo # INT: string expressions with numbers + garbage
+--echo #
+
+--error ER_INVALID_DEFAULT
+CREATE TABLE t1 (a INT DEFAULT '1x');
+--error ER_INVALID_DEFAULT
+CREATE TABLE t1 (a INT DEFAULT COALESCE('1x'));
+--error ER_INVALID_DEFAULT
+CREATE TABLE t1 (a INT DEFAULT CONCAT('1x'));
+
+--echo #
+--echo # INT: string expressions with numbers + trailing space
+--echo #
+
+CREATE TABLE t1 (a INT DEFAULT '1 ');
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+# unlike constant, this preserve trailing spaces
+# and sends a note on INSERT. Perhaps CREATE should be rejected
+CREATE TABLE t1 (a INT DEFAULT CONCAT('1 '));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+# unlike constant, this preserve trailing spaces
+# and sends a note on INSERT
+CREATE TABLE t1 (a INT DEFAULT COALESCE('1 '));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # INT: a HEX value
+--echo #
+CREATE TABLE t1 (a INT DEFAULT 0x61 NOT NULL);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # VARCHAR: good defaults
+--echo #
+CREATE TABLE t1 (a VARCHAR(30) DEFAULT 'xxx' NOT NULL);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(2) DEFAULT 0x41 NOT NULL);
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(2) DEFAULT CONCAT(0x41) NOT NULL);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(2) DEFAULT COALESCE(0x41) NOT NULL);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(2) DEFAULT CONCAT(_utf8 0x41) NOT NULL);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(2) DEFAULT CONCAT(_utf8 X'41') NOT NULL);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # VARCHAR: Too long default
+--echo #
+--error ER_INVALID_DEFAULT
+CREATE TABLE t1 (a VARCHAR(2) DEFAULT 'xxx' NOT NULL);
+--error ER_INVALID_DEFAULT
+CREATE TABLE t1 (a VARCHAR(2) DEFAULT CONCAT('xxx') NOT NULL);
+
+--echo #
+--echo # VARCHAR: Too long default with non-important data
+--echo #
+--error ER_INVALID_DEFAULT
+CREATE TABLE t1 (a VARCHAR(2) DEFAULT 'xx ' NOT NULL);
+--error ER_INVALID_DEFAULT
+CREATE TABLE t1 (a VARCHAR(2) DEFAULT CONCAT('xx ') NOT NULL);
+
+--echo #
+--echo # VARCHAR: conversion failures
+--echo #
+
+# DEFAULT with a Cyrillic letter for a Latin1 column
+--error ER_INVALID_DEFAULT
+CREATE TABLE t1 (a VARCHAR(2) CHARACTER SET latin1 DEFAULT _utf8 X'D18F' NOT NULL);
+--error ER_INVALID_DEFAULT
+CREATE TABLE t1 (a VARCHAR(2) CHARACTER SET latin1 DEFAULT CONCAT(_utf8 X'D18F') NOT NULL);
+--error ER_INVALID_DEFAULT
+CREATE TABLE t1 (a VARCHAR(2) CHARACTER SET latin1 DEFAULT CONCAT(_utf8 0xD18F) NOT NULL);
+
+--echo #
+--echo # Field as a default value
+--echo #
+
+CREATE TABLE t1 (a INT, b INT DEFAULT (a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (1, 1);
+INSERT INTO t1 VALUES (DEFAULT, DEFAULT);
+INSERT INTO t1 VALUES (1, DEFAULT);
+INSERT INTO t1 VALUES (DEFAULT, 1);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # Function DEFAULT(field)
+--echo #
+
+CREATE TABLE t1 (a INT DEFAULT(DEFAULT(b)), b INT DEFAULT 1);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (DEFAULT, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT DEFAULT 1, b INT DEFAULT(DEFAULT(a)));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (DEFAULT, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # SQL Standard <datetime value function> as a <default option>
+--echo #
+
+CREATE TABLE t1 (a DATETIME DEFAULT CURRENT_TIMESTAMP);
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a TIME DEFAULT CURRENT_TIME);
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DATE DEFAULT CURRENT_DATE);
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+--echo #
+--echo # DECIMAL + CURRENT_TIMESTAMP, no truncation
+--echo #
+CREATE TABLE t1 (a DECIMAL(30,6) DEFAULT CURRENT_TIMESTAMP(6));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ();
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DECIMAL(30,6) DEFAULT COALESCE(CURRENT_TIMESTAMP(6)));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES();
+INSERT IGNORE INTO t1 VALUES();
+SET sql_mode = 'STRICT_ALL_TABLES';
+INSERT INTO t1 VALUES();
+SET sql_mode = DEFAULT;
+DROP TABLE t1;
+
+--echo #
+--echo # DECIMAL + CURRENT_TIME, no truncation
+--echo #
+CREATE TABLE t1 (a DECIMAL(30,6) DEFAULT COALESCE(CURRENT_TIME(6)));
+SHOW CREATE TABLE t1;
+INSERT IGNORE INTO t1 VALUES();
+DROP TABLE t1;
+
+--echo #
+--echo # DECIMAL + CURRENT_DATE, no truncation
+--echo #
+CREATE TABLE t1 (a DECIMAL(30,6) DEFAULT COALESCE(CURRENT_DATE));
+SHOW CREATE TABLE t1;
+INSERT IGNORE INTO t1 VALUES();
+DROP TABLE t1;
+
+
+--echo #
+--echo # COALESCE for SQL Standard <datetime value function>
+--echo #
+
+CREATE TABLE t1 (a TIMESTAMP DEFAULT COALESCE(CURRENT_TIMESTAMP));
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DATE DEFAULT COALESCE(CURRENT_DATE));
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a TIME DEFAULT COALESCE(CURRENT_TIME));
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (
+ a TIMESTAMP DEFAULT CURRENT_TIMESTAMP(6),
+ b TIMESTAMP DEFAULT COALESCE(CURRENT_TIMESTAMP(6))
+);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ();
+SELECT CURRENT_TIMESTAMP(6);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (
+ a DECIMAL(30,0) DEFAULT CURRENT_TIMESTAMP(6),
+ b DECIMAL(30,0) DEFAULT COALESCE(CURRENT_TIMESTAMP(6))
+);
+SHOW CREATE TABLE t1;
+INSERT IGNORE INTO t1 VALUES ();
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # Check DEFAULT() function
+--echo #
+
+CREATE TABLE `t1` (`a` int(11) DEFAULT (3+3),`b` int(11) DEFAULT '1000');
+SHOW CREATE TABLE t1;
+insert into t1 values (1,1),(2,2);
+insert into t1 values (default,default);
+select * from t1;
+select default(a),b from t1;
+select a,default(b) from t1;
+drop table t1;
+
+
+--echo #
+--echo # Real functions
+--echo #
+
+CREATE TABLE t1 (a DECIMAL(10,1), b DOUBLE DEFAULT CAST(a AS DOUBLE));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (10.1, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DOUBLE, b DOUBLE DEFAULT EXP(a), c DOUBLE DEFAULT LOG(b), d DOUBLE DEFAULT LOG(4, b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (2, DEFAULT, DEFAULT, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b DOUBLE DEFAULT LOG2(a), c DOUBLE DEFAULT LOG10(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (4, DEFAULT, DEFAULT);
+INSERT INTO t1 VALUES (100, DEFAULT, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+
+CREATE TABLE t1 (a DOUBLE, b DOUBLE DEFAULT SQRT(a), c DOUBLE DEFAULT POW(a,3));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (4, DEFAULT, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DOUBLE, b DOUBLE DEFAULT ACOS(a), c DOUBLE DEFAULT ASIN(a), d DOUBLE DEFAULT ATAN(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (1, DEFAULT, DEFAULT, DEFAULT);
+SELECT a, b/PI(), c/PI(), d/PI() FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DOUBLE, b DOUBLE DEFAULT COS(a), c DOUBLE DEFAULT SIN(a), d DOUBLE DEFAULT TAN(a), e DOUBLE DEFAULT COT(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES (PI()/3);
+SELECT ROUND(a,3), ROUND(b,3), ROUND(c,3), ROUND(d,3), ROUND(e,3) FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DOUBLE DEFAULT RAND());
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (DEFAULT);
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DOUBLE, b DOUBLE DEFAULT DEGREES(a), c DOUBLE DEFAULT RADIANS(b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (PI(), DEFAULT, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # INT result functions
+--echo #
+
+CREATE TABLE t1 (a INT, b INT DEFAULT INTERVAL(a, 10, 20, 30, 40));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES (34);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT, c INT DEFAULT (a DIV b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a, b) VALUES (13, 3);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT DEFAULT SIGN(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES (-10),(0), (10);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(30), b INT DEFAULT FIELD(a, 'Hej', 'ej', 'Heja', 'hej', 'foo'));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('ej');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(30), b INT DEFAULT FIND_IN_SET(a, 'Hej,ej,Heja,hej,foo'));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('ej');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(30), b INT DEFAULT ASCII(a), c INT DEFAULT ORD(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('a');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a TEXT DEFAULT UUID_SHORT());
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ();
+SELECT a>0 FROM t1;
+DROP TABLE t1;
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT BENCHMARK(1,1));
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT GET_LOCK('a',1));
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT RELEASE_LOCK('a'));
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT IS_USED_LOCK('a'));
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT IS_FREE_LOCK('a'));
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT SLEEP(1));
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT ROW_COUNT());
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT FOUND_ROWS());
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT MASTER_POS_WAIT('test',100));
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a INT DEFAULT MASTER_GTID_WAIT('test'));
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a VARCHAR(30), b DOUBLE DEFAULT MATCH (a) AGAINST('bbbb' IN BOOLEAN MODE));
+
+--echo #
+--echo # Temporal functions
+--echo #
+
+--echo # Item_temporal_hybrid_func
+
+CREATE TABLE t1 (a DATE, b INT, c DATE DEFAULT DATE_ADD(a, INTERVAL b DAY));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ('2001-01-01', 30, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DATE, b TIME, c DATETIME DEFAULT ADDTIME(a, b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ('2001-01-01', '10:20:30', DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(32), b VARCHAR(32), c DATE DEFAULT STR_TO_DATE(a,b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ('01,5,2013','%d,%m,%Y', DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo # Item_datefunc
+
+SET time_zone='-10:00';
+SET timestamp=UNIX_TIMESTAMP('2001-01-01 23:59:59');
+CREATE TABLE t1 (a DATE DEFAULT CURDATE(), b DATE DEFAULT UTC_DATE());
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ();
+SELECT * FROM t1;
+DROP TABLE t1;
+SET time_zone=DEFAULT, timestamp= DEFAULT;
+
+CREATE TABLE t1 (a INT, b DATE DEFAULT FROM_DAYS(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (730669, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DATE, b DATE DEFAULT LAST_DAY(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ('2003-02-05', DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (yy INT, yd INT, d DATE DEFAULT MAKEDATE(yy, yd));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (2011,32,DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo # Item_timefunc
+
+SET time_zone='-10:00';
+SET timestamp=UNIX_TIMESTAMP('2001-01-01 23:59:59');
+CREATE TABLE t1 (a TIME DEFAULT CURTIME(), b TIME DEFAULT UTC_TIME());
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ();
+SELECT * FROM t1;
+DROP TABLE t1;
+SET time_zone=DEFAULT, timestamp= DEFAULT;
+
+CREATE TABLE t1 (a INT, b TIME DEFAULT SEC_TO_TIME(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (2378, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DATETIME, b DATETIME, c TIME DEFAULT TIMEDIFF(a,b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ('2000:01:01 00:00:00', '2000:01:02 10:20:30', DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (hh INT, mm INT, ss INT, t TIME DEFAULT MAKETIME(hh,mm,ss));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (10,20,30,DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+
+--echo # Item_datetimefunc
+
+SET time_zone='-10:00';
+SET timestamp=UNIX_TIMESTAMP('2001-01-01 23:59:59');
+CREATE TABLE t1 (a TIMESTAMP DEFAULT NOW(), b TIMESTAMP DEFAULT UTC_TIMESTAMP());
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ();
+SELECT * FROM t1;
+DROP TABLE t1;
+SET time_zone=DEFAULT, timestamp= DEFAULT;
+
+# SYSDATE is evaluated during get_date() rather than fix_fields.
+CREATE TABLE t1 (a TIMESTAMP(6) DEFAULT SYSDATE(6), s INT, b TIMESTAMP(6) DEFAULT SYSDATE(6));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (DEFAULT(a), SLEEP(0.1), DEFAULT(b));
+SELECT b>a FROM t1;
+DROP TABLE t1;
+
+SET time_zone='+00:00';
+CREATE TABLE t1 (a INT, b TIMESTAMP DEFAULT FROM_UNIXTIME(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (1447430881, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+SET time_zone=DEFAULT;
+
+CREATE TABLE t1 (a TIMESTAMP, b TIMESTAMP DEFAULT CONVERT_TZ(a, '-10:00', '+10:00'));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ('2001-01-01 10:20:30', DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo # Item_temporal_typecast
+CREATE TABLE t1 (a INT, b DATE DEFAULT CAST(a AS DATE));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (20010203, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b TIME DEFAULT CAST(a AS TIME));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (102030, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a BIGINT, b DATETIME DEFAULT CAST(a AS DATETIME));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (20010203102030, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # Functions with temporal input
+--echo #
+
+CREATE TABLE t1 (a INT, b INT, c INT DEFAULT PERIOD_ADD(a,b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a,b) VALUES (200801, 2);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT, c INT DEFAULT PERIOD_DIFF(a,b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a,b) VALUES (200802, 200703);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT DEFAULT TO_DAYS(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES (950501);
+SELECT * FROM t1;
+DROP TABLE t1;
+CREATE TABLE t1 (a DATE, b INT DEFAULT TO_DAYS(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('2007-10-07');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b BIGINT DEFAULT TO_SECONDS(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES (950501);
+SELECT * FROM t1;
+DROP TABLE t1;
+CREATE TABLE t1 (a DATE, b BIGINT DEFAULT TO_SECONDS(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('2009-11-29');
+SELECT * FROM t1;
+DROP TABLE t1;
+CREATE TABLE t1 (a DATETIME, b BIGINT DEFAULT TO_SECONDS(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('2009-11-29 13:43:32');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DATE, b BIGINT DEFAULT DAYOFMONTH(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('2007-02-03');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DATE, b BIGINT DEFAULT DAYOFWEEK(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('2007-02-03');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DATE, b BIGINT DEFAULT DAYOFYEAR(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('2007-02-03');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a TIME, b INT DEFAULT HOUR(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('10:05:03');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a TIME, b INT DEFAULT MINUTE(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('10:05:03');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a TIME, b INT DEFAULT SECOND(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('10:05:03');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DATETIME(6), b INT DEFAULT MICROSECOND(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('2009-12-31 23:59:59.000010');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DATE, b INT DEFAULT YEAR(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('1987-01-01');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DATE, b INT DEFAULT MONTH(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('1987-01-01');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DATE, b INT DEFAULT WEEK(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('1987-02-01');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DATE, b INT DEFAULT YEARWEEK(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('2000-01-01');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DATE, b INT DEFAULT QUARTER(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('2008-04-01');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DATE, b INT DEFAULT EXTRACT(YEAR FROM a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('2009-07-02');
+SELECT * FROM t1;
+DROP TABLE t1;
+CREATE TABLE t1 (a DATETIME, b INT DEFAULT EXTRACT(YEAR_MONTH FROM a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('2009-07-02 01:02:03');
+SELECT * FROM t1;
+DROP TABLE t1;
+CREATE TABLE t1 (a DATETIME, b INT DEFAULT EXTRACT(DAY_MINUTE FROM a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('2009-07-02 01:02:03');
+SELECT * FROM t1;
+DROP TABLE t1;
+CREATE TABLE t1 (a DATETIME(6), b INT DEFAULT EXTRACT(MICROSECOND FROM a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('2009-07-02 01:02:03.000123');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DATE, b DATE, c INT DEFAULT TIMESTAMPDIFF(MONTH,a,b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a,b) VALUES ('2003-02-01','2003-05-01');
+SELECT * FROM t1;
+DROP TABLE t1;
+CREATE TABLE t1 (a DATE, b DATE, c INT DEFAULT TIMESTAMPDIFF(YEAR,a,b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a,b) VALUES ('2002-05-01','2001-01-01');
+SELECT * FROM t1;
+DROP TABLE t1;
+CREATE TABLE t1 (a DATE, b DATETIME, c INT DEFAULT TIMESTAMPDIFF(MINUTE,a,b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a,b) VALUES ('2003-02-01','2003-05-01 12:05:55');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+#
+# MDEV-10355 Weird error message upon CREATE TABLE with DEFAULT
+#
+# Column default value expression that includes a temporal function
+#
+CREATE OR REPLACE TABLE t1 ( col INT DEFAULT ( 1 LIKE ( NOW() BETWEEN '2000-01-01' AND '2012-12-12' ) ) );
+SHOW CREATE TABLE t1;
+SET timestamp = UNIX_TIMESTAMP( '2004-04-04' );
+INSERT INTO t1 VALUES( DEFAULT );
+SET timestamp = DEFAULT;
+INSERT INTO t1 VALUES( DEFAULT );
+SELECT * FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # Hybrid type functions
+--echo #
+
+CREATE TABLE t1 (a INT, b INT, c INT DEFAULT COALESCE(a,b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (NULL, 1, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+
+CREATE TABLE t1 (a INT, b INT, c INT DEFAULT IFNULL(a,b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (NULL, 2, DEFAULT);
+INSERT INTO t1 VALUES (1, 2, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+
+CREATE TABLE t1 (a INT, b INT, c INT DEFAULT NULLIF(a,b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (1, 1, DEFAULT);
+INSERT INTO t1 VALUES (1, 2, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT, c INT DEFAULT IF(a,b,2));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (0, 1, DEFAULT);
+INSERT INTO t1 VALUES (1, 1, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT, c INT DEFAULT CASE WHEN a THEN b ELSE 2 END);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (0, 1, DEFAULT);
+INSERT INTO t1 VALUES (1, 1, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT DEFAULT (-a));
+SHOW CREATE TABLE t1;
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (10, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT DEFAULT ABS(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (-10, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DOUBLE, b INT DEFAULT CEILING(a), c INT DEFAULT FLOOR(a), d INT DEFAULT ROUND(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (1.5, DEFAULT, DEFAULT, DEFAULT);
+INSERT INTO t1 VALUES (-1.5, DEFAULT, DEFAULT, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT, c INT DEFAULT (a+b), d INT DEFAULT (a-b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (2, 1, DEFAULT, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT, c INT DEFAULT (a*b), d INT DEFAULT (a/b), e INT DEFAULT (a MOD b));
+SHOW CREATE TABLE t1;
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (7, 3, DEFAULT, DEFAULT, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+SET time_zone='+00:00';
+CREATE TABLE t1 (a DATETIME, b INT DEFAULT UNIX_TIMESTAMP(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ('2001-01-01 10:20:30', DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+SET time_zone=DEFAULT;
+
+CREATE TABLE t1 (a TIME, b INT DEFAULT TIME_TO_SEC(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ('22:23:00', DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT, c INT DEFAULT LEAST(a,b), d INT DEFAULT GREATEST(a,b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (0, 1, DEFAULT, DEFAULT);
+INSERT INTO t1 VALUES (1, 1, DEFAULT, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT, c INT DEFAULT LAST_VALUE(a,b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (1, 2, DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # CAST
+--echo #
+CREATE TABLE t1 (a VARCHAR(30), b DECIMAL(10,6) DEFAULT CAST(a AS DECIMAL(10,1)));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('123.456');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a DECIMAL(10,3),
+ b VARCHAR(10) DEFAULT CAST(a AS CHAR(10)),
+ c VARCHAR(10) DEFAULT CAST(a AS CHAR(4)));
+SHOW CREATE TABLE t1;
+INSERT IGNORE INTO t1 (a) VALUES (123.456);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT UNSIGNED DEFAULT CAST(a AS UNSIGNED));
+SHOW CREATE TABLE t1;
+INSERT IGNORE INTO t1 (a) VALUES (-1);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a BIGINT UNSIGNED, b BIGINT SIGNED DEFAULT CAST(a AS SIGNED));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES (0xFFFFFFFFFFFFFFFF);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (
+ a VARCHAR(10) CHARACTER SET latin1,
+ b VARCHAR(10) CHARACTER SET latin1 DEFAULT a COLLATE latin1_bin,
+ c VARCHAR(10) CHARACTER SET utf8 DEFAULT CONVERT(a USING utf8),
+ d VARBINARY(10) DEFAULT (BINARY(a))
+);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('a');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # Bit functions
+--echo #
+
+CREATE TABLE t1 (a INT, b INT DEFAULT BIT_COUNT(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES (7);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT, c INT DEFAULT (a|b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a,b) VALUES (1,2);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT, c INT DEFAULT (a&b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a,b) VALUES (5,4);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT, c INT DEFAULT (a^b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a,b) VALUES (11,3);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT, c INT DEFAULT (a&~b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a,b) VALUES (5,1);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT, c INT DEFAULT (a<<b), d INT DEFAULT (a>>b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a,b) VALUES (5,1);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # String functions
+--echo #
+
+CREATE TABLE t1 (a VARCHAR(10), b VARCHAR(20) DEFAULT REVERSE(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('abcd');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b VARCHAR(10) DEFAULT UPPER(a), c VARCHAR(10) DEFAULT LOWER(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('ABcd');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b VARCHAR(10) DEFAULT LEFT(a,1), c VARCHAR(10) DEFAULT RIGHT(a,1), d VARCHAR(10) DEFAULT SUBSTR(a,2,2));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('abcd');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(20), b VARCHAR(20) DEFAULT SUBSTRING_INDEX(a,'.',2));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('www.mariadb.org');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b VARCHAR(10), c VARCHAR(20) DEFAULT CONCAT(a,b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a,b) VALUES ('a','b');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b VARCHAR(10), c VARCHAR(20) DEFAULT CONCAT_WS(',',a,b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a,b) VALUES ('a','b');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b VARCHAR(10) DEFAULT REPLACE(a,'a','A'));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('abc');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b VARCHAR(10) DEFAULT REGEXP_REPLACE(a,'[0-9]','.'));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('a1b2c');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b VARCHAR(10) DEFAULT REGEXP_SUBSTR(a,'[0-9]+'));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('ab12cd');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(20), b VARCHAR(20) DEFAULT SOUNDEX(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('tester');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(20), b VARCHAR(20) DEFAULT QUOTE(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('a\'b');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b VARCHAR(10) DEFAULT LPAD(a,10,'.'), c VARCHAR(10) DEFAULT RPAD(a,10,'.'));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('ab');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b VARCHAR(10) DEFAULT LTRIM(a), c VARCHAR(10) DEFAULT RTRIM(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES (' ab ');
+SELECT a, HEX(b), HEX(c) FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b VARCHAR(10) DEFAULT TRIM(BOTH 'a' FROM a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('abba');
+SELECT a, b FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b VARCHAR(10) DEFAULT SPACE(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES (3);
+SELECT a, HEX(b) FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b VARCHAR(10), c VARCHAR(10) DEFAULT REPEAT(b,a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a,b) VALUES (3,'x');
+SELECT a, b, c FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (str VARCHAR(10), pos INT, len INT, newstr VARCHAR(10), result VARCHAR(10) DEFAULT INSERT(str,pos,len,newstr));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (str,pos,len,newstr) VALUES ('Quadratic', 3, 4, 'What');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (n INT, res VARCHAR(10) DEFAULT ELT(n,'ej', 'Heja', 'hej', 'foo'));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (n) VALUES (1);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (bits INT, res VARCHAR(10) DEFAULT MAKE_SET(bits,'a','b','c','d'));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (bits) VALUES (1|4);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b VARCHAR(10) DEFAULT CHAR(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES (77);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b VARCHAR(10) DEFAULT CONV(a,10,16));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES (64);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT, c VARCHAR(30) DEFAULT FORMAT(a,b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a,b) VALUES (10000,3);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT, l VARCHAR(10), c VARCHAR(30) DEFAULT FORMAT(a,b,l));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a,b,l) VALUES (10000,2,'no_NO'),(10000,2,'ru_RU'),(10000,2,'ar_BH');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b VARCHAR(20) DEFAULT GET_FORMAT(DATE,a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('EUR'),('USA'),('JIS'),('ISO'),('INTERNAL');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (
+ bits INT,
+ v_on VARCHAR(10),
+ v_off VARCHAR(10),
+ v_separator VARCHAR(10),
+ number_of_bits INT,
+ x VARCHAR(30) DEFAULT EXPORT_SET(bits, v_on, v_off, v_separator, number_of_bits)
+);
+SHOW CREATE TABLE t1;
+INSERT IGNORE INTO t1 VALUES (0x50006,'Y','N','',64,DEFAULT);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1 (a VARCHAR(30), b BLOB DEFAULT LOAD_FILE(a));
+
+--echo #
+--echo # Predicates
+--echo #
+
+CREATE TABLE t1 (a INT, b INT DEFAULT (NOT a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES (NULL),(0),(1);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT, x INT DEFAULT (a XOR b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a,b) VALUES (0,0),(0,1),(1,0),(1,1);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT DEFAULT (a IS TRUE), c INT DEFAULT (a IS NOT TRUE));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES (NULL),(0),(1);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT DEFAULT (a IS FALSE), c INT DEFAULT (a IS NOT FALSE));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES (NULL),(0),(1);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT DEFAULT (a IS NULL), c INT DEFAULT (a IS NOT NULL));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES (NULL),(0),(1);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT, b INT DEFAULT (a IS UNKNOWN), c INT DEFAULT (a IS NOT UNKNOWN));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES (NULL),(0),(1);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a INT,
+ eq INT DEFAULT (a=0), equal INT DEFAULT (a<=>0),
+ ne INT DEFAULT (a<>0),
+ lt INT DEFAULT (a<0), le INT DEFAULT (a<=0),
+ gt INT DEFAULT (a>0), ge INT DEFAULT (a>=0));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES (NULL),(-1),(0),(1);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b INT DEFAULT (a LIKE 'a%'));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('AAA'),('aaa'),('bbb');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b INT DEFAULT (a RLIKE 'a$'));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('AAA'),('aaa'),('bbb');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b INT DEFAULT (a IN ('aaa','bbb')));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('AAA'),('aaa'),('bbb'),('ccc');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b INT DEFAULT (a NOT IN ('aaa','bbb')));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('AAA'),('aaa'),('bbb'),('ccc');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b INT DEFAULT (a BETWEEN 'aaa' AND 'bbb'));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('AAA'),('aaa'),('bbb'),('ccc');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b INT DEFAULT (a NOT BETWEEN 'aaa' AND 'bbb'));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('AAA'),('aaa'),('bbb'),('ccc');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a TEXT DEFAULT UUID());
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ();
+SELECT LENGTH(a)>0 FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # Numeric result functions with string input
+--echo #
+
+CREATE TABLE t1 (a VARCHAR(10), b INT DEFAULT STRCMP(a,'b'));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('A'),('a'),('B'),('b'),('C'),('c');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b INT DEFAULT LENGTH(a), c INT DEFAULT CHAR_LENGTH(a), d INT DEFAULT BIT_LENGTH(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('a'),('aa'),('aaa');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b INT DEFAULT LOCATE('a',a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('xa'),('xxa'),('xxxa');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b INT DEFAULT REGEXP_INSTR(a, 'a'));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('xa'),('xxa'),('xxxa');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # INT result metadata functions
+--echo #
+
+# QQ: LAST_INSERT_ID() should probably be allowed
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+CREATE TABLE t1
+(
+ id SERIAL PRIMARY KEY,
+ b INT DEFAULT LAST_INSERT_ID()
+);
+
+CREATE TABLE t1 (a INT DEFAULT CONNECTION_ID());
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES();
+SELECT a>0 FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b INT DEFAULT COERCIBILITY(a), c INT DEFAULT COERCIBILITY(b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('test');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # String result metadata functions
+--echo #
+CREATE TABLE t1 (
+ a VARCHAR(10) CHARACTER SET latin1,
+ b VARCHAR(20) DEFAULT CHARSET(a),
+ c VARCHAR(20) DEFAULT COLLATION(a)
+);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('test');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # Hash, compression, encode/decode
+--echo #
+CREATE TABLE t1 (a VARCHAR(10), b BIGINT DEFAULT CRC32(a), c TEXT DEFAULT MD5(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('a');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b TEXT DEFAULT TO_BASE64(a), c TEXT DEFAULT FROM_BASE64(b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('aaaabbbb');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b TEXT DEFAULT HEX(a), c TEXT DEFAULT UNHEX(b));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('aaaabbbb');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(10), b TEXT DEFAULT ENCODE(a,'test'), c TEXT DEFAULT DECODE(b,'test'));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('aaaabbbb');
+SELECT a, HEX(b), c FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (a VARCHAR(30), b TEXT DEFAULT PASSWORD(a));
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('notagoodpwd');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1 (
+ a VARCHAR(30),
+ b BLOB DEFAULT AES_ENCRYPT(a, 'passwd'),
+ c TEXT DEFAULT AES_DECRYPT(b, 'passwd')
+);
+SHOW CREATE TABLE t1;
+INSERT INTO t1 (a) VALUES ('test');
+SELECT c FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # Collations
+--echo #
+
+--error ER_BAD_DATA
+CREATE TABLE t1 (a VARCHAR(20) CHARACTER SET latin1 DEFAULT CONCAT('ö')) CHARACTER SET koi8r COLLATE koi8r_bin;
+CREATE OR REPLACE TABLE t1 (a char(2) default concat('A') COLLATE utf8mb4_unicode_ci);
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
+#
+# Order of evaluation:
+#
+create table t1 (a int default 1, b int default (rand()*0+2), c int);
+insert t1 (c) values (a);
+insert t1 (c) values (b);
+select * from t1;
+drop table t1;
+
+#
+# ALTER ... SET DEFAULT
+#
+create table t1 (a int default 1, b int default (1+1), c int);
+show create table t1;
+alter table t1 alter a set default (2+3), alter b set default 4,
+ alter c set default (-a);
+--error ER_PARSE_ERROR
+alter table t1 alter a set default 1+2;
+show create table t1;
+drop table t1;
+
+#
+# CREATE ... SELECT
+#
+create table t1 (a int default 5 check (a>10), b int default (5+5), c int as (a+b));
+create table t2 as select a, b, c from t1;
+create table t3 as select max(a), max(b), max(c) from t1;
+show create table t2;
+show create table t3;
+drop table t1, t2, t3;
+
+--echo # MDEV-11359: Implement IGNORE for bulk operation
+create table t1 (a int primary key default 0, b int default 3);
+insert into t1 values (1, ignore);
+insert into t1 values (2, ignore);
+replace into t1 values (2, ignore);
+replace into t1 values (3, ignore);
+replace into t1 values (4, 6);
+replace into t1 values (5, 7);
+update t1 set a=6,b=ignore where a=5;
+insert into t1 values (ignore, ignore);
+--error ER_DUP_ENTRY
+insert into t1 values (ignore, ignore);
+select * from t1 order by a;
+delete from t1 where a < 4;
+--echo # actually insert default instead of ignoring
+--echo # (but REPLACE is non standard operator)
+replace into t1 values (4, ignore);
+select * from t1 order by a;
+drop table t1;
+
+#using in load
+create table t1 (a int default 100, b int, c varchar(60) default 'x');
+load data infile '../../std_data/rpl_loaddata.dat' into table t1 (a, @b) set b=@b+10, c=ignore;
+select * from t1;
+drop table t1;
+
+#using in duplicate
+CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY AUTO_INCREMENT);
+CREATE TABLE t2 (a INT);
+INSERT INTO t2 VALUES (1),(2),(3),(2);
+INSERT INTO t1 SELECT a FROM t2 ON DUPLICATE KEY UPDATE a=DEFAULT;
+SELECT * FROM t1 order by a;
+truncate table t1;
+# efectively it is DEFALT
+INSERT INTO t1 SELECT a FROM t2 ON DUPLICATE KEY UPDATE a=IGNORE;
+SELECT * FROM t1 order by a;
+DROP TABLE t1,t2;
+
+create table t1 (a int primary key default 0, b int default 3);
+prepare insstmt from "insert into t1 values (?, ?)";
+prepare repstmt from "replace into t1 values (?, ?)";
+prepare updstmt from "update t1 set a=6,b=? where a=5";
+execute insstmt using 1, ignore;
+execute insstmt using 2, ignore;
+execute repstmt using 2, ignore;
+execute repstmt using 3, ignore;
+execute repstmt using 4, 6;
+execute repstmt using 5, 7;
+execute updstmt using ignore;
+execute insstmt using ignore, ignore;
+--error ER_DUP_ENTRY
+execute insstmt using ignore, ignore;
+select * from t1 order by a;
+delete from t1 where a < 4;
+execute repstmt using 4, ignore;
+select * from t1 order by a;
+drop table t1;
+
+--echo #
+--echo # DEVAULT & PS adoption
+--echo #
+
+
+# Correct usage
+CREATE TABLE t1 (a INT DEFAULT 10, b INT DEFAULT NULL);
+EXECUTE IMMEDIATE 'INSERT INTO t1 VALUES (?,?)' USING IGNORE, IGNORE;
+SELECT * FROM t1;
+UPDATE t1 SET a=20, b=30;
+SELECT * FROM t1;
+EXECUTE IMMEDIATE 'UPDATE t1 SET a=?,b=?' USING IGNORE, IGNORE;
+SELECT * FROM t1;
+DROP TABLE t1;
+
+# Incorrect usage in a expression in INSERT..VALUES
+CREATE TABLE t1 (a INT DEFAULT 10);
+--error ER_INVALID_DEFAULT_PARAM
+EXECUTE IMMEDIATE 'INSERT INTO t1 VALUES (?+1)' USING IGNORE;
+--error ER_INVALID_DEFAULT_PARAM
+EXECUTE IMMEDIATE 'INSERT INTO t1 VALUES (CONCAT(?,?))' USING IGNORE, 'test';
+DROP TABLE t1;
+
+# Incorrect usage in UPDATE..SET
+CREATE TABLE t1 (a INT DEFAULT 10);
+INSERT INTO t1 VALUES (20);
+--error ER_INVALID_DEFAULT_PARAM
+EXECUTE IMMEDIATE 'UPDATE t1 SET a=?+1' USING IGNORE;
+--error ER_INVALID_DEFAULT_PARAM
+EXECUTE IMMEDIATE 'UPDATE t1 SET a=CONCAT(?,?)' USING IGNORE, 'test';
+DROP TABLE t1;
+
+
+# Incorrect usage in not an UPDATE/INSERT query at all
+--error ER_INVALID_DEFAULT_PARAM
+EXECUTE IMMEDIATE 'SELECT CAST(? AS SIGNED)' USING IGNORE;
+--error ER_INVALID_DEFAULT_PARAM
+EXECUTE IMMEDIATE 'SELECT CAST(? AS DOUBLE)' USING IGNORE;
+--error ER_INVALID_DEFAULT_PARAM
+EXECUTE IMMEDIATE 'SELECT CAST(? AS CHAR)' USING IGNORE;
+--error ER_INVALID_DEFAULT_PARAM
+EXECUTE IMMEDIATE 'SELECT CAST(? AS DECIMAL(10,1))' USING IGNORE;
+--error ER_INVALID_DEFAULT_PARAM
+EXECUTE IMMEDIATE 'SELECT CAST(? AS TIME)' USING IGNORE;
+--error ER_INVALID_DEFAULT_PARAM
+EXECUTE IMMEDIATE 'SELECT CAST(? AS DATE)' USING IGNORE;
+--error ER_INVALID_DEFAULT_PARAM
+EXECUTE IMMEDIATE 'SELECT CAST(? AS DATETIME)' USING IGNORE;
+
+--error ER_INVALID_DEFAULT_PARAM
+EXECUTE IMMEDIATE 'SELECT ?+1' USING IGNORE;
+--error ER_INVALID_DEFAULT_PARAM
+EXECUTE IMMEDIATE 'SELECT CONCAT(?,?)' USING IGNORE,'test';
+
+
+# Incorrect usage in the LIMIT clause
+--error ER_INVALID_DEFAULT_PARAM
+EXECUTE IMMEDIATE 'SELECT 1 LIMIT ?' USING IGNORE;
+CREATE TABLE t1 (a INT DEFAULT 10);
+INSERT INTO t1 VALUES (1),(2),(3);
+--error ER_INVALID_DEFAULT_PARAM
+EXECUTE IMMEDIATE 'SELECT * FROM t1 LIMIT ?' USING IGNORE;
+DROP TABLE t1;
+
+
+--echo # The output of this query in 'Note' is a syntactically incorrect query.
+--echo # But as it's never logged, it's ok. It should be human readable only.
+EXECUTE IMMEDIATE 'EXPLAIN EXTENDED SELECT ?' USING IGNORE;
+
+
+# This tests Item_param::eq() for IGNORE as a bound value
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (1),(2),(3);
+--error ER_INVALID_DEFAULT_PARAM
+EXECUTE IMMEDIATE 'EXPLAIN EXTENDED SELECT * FROM t1 WHERE ?+a<=>?+a' USING DEFAULT,DEFAULT;
+DROP TABLE t1;
+
+--echo #
+--echo # MDEV-11134 Assertion `fixed' failed in Item::const_charset_converter(THD*, CHARSET_INFO*, bool, const char*)
+--echo #
+
+SET NAMES utf8;
+PREPARE stmt FROM "CREATE OR REPLACE TABLE t1 (c CHAR(8) DEFAULT ?)";
+SET @a='';
+EXECUTE stmt USING @a;
+EXECUTE stmt USING @a;
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+SET @a='A';
+EXECUTE stmt USING @a;
+EXECUTE stmt USING @a;
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+SET @a=_utf8 0xC380; # LATIN CAPITAL LETTER A WITH GRAVE
+EXECUTE stmt USING @a;
+EXECUTE stmt USING @a;
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+SET @a=_utf8 0xD18F; # Cyrillic letter into a latin1 column
+--error ER_INVALID_DEFAULT
+EXECUTE stmt USING @a;
+--error ER_INVALID_DEFAULT
+EXECUTE stmt USING @a;
+DEALLOCATE PREPARE stmt;
+
+#
+# ANSI_QUOTES
+#
+set sql_mode=ansi_quotes;
+create table t1 (a int, b int default (a+1));
+show create table t1;
+insert t1 (a) values (10);
+set sql_mode='';
+show create table t1;
+insert t1 (a) values (20);
+flush tables;
+show create table t1;
+insert t1 (a) values (30);
+select * from t1;
+drop table t1;
+set sql_mode=default;
+
+#
+# MDEV-10201 Bad results for CREATE TABLE t1 (a INT DEFAULT b, b INT DEFAULT 4)
+#
+create table t1 (a int default b, b int default 4, t text);
+insert into t1 (b, t) values (5, '1 column is omitted');
+insert into t1 values (default, 5, '2 column gets DEFAULT, keyword');
+insert into t1 values (default(a), 5, '3 column gets DEFAULT(a), expression');
+insert into t1 values (default(a)+0, 5, '4 also expression DEFAULT(0)+0');
+insert into t1 values (b, 5, '5 the value of the DEFAULT(a), that is b');
+select * from t1 order by t;
+drop table t1;
+
+#
+# MDEV-10352 Server crashes in Field::set_default on CREATE TABLE
+#
+--error ER_EXPRESSION_REFERS_TO_UNINIT_FIELD
+create table t1 (col1 int default(-(default(col1))));
+
+#
+# MDEV-10354 Assertion `! is_set()' failed in Diagnostics_area::set_ok_status on CREATE TABLE with invalid default
+#
+--error ER_DATA_OUT_OF_RANGE
+create table t1 (col int default (yearweek((exp(710)))));
+
+--echo #
+--echo # MDEV-13707 Server in ORACLE mode crashes on ALTER with wrong DEFAULT clause
+--echo #
+
+CREATE OR REPLACE TABLE t1(i int);
+--error ER_BAD_FIELD_ERROR
+ALTER TABLE t1 ADD b CHAR(255) DEFAULT `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`;
+DROP TABLE t1;
+
+
+--echo # end of 10.2 test