Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Perform updates in search order. Ticket #602. (CVS 1221) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
cf1cec74ae039cd7cbc8a1032d29f067 |
User & Date: | drh 2004-02-10 13:41:52.000 |
Context
2004-02-10
| ||
23:51 | Adjustments to the codec in the pager. (CVS 1222) (check-in: be5122e99c user: drh tags: trunk) | |
13:41 | Perform updates in search order. Ticket #602. (CVS 1221) (check-in: cf1cec74ae user: drh tags: trunk) | |
13:19 | Fix for ticket #603. (CVS 1220) (check-in: d0624d2577 user: drh tags: trunk) | |
Changes
Changes to src/vdbe.c.
︙ | ︙ | |||
39 40 41 42 43 44 45 | ** ** Various scripts scan this source file in order to generate HTML ** documentation, headers files, or other derived files. The formatting ** of the code in this file is, therefore, important. See other comments ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** | | | 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | ** ** Various scripts scan this source file in order to generate HTML ** documentation, headers files, or other derived files. The formatting ** of the code in this file is, therefore, important. See other comments ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** ** $Id: vdbe.c,v 1.258 2004/02/10 13:41:52 drh Exp $ */ #include "sqliteInt.h" #include "os.h" #include <ctype.h> #include "vdbeInt.h" /* |
︙ | ︙ | |||
3780 3781 3782 3783 3784 3785 3786 | assert( pTos->flags==MEM_Int ); pTos--; break; } /* Opcode: ListRewind * * * ** | | < > > > > > > | > > > > > | 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 | assert( pTos->flags==MEM_Int ); pTos--; break; } /* Opcode: ListRewind * * * ** ** Rewind the temporary buffer back to the beginning. */ case OP_ListRewind: { /* What this opcode codes, really, is reverse the order of the ** linked list of Keylist structures so that they are read out ** in the same order that they were read in. */ Keylist *pRev, *pTop; pRev = 0; while( p->pList ){ pTop = p->pList; p->pList = pTop->pNext; pTop->pNext = pRev; pRev = pTop; } p->pList = pRev; break; } /* Opcode: ListRead * P2 * ** ** Attempt to read an integer from the temporary storage buffer ** and push it onto the stack. If the storage buffer is empty, |
︙ | ︙ |
Changes to test/update.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2001 September 15 # # 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. The # focus of this file is testing the UPDATE statement. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2001 September 15 # # 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. The # focus of this file is testing the UPDATE statement. # # $Id: update.test,v 1.15 2004/02/10 13:41:53 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Try to update an non-existent table # do_test update-1.1 { |
︙ | ︙ | |||
493 494 495 496 497 498 499 500 501 | execsql { UPDATE t1 SET e=e+1 WHERE a IN (SELECT a FROM t1); SELECT a,e FROM t1; } } {1 15 2 8} integrity_check update-12.1 finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 | execsql { UPDATE t1 SET e=e+1 WHERE a IN (SELECT a FROM t1); SELECT a,e FROM t1; } } {1 15 2 8} integrity_check update-12.1 # Ticket 602. Updates should occur in the same order as the records # were discovered in the WHERE clause. # do_test update-13.1 { execsql { BEGIN; CREATE TABLE t2(a); INSERT INTO t2 VALUES(1); INSERT INTO t2 VALUES(2); INSERT INTO t2 SELECT a+2 FROM t2; INSERT INTO t2 SELECT a+4 FROM t2; INSERT INTO t2 SELECT a+8 FROM t2; INSERT INTO t2 SELECT a+16 FROM t2; INSERT INTO t2 SELECT a+32 FROM t2; INSERT INTO t2 SELECT a+64 FROM t2; INSERT INTO t2 SELECT a+128 FROM t2; INSERT INTO t2 SELECT a+256 FROM t2; INSERT INTO t2 SELECT a+512 FROM t2; INSERT INTO t2 SELECT a+1024 FROM t2; COMMIT; SELECT count(*) FROM t2; } } {2048} do_test update-13.2 { execsql { SELECT count(*) FROM t2 WHERE a=rowid; } } {2048} do_test update-13.3 { execsql { UPDATE t2 SET rowid=rowid-1; SELECT count(*) FROM t2 WHERE a=rowid+1; } } {2048} do_test update-13.3 { execsql { UPDATE t2 SET rowid=rowid+10000; UPDATE t2 SET rowid=rowid-9999; SELECT count(*) FROM t2 WHERE a=rowid; } } {2048} do_test update-13.4 { execsql { BEGIN; INSERT INTO t2 SELECT a+2048 FROM t2; INSERT INTO t2 SELECT a+4096 FROM t2; INSERT INTO t2 SELECT a+8192 FROM t2; SELECT count(*) FROM t2 WHERE a=rowid; COMMIT; } } 16384 do_test update-13.5 { execsql { UPDATE t2 SET rowid=rowid-1; SELECT count(*) FROM t2 WHERE a=rowid+1; } } 16384 integrity_check update-13.6 finish_test |