Loading mysql-test/r/delete.result +12 −0 Original line number Diff line number Diff line Loading @@ -183,6 +183,18 @@ select @a; @a 1 drop table t1; CREATE TABLE t1 ( `date` date , `time` time , `seq` int(10) unsigned NOT NULL auto_increment, PRIMARY KEY (`seq`), KEY `seq` (`seq`), KEY `time` (`time`), KEY `date` (`date`) ); DELETE FROM t1 ORDER BY date ASC, time ASC LIMIT 1; drop table t1; End of 4.1 tests End of 4.1 tests CREATE TABLE t1 (a int not null,b int not null); CREATE TABLE t2 (a int not null, b int not null, primary key (a,b)); Loading mysql-test/t/delete.test +13 −0 Original line number Diff line number Diff line Loading @@ -173,6 +173,19 @@ delete from t1 where (@a:= f1) order by f1 limit 1; select @a; drop table t1; # BUG#30385 "Server crash when deleting with order by and limit" CREATE TABLE t1 ( `date` date , `time` time , `seq` int(10) unsigned NOT NULL auto_increment, PRIMARY KEY (`seq`), KEY `seq` (`seq`), KEY `time` (`time`), KEY `date` (`date`) ); DELETE FROM t1 ORDER BY date ASC, time ASC LIMIT 1; drop table t1; --echo End of 4.1 tests # End of 4.1 tests Loading sql/opt_range.cc +2 −1 Original line number Diff line number Diff line Loading @@ -1619,6 +1619,7 @@ uint get_index_for_order(TABLE *table, ORDER *order, ha_rows limit) if (!(table->keys_in_use_for_query.is_set(idx))) continue; KEY_PART_INFO *keyinfo= table->key_info[idx].key_part; uint n_parts= table->key_info[idx].key_parts; uint partno= 0; /* Loading @@ -1628,7 +1629,7 @@ uint get_index_for_order(TABLE *table, ORDER *order, ha_rows limit) */ if (!(table->file->index_flags(idx, 0, 1) & HA_READ_ORDER)) continue; for (ord= order; ord; ord= ord->next, partno++) for (ord= order; ord && partno < n_parts; ord= ord->next, partno++) { Item *item= order->item[0]; if (!(item->type() == Item::FIELD_ITEM && Loading Loading
mysql-test/r/delete.result +12 −0 Original line number Diff line number Diff line Loading @@ -183,6 +183,18 @@ select @a; @a 1 drop table t1; CREATE TABLE t1 ( `date` date , `time` time , `seq` int(10) unsigned NOT NULL auto_increment, PRIMARY KEY (`seq`), KEY `seq` (`seq`), KEY `time` (`time`), KEY `date` (`date`) ); DELETE FROM t1 ORDER BY date ASC, time ASC LIMIT 1; drop table t1; End of 4.1 tests End of 4.1 tests CREATE TABLE t1 (a int not null,b int not null); CREATE TABLE t2 (a int not null, b int not null, primary key (a,b)); Loading
mysql-test/t/delete.test +13 −0 Original line number Diff line number Diff line Loading @@ -173,6 +173,19 @@ delete from t1 where (@a:= f1) order by f1 limit 1; select @a; drop table t1; # BUG#30385 "Server crash when deleting with order by and limit" CREATE TABLE t1 ( `date` date , `time` time , `seq` int(10) unsigned NOT NULL auto_increment, PRIMARY KEY (`seq`), KEY `seq` (`seq`), KEY `time` (`time`), KEY `date` (`date`) ); DELETE FROM t1 ORDER BY date ASC, time ASC LIMIT 1; drop table t1; --echo End of 4.1 tests # End of 4.1 tests Loading
sql/opt_range.cc +2 −1 Original line number Diff line number Diff line Loading @@ -1619,6 +1619,7 @@ uint get_index_for_order(TABLE *table, ORDER *order, ha_rows limit) if (!(table->keys_in_use_for_query.is_set(idx))) continue; KEY_PART_INFO *keyinfo= table->key_info[idx].key_part; uint n_parts= table->key_info[idx].key_parts; uint partno= 0; /* Loading @@ -1628,7 +1629,7 @@ uint get_index_for_order(TABLE *table, ORDER *order, ha_rows limit) */ if (!(table->file->index_flags(idx, 0, 1) & HA_READ_ORDER)) continue; for (ord= order; ord; ord= ord->next, partno++) for (ord= order; ord && partno < n_parts; ord= ord->next, partno++) { Item *item= order->item[0]; if (!(item->type() == Item::FIELD_ITEM && Loading