summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Babaev <igor@askmonty.org>2017-10-23 15:35:10 -0700
committerIgor Babaev <igor@askmonty.org>2017-10-23 15:35:10 -0700
commita1a79aa5760ff9595b0089ac6ad4ad917c109a03 (patch)
treea1279e7368d83bbb31833da31880092d654f792e
parentacb336f75e9e5d3d4a35979b1d9229680d132c39 (diff)
downloadmariadb-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.result12
-rw-r--r--mysql-test/t/delete_returning.test15
-rw-r--r--sql/table.cc3
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;