Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Expand table.* properly on a USING or a NATURAL join. Ticket #3522. (CVS 5979) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
06d206ef7d5e433ccde347d63dfcd217 |
User & Date: | drh 2008-12-05 00:00:07.000 |
Context
2008-12-05
| ||
02:36 | Variable name changes in the query optimizer for disambiguation and clarification. Clear space in boolean vectors for new bit values to encode new query plan templates. (CVS 5980) (check-in: 81bd0b5ce8 user: drh tags: trunk) | |
00:00 | Expand table.* properly on a USING or a NATURAL join. Ticket #3522. (CVS 5979) (check-in: 06d206ef7d user: drh tags: trunk) | |
2008-12-04
| ||
22:17 | Fix a segfault that can occur in the RowSet object following a malloc failure. (CVS 5978) (check-in: cb0f1658d3 user: drh tags: trunk) | |
Changes
Changes to src/select.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file contains C code routines that are called by the parser ** to handle SELECT statements in SQLite. ** | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file contains C code routines that are called by the parser ** to handle SELECT statements in SQLite. ** ** $Id: select.c,v 1.489 2008/12/05 00:00:07 drh Exp $ */ #include "sqliteInt.h" /* ** Delete all the content of a Select structure but do not deallocate ** the select structure itself. |
︙ | ︙ | |||
3148 3149 3150 3151 3152 3153 3154 | ** result-set list. */ if( IsHiddenColumn(&pTab->aCol[j]) ){ assert(IsVirtual(pTab)); continue; } | | | 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 | ** result-set list. */ if( IsHiddenColumn(&pTab->aCol[j]) ){ assert(IsVirtual(pTab)); continue; } if( i>0 && zTName==0 ){ struct SrcList_item *pLeft = &pTabList->a[i-1]; if( (pLeft[1].jointype & JT_NATURAL)!=0 && columnIndex(pLeft->pTab, zName)>=0 ){ /* In a NATURAL join, omit the join columns from the ** table on the right */ continue; } |
︙ | ︙ |
Changes to test/join.test.
︙ | ︙ | |||
8 9 10 11 12 13 14 | # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. # # This file implements tests for joins, including outer joins. # | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. # # This file implements tests for joins, including outer joins. # # $Id: join.test,v 1.26 2008/12/05 00:00:07 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl do_test join-1.1 { execsql { CREATE TABLE t1(a,b,c); |
︙ | ︙ | |||
57 58 59 60 61 62 63 64 65 66 67 68 69 70 | } } {b 2 c 3 d 4 a 1 b 3 c 4 d 5 a 2} do_test join-1.3.4 { execsql { SELECT b FROM t1 NATURAL JOIN t2; } } {2 3} do_test join-1.4.1 { execsql2 { SELECT * FROM t1 INNER JOIN t2 USING(b,c); } } {a 1 b 2 c 3 d 4 a 2 b 3 c 4 d 5} do_test join-1.4.2 { execsql2 { | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | } } {b 2 c 3 d 4 a 1 b 3 c 4 d 5 a 2} do_test join-1.3.4 { execsql { SELECT b FROM t1 NATURAL JOIN t2; } } {2 3} # ticket #3522 do_test join-1.3.5 { execsql2 { SELECT t2.* FROM t2 NATURAL JOIN t1 } } {b 2 c 3 d 4 b 3 c 4 d 5} do_test join-1.3.6 { execsql2 { SELECT xyzzy.* FROM t2 AS xyzzy NATURAL JOIN t1 } } {b 2 c 3 d 4 b 3 c 4 d 5} do_test join-1.3.7 { execsql2 { SELECT t1.* FROM t2 NATURAL JOIN t1 } } {a 1 b 2 c 3 a 2 b 3 c 4} do_test join-1.3.8 { execsql2 { SELECT xyzzy.* FROM t2 NATURAL JOIN t1 AS xyzzy } } {a 1 b 2 c 3 a 2 b 3 c 4} do_test join-1.3.9 { execsql2 { SELECT aaa.*, bbb.* FROM t2 AS aaa NATURAL JOIN t1 AS bbb } } {b 2 c 3 d 4 a 1 b 2 c 3 b 3 c 4 d 5 a 2 b 3 c 4} do_test join-1.3.10 { execsql2 { SELECT t1.*, t2.* FROM t2 NATURAL JOIN t1 } } {a 1 b 2 c 3 b 2 c 3 d 4 a 2 b 3 c 4 b 3 c 4 d 5} do_test join-1.4.1 { execsql2 { SELECT * FROM t1 INNER JOIN t2 USING(b,c); } } {a 1 b 2 c 3 d 4 a 2 b 3 c 4 d 5} do_test join-1.4.2 { execsql2 { |
︙ | ︙ | |||
82 83 84 85 86 87 88 89 90 91 92 93 94 95 | } } {a 1 b 2 c 3 d 4 a 2 b 3 c 4 d 5} do_test join-1.4.5 { execsql { SELECT b FROM t1 JOIN t2 USING(b); } } {2 3} do_test join-1.5 { execsql2 { SELECT * FROM t1 INNER JOIN t2 USING(b); } } {a 1 b 2 c 3 c 3 d 4 a 2 b 3 c 4 c 4 d 5} do_test join-1.6 { execsql2 { | > > > > > > > > > > > > > | 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | } } {a 1 b 2 c 3 d 4 a 2 b 3 c 4 d 5} do_test join-1.4.5 { execsql { SELECT b FROM t1 JOIN t2 USING(b); } } {2 3} # Ticket #3522 do_test join-1.4.6 { execsql2 { SELECT t1.* FROM t1 JOIN t2 USING(b); } } {a 1 b 2 c 3 a 2 b 3 c 4} do_test join-1.4.7 { execsql2 { SELECT t2.* FROM t1 JOIN t2 USING(b); } } {b 2 c 3 d 4 b 3 c 4 d 5} do_test join-1.5 { execsql2 { SELECT * FROM t1 INNER JOIN t2 USING(b); } } {a 1 b 2 c 3 c 3 d 4 a 2 b 3 c 4 c 4 d 5} do_test join-1.6 { execsql2 { |
︙ | ︙ | |||
188 189 190 191 192 193 194 195 196 197 198 199 200 201 | } {1 2 3 4 5} do_test join-2.1 { execsql { SELECT * FROM t1 NATURAL LEFT JOIN t2; } } {1 2 3 4 2 3 4 5 3 4 5 {}} do_test join-2.2 { execsql { SELECT * FROM t2 NATURAL LEFT OUTER JOIN t1; } } {1 2 3 {} 2 3 4 1 3 4 5 2} do_test join-2.3 { catchsql { | > > > > > > > > > > > > > > > > > > | 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 | } {1 2 3 4 5} do_test join-2.1 { execsql { SELECT * FROM t1 NATURAL LEFT JOIN t2; } } {1 2 3 4 2 3 4 5 3 4 5 {}} # ticket #3522 do_test join-2.1.1 { execsql2 { SELECT * FROM t1 NATURAL LEFT JOIN t2; } } {a 1 b 2 c 3 d 4 a 2 b 3 c 4 d 5 a 3 b 4 c 5 d {}} do_test join-2.1.2 { execsql2 { SELECT t1.* FROM t1 NATURAL LEFT JOIN t2; } } {a 1 b 2 c 3 a 2 b 3 c 4 a 3 b 4 c 5} do_test join-2.1.3 { execsql2 { SELECT t2.* FROM t1 NATURAL LEFT JOIN t2; } } {b 2 c 3 d 4 b 3 c 4 d 5 b {} c {} d {}} do_test join-2.2 { execsql { SELECT * FROM t2 NATURAL LEFT OUTER JOIN t1; } } {1 2 3 {} 2 3 4 1 3 4 5 2} do_test join-2.3 { catchsql { |
︙ | ︙ |
Added test/tkt3522.test.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | # 2008 December 4 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. # # This file is a verification that the bugs identified in ticket # #3522 have been fixed. # # $Id: tkt3522.test,v 1.1 2008/12/05 00:00:07 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl do_test tkt3522-1.1 { db eval { CREATE TABLE tab4( col0 INTEGER, col1 INTEGER, col2 INTEGER, col3 INTEGER, col4 INTEGER ); SELECT cor1.* FROM tab4 AS cor0 JOIN tab4 AS cor1 USING ( col4, col3, col2, col1, col0 ); } } {} do_test tkt3522-1.2 { db eval { CREATE TABLE tab1(col0 INTEGER); CREATE TABLE tab2(col0 INTEGER); SELECT cor0.* FROM tab1 NATURAL JOIN tab2 AS cor0; } } {} finish_test |