From e32a982189ed6d28ee4ee9d3e11ec6f1118247b8 Mon Sep 17 00:00:00 2001 From: "bell@sanja.is.com.ua" <> Date: Tue, 5 Nov 2002 21:47:20 +0200 Subject: [PATCH] test of join_free bug --- mysql-test/r/subselect.result | 12 ++++++++++-- mysql-test/t/subselect.test | 12 ++++++++++-- sql/sql_lex.cc | 3 ++- sql/sql_select.cc | 9 ++++++--- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index 1bbc652426a..572834bd742 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -195,7 +195,7 @@ joce SELECT pseudo FROM inscrit WHERE pseudo=(SELECT pseudo FROM inscrit WHERE pseudo LIKE '%joce%'); Subselect returns more than 1 record drop table if exists t1,t2,t3,t4,t5,attend,clinic,inscrit; -drop table if exists searchconthardwarefr3; +drop table if exists searchconthardwarefr3, forumconthardwarefr7; CREATE TABLE `searchconthardwarefr3` ( `topic` mediumint(8) unsigned NOT NULL default '0', `date` date NOT NULL default '0000-00-00', @@ -241,4 +241,12 @@ topic date pseudo 43506 2002-10-02 joce SELECT * from searchconthardwarefr3 where topic IN (SELECT SUM(topic) FROM searchconthardwarefr3); topic date pseudo -drop table searchconthardwarefr3; +CREATE TABLE `forumconthardwarefr7` ( +`numeropost` mediumint(8) unsigned NOT NULL auto_increment, +`maxnumrep` int(10) unsigned NOT NULL default '0', +PRIMARY KEY (`numeropost`), +UNIQUE KEY `maxnumrep` (`maxnumrep`)) TYPE=MyISAM ROW_FORMAT=FIXED; +INSERT INTO forumconthardwarefr7 (numeropost,maxnumrep) VALUES (40143,1),(43506,2); +SELECT SQL_CALC_FOUND_ROWS numeropost,maxnumrep FROM forumconthardwarefr7 WHERE numeropost IN (SELECT topic FROM searchconthardwarefr3 WHERE pseudo='joce' AND date >= '2002-10-06') ORDER BY maxnumrep DESC LIMIT 0,20; +numeropost maxnumrep +drop table searchconthardwarefr3, forumconthardwarefr7; diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index 5e868aaa67f..f86ce7e0429 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -102,7 +102,7 @@ SELECT pseudo FROM inscrit WHERE pseudo=(SELECT pseudo FROM inscrit WHERE pseudo drop table if exists t1,t2,t3,t4,t5,attend,clinic,inscrit; -drop table if exists searchconthardwarefr3; +drop table if exists searchconthardwarefr3, forumconthardwarefr7; CREATE TABLE `searchconthardwarefr3` ( `topic` mediumint(8) unsigned NOT NULL default '0', `date` date NOT NULL default '0000-00-00', @@ -125,4 +125,12 @@ SELECT 1 IN (SELECT 1 FROM searchconthardwarefr3 HAVING a); SELECT * from searchconthardwarefr3 where topic IN (SELECT topic FROM searchconthardwarefr3 GROUP BY date); SELECT * from searchconthardwarefr3 where topic IN (SELECT topic FROM searchconthardwarefr3 GROUP BY date HAVING topic < 4100); SELECT * from searchconthardwarefr3 where topic IN (SELECT SUM(topic) FROM searchconthardwarefr3); -drop table searchconthardwarefr3; \ No newline at end of file +CREATE TABLE `forumconthardwarefr7` ( + `numeropost` mediumint(8) unsigned NOT NULL auto_increment, + `maxnumrep` int(10) unsigned NOT NULL default '0', + PRIMARY KEY (`numeropost`), + UNIQUE KEY `maxnumrep` (`maxnumrep`)) TYPE=MyISAM ROW_FORMAT=FIXED; + +INSERT INTO forumconthardwarefr7 (numeropost,maxnumrep) VALUES (40143,1),(43506,2); +SELECT SQL_CALC_FOUND_ROWS numeropost,maxnumrep FROM forumconthardwarefr7 WHERE numeropost IN (SELECT topic FROM searchconthardwarefr3 WHERE pseudo='joce' AND date >= '2002-10-06') ORDER BY maxnumrep DESC LIMIT 0,20; +drop table searchconthardwarefr3, forumconthardwarefr7; \ No newline at end of file diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 24fea111bdd..8c49680189d 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -927,6 +927,7 @@ void st_select_lex_node::init_query() { next= master= slave= link_next= 0; prev= link_prev= 0; + dependent= 0; } void st_select_lex_node::init_select() @@ -937,7 +938,7 @@ void st_select_lex_node::init_select() select_limit= HA_POS_ERROR; offset_limit= 0; with_sum_func= 0; - create_refs= dependent= 0; + create_refs= 0; } void st_select_lex_unit::init_query() diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 93d48e3e1e0..a1c25eb88e2 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -2915,9 +2915,12 @@ join_free(JOIN *join) free_io_cache(join->table[join->const_tables]); for (tab=join->join_tab,end=tab+join->tables ; tab != end ; tab++) { - delete tab->select; - delete tab->quick; - x_free(tab->cache.buff); + if (!join->select_lex->dependent) + { + delete tab->select; + delete tab->quick; + x_free(tab->cache.buff); + } if (tab->table) { if (tab->table->key_read)