/ Check-in [c0fa0c0e]
Login

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 | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1:c0fa0c0e2de50d7eda19ab8862496b18eff93538
User & Date: drh 2014-03-03 17:36:39
References
2016-02-08
22:22 New ticket [d06a25c8] Incorrect result from a UNION with an ORDER BY. artifact: 46852019 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: 3325ad5b 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: aec5473a user: drh tags: broken-on-arm
17:48
Merge latest trunk changes. check-in: 1d603564 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: c0fa0c0e 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: 559835e5 user: dan tags: trunk
Changes
Hide Diffs Side-by-Side Diffs Ignore Whitespace Patch

Changes to src/select.c.

   605    605         VdbeComment((v, "%s", pEList->a[i].zName));
   606    606       }
   607    607     }else if( eDest!=SRT_Exists ){
   608    608       /* If the destination is an EXISTS(...) expression, the actual
   609    609       ** values returned by the SELECT are not required.
   610    610       */
   611    611       sqlite3ExprCodeExprList(pParse, pEList, regResult,
   612         -                            (eDest==SRT_Output)?SQLITE_ECEL_DUP:0);
          612  +                  (eDest==SRT_Output||eDest==SRT_Coroutine)?SQLITE_ECEL_DUP:0);
   613    613     }
   614    614   
   615    615     /* If the DISTINCT keyword was present on the SELECT statement
   616    616     ** and this row has been seen before, then do not make this row
   617    617     ** part of the result.
   618    618     */
   619    619     if( hasDistinct ){

Added test/selectF.test.

            1  +# 2014-03-03
            2  +#
            3  +# The author disclaims copyright to this source code.  In place of
            4  +# a legal notice, here is a blessing:
            5  +#
            6  +#    May you do good and not evil.
            7  +#    May you find forgiveness for yourself and forgive others.
            8  +#    May you share freely, never taking more than you give.
            9  +#
           10  +#***********************************************************************
           11  +#
           12  +# This file verifies that an OP_Copy operation is used instead of OP_SCopy
           13  +# in a compound select in a case where the source register might be changed
           14  +# before the copy is used.
           15  +#
           16  +
           17  +set testdir [file dirname $argv0]
           18  +source $testdir/tester.tcl
           19  +set testprefix selectF
           20  +
           21  +do_execsql_test 1 {
           22  +  BEGIN TRANSACTION;
           23  +  CREATE TABLE t1(a, b, c);
           24  +  INSERT INTO "t1" VALUES(1,'one','I');
           25  +  CREATE TABLE t2(d, e, f);
           26  +  INSERT INTO "t2" VALUES(5,'ten','XX');
           27  +  INSERT INTO "t2" VALUES(6,NULL,NULL);
           28  +
           29  +  CREATE INDEX i1 ON t1(b, a);
           30  +  COMMIT;
           31  +}
           32  +
           33  +#explain_i {
           34  +#  SELECT * FROM t2
           35  +#  UNION ALL 
           36  +#  SELECT * FROM t1 WHERE a<5 
           37  +#  ORDER BY 2, 1
           38  +#}
           39  +
           40  +do_execsql_test 2 {
           41  +  SELECT * FROM t2
           42  +  UNION ALL 
           43  +  SELECT * FROM t1 WHERE a<5 
           44  +  ORDER BY 2, 1
           45  +} {6 {} {} 1 one I 5 ten XX}
           46  +
           47  +
           48  +  
           49  +finish_test