Browse Source

MDEV-5505: Assertion `! is_set()' fails on PREPARE SELECT with out of range in GROUP BY

Fixed error processing in find_order_in_list(): if an error reported to user there is no sens to continue.
pull/73/head
unknown 12 years ago
parent
commit
528df1df45
  1. 11
      mysql-test/r/ps.result
  2. 15
      mysql-test/t/ps.test
  3. 2
      sql/sql_select.cc

11
mysql-test/r/ps.result

@ -4041,3 +4041,14 @@ DEALLOCATE PREPARE stmt;
DROP VIEW v2;
DROP TABLE t1, t2;
# End of 5.3 tests
#
# MDEV-5505: Assertion `! is_set()' fails on PREPARE SELECT
# with out of range in GROUP BY
#
CREATE TABLE t1 (a INT);
PREPARE stmt FROM "SELECT 1 FROM t1 GROUP BY 0 OR 18446744073709551615+1";
ERROR 22003: BIGINT UNSIGNED value is out of range in '(18446744073709551615 + 1)'
SELECT 1 FROM t1 GROUP BY 0 OR 18446744073709551615+1;
ERROR 22003: BIGINT UNSIGNED value is out of range in '(18446744073709551615 + 1)'
drop table t1;
# End of 5.3 tests

15
mysql-test/t/ps.test

@ -3618,3 +3618,18 @@ DROP VIEW v2;
DROP TABLE t1, t2;
--echo # End of 5.3 tests
--echo #
--echo # MDEV-5505: Assertion `! is_set()' fails on PREPARE SELECT
--echo # with out of range in GROUP BY
--echo #
CREATE TABLE t1 (a INT);
--error ER_DATA_OUT_OF_RANGE
PREPARE stmt FROM "SELECT 1 FROM t1 GROUP BY 0 OR 18446744073709551615+1";
--error ER_DATA_OUT_OF_RANGE
SELECT 1 FROM t1 GROUP BY 0 OR 18446744073709551615+1;
drop table t1;
--echo # End of 5.3 tests

2
sql/sql_select.cc

@ -20435,7 +20435,7 @@ find_order_in_list(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables,
if (!order_item->fixed &&
(order_item->fix_fields(thd, order->item) ||
(order_item= *order->item)->check_cols(1) ||
thd->is_fatal_error))
thd->is_error()))
return TRUE; /* Wrong field. */
uint el= all_fields.elements;

Loading…
Cancel
Save