Details
-
Type:
Bug
-
Status: Closed
-
Priority:
Critical
-
Resolution: Fixed
-
Affects Version/s: None
-
Fix Version/s: None
-
Component/s: None
-
Labels:
Description
When the following query:
SELECT table1 .`col_varchar_key`
FROM (
SELECT *
FROM BB ) table1 STRAIGHT_JOIN B ON ( 'd' , 'f' ) IN (
SELECT `col_varchar_nokey` SUBQUERY2_field1 , `col_varchar_nokey`
FROM view_B )
is executed with subquery cache by preparing it and running it twice, the server returns the following error:
1054: 'Unknown column 'materialized subselect.SUBQUERY2_field1' in 'order clause'
The main problem aside, it may not be wise to output optimizer-internal information in error messages. A generic "internal optimizer error" or a direct assertion may be less confusing than a message about a table or a column the user never created herself.
Gliffy Diagrams
Attachments
Activity
- All
- Comments
- Work Log
- History
- Activity
- Transitions
Re: 'Unknown column' when re-executing a prepared query optimized with subquery caching
Test case. Views seem to be required for this particular query, but the bug has also been observed without them.
SET LOCAL optimizer_switch = 'partial_match_rowid_merge=off,partial_match_table_scan=off,semijoin=off';
CREATE TABLE `BB` (
`col_int_key` int(11) NOT NULL,
`col_varchar_key` varchar(1) NOT NULL,
`col_varchar_nokey` varchar(1) NOT NULL,
KEY `col_int_key` (`col_int_key`),
KEY `col_varchar_key` (`col_varchar_key`,`col_int_key`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `BB` VALUES (9,'p','p');
CREATE TABLE `B` (
`col_int_key` int(11) NOT NULL,
`col_varchar_key` varchar(1) NOT NULL,
`col_varchar_nokey` varchar(1) NOT NULL,
KEY `col_int_key` (`col_int_key`),
KEY `col_varchar_key` (`col_varchar_key`,`col_int_key`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `B` VALUES (7,'p','p');
CREATE VIEW view_B AS SELECT * FROM B;
PREPARE st1 FROM "
SELECT table1 .`col_varchar_key`
FROM (
SELECT *
FROM BB ) table1 STRAIGHT_JOIN B ON ( 'd' , 'f' ) IN (
SELECT `col_varchar_nokey` SUBQUERY2_field1 , `col_varchar_nokey`
FROM view_B ) ";
EXECUTE st1;
--error 0
EXECUTE st1;
DEALLOCATE PREPARE st1;