summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <joerg@trift2.>2007-09-14 19:21:02 +0200
committerunknown <joerg@trift2.>2007-09-14 19:21:02 +0200
commit5796be400360422f46237dadedd955989a7da552 (patch)
tree3a28a9d2838b6a9c8ef0d588e85dad944eef728a
parent54b5ec2bcd1254d3f2df3aa11e12ed90f96c539a (diff)
parent02596fcde5dc650f2001fd0fb63351386b5588b3 (diff)
downloadmariadb-git-5796be400360422f46237dadedd955989a7da552.tar.gz
Merge trift2.:/MySQL/M41/mysql-4.1
into trift2.:/MySQL/M41/push-4.1
-rw-r--r--mysql-test/r/delete.result11
-rw-r--r--mysql-test/t/delete.test13
-rw-r--r--sql/opt_range.cc3
3 files changed, 26 insertions, 1 deletions
diff --git a/mysql-test/r/delete.result b/mysql-test/r/delete.result
index a5c22e66569..5dd37e6b98d 100644
--- a/mysql-test/r/delete.result
+++ b/mysql-test/r/delete.result
@@ -193,4 +193,15 @@ 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
diff --git a/mysql-test/t/delete.test b/mysql-test/t/delete.test
index 301b2cdbb99..fdbb96e0c2f 100644
--- a/mysql-test/t/delete.test
+++ b/mysql-test/t/delete.test
@@ -184,4 +184,17 @@ 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
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index 01b366077b0..a8ba609f9dc 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -825,6 +825,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;
/*
@@ -834,7 +835,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 &&