diff options
author | Igor Babaev <igor@askmonty.org> | 2017-10-23 15:35:10 -0700 |
---|---|---|
committer | Igor Babaev <igor@askmonty.org> | 2017-10-23 15:35:10 -0700 |
commit | a1a79aa5760ff9595b0089ac6ad4ad917c109a03 (patch) | |
tree | a1279e7368d83bbb31833da31880092d654f792e | |
parent | acb336f75e9e5d3d4a35979b1d9229680d132c39 (diff) | |
download | mariadb-git-a1a79aa5760ff9595b0089ac6ad4ad917c109a03.tar.gz |
MDEV-13776 mysqld got signal 11 on delete returning
The method Field_iterator_table::create_item() must take into
account that it can be called when processing DELETE RETURNING.
-rw-r--r-- | mysql-test/r/delete_returning.result | 12 | ||||
-rw-r--r-- | mysql-test/t/delete_returning.test | 15 | ||||
-rw-r--r-- | sql/table.cc | 3 |
3 files changed, 29 insertions, 1 deletions
diff --git a/mysql-test/r/delete_returning.result b/mysql-test/r/delete_returning.result index 0618b495a53..3a95de0cdca 100644 --- a/mysql-test/r/delete_returning.result +++ b/mysql-test/r/delete_returning.result @@ -199,3 +199,15 @@ i 2 DROP PROCEDURE p1; DROP TABLE t1; +# +# MDEV-13776: DELETE ... RETURNING with sql_mode='ONLY_FULL_GROUP_BY' +# +set @sql_mode_save= @@sql_mode; +set sql_mode='ONLY_FULL_GROUP_BY'; +CREATE TABLE t1 (id INT); +INSERT INTO t1 VALUE(1),(2),(3); +DELETE FROM t1 WHERE id > 2 RETURNING *; +id +3 +set sql_mode=@sql_mode_save; +DROP TABLE t1; diff --git a/mysql-test/t/delete_returning.test b/mysql-test/t/delete_returning.test index 3790d0905a5..4448a6bcccd 100644 --- a/mysql-test/t/delete_returning.test +++ b/mysql-test/t/delete_returning.test @@ -155,3 +155,18 @@ SELECT * FROM t1; DROP PROCEDURE p1; DROP TABLE t1; +--echo # +--echo # MDEV-13776: DELETE ... RETURNING with sql_mode='ONLY_FULL_GROUP_BY' +--echo # + +set @sql_mode_save= @@sql_mode; +set sql_mode='ONLY_FULL_GROUP_BY'; + +CREATE TABLE t1 (id INT); +INSERT INTO t1 VALUE(1),(2),(3); + +DELETE FROM t1 WHERE id > 2 RETURNING *; + +set sql_mode=@sql_mode_save; + +DROP TABLE t1; diff --git a/sql/table.cc b/sql/table.cc index 54f7bc7b473..38a64348937 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -5260,7 +5260,8 @@ Item *Field_iterator_table::create_item(THD *thd) Item_field *item= new Item_field(thd, &select->context, *ptr); if (item && thd->variables.sql_mode & MODE_ONLY_FULL_GROUP_BY && - !thd->lex->in_sum_func && select->cur_pos_in_select_list != UNDEF_POS) + !thd->lex->in_sum_func && select->cur_pos_in_select_list != UNDEF_POS && + select->join) { select->join->non_agg_fields.push_back(item); item->marker= select->cur_pos_in_select_list; |