Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Change an OP_SCopy into an OP_Copy in a case where the destination might be used after the source has changed. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
c0fa0c0e2de50d7eda19ab8862496b18 |
User & Date: | drh 2014-03-03 17:36:39.940 |
References
2016-02-08
| ||
22:22 | • New ticket [d06a25c844] Incorrect result from a UNION with an ORDER BY. (artifact: 4685201918 user: drh) | |
Context
2014-03-04
| ||
04:12 | Refactor the sqlite3VdbeRecordCompare() routine used to compare btree records. Create fast-track special case routines to handle the common cases more quickly. This gives a significant performance boost. (check-in: 3325ad5bdc user: drh tags: trunk) | |
2014-03-03
| ||
21:59 | Refactor the sqlite3VdbeRecordCompare() routine used to compare btree records. Create a couple of fast-track routines to handle the common cases of a string with BINARY collation or integer values as the left-most column. This gives a significant performance boost in common use. Oops: This build does not work on the Beaglebone where "char" defaults to unsigned. (check-in: aec5473a75 user: drh tags: broken-on-arm) | |
17:48 | Merge latest trunk changes. (check-in: 1d60356462 user: dan tags: experimental) | |
17:36 | Change an OP_SCopy into an OP_Copy in a case where the destination might be used after the source has changed. (check-in: c0fa0c0e2d user: drh tags: trunk) | |
16:48 | Change the "explain_i" tcl test command so that xterm color codes are only added if the output is actually a terminal. (check-in: 559835e54e user: dan tags: trunk) | |
Changes
Changes to src/select.c.
︙ | ︙ | |||
605 606 607 608 609 610 611 | VdbeComment((v, "%s", pEList->a[i].zName)); } }else if( eDest!=SRT_Exists ){ /* If the destination is an EXISTS(...) expression, the actual ** values returned by the SELECT are not required. */ sqlite3ExprCodeExprList(pParse, pEList, regResult, | | | 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 | VdbeComment((v, "%s", pEList->a[i].zName)); } }else if( eDest!=SRT_Exists ){ /* If the destination is an EXISTS(...) expression, the actual ** values returned by the SELECT are not required. */ sqlite3ExprCodeExprList(pParse, pEList, regResult, (eDest==SRT_Output||eDest==SRT_Coroutine)?SQLITE_ECEL_DUP:0); } /* If the DISTINCT keyword was present on the SELECT statement ** and this row has been seen before, then do not make this row ** part of the result. */ if( hasDistinct ){ |
︙ | ︙ |
Added test/selectF.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 44 45 46 47 48 49 | # 2014-03-03 # # 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 verifies that an OP_Copy operation is used instead of OP_SCopy # in a compound select in a case where the source register might be changed # before the copy is used. # set testdir [file dirname $argv0] source $testdir/tester.tcl set testprefix selectF do_execsql_test 1 { BEGIN TRANSACTION; CREATE TABLE t1(a, b, c); INSERT INTO "t1" VALUES(1,'one','I'); CREATE TABLE t2(d, e, f); INSERT INTO "t2" VALUES(5,'ten','XX'); INSERT INTO "t2" VALUES(6,NULL,NULL); CREATE INDEX i1 ON t1(b, a); COMMIT; } #explain_i { # SELECT * FROM t2 # UNION ALL # SELECT * FROM t1 WHERE a<5 # ORDER BY 2, 1 #} do_execsql_test 2 { SELECT * FROM t2 UNION ALL SELECT * FROM t1 WHERE a<5 ORDER BY 2, 1 } {6 {} {} 1 one I 5 ten XX} finish_test |