From ac4c0538529c0bf351d116b0b9d2c58c7fc3bc35 Mon Sep 17 00:00:00 2001
From: unknown <hf@deer.(none)>
Date: Sun, 22 Aug 2004 00:06:19 +0500
Subject: [PATCH] Proposed fix for bug #5003 (subselect with MIN() and LIKE
 crashes server) We have next problem here: active_index is wrong in the
 subselect's handler on the second val_int() call. Optimizer sees that we can
 use index-read for that kind of condition, and matching_cond()
 (sql/opt_sum.cc) doesn't. I suspect, proper solution is to add appropriate
 code to the matching_cond() but now just added missed initialization.

mysql-test/r/subselect.result:
  Appropriate test result
mysql-test/t/subselect.test:
  Test case added
sql/records.cc:
  index's initialization added
---
 mysql-test/r/subselect.result | 10 ++++++++++
 mysql-test/t/subselect.test   | 12 ++++++++++++
 sql/records.cc                |  3 +++
 3 files changed, 25 insertions(+)

diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result
index fe7ffa9b661..720309b3892 100644
--- a/mysql-test/r/subselect.result
+++ b/mysql-test/r/subselect.result
@@ -1912,3 +1912,13 @@ a
 1
 2
 drop table t1,t2;
+CREATE TABLE t1(`IZAVORGANG_ID` VARCHAR(11) CHARACTER SET latin1 COLLATE latin1_bin,`KUERZEL` VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_bin,`IZAANALYSEART_ID` VARCHAR(11) CHARACTER SET latin1 COLLATE latin1_bin,`IZAPMKZ_ID` VARCHAR(11) CHARACTER SET latin1 COLLATE latin1_bin);
+CREATE INDEX AK01IZAVORGANG ON t1(izaAnalyseart_id,Kuerzel);
+INSERT INTO t1(`IZAVORGANG_ID`,`KUERZEL`,`IZAANALYSEART_ID`,`IZAPMKZ_ID`)VALUES('D0000000001','601','D0000000001','I0000000001');
+INSERT INTO t1(`IZAVORGANG_ID`,`KUERZEL`,`IZAANALYSEART_ID`,`IZAPMKZ_ID`)VALUES('D0000000002','602','D0000000001','I0000000001');
+INSERT INTO t1(`IZAVORGANG_ID`,`KUERZEL`,`IZAANALYSEART_ID`,`IZAPMKZ_ID`)VALUES('D0000000003','603','D0000000001','I0000000001');
+INSERT INTO t1(`IZAVORGANG_ID`,`KUERZEL`,`IZAANALYSEART_ID`,`IZAPMKZ_ID`)VALUES('D0000000004','101','D0000000001','I0000000001');
+SELECT `IZAVORGANG_ID` FROM t1 WHERE `KUERZEL` IN(SELECT MIN(`KUERZEL`)`Feld1` FROM t1 WHERE `KUERZEL` LIKE'601%'And`IZAANALYSEART_ID`='D0000000001');
+IZAVORGANG_ID
+D0000000001
+drop table t1;
diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test
index 02a570b1db3..4bb0be02b01 100644
--- a/mysql-test/t/subselect.test
+++ b/mysql-test/t/subselect.test
@@ -1235,3 +1235,15 @@ select a from t2 where a in (select a from t1 where match(b) against ('Ball') >
 drop table t1,t2;
 
 
+#
+# BUG#5003 - like in subselect
+#
+CREATE TABLE t1(`IZAVORGANG_ID` VARCHAR(11) CHARACTER SET latin1 COLLATE latin1_bin,`KUERZEL` VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_bin,`IZAANALYSEART_ID` VARCHAR(11) CHARACTER SET latin1 COLLATE latin1_bin,`IZAPMKZ_ID` VARCHAR(11) CHARACTER SET latin1 COLLATE latin1_bin);
+CREATE INDEX AK01IZAVORGANG ON t1(izaAnalyseart_id,Kuerzel);
+INSERT INTO t1(`IZAVORGANG_ID`,`KUERZEL`,`IZAANALYSEART_ID`,`IZAPMKZ_ID`)VALUES('D0000000001','601','D0000000001','I0000000001');
+INSERT INTO t1(`IZAVORGANG_ID`,`KUERZEL`,`IZAANALYSEART_ID`,`IZAPMKZ_ID`)VALUES('D0000000002','602','D0000000001','I0000000001');
+INSERT INTO t1(`IZAVORGANG_ID`,`KUERZEL`,`IZAANALYSEART_ID`,`IZAPMKZ_ID`)VALUES('D0000000003','603','D0000000001','I0000000001');
+INSERT INTO t1(`IZAVORGANG_ID`,`KUERZEL`,`IZAANALYSEART_ID`,`IZAPMKZ_ID`)VALUES('D0000000004','101','D0000000001','I0000000001');
+SELECT `IZAVORGANG_ID` FROM t1 WHERE `KUERZEL` IN(SELECT MIN(`KUERZEL`)`Feld1` FROM t1 WHERE `KUERZEL` LIKE'601%'And`IZAANALYSEART_ID`='D0000000001');
+drop table t1;
+
diff --git a/sql/records.cc b/sql/records.cc
index 94634d30759..5a969ef9c20 100644
--- a/sql/records.cc
+++ b/sql/records.cc
@@ -101,6 +101,9 @@ void init_read_record(READ_RECORD *info,THD *thd, TABLE *table,
   else if (select && select->quick)
   {
     DBUG_PRINT("info",("using rr_quick"));
+
+    if (!table->file->inited)
+      table->file->ha_index_init(select->quick->index);
     info->read_record=rr_quick;
   }
   else if (table->sort.record_pointers)