Commit 555442bf authored by serg@serg.mylan's avatar serg@serg.mylan

fixed ORDER BY ?

new tests to ensure that prepared statement *really* work
(and that MySQL not picks up some number from arbitrary location
that happens to match the parameter's value)
parent 84d9b862
...@@ -246,6 +246,11 @@ select a,b from t1 order by 2 ; ...@@ -246,6 +246,11 @@ select a,b from t1 order by 2 ;
prepare stmt1 from ' select a,b from t1 prepare stmt1 from ' select a,b from t1
order by ? '; order by ? ';
execute stmt1 using @arg00; execute stmt1 using @arg00;
set @arg00=1 ;
execute stmt1 using @arg00;
set @arg00=0 ;
--error 1054
execute stmt1 using @arg00;
##### parameter used in limit clause ##### parameter used in limit clause
set @arg00=1; set @arg00=1;
......
...@@ -334,6 +334,16 @@ a b ...@@ -334,6 +334,16 @@ a b
1 one 1 one
3 three 3 three
2 two 2 two
set @arg00=1 ;
execute stmt1 using @arg00;
a b
1 one
2 two
3 three
4 four
set @arg00=0 ;
execute stmt1 using @arg00;
ERROR 42S22: Unknown column '?' in 'order clause'
set @arg00=1; set @arg00=1;
prepare stmt1 from ' select a,b from t1 prepare stmt1 from ' select a,b from t1
limit 1 '; limit 1 ';
......
...@@ -334,6 +334,16 @@ a b ...@@ -334,6 +334,16 @@ a b
1 one 1 one
3 three 3 three
2 two 2 two
set @arg00=1 ;
execute stmt1 using @arg00;
a b
1 one
2 two
3 three
4 four
set @arg00=0 ;
execute stmt1 using @arg00;
ERROR 42S22: Unknown column '?' in 'order clause'
set @arg00=1; set @arg00=1;
prepare stmt1 from ' select a,b from t1 prepare stmt1 from ' select a,b from t1
limit 1 '; limit 1 ';
......
...@@ -335,6 +335,16 @@ a b ...@@ -335,6 +335,16 @@ a b
1 one 1 one
3 three 3 three
2 two 2 two
set @arg00=1 ;
execute stmt1 using @arg00;
a b
1 one
2 two
3 three
4 four
set @arg00=0 ;
execute stmt1 using @arg00;
ERROR 42S22: Unknown column '?' in 'order clause'
set @arg00=1; set @arg00=1;
prepare stmt1 from ' select a,b from t1 prepare stmt1 from ' select a,b from t1
limit 1 '; limit 1 ';
......
...@@ -377,6 +377,16 @@ a b ...@@ -377,6 +377,16 @@ a b
1 one 1 one
3 three 3 three
2 two 2 two
set @arg00=1 ;
execute stmt1 using @arg00;
a b
1 one
2 two
3 three
4 four
set @arg00=0 ;
execute stmt1 using @arg00;
ERROR 42S22: Unknown column '?' in 'order clause'
set @arg00=1; set @arg00=1;
prepare stmt1 from ' select a,b from t1 prepare stmt1 from ' select a,b from t1
limit 1 '; limit 1 ';
...@@ -1560,6 +1570,16 @@ a b ...@@ -1560,6 +1570,16 @@ a b
1 one 1 one
3 three 3 three
2 two 2 two
set @arg00=1 ;
execute stmt1 using @arg00;
a b
1 one
2 two
3 three
4 four
set @arg00=0 ;
execute stmt1 using @arg00;
ERROR 42S22: Unknown column '?' in 'order clause'
set @arg00=1; set @arg00=1;
prepare stmt1 from ' select a,b from t1 prepare stmt1 from ' select a,b from t1
limit 1 '; limit 1 ';
......
...@@ -334,6 +334,16 @@ a b ...@@ -334,6 +334,16 @@ a b
1 one 1 one
3 three 3 three
2 two 2 two
set @arg00=1 ;
execute stmt1 using @arg00;
a b
1 one
2 two
3 three
4 four
set @arg00=0 ;
execute stmt1 using @arg00;
ERROR 42S22: Unknown column '?' in 'order clause'
set @arg00=1; set @arg00=1;
prepare stmt1 from ' select a,b from t1 prepare stmt1 from ' select a,b from t1
limit 1 '; limit 1 ';
......
...@@ -8000,7 +8000,7 @@ find_order_in_list(THD *thd, Item **ref_pointer_array, ...@@ -8000,7 +8000,7 @@ find_order_in_list(THD *thd, Item **ref_pointer_array,
Item *itemptr=*order->item; Item *itemptr=*order->item;
if (itemptr->type() == Item::INT_ITEM) if (itemptr->type() == Item::INT_ITEM)
{ /* Order by position */ { /* Order by position */
uint count= (uint) ((Item_int*)itemptr)->value; uint count= itemptr->val_int();
if (!count || count > fields.elements) if (!count || count > fields.elements)
{ {
my_printf_error(ER_BAD_FIELD_ERROR,ER(ER_BAD_FIELD_ERROR), my_printf_error(ER_BAD_FIELD_ERROR,ER(ER_BAD_FIELD_ERROR),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment