Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Ensure that the OP_Prev opcode verifies that content has not been deleted out from under the cursor. Fix for ticket [209d31e3161b9e9ff]. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
414f0d6a647a4d040b5463c73c5e15e6 |
User & Date: | drh 2014-09-29 15:00:28.761 |
Context
2014-09-29
| ||
15:42 | Fix the header comment in sqlite3VdbeDeletePriorOpcode(). No changes to code. (check-in: 7fb1626866 user: drh tags: trunk) | |
15:00 | Ensure that the OP_Prev opcode verifies that content has not been deleted out from under the cursor. Fix for ticket [209d31e3161b9e9ff]. (check-in: 414f0d6a64 user: drh tags: trunk) | |
2014-09-26
| ||
18:30 | Add an assert() to verify the last-row-id for the database just prior to calling a SQL function. (check-in: d026f0c944 user: mistachkin tags: trunk) | |
Changes
Changes to src/btree.c.
︙ | ︙ | |||
4981 4982 4983 4984 4985 4986 4987 | assert( cursorHoldsMutex(pCur) ); assert( pRes!=0 ); assert( *pRes==0 ); assert( pCur->skipNext==0 || pCur->eState!=CURSOR_VALID ); assert( (pCur->curFlags & (BTCF_AtLast|BTCF_ValidOvfl|BTCF_ValidNKey))==0 ); assert( pCur->info.nSize==0 ); if( pCur->eState!=CURSOR_VALID ){ | < | | 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 | assert( cursorHoldsMutex(pCur) ); assert( pRes!=0 ); assert( *pRes==0 ); assert( pCur->skipNext==0 || pCur->eState!=CURSOR_VALID ); assert( (pCur->curFlags & (BTCF_AtLast|BTCF_ValidOvfl|BTCF_ValidNKey))==0 ); assert( pCur->info.nSize==0 ); if( pCur->eState!=CURSOR_VALID ){ rc = restoreCursorPosition(pCur); if( rc!=SQLITE_OK ){ return rc; } if( CURSOR_INVALID==pCur->eState ){ *pRes = 1; return SQLITE_OK; } |
︙ | ︙ |
Changes to test/eval.test.
︙ | ︙ | |||
50 51 52 53 54 55 56 57 58 59 60 61 62 63 | execsql { CREATE TABLE t2(x,y); INSERT INTO t2 SELECT x, x+1 FROM t1 WHERE x<5; SELECT x, test_eval('DELETE FROM t2 WHERE x='||x), y FROM t2; } } {1 {} {} 2 {} {} 3 {} {} 4 {} {}} do_test eval-2.2 { execsql { SELECT * FROM t2 } } {} # Modify a row while it is being read. # | > > > > > > > > > > > > | 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | execsql { CREATE TABLE t2(x,y); INSERT INTO t2 SELECT x, x+1 FROM t1 WHERE x<5; SELECT x, test_eval('DELETE FROM t2 WHERE x='||x), y FROM t2; } } {1 {} {} 2 {} {} 3 {} {} 4 {} {}} do_test eval-2.2 { execsql { SELECT * FROM t2 } } {} do_test eval-2.3 { execsql { INSERT INTO t2 SELECT x, x+1 FROM t1 WHERE x<5; SELECT x, test_eval('DELETE FROM t2 WHERE x='||x), y FROM t2 ORDER BY rowid DESC; } } {4 {} {} 3 {} {} 2 {} {} 1 {} {}} do_test eval-2.4 { execsql { SELECT * FROM t2 } } {} # Modify a row while it is being read. # |
︙ | ︙ |