Skip to content

Commit

Permalink
MDEV-13751 Interrupted SELECT fails with 1030: 'Got error 1 "Operatio…
Browse files Browse the repository at this point in the history
…n not permitted" from storage engine MyISAM'

quick select returns 1, not proper HA_ERR_xxx error code,
so don't send it to handler::print_error().
  • Loading branch information
vuvova committed Sep 18, 2017
1 parent 6670b4e commit 55c5448
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 4 deletions.
16 changes: 16 additions & 0 deletions mysql-test/r/range_interrupted-13751.result
@@ -0,0 +1,16 @@
CREATE TABLE t1 (i INT AUTO_INCREMENT, c VARCHAR(1), KEY(i), KEY(c,i)) ENGINE=MyISAM;
INSERT INTO t1 (c) VALUES ('a'),('b'),('c'),('d');
INSERT INTO t1 (c) SELECT c FROM t1;
INSERT INTO t1 (c) SELECT c FROM t1;
INSERT INTO t1 (c) SELECT c FROM t1;
INSERT INTO t1 (c) SELECT c FROM t1;
INSERT INTO t1 (c) SELECT c FROM t1;
INSERT INTO t1 (c) SELECT c FROM t1;
set @old_dbug=@@session.debug_dbug;
set debug_dbug="+d,kill_join_init_read_record";
SELECT 1 FROM t1 AS alias1, t1 AS alias2, t1 AS alias3
WHERE alias1.c = alias2.c OR alias1.i <= 1
;
ERROR 70100: Query execution was interrupted
set debug_dbug=@old_dbug;
DROP TABLE t1;
25 changes: 25 additions & 0 deletions mysql-test/t/range_interrupted-13751.test
@@ -0,0 +1,25 @@
source include/have_debug.inc;
#
# MDEV-13751 Interrupted SELECT fails with 1030: 'Got error 1 "Operation not permitted" from storage engine MyISAM'
#
CREATE TABLE t1 (i INT AUTO_INCREMENT, c VARCHAR(1), KEY(i), KEY(c,i)) ENGINE=MyISAM;
INSERT INTO t1 (c) VALUES ('a'),('b'),('c'),('d');
INSERT INTO t1 (c) SELECT c FROM t1;
INSERT INTO t1 (c) SELECT c FROM t1;
INSERT INTO t1 (c) SELECT c FROM t1;
INSERT INTO t1 (c) SELECT c FROM t1;
INSERT INTO t1 (c) SELECT c FROM t1;
INSERT INTO t1 (c) SELECT c FROM t1;

set @old_dbug=@@session.debug_dbug;
set debug_dbug="+d,kill_join_init_read_record";

--error ER_QUERY_INTERRUPTED
SELECT 1 FROM t1 AS alias1, t1 AS alias2, t1 AS alias3
WHERE alias1.c = alias2.c OR alias1.i <= 1
;

set debug_dbug=@old_dbug;

DROP TABLE t1;

13 changes: 9 additions & 4 deletions sql/sql_select.cc
Expand Up @@ -19456,7 +19456,6 @@ bool test_if_use_dynamic_range_scan(JOIN_TAB *join_tab)

int join_init_read_record(JOIN_TAB *tab)
{
int error;
/*
Note: the query plan tree for the below operations is constructed in
save_agg_explain_data.
Expand All @@ -19466,12 +19465,18 @@ int join_init_read_record(JOIN_TAB *tab)
if (tab->filesort && tab->sort_table()) // Sort table.
return 1;

if (tab->select && tab->select->quick && (error= tab->select->quick->reset()))
DBUG_EXECUTE_IF("kill_join_init_read_record",
tab->join->thd->set_killed(KILL_QUERY););
if (tab->select && tab->select->quick && tab->select->quick->reset())
{
/* Ensures error status is propageted back to client */
report_error(tab->table, error);
/* Ensures error status is propagated back to client */
report_error(tab->table,
tab->join->thd->killed ? HA_ERR_QUERY_INTERRUPTED : HA_ERR_OUT_OF_MEM);
return 1;
}
/* make sure we won't get ER_QUERY_INTERRUPTED from any code below */
DBUG_EXECUTE_IF("kill_join_init_read_record",
tab->join->thd->reset_killed(););
if (!tab->preread_init_done && tab->preread_init())
return 1;
if (init_read_record(&tab->read_record, tab->join->thd, tab->table,
Expand Down

0 comments on commit 55c5448

Please sign in to comment.