Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a problem with the fix for [9cf6c9bb51] (commit [658b84d7]) that could cause a cursor to be left in an invalid state following a (rowid < text-value) search. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
bc7d2c1656396bb4f5f1f814e60dbf81 |
User & Date: | dan 2019-05-14 20:25:22 |
Context
2019-05-15
| ||
10:16 | Simplify the "Verifying Code Authenticity" section of the README.md file. No code changes. (check-in: adebffc1 user: drh tags: trunk) | |
2019-05-14
| ||
22:25 | Merge all the latest trunk enhancements into the reuse-schema branch. (check-in: 018f3199 user: drh tags: reuse-schema) | |
22:02 | Merge the latest trunk enhancements into the wal2 branch. (check-in: 23ec34e4 user: drh tags: wal2) | |
21:51 | Merge the latest trunk enhancements into begin-concurrent-pnu. (check-in: e70878b3 user: drh tags: begin-concurrent-pnu) | |
21:51 | Merge the latest trunk enhancements into begin-concurrent. (check-in: 5d3a6e18 user: drh tags: begin-concurrent) | |
20:25 | Fix a problem with the fix for [9cf6c9bb51] (commit [658b84d7]) that could cause a cursor to be left in an invalid state following a (rowid < text-value) search. (check-in: bc7d2c16 user: dan tags: trunk) | |
19:20 | New test cases in test/fuzzdata8.db. (check-in: 228e1087 user: drh tags: trunk) | |
Changes
Changes to src/vdbe.c.
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
....
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
|
oc = pOp->opcode; eqOnly = 0; pC->nullRow = 0; #ifdef SQLITE_DEBUG pC->seekOp = pOp->opcode; #endif if( pC->isTable ){ /* The BTREE_SEEK_EQ flag is only set on index cursors */ assert( sqlite3BtreeCursorHasHint(pC->uc.pCursor, BTREE_SEEK_EQ)==0 || CORRUPT_DB ); /* The input value in P3 might be of any type: integer, real, string, ** blob, or NULL. But it needs to be an integer before we can do ................................................................................ goto abort_due_to_error; } if( eqOnly && r.eqSeen==0 ){ assert( res!=0 ); goto seek_not_found; } } pC->deferredMoveto = 0; pC->cacheStatus = CACHE_STALE; #ifdef SQLITE_TEST sqlite3_search_count++; #endif if( oc>=OP_SeekGE ){ assert( oc==OP_SeekGE || oc==OP_SeekGT ); if( res<0 || (res==0 && oc==OP_SeekGT) ){ res = 0; rc = sqlite3BtreeNext(pC->uc.pCursor, 0); |
>
>
<
<
|
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
....
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
|
oc = pOp->opcode; eqOnly = 0; pC->nullRow = 0; #ifdef SQLITE_DEBUG pC->seekOp = pOp->opcode; #endif pC->deferredMoveto = 0; pC->cacheStatus = CACHE_STALE; if( pC->isTable ){ /* The BTREE_SEEK_EQ flag is only set on index cursors */ assert( sqlite3BtreeCursorHasHint(pC->uc.pCursor, BTREE_SEEK_EQ)==0 || CORRUPT_DB ); /* The input value in P3 might be of any type: integer, real, string, ** blob, or NULL. But it needs to be an integer before we can do ................................................................................ goto abort_due_to_error; } if( eqOnly && r.eqSeen==0 ){ assert( res!=0 ); goto seek_not_found; } } #ifdef SQLITE_TEST sqlite3_search_count++; #endif if( oc>=OP_SeekGE ){ assert( oc==OP_SeekGE || oc==OP_SeekGT ); if( res<0 || (res==0 && oc==OP_SeekGT) ){ res = 0; rc = sqlite3BtreeNext(pC->uc.pCursor, 0); |
Changes to test/rowid.test.
760 761 762 763 764 765 766 767 768 |
do_execsql_test rowid-14.3 { DELETE FROM t14; SELECT * FROM t14 WHERE x < 'a' ORDER BY rowid ASC; } {} do_execsql_test rowid-14.4 { SELECT * FROM t14 WHERE x < 'a' ORDER BY rowid DESC; } {} finish_test |
> > > > > > > > > > > > > > > > > > > > > > |
760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 |
do_execsql_test rowid-14.3 { DELETE FROM t14; SELECT * FROM t14 WHERE x < 'a' ORDER BY rowid ASC; } {} do_execsql_test rowid-14.4 { SELECT * FROM t14 WHERE x < 'a' ORDER BY rowid DESC; } {} reset_db do_execsql_test rowid-15.0 { PRAGMA reverse_unordered_selects=true; CREATE TABLE t1 (c0, c1); CREATE TABLE t2 (c0 INT UNIQUE); INSERT INTO t1(c0, c1) VALUES (0, 0), (0, NULL); INSERT INTO t2(c0) VALUES (1); } do_execsql_test rowid-15.1 { SELECT t2.c0, t1.c1 FROM t1, t2 WHERE (t2.rowid <= 'a') OR (t1.c0 <= t2.c0) LIMIT 100 } {1 {} 1 0} do_execsql_test rowid-15.2 { SELECT 1, NULL INTERSECT SELECT * FROM ( SELECT t2.c0, t1.c1 FROM t1, t2 WHERE ((t2.rowid <= 'a')) OR (t1.c0 <= t2.c0) ORDER BY 'a' DESC LIMIT 100 ); } {1 {}} finish_test |