diff options
author | Monty <monty@mariadb.org> | 2020-07-03 01:16:31 +0300 |
---|---|---|
committer | Monty <monty@mariadb.org> | 2020-07-03 01:16:31 +0300 |
commit | 6e81ba0c12d1b94c0c046e1062f06e426036dbb2 (patch) | |
tree | e94e2d6974d9545f947dae8092f765aeaccb884f | |
parent | 53ecc354e398ead01b4dbf2d77170dafc29debd2 (diff) | |
download | mariadb-git-6e81ba0c12d1b94c0c046e1062f06e426036dbb2.tar.gz |
Don't give errors for default value copy in create_tmp_table
-rw-r--r-- | mysql-test/main/type_temporal_innodb.result | 15 | ||||
-rw-r--r-- | mysql-test/main/type_temporal_innodb.test | 19 | ||||
-rw-r--r-- | sql/sql_select.cc | 7 |
3 files changed, 41 insertions, 0 deletions
diff --git a/mysql-test/main/type_temporal_innodb.result b/mysql-test/main/type_temporal_innodb.result index b869822722d..c129f4810e2 100644 --- a/mysql-test/main/type_temporal_innodb.result +++ b/mysql-test/main/type_temporal_innodb.result @@ -160,3 +160,18 @@ SELECT * FROM t1 WHERE LEAST( UTC_TIME(), d ); d 2012-12-21 DROP TABLE t1; +# +# MDEV-17969 Assertion `name' failed in THD::push_warning_truncated_value_for_field +# +CREATE TABLE t1 (c1 DATE , c2 TIMESTAMP) ENGINE=InnoDB; +INSERT INTO t1 VALUES ('2006-07-17','0000-00-00 00:00:00'); +CREATE TABLE t2 (pk INT, a1 TIME) Engine=InnoDB; +INSERT INTO t2 VALUES (6,'00:00:00'); +SET SESSION sql_mode= 'strict_all_tables,no_zero_date'; +CREATE TABLE tbl SELECT * FROM t1 WHERE t1.c1 = (SELECT c2 FROM t2 WHERE pk = 6); +ERROR 22007: Truncated incorrect datetime value: '0000-00-00 00:00:00' +DROP TABLE t1,t2; +SET sql_mode=DEFAULT; +# +# End of 10.3 tests +# diff --git a/mysql-test/main/type_temporal_innodb.test b/mysql-test/main/type_temporal_innodb.test index 81f2f586c51..94f61d54634 100644 --- a/mysql-test/main/type_temporal_innodb.test +++ b/mysql-test/main/type_temporal_innodb.test @@ -66,3 +66,22 @@ CREATE TABLE t1 (d DATE) ENGINE=InnoDB; INSERT INTO t1 VALUES ('2012-12-21'); SELECT * FROM t1 WHERE LEAST( UTC_TIME(), d ); DROP TABLE t1; + +--echo # +--echo # MDEV-17969 Assertion `name' failed in THD::push_warning_truncated_value_for_field +--echo # + +CREATE TABLE t1 (c1 DATE , c2 TIMESTAMP) ENGINE=InnoDB; +INSERT INTO t1 VALUES ('2006-07-17','0000-00-00 00:00:00'); +CREATE TABLE t2 (pk INT, a1 TIME) Engine=InnoDB; +INSERT INTO t2 VALUES (6,'00:00:00'); +SET SESSION sql_mode= 'strict_all_tables,no_zero_date'; +--error ER_TRUNCATED_WRONG_VALUE +CREATE TABLE tbl SELECT * FROM t1 WHERE t1.c1 = (SELECT c2 FROM t2 WHERE pk = 6); +# ^^^ there is no column c2 in table t2 +DROP TABLE t1,t2; +SET sql_mode=DEFAULT; + +--echo # +--echo # End of 10.3 tests +--echo # diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 88a1cdedeac..9f5a406507c 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -17460,6 +17460,7 @@ create_tmp_table(THD *thd, TMP_TABLE_PARAM *param, List<Item> &fields, bool using_unique_constraint= false; bool use_packed_rows= false; bool not_all_columns= !(select_options & TMP_TABLE_ALL_COLUMNS); + bool save_abort_on_warning; char *tmpname,path[FN_REFLEN]; uchar *pos, *group_buff, *bitmaps; uchar *null_flags; @@ -17932,6 +17933,11 @@ create_tmp_table(THD *thd, TMP_TABLE_PARAM *param, List<Item> &fields, } null_count= (blob_count == 0) ? 1 : 0; hidden_field_count=param->hidden_field_count; + + /* Protect against warnings in field_conv() in the next loop*/ + save_abort_on_warning= thd->abort_on_warning; + thd->abort_on_warning= 0; + for (i=0,reg_field=table->field; i < field_count; i++,reg_field++,recinfo++) { Field *field= *reg_field; @@ -18018,6 +18024,7 @@ create_tmp_table(THD *thd, TMP_TABLE_PARAM *param, List<Item> &fields, bzero(pos, table->s->reclength - (pos - table->record[0])); MEM_CHECK_DEFINED(table->record[0], table->s->reclength); + thd->abort_on_warning= save_abort_on_warning; param->copy_field_end=copy; param->recinfo= recinfo; // Pointer to after last field store_record(table,s->default_values); // Make empty default record |