mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
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.
This commit is contained in:
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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)
|
||||
|
Reference in New Issue
Block a user