From cb35648ec804ff3102895611b0a04999eb93ade1 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 21 Jul 2004 19:17:07 +0200 Subject: 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) mysql-test/include/ps_query.inc: 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) mysql-test/r/ps_2myisam.result: results updated mysql-test/r/ps_3innodb.result: results updated mysql-test/r/ps_4heap.result: results updated mysql-test/r/ps_5merge.result: results updated mysql-test/r/ps_6bdb.result: results updated sql/sql_select.cc: don't shortcut - it backfires! (in particular - when itemptr is Item_param :) --- mysql-test/include/ps_query.inc | 5 +++++ mysql-test/r/ps_2myisam.result | 10 ++++++++++ mysql-test/r/ps_3innodb.result | 10 ++++++++++ mysql-test/r/ps_4heap.result | 10 ++++++++++ mysql-test/r/ps_5merge.result | 20 ++++++++++++++++++++ mysql-test/r/ps_6bdb.result | 10 ++++++++++ sql/sql_select.cc | 2 +- 7 files changed, 66 insertions(+), 1 deletion(-) diff --git a/mysql-test/include/ps_query.inc b/mysql-test/include/ps_query.inc index e22f168dcd7..bc5d3eb6ed1 100644 --- a/mysql-test/include/ps_query.inc +++ b/mysql-test/include/ps_query.inc @@ -246,6 +246,11 @@ select a,b from t1 order by 2 ; prepare stmt1 from ' select a,b from t1 order by ? '; 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 set @arg00=1; diff --git a/mysql-test/r/ps_2myisam.result b/mysql-test/r/ps_2myisam.result index d630730d96f..23ce63cacc3 100644 --- a/mysql-test/r/ps_2myisam.result +++ b/mysql-test/r/ps_2myisam.result @@ -334,6 +334,16 @@ a b 1 one 3 three 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; prepare stmt1 from ' select a,b from t1 limit 1 '; diff --git a/mysql-test/r/ps_3innodb.result b/mysql-test/r/ps_3innodb.result index b89daca7128..8ec7caa311c 100644 --- a/mysql-test/r/ps_3innodb.result +++ b/mysql-test/r/ps_3innodb.result @@ -334,6 +334,16 @@ a b 1 one 3 three 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; prepare stmt1 from ' select a,b from t1 limit 1 '; diff --git a/mysql-test/r/ps_4heap.result b/mysql-test/r/ps_4heap.result index 112ef86a681..fae17eb2e23 100644 --- a/mysql-test/r/ps_4heap.result +++ b/mysql-test/r/ps_4heap.result @@ -335,6 +335,16 @@ a b 1 one 3 three 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; prepare stmt1 from ' select a,b from t1 limit 1 '; diff --git a/mysql-test/r/ps_5merge.result b/mysql-test/r/ps_5merge.result index 8fc035b0aef..5aedebe396f 100644 --- a/mysql-test/r/ps_5merge.result +++ b/mysql-test/r/ps_5merge.result @@ -377,6 +377,16 @@ a b 1 one 3 three 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; prepare stmt1 from ' select a,b from t1 limit 1 '; @@ -1560,6 +1570,16 @@ a b 1 one 3 three 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; prepare stmt1 from ' select a,b from t1 limit 1 '; diff --git a/mysql-test/r/ps_6bdb.result b/mysql-test/r/ps_6bdb.result index eeabd114b91..1c6b309576c 100644 --- a/mysql-test/r/ps_6bdb.result +++ b/mysql-test/r/ps_6bdb.result @@ -334,6 +334,16 @@ a b 1 one 3 three 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; prepare stmt1 from ' select a,b from t1 limit 1 '; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 657853c98ba..487caeb62db 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -8000,7 +8000,7 @@ find_order_in_list(THD *thd, Item **ref_pointer_array, Item *itemptr=*order->item; if (itemptr->type() == Item::INT_ITEM) { /* Order by position */ - uint count= (uint) ((Item_int*)itemptr)->value; + uint count= itemptr->val_int(); if (!count || count > fields.elements) { my_printf_error(ER_BAD_FIELD_ERROR,ER(ER_BAD_FIELD_ERROR), -- cgit v1.2.1