Merge lp:~linuxjedi/drizzle/trunk-bug-632755 into lp:drizzle/7.0

Proposed by Andrew Hutchings
Status: Merged
Approved by: Brian Aker
Approved revision: 2040
Merged at revision: 2042
Proposed branch: lp:~linuxjedi/drizzle/trunk-bug-632755
Merge into: lp:drizzle/7.0
Diff against target: 103 lines (+68/-1)
3 files modified
drizzled/join.cc (+6/-1)
tests/suite/regression/r/632755.result (+27/-0)
tests/suite/regression/t/632755.test (+35/-0)
To merge this branch: bzr merge lp:~linuxjedi/drizzle/trunk-bug-632755
Reviewer Review Type Date Requested Status
Drizzle Developers Pending
Review via email: mp+44882@code.launchpad.net

Description of the change

It is possible for there to be a 'join_tab' pointer but no 'table' pointer in a Join object at Join::cleanup(). If this happened and the join_tab had an open RND cursor this could cause an assert() to be triggered as the cursor is still open at the end of the query.

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'drizzled/join.cc'
2--- drizzled/join.cc 2010-12-25 00:28:49 +0000
3+++ drizzled/join.cc 2010-12-30 00:37:05 +0000
4@@ -1886,7 +1886,6 @@
5 {
6 if (table)
7 {
8- JoinTable *tab,*end;
9 /*
10 Only a sorted table may be cached. This sorted table is always the
11 first non const table in join->table
12@@ -1896,6 +1895,11 @@
13 table[const_tables]->free_io_cache();
14 table[const_tables]->filesort_free_buffers(full);
15 }
16+ }
17+
18+ if (join_tab)
19+ {
20+ JoinTable *tab,*end;
21
22 if (full)
23 {
24@@ -1912,6 +1916,7 @@
25 }
26 }
27 }
28+
29 /*
30 We are not using tables anymore
31 Unlock all tables. We may be in an INSERT .... SELECT statement.
32
33=== added file 'tests/suite/regression/r/632755.result'
34--- tests/suite/regression/r/632755.result 1970-01-01 00:00:00 +0000
35+++ tests/suite/regression/r/632755.result 2010-12-30 00:37:05 +0000
36@@ -0,0 +1,27 @@
37+DROP TABLE IF EXISTS AA;
38+DROP TABLE IF EXISTS BB;
39+CREATE TABLE `aa` (
40+`pk` int NOT NULL DEFAULT '0',
41+`col_text_not_null_key` text NOT NULL,
42+`col_int_not_null_key` int NOT NULL,
43+`col_bigint_not_null_key` bigint NOT NULL,
44+`col_enum_not_null_key` enum('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z') NOT NULL,
45+`col_int_key` int DEFAULT NULL,
46+`col_int` int DEFAULT NULL,
47+`col_char_1024_not_null_key` varchar(1024) NOT NULL
48+) ENGINE=InnoDB COLLATE = utf8_general_ci;
49+INSERT INTO `aa` VALUES (1,'',-523436032,-6388637546401759232,'s',2071265280,9,'well'),(2,'',1,5,'p',1,-1692139520,'on'),(3,'',621543424,1,'n',NULL,4,'ASUNK'),(4,'',880148480,-9123448420122492928,'o',1734213632,9,'d'),(5,'',1963982848,9,'b',1505558528,-1091567616,'m'),(6,'',8,6,'c',8,126156800,'to'),(7,'',1445462016,5,'p',NULL,534904832,'t'),(8,'',0,5903374686552588288,'i',-1685520384,8,'m'),(9,'',-747241472,2,'f',NULL,NULL,'USQVA'),(10,'',6,-3207125884641214464,'p',-1431502848,NULL,'FUBQO');
50+CREATE TABLE `bb` (
51+`pk` int NOT NULL DEFAULT '0',
52+`col_text` text,
53+`col_text_not_null_key` text NOT NULL,
54+`col_char_1024_key` varchar(1024) DEFAULT NULL,
55+`col_char_10_not_null` varchar(10) NOT NULL,
56+`col_char_1024_not_null_key` varchar(1024) NOT NULL,
57+`col_bigint_key` bigint DEFAULT NULL
58+) ENGINE=InnoDB COLLATE = utf8_general_ci;
59+INSERT INTO `bb` VALUES (1,NULL,'','ANVSO','f','IHTVZ',NULL),(2,NULL,'','JBJPT','GQPHI','a',NULL),(3,NULL,'','KAHJT','her','s',-647673921411219456),(4,NULL,'','q','you','d',-5702401553181179904),(5,NULL,'','l','but','TTNNK',NULL),(6,NULL,'','ULWFL','XDMGU','GKTRR',4),(7,NULL,'','YOIXU','NGHIX','ZZDWO',NULL),(8,NULL,'','that\'s','u','up',8),(9,NULL,'','ZPPIG','l','would',NULL),(10,NULL,'','like','MDJAH','JNAFV',NULL);
60+SELECT table1 . `col_text_not_null_key` AS field1 , table2 . `col_int_not_null_key` AS field2 , table2 . `col_bigint_not_null_key` AS field3 , table1 . `col_enum_not_null_key` AS field4 FROM ( AA AS table1 STRAIGHT_JOIN AA AS table2 ON (table2 . `pk` = table1 . `col_int_key` ) ) WHERE ( table1 . `col_int_key` IN ( SELECT 1 UNION SELECT 5 ) ) AND ( table1 . `pk` != table1 . `col_int` OR table1 . `col_int` < table1 . `col_int` ) GROUP BY field1, field2, field3, field4 HAVING ( 'm', 'u' ) IN ( SELECT SUBQUERY2_t1 . `col_text` AS SUBQUERY2_field1 , SUBQUERY2_t1 . `col_text_not_null_key` AS SUBQUERY2_field2 FROM ( BB AS SUBQUERY2_t1 RIGHT JOIN BB AS SUBQUERY2_t2 ON (SUBQUERY2_t2 . `col_char_1024_key` = SUBQUERY2_t1 . `col_char_10_not_null` ) ) WHERE ( SUBQUERY2_t1 . `col_text` > SUBQUERY2_t1 . `col_char_1024_not_null_key` AND SUBQUERY2_t2 . `col_bigint_key` < SUBQUERY2_t2 . `col_bigint_key` ) ) ORDER BY table1 . `col_char_1024_not_null_key` , field1 DESC , table1 . `col_text_not_null_key` ASC, field1, field2, field3, field4 LIMIT 2 ;
61+field1 field2 field3 field4
62+DROP TABLE AA;
63+DROP TABLE BB;
64
65=== added file 'tests/suite/regression/t/632755.test'
66--- tests/suite/regression/t/632755.test 1970-01-01 00:00:00 +0000
67+++ tests/suite/regression/t/632755.test 2010-12-30 00:37:05 +0000
68@@ -0,0 +1,35 @@
69+--disable_warnings
70+DROP TABLE IF EXISTS AA;
71+DROP TABLE IF EXISTS BB;
72+--enable_warnings
73+
74+CREATE TABLE `aa` (
75+ `pk` int NOT NULL DEFAULT '0',
76+ `col_text_not_null_key` text NOT NULL,
77+ `col_int_not_null_key` int NOT NULL,
78+ `col_bigint_not_null_key` bigint NOT NULL,
79+ `col_enum_not_null_key` enum('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z') NOT NULL,
80+ `col_int_key` int DEFAULT NULL,
81+ `col_int` int DEFAULT NULL,
82+ `col_char_1024_not_null_key` varchar(1024) NOT NULL
83+) ENGINE=InnoDB COLLATE = utf8_general_ci;
84+
85+INSERT INTO `aa` VALUES (1,'',-523436032,-6388637546401759232,'s',2071265280,9,'well'),(2,'',1,5,'p',1,-1692139520,'on'),(3,'',621543424,1,'n',NULL,4,'ASUNK'),(4,'',880148480,-9123448420122492928,'o',1734213632,9,'d'),(5,'',1963982848,9,'b',1505558528,-1091567616,'m'),(6,'',8,6,'c',8,126156800,'to'),(7,'',1445462016,5,'p',NULL,534904832,'t'),(8,'',0,5903374686552588288,'i',-1685520384,8,'m'),(9,'',-747241472,2,'f',NULL,NULL,'USQVA'),(10,'',6,-3207125884641214464,'p',-1431502848,NULL,'FUBQO');
86+
87+CREATE TABLE `bb` (
88+ `pk` int NOT NULL DEFAULT '0',
89+ `col_text` text,
90+ `col_text_not_null_key` text NOT NULL,
91+ `col_char_1024_key` varchar(1024) DEFAULT NULL,
92+ `col_char_10_not_null` varchar(10) NOT NULL,
93+ `col_char_1024_not_null_key` varchar(1024) NOT NULL,
94+ `col_bigint_key` bigint DEFAULT NULL
95+) ENGINE=InnoDB COLLATE = utf8_general_ci;
96+
97+INSERT INTO `bb` VALUES (1,NULL,'','ANVSO','f','IHTVZ',NULL),(2,NULL,'','JBJPT','GQPHI','a',NULL),(3,NULL,'','KAHJT','her','s',-647673921411219456),(4,NULL,'','q','you','d',-5702401553181179904),(5,NULL,'','l','but','TTNNK',NULL),(6,NULL,'','ULWFL','XDMGU','GKTRR',4),(7,NULL,'','YOIXU','NGHIX','ZZDWO',NULL),(8,NULL,'','that\'s','u','up',8),(9,NULL,'','ZPPIG','l','would',NULL),(10,NULL,'','like','MDJAH','JNAFV',NULL);
98+
99+SELECT table1 . `col_text_not_null_key` AS field1 , table2 . `col_int_not_null_key` AS field2 , table2 . `col_bigint_not_null_key` AS field3 , table1 . `col_enum_not_null_key` AS field4 FROM ( AA AS table1 STRAIGHT_JOIN AA AS table2 ON (table2 . `pk` = table1 . `col_int_key` ) ) WHERE ( table1 . `col_int_key` IN ( SELECT 1 UNION SELECT 5 ) ) AND ( table1 . `pk` != table1 . `col_int` OR table1 . `col_int` < table1 . `col_int` ) GROUP BY field1, field2, field3, field4 HAVING ( 'm', 'u' ) IN ( SELECT SUBQUERY2_t1 . `col_text` AS SUBQUERY2_field1 , SUBQUERY2_t1 . `col_text_not_null_key` AS SUBQUERY2_field2 FROM ( BB AS SUBQUERY2_t1 RIGHT JOIN BB AS SUBQUERY2_t2 ON (SUBQUERY2_t2 . `col_char_1024_key` = SUBQUERY2_t1 . `col_char_10_not_null` ) ) WHERE ( SUBQUERY2_t1 . `col_text` > SUBQUERY2_t1 . `col_char_1024_not_null_key` AND SUBQUERY2_t2 . `col_bigint_key` < SUBQUERY2_t2 . `col_bigint_key` ) ) ORDER BY table1 . `col_char_1024_not_null_key` , field1 DESC , table1 . `col_text_not_null_key` ASC, field1, field2, field3, field4 LIMIT 2 ;
100+
101+DROP TABLE AA;
102+DROP TABLE BB;
103+

Subscribers

People subscribed via source and target branches