|
Re: RQG: crash in Item_ref::val_str with subquery cache
Partially-simplified test case below. Unfortunately unnecessary fields could not be removed:
CREATE TABLE `C` (
`pk` int(11) NOT NULL AUTO_INCREMENT,
`col_int_nokey` int(11) DEFAULT NULL,
`col_int_key` int(11) DEFAULT NULL,
`col_date_key` date DEFAULT NULL,
`col_date_nokey` date DEFAULT NULL,
`col_time_key` time DEFAULT NULL,
`col_time_nokey` time DEFAULT NULL,
`col_datetime_key` datetime DEFAULT NULL,
`col_datetime_nokey` datetime DEFAULT NULL,
`col_varchar_key` varchar(1) DEFAULT NULL,
`col_varchar_nokey` varchar(1) DEFAULT NULL,
PRIMARY KEY (`pk`),
KEY `col_varchar_key` (`col_varchar_key`,`col_int_key`)
) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=latin1;
INSERT INTO `C` VALUES (19,NULL,6,'2004-08-20','2004-08-20','05:03:03','05:03:03','2007-04-19 00:19:53','2007-04-19 00:19:53','f','f');
INSERT INTO `C` VALUES (20,4,2,'1900-01-01','1900-01-01','18:38:59','18:38:59','1900-01-01 00:00:00','1900-01-01 00:00:00','d','d');
CREATE TABLE `CC` (
`pk` int(11) NOT NULL AUTO_INCREMENT,
`col_int_nokey` int(11) DEFAULT NULL,
`col_int_key` int(11) DEFAULT NULL,
`col_date_key` date DEFAULT NULL,
`col_date_nokey` date DEFAULT NULL,
`col_time_key` time DEFAULT NULL,
`col_time_nokey` time DEFAULT NULL,
`col_datetime_key` datetime DEFAULT NULL,
`col_datetime_nokey` datetime DEFAULT NULL,
`col_varchar_key` varchar(1) DEFAULT NULL,
`col_varchar_nokey` varchar(1) DEFAULT NULL,
PRIMARY KEY (`pk`),
KEY `col_int_key` (`col_int_key`),
KEY `col_date_key` (`col_date_key`),
KEY `col_time_key` (`col_time_key`),
KEY `col_datetime_key` (`col_datetime_key`),
KEY `col_varchar_key` (`col_varchar_key`,`col_int_key`)
) ENGINE=MyISAM AUTO_INCREMENT=30 DEFAULT CHARSET=latin1;
CREATE TABLE `B` (
`pk` int(11) NOT NULL AUTO_INCREMENT,
`col_int_nokey` int(11) DEFAULT NULL,
`col_int_key` int(11) DEFAULT NULL,
`col_date_key` date DEFAULT NULL,
`col_date_nokey` date DEFAULT NULL,
`col_time_key` time DEFAULT NULL,
`col_time_nokey` time DEFAULT NULL,
`col_datetime_key` datetime DEFAULT NULL,
`col_datetime_nokey` datetime DEFAULT NULL,
`col_varchar_key` varchar(1) DEFAULT NULL,
`col_varchar_nokey` varchar(1) DEFAULT NULL,
PRIMARY KEY (`pk`),
KEY `col_int_key` (`col_int_key`),
KEY `col_date_key` (`col_date_key`),
KEY `col_time_key` (`col_time_key`),
KEY `col_datetime_key` (`col_datetime_key`),
KEY `col_varchar_key` (`col_varchar_key`,`col_int_key`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
CREATE TABLE `D` (
`pk` int(11) NOT NULL AUTO_INCREMENT,
`col_int_nokey` int(11) DEFAULT NULL,
`col_int_key` int(11) DEFAULT NULL,
`col_date_key` date DEFAULT NULL,
`col_date_nokey` date DEFAULT NULL,
`col_time_key` time DEFAULT NULL,
`col_time_nokey` time DEFAULT NULL,
`col_datetime_key` datetime DEFAULT NULL,
`col_datetime_nokey` datetime DEFAULT NULL,
`col_varchar_key` varchar(1) DEFAULT NULL,
`col_varchar_nokey` varchar(1) DEFAULT NULL,
PRIMARY KEY (`pk`),
KEY `col_int_key` (`col_int_key`),
KEY `col_date_key` (`col_date_key`),
KEY `col_time_key` (`col_time_key`),
KEY `col_datetime_key` (`col_datetime_key`),
KEY `col_varchar_key` (`col_varchar_key`,`col_int_key`)
) ENGINE=MyISAM AUTO_INCREMENT=101 DEFAULT CHARSET=latin1;
INSERT INTO `D` VALUES (100,2,5,'2001-07-26','2001-07-26','11:49:25','11:49:25','2007-04-25 05:08:49','2007-04-25 05:08:49','f','f');
SET @@optimizer_switch = 'subquery_cache=off';
/* cache is off */ SELECT COUNT( DISTINCT table2 .`col_int_key` ) , (
SELECT SUBQUERY2_t1 .`col_int_key`
FROM B SUBQUERY2_t1 JOIN CC ON SUBQUERY2_t1 .`col_int_key`
WHERE table1 .`col_varchar_key` ) , table2 .`col_varchar_nokey` field10
FROM D table1 JOIN ( C table2 STRAIGHT_JOIN C table3 ON table2 .`pk` ) ON table3 .`col_varchar_key` = table2 .`col_varchar_key`
GROUP BY field10 ;
SET @@optimizer_switch = 'subquery_cache=on';
/* cache is on */ SELECT COUNT( DISTINCT table2 .`col_int_key` ) , (
SELECT SUBQUERY2_t1 .`col_int_key`
FROM B SUBQUERY2_t1 JOIN CC ON SUBQUERY2_t1 .`col_int_key`
WHERE table1 .`col_varchar_key` ) , table2 .`col_varchar_nokey` field10
FROM D table1 JOIN ( C table2 STRAIGHT_JOIN C table3 ON table2 .`pk` ) ON table3 .`col_varchar_key` = table2 .`col_varchar_key`
GROUP BY field10 ;
|
|
Re: RQG: crash in Item_ref::val_str with subquery cache
An almost minimal test case.
CREATE TABLE `C` (
`pk` int(11) NOT NULL AUTO_INCREMENT,
`col_int_nokey` int(11) DEFAULT NULL,
`col_varchar_nokey` varchar(1) DEFAULT NULL,
PRIMARY KEY (`pk`)
);
INSERT INTO `C` VALUES (2,7,'m');
INSERT INTO `C` VALUES (20,4,'d');
CREATE TABLE `D` (
`pk` int(11) NOT NULL AUTO_INCREMENT,
`col_int_nokey` int(11) DEFAULT NULL,
`col_varchar_nokey` varchar(1) DEFAULT NULL,
PRIMARY KEY (`pk`)
);
CREATE TABLE `BB` (
`pk` int(11) NOT NULL AUTO_INCREMENT,
`col_int_nokey` int(11) DEFAULT NULL,
`col_varchar_nokey` varchar(1) DEFAULT NULL,
PRIMARY KEY (`pk`)
);
INSERT INTO `BB` VALUES (10,8,NULL);
SET @@optimizer_switch='subquery_cache=off';
/* cache is off */ SELECT (
SELECT `col_int_nokey`
FROM D
WHERE table1 .`col_varchar_nokey` )
FROM BB table1 JOIN C table2 ON table2 .`pk` ;
SET @@optimizer_switch='subquery_cache=on';
/* cache is on */ SELECT (
SELECT `col_int_nokey`
FROM D
WHERE table1 .`col_varchar_nokey` )
FROM BB table1 JOIN C table2 ON table2 .`pk` ;
|
|
Re: RQG: crash in Item_ref::val_str with subquery cache
If ORDER BY is added to the above query, a different backtrace is observed:
SELECT (
SELECT `col_int_nokey`
FROM D
WHERE table1 .`col_varchar_nokey` ) field13
FROM BB table1 JOIN C table2 ON table2 .`pk`
ORDER BY field13
mysqld: sql_expression_cache.cc:133: void Expression_cache_tmptable::init(): Assertion `*item' failed.
/lib/libc.so.6(__assert_fail+0xf8) [0x897de8]
/home/philips/bzr/maria-5.3/sql/mysqld(Expression_cache_tmptable::init()+0x1ac) [0x8496f20]
/home/philips/bzr/maria-5.3/sql/mysqld(Expression_cache_tmptable::check_value(Item**)+0x51) [0x849748f]
/home/philips/bzr/maria-5.3/sql/mysqld(Item_cache_wrapper::check_cache()+0x5e) [0x81c8556]
/home/philips/bzr/maria-5.3/sql/mysqld(Item_cache_wrapper::val_int()+0xa2) [0x81c87ae]
/home/philips/bzr/maria-5.3/sql/mysqld(Item::send(Protocol*, String*)+0x16f) [0x81c6057]
/home/philips/bzr/maria-5.3/sql/mysqld(Item_cache_wrapper::send(Protocol*, String*)+0x47) [0x81d14c9]
/home/philips/bzr/maria-5.3/sql/mysqld(select_send::send_data(List<Item>&)+0x106) [0x8267a92]
/home/philips/bzr/maria-5.3/sql/mysqld() [0x831fa14]
/home/philips/bzr/maria-5.3/sql/mysqld() [0x831df08]
/home/philips/bzr/maria-5.3/sql/mysqld(sub_select(JOIN*, st_join_table*, bool)+0x1ee) [0x831d8af]
/home/philips/bzr/maria-5.3/sql/mysqld() [0x831ccae]
/home/philips/bzr/maria-5.3/sql/mysqld(JOIN::exec()+0x26f1) [0x83030cf]
/home/philips/bzr/maria-5.3/sql/mysqld(mysql_select(THD*, Item**, TABLE_LIST, unsigned int, List<Item>&, Item*, unsigned int, st_order*, st_order*, Item*, st_order*, unsigned long long, select_result*, st_select_lex_unit*, st_select_lex*)+0x34a) [0x8303802]
/home/philips/bzr/maria-5.3/sql/mysqld(handle_select(THD*, st_lex*, select_result*, unsigned long)+0x1cf) [0x82fbecf]
/home/philips/bzr/maria-5.3/sql/mysqld() [0x829a5f0]
/home/philips/bzr/maria-5.3/sql/mysqld(mysql_execute_command(THD*)+0x881) [0x8290fd0]
/home/philips/bzr/maria-5.3/sql/mysqld(mysql_parse(THD*, char const*, unsigned int, char const**)+0x248) [0x829c7d1]
/home/philips/bzr/maria-5.3/sql/mysqld(dispatch_command(enum_server_command, THD*, char*, unsigned int)+0x8c3) [0x828ea02]
/home/philips/bzr/maria-5.3/sql/mysqld(do_command(THD*)+0x273) [0x828dea8]
/home/philips/bzr/maria-5.3/sql/mysqld(handle_one_connection+0x152) [0x828b008]
|