Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a bug in subquery generation when the subquery is a compound select. Also added new tests to cover this case. (CVS 435) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
aaf7fd4cef04d3d70a0444aad1b606bf |
User & Date: | drh 2002-03-23 00:31:29.000 |
Context
2002-03-23
| ||
00:52 | The sqlite_get_table() function now returns an error if you pass in two or more SELECT statements that return different numbers of columns. (CVS 436) (check-in: e2558c3403 user: drh tags: trunk) | |
00:31 | Fix a bug in subquery generation when the subquery is a compound select. Also added new tests to cover this case. (CVS 435) (check-in: aaf7fd4cef user: drh tags: trunk) | |
2002-03-20
| ||
01:05 | Version 2.4.2 (CVS 441) (check-in: 49d0323255 user: drh tags: trunk) | |
Changes
Changes to VERSION.
|
| | | 1 | 2.4.3 |
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.77 2002/03/23 00:31:29 drh Exp $ */ #include "sqliteInt.h" /* ** Allocate a new Select structure and return a pointer to that ** structure. */ |
︙ | ︙ | |||
605 606 607 608 609 610 611 612 613 614 615 616 617 618 | return 1; } /* Make sure we have a valid query engine. If not, create a new one. */ v = sqliteGetVdbe(pParse); if( v==0 ) return 1; /* Process the UNION or INTERSECTION */ base = pParse->nTab; switch( p->op ){ case TK_ALL: case TK_EXCEPT: | > > > > > > > | 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 | return 1; } /* Make sure we have a valid query engine. If not, create a new one. */ v = sqliteGetVdbe(pParse); if( v==0 ) return 1; /* Create the destination temporary table if necessary */ if( eDest==SRT_TempTable ){ sqliteVdbeAddOp(v, OP_OpenTemp, iParm, 0); eDest = SRT_Table; } /* Process the UNION or INTERSECTION */ base = pParse->nTab; switch( p->op ){ case TK_ALL: case TK_EXCEPT: |
︙ | ︙ |
Changes to test/select6.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. The # focus of this file is testing SELECT statements that contain # subqueries in their FROM clause. # | | | 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. The # focus of this file is testing SELECT statements that contain # subqueries in their FROM clause. # # $Id: select6.test,v 1.8 2002/03/23 00:31:29 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl do_test select6-1.0 { execsql { BEGIN; |
︙ | ︙ | |||
287 288 289 290 291 292 293 294 295 | SELECT a,x,b FROM (SELECT x+3 AS 'a', x FROM t1 WHERE y=3), (SELECT x AS 'b' FROM t1 WHERE y=4) WHERE a=b ORDER BY a } } {8 5 8 9 6 9 10 7 10} finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 | SELECT a,x,b FROM (SELECT x+3 AS 'a', x FROM t1 WHERE y=3), (SELECT x AS 'b' FROM t1 WHERE y=4) WHERE a=b ORDER BY a } } {8 5 8 9 6 9 10 7 10} # Tests of compound sub-selects # do_test select5-6.1 { execsql { DELETE FROM t1 WHERE x>4; SELECT * FROM t1 } } {1 1 2 2 3 2 4 3} do_test select6-6.2 { execsql { SELECT * FROM ( SELECT x AS 'a' FROM t1 UNION ALL SELECT x+10 AS 'a' FROM t1 ) ORDER BY a; } } {1 2 3 4 11 12 13 14} do_test select6-6.3 { execsql { SELECT * FROM ( SELECT x AS 'a' FROM t1 UNION ALL SELECT x+1 AS 'a' FROM t1 ) ORDER BY a; } } {1 2 2 3 3 4 4 5} do_test select6-6.4 { execsql { SELECT * FROM ( SELECT x AS 'a' FROM t1 UNION SELECT x+1 AS 'a' FROM t1 ) ORDER BY a; } } {1 2 3 4 5} do_test select6-6.5 { execsql { SELECT * FROM ( SELECT x AS 'a' FROM t1 INTERSECT SELECT x+1 AS 'a' FROM t1 ) ORDER BY a; } } {2 3 4} do_test select6-6.6 { execsql { SELECT * FROM ( SELECT x AS 'a' FROM t1 EXCEPT SELECT x*2 AS 'a' FROM t1 ) ORDER BY a; } } {1 3} finish_test |
Changes to www/changes.tcl.
︙ | ︙ | |||
12 13 14 15 16 17 18 19 20 21 22 23 24 25 | } proc chng {date desc} { puts "<DT><B>$date</B></DT>" puts "<DD><P><UL>$desc</UL></P></DD>" } chng {2002 Mar 14 (2.4.2)} { <li>Bug fix: Fix an assertion failure that occurred when ROWID was a column in a SELECT statement on a view.</li> <li>Bug fix: Fix an uninitialized variable in the VDBE that would could an assert failure.</li> <li>Make the os.h header file more robust in detecting when the compile is | > > > > > | 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | } proc chng {date desc} { puts "<DT><B>$date</B></DT>" puts "<DD><P><UL>$desc</UL></P></DD>" } chng {2002 Mar 122 (2.4.3)} { <li>Fix a bug in SELECT that occurs when a compound SELECT is used as a subquery in the FROM of a SELECT.</li> } chng {2002 Mar 14 (2.4.2)} { <li>Bug fix: Fix an assertion failure that occurred when ROWID was a column in a SELECT statement on a view.</li> <li>Bug fix: Fix an uninitialized variable in the VDBE that would could an assert failure.</li> <li>Make the os.h header file more robust in detecting when the compile is |
︙ | ︙ |
Changes to www/faq.tcl.
1 2 3 | # # Run this script to generated a faq.html output file # | | | 1 2 3 4 5 6 7 8 9 10 11 | # # Run this script to generated a faq.html output file # set rcsid {$Id: faq.tcl,v 1.9 2002/03/23 00:31:29 drh Exp $} puts {<html> <head> <title>SQLite Frequently Asked Questions</title> </head> <body bgcolor="white"> <h1 align="center">Frequently Asked Questions</h1> |
︙ | ︙ | |||
190 191 192 193 194 195 196 | <b>sqlite_busy_timeout()</b> API functions. See the API documentation for details.</p> } faq { Is SQLite threadsafe? } { | | | | | < | | 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 | <b>sqlite_busy_timeout()</b> API functions. See the API documentation for details.</p> } faq { Is SQLite threadsafe? } { <p>Yes. Sometimes. In order to be thread-safe, SQLite must be compiled with the THREADSAFE preprocessor macro set to 1. In the default distribution, the windows binaries are compiled to be threadsafe but the linux binaries are not. If you want to change this, you'll have to recompile.</p> <p>"Threadsafe" in the previous paragraph means that two or more threads can run SQLite at the same time on different "<b>sqlite</b>" structures returned from separate calls to <b>sqlite_open()</b>. It is never safe to use the same <b>sqlite</b> structure pointer simultaneously in two or more threads.</p> } |
︙ | ︙ |