mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Fixed BUG#16474: SP crashed MySQL
fix_fields() was not called for "order by" variables if the type was a "constant integer", and thus interpreted as a column index. However, a local variable is an expression and should not be interpreted as a column index. Instead it behaves just like when using a user variable for instance (i.e. it will not affect the ordering). mysql-test/r/sp.result: Updated results for new test case (BUG#16474). mysql-test/t/sp.test: New test case for BUG#16474. sql/sql_select.cc: When processing order list,
This commit is contained in:
@ -4857,4 +4857,33 @@ i
|
||||
0
|
||||
drop table t3|
|
||||
drop procedure bug16887|
|
||||
drop procedure if exists bug16474_1|
|
||||
drop procedure if exists bug16474_2|
|
||||
delete from t1|
|
||||
insert into t1 values ('c', 2), ('b', 3), ('a', 1)|
|
||||
create procedure bug16474_1()
|
||||
begin
|
||||
declare x int;
|
||||
select id from t1 order by x;
|
||||
end|
|
||||
create procedure bug16474_2(x int)
|
||||
select id from t1 order by x|
|
||||
call bug16474_1()|
|
||||
id
|
||||
c
|
||||
b
|
||||
a
|
||||
call bug16474_2(1)|
|
||||
id
|
||||
c
|
||||
b
|
||||
a
|
||||
call bug16474_2(2)|
|
||||
id
|
||||
c
|
||||
b
|
||||
a
|
||||
drop procedure bug16474_1|
|
||||
drop procedure bug16474_2|
|
||||
delete from t1|
|
||||
drop table t1,t2;
|
||||
|
@ -5717,6 +5717,37 @@ drop table t3|
|
||||
drop procedure bug16887|
|
||||
|
||||
|
||||
#
|
||||
# BUG#16474: SP crashed MySQL
|
||||
# (when using "order by localvar", where 'localvar' is just that.
|
||||
#
|
||||
--disable_warnings
|
||||
drop procedure if exists bug16474_1|
|
||||
drop procedure if exists bug16474_2|
|
||||
--enable_warnings
|
||||
|
||||
delete from t1|
|
||||
insert into t1 values ('c', 2), ('b', 3), ('a', 1)|
|
||||
|
||||
create procedure bug16474_1()
|
||||
begin
|
||||
declare x int;
|
||||
|
||||
select id from t1 order by x;
|
||||
end|
|
||||
|
||||
# This does NOT order by column index; variable is an expression.
|
||||
create procedure bug16474_2(x int)
|
||||
select id from t1 order by x|
|
||||
|
||||
call bug16474_1()|
|
||||
call bug16474_2(1)|
|
||||
call bug16474_2(2)|
|
||||
drop procedure bug16474_1|
|
||||
drop procedure bug16474_2|
|
||||
delete from t1|
|
||||
|
||||
|
||||
#
|
||||
# BUG#NNNN: New bug synopsis
|
||||
#
|
||||
|
Reference in New Issue
Block a user