Fixed bug #27937: crash for the the second execution of a prepared
statement from a UNION query with ORDER BY an expression containing RAND(). The crash happened because the global order by list in the union query was not re-initialized for execution. (Local order by lists were re-initialized though).
This commit is contained in:
parent
681ef616ed
commit
d71043b889
@ -1087,4 +1087,26 @@ t2 CREATE TABLE `t2` (
|
|||||||
drop database mysqltest;
|
drop database mysqltest;
|
||||||
deallocate prepare stmt1;
|
deallocate prepare stmt1;
|
||||||
deallocate prepare stmt2;
|
deallocate prepare stmt2;
|
||||||
|
CREATE TABLE t1(a int);
|
||||||
|
INSERT INTO t1 VALUES (2), (3), (1);
|
||||||
|
PREPARE st1 FROM
|
||||||
|
'(SELECT a FROM t1) UNION (SELECT a+10 FROM t1) ORDER BY RAND()*0+a';
|
||||||
|
EXECUTE st1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
11
|
||||||
|
12
|
||||||
|
13
|
||||||
|
EXECUTE st1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
11
|
||||||
|
12
|
||||||
|
13
|
||||||
|
DEALLOCATE PREPARE st1;
|
||||||
|
DROP TABLE t1;
|
||||||
End of 4.1 tests.
|
End of 4.1 tests.
|
||||||
|
@ -1128,4 +1128,22 @@ drop database mysqltest;
|
|||||||
deallocate prepare stmt1;
|
deallocate prepare stmt1;
|
||||||
deallocate prepare stmt2;
|
deallocate prepare stmt2;
|
||||||
#
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #27937: crash on the second execution for prepared statement
|
||||||
|
# from UNION with ORDER BY an expression containing RAND()
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1(a int);
|
||||||
|
INSERT INTO t1 VALUES (2), (3), (1);
|
||||||
|
|
||||||
|
PREPARE st1 FROM
|
||||||
|
'(SELECT a FROM t1) UNION (SELECT a+10 FROM t1) ORDER BY RAND()*0+a';
|
||||||
|
|
||||||
|
EXECUTE st1;
|
||||||
|
EXECUTE st1;
|
||||||
|
|
||||||
|
DEALLOCATE PREPARE st1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 4.1 tests.
|
--echo End of 4.1 tests.
|
||||||
|
@ -135,6 +135,11 @@ st_select_lex_unit::init_prepare_fake_select_lex(THD *thd)
|
|||||||
fake_select_lex->table_list.link_in_list((byte *)&result_table_list,
|
fake_select_lex->table_list.link_in_list((byte *)&result_table_list,
|
||||||
(byte **)
|
(byte **)
|
||||||
&result_table_list.next);
|
&result_table_list.next);
|
||||||
|
for (ORDER *order= (ORDER *) global_parameters->order_list.first;
|
||||||
|
order;
|
||||||
|
order= order->next)
|
||||||
|
order->item= &order->item_ptr;
|
||||||
|
|
||||||
return options_tmp;
|
return options_tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user