Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Bug fixes. Trying to make it go faster. (CVS 254) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
8f28a83abac59a2161d486c96386b8df |
User & Date: | drh 2001-09-18 02:02:23.000 |
Context
2001-09-18
| ||
22:17 | Fix a problem in GROUP BY with multiple columns. (CVS 255) (check-in: 22132ce18c user: drh tags: trunk) | |
02:02 | Bug fixes. Trying to make it go faster. (CVS 254) (check-in: 8f28a83aba user: drh tags: trunk) | |
2001-09-17
| ||
20:48 | Enchanced transaction tests (CVS 253) (check-in: b30f2b5e15 user: drh tags: trunk) | |
Changes
Changes to src/pager.c.
︙ | ︙ | |||
14 15 16 17 18 19 20 | ** The pager is used to access a database disk file. It implements ** atomic commit and rollback through the use of a journal file that ** is separate from the database file. The pager also implements file ** locking to prevent two processes from writing the same database ** file simultaneously, or one process from reading the database while ** another is writing. ** | | | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | ** The pager is used to access a database disk file. It implements ** atomic commit and rollback through the use of a journal file that ** is separate from the database file. The pager also implements file ** locking to prevent two processes from writing the same database ** file simultaneously, or one process from reading the database while ** another is writing. ** ** @(#) $Id: pager.c,v 1.21 2001/09/18 02:02:23 drh Exp $ */ #include "sqliteInt.h" #include "pager.h" #include <fcntl.h> #include <sys/stat.h> #include <unistd.h> #include <assert.h> |
︙ | ︙ | |||
943 944 945 946 947 948 949 | ** ** If the number of references to the page drop to zero, then the ** page is added to the LRU list. When all references to all pages ** are released, a rollback occurs and the lock on the database is ** removed. */ int sqlitepager_unref(void *pData){ | < < > > | 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 | ** ** If the number of references to the page drop to zero, then the ** page is added to the LRU list. When all references to all pages ** are released, a rollback occurs and the lock on the database is ** removed. */ int sqlitepager_unref(void *pData){ PgHdr *pPg; /* Decrement the reference count for this page */ pPg = DATA_TO_PGHDR(pData); assert( pPg->nRef>0 ); pPg->nRef--; REFINFO(pPg); /* When the number of references to a page reach 0, call the ** destructor and add the page to the freelist. */ if( pPg->nRef==0 ){ Pager *pPager; pPager = pPg->pPager; pPg->pNextFree = 0; pPg->pPrevFree = pPager->pLast; pPager->pLast = pPg; if( pPg->pPrevFree ){ pPg->pPrevFree->pNextFree = pPg; }else{ pPager->pFirst = pPg; |
︙ | ︙ |
Changes to src/vdbe.c.
︙ | ︙ | |||
26 27 28 29 30 31 32 | ** type to the other occurs as necessary. ** ** Most of the code in this file is taken up by the sqliteVdbeExec() ** function which does the work of interpreting a VDBE program. ** But other routines are also provided to help in building up ** a program instruction by instruction. ** | | | 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | ** type to the other occurs as necessary. ** ** Most of the code in this file is taken up by the sqliteVdbeExec() ** function which does the work of interpreting a VDBE program. ** But other routines are also provided to help in building up ** a program instruction by instruction. ** ** $Id: vdbe.c,v 1.71 2001/09/18 02:02:23 drh Exp $ */ #include "sqliteInt.h" #include <ctype.h> #include <unistd.h> /* ** SQL is translated into a sequence of instructions to be |
︙ | ︙ | |||
2328 2329 2330 2331 2332 2333 2334 | ux.zBuf[3] = x&0xff; ux.zBuf[2] = (x>>8)&0xff; ux.zBuf[1] = (x>>16)&0xff; ux.zBuf[0] = (x>>24)&0xff; v = ux.i; rx = sqliteBtreeMoveto(p->aCsr[i].pCursor, &v, sizeof(v), &res); cnt++; | > | > > > | 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 | ux.zBuf[3] = x&0xff; ux.zBuf[2] = (x>>8)&0xff; ux.zBuf[1] = (x>>16)&0xff; ux.zBuf[0] = (x>>24)&0xff; v = ux.i; rx = sqliteBtreeMoveto(p->aCsr[i].pCursor, &v, sizeof(v), &res); cnt++; }while( cnt<200 && rx==SQLITE_OK && res==0 ); if( rx==SQLITE_OK && res==0 ){ rc = SQLITE_FULL; goto abort_due_to_error; } } VERIFY( NeedStack(p, p->tos+1); ) p->tos++; aStack[p->tos].i = v; aStack[p->tos].flags = STK_Int; break; } |
︙ | ︙ |
Changes to src/where.c.
︙ | ︙ | |||
9 10 11 12 13 14 15 | ** May you share freely, never taking more than you give. ** ************************************************************************* ** This module contains C code that generates VDBE code used to process ** the WHERE clause of SQL statements. Also found here are subroutines ** to generate VDBE code to evaluate expressions. ** | | | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | ** May you share freely, never taking more than you give. ** ************************************************************************* ** This module contains C code that generates VDBE code used to process ** the WHERE clause of SQL statements. Also found here are subroutines ** to generate VDBE code to evaluate expressions. ** ** $Id: where.c,v 1.21 2001/09/18 02:02:23 drh Exp $ */ #include "sqliteInt.h" /* ** The query generator uses an array of instances of this structure to ** help it analyze the subexpressions of the WHERE clause. Each WHERE ** clause subexpression is separated from the others by an AND operator. |
︙ | ︙ | |||
340 341 342 343 344 345 346 | break; } } sqliteVdbeAddOp(v, OP_AddImm, 0, 0, 0, 0); if( i==pTabList->nId-1 && pushKey ){ haveKey = 1; }else{ | | | 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 | break; } } sqliteVdbeAddOp(v, OP_AddImm, 0, 0, 0, 0); if( i==pTabList->nId-1 && pushKey ){ haveKey = 1; }else{ sqliteVdbeAddOp(v, OP_NotFound, base+idx, brk, 0, 0); haveKey = 0; } }else if( pIdx==0 ){ /* Case 2: There was no usable index. We must do a complete ** scan of the table. */ sqliteVdbeAddOp(v, OP_Rewind, base+idx, 0, 0, 0); |
︙ | ︙ |
Changes to test/rowid.test.
︙ | ︙ | |||
8 9 10 11 12 13 14 | # 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 magic ROWID column that is # found on all tables. # | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # 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 magic ROWID column that is # found on all tables. # # $Id: rowid.test,v 1.5 2001/09/18 02:02:23 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Basic ROWID functionality tests. # do_test rowid-1.1 { |
︙ | ︙ | |||
57 58 59 60 61 62 63 64 65 66 67 68 69 70 | execsql $sql } {3} do_test rowid-1.7 { global x2rowid set sql "SELECT x FROM t1 WHERE _rowid_==$x2rowid(1)" execsql $sql } {1} do_test rowid-1.8 { global x2rowid set v [execsql {SELECT x, oid FROM t1 order by x}] set v2 [list 1 $x2rowid(1) 3 $x2rowid(3)] expr {$v==$v2} } {1} do_test rowid-1.9 { | > > > > > > > | 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | execsql $sql } {3} do_test rowid-1.7 { global x2rowid set sql "SELECT x FROM t1 WHERE _rowid_==$x2rowid(1)" execsql $sql } {1} do_test rowid-1.7.1 { while 1 { set norow [expr {int(rand()*1000000)}] if {$norow!=$x2rowid(1) && $norow!=$x2rowid(3)} break } execsql "SELECT x FROM t1 WHERE rowid=$norow" } {} do_test rowid-1.8 { global x2rowid set v [execsql {SELECT x, oid FROM t1 order by x}] set v2 [list 1 $x2rowid(1) 3 $x2rowid(3)] expr {$v==$v2} } {1} do_test rowid-1.9 { |
︙ | ︙ | |||
231 232 233 234 235 236 237 | } {256} do_test rowid-4.5 { execsql {CREATE INDEX idxt2 ON t2(y)} execsql { SELECT t1.x, fcnt() FROM t2, t1 WHERE t2.y==256 AND t1.rowid==t2.rowid } | | | | 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 | } {256} do_test rowid-4.5 { execsql {CREATE INDEX idxt2 ON t2(y)} execsql { SELECT t1.x, fcnt() FROM t2, t1 WHERE t2.y==256 AND t1.rowid==t2.rowid } } {4 1} do_test rowid-4.5.1 { execsql { SELECT t1.x, fcnt() FROM t2, t1 WHERE t1.OID==t2.rowid AND t2.y==81 } } {3 1} do_test rowid-4.6 { execsql { SELECT t1.x FROM t1, t2 WHERE t2.y==256 AND t1.rowid==t2.rowid } } {4} do_test rowid-5.1 { execsql {DELETE FROM t1 WHERE _rowid_ IN (SELECT oid FROM t1 WHERE x>8)} execsql {SELECT max(x) FROM t1} } {8} finish_test |