-C Fix\sthe\sVACUUM\scommand\sso\sthat\sit\sdoes\snot\scommit\sa\stransaction\swhen\sit\sis\nmistakenly\srun\swithin\sa\stransaction\s-\sit\sshould\sleave\sthe\stransaction\sopen.\s(CVS\s6200)
-D 2009-01-22T23:04:46
+C Optimization:\sWhen\sloading\sa\snew\spage\sinto\sthe\scache,\savoid\sredundant\smemset()\scalls\sto\szero\sit.\s(CVS\s6201)
+D 2009-01-23T16:45:01
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 6619a1b72de7ada2bb7be97862913e27c6f5e339
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
F src/os_os2.c bed77dc26e3a95ce4a204936b9a1ca6fe612fcc5
F src/os_unix.c c74255cc1fcddc38fc3cc1dcf70c2325d3c2948e
F src/os_win.c 496e3ceb499aedc63622a89ef76f7af2dd902709
-F src/pager.c ce7118d56c653c71d6d283006453e49e5bff8b10
-F src/pager.h 95b9802f6a014cc55523006f2b893a37b2dc16e3
+F src/pager.c be92682af31f44f41c9947f174c5f811648ec68c
+F src/pager.h 869b7027b031e30da24ebe9bdb973d1ec673a96b
F src/parse.y b214295a91e985c42adb6bfd3ad1c56c47828e8d
-F src/pcache.c 48fbfc2208a2734c578b3223fcd4fea7d84f442b
+F src/pcache.c fcf7738c83c4d3e9d45836b2334c8a368cc41274
F src/pcache.h 9b927ccc5a538e31b4c3bc7eec4f976db42a1324
-F src/pcache1.c c0aa84ff69ea759fa944dbee9167a2463ab7c322
+F src/pcache1.c dabb8ab14827e090321f17150ce96fda172974e8
F src/pragma.c 04c13c79fd559d769f5bcb3aa661b32d484b1e7b
F src/prepare.c 9ec504ddd4a8e34e5fb502033312da6a78f5f76a
F src/printf.c 9866a9a9c4a90f6d4147407f373df3fd5d5f9b6f
F src/rowset.c ba9375f37053d422dd76965a9c370a13b6e1aac4
F src/select.c ae72b604e47092521c4d9ae54e1b1cbeb872a747
F src/shell.c 0d801ef653fd73d17161afebaab898a58ec3524b
-F src/sqlite.h.in 6cd2489e40fe97ba58c60044a4ced377e08b6d09
+F src/sqlite.h.in 8821a61dceff26993ed6689239b6fbcd8d8f6e50
F src/sqlite3ext.h 1db7d63ab5de4b3e6b83dd03d1a4e64fef6d2a17
F src/sqliteInt.h 086886697368982dd7469689cd6e96c94d091008
F src/sqliteLimit.h ffe93f5a0c4e7bd13e70cd7bf84cfb5c3465f45d
F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
-P 78ae96def54026461c0d03a90394480f724ea584
-R b9c2aadad22cb62a07734ad4365fba0e
-U drh
-Z 23b2dc2d7661a21482fba1cdc855f298
+P 75cc709be46ae2096d2ba3e7ac58de8140f8130c
+R 8b23ab517890ddeec94bfd9db73627da
+U danielk1977
+Z 5750c0351bde53b3891c00b777a3ffd1
-75cc709be46ae2096d2ba3e7ac58de8140f8130c
\ No newline at end of file
+9c0b9f881367871105965d4268e2f2cde7f4d884
\ No newline at end of file
** file simultaneously, or one process from reading the database while
** another is writing.
**
-** @(#) $Id: pager.c,v 1.557 2009/01/22 17:12:40 danielk1977 Exp $
+** @(#) $Id: pager.c,v 1.558 2009/01/23 16:45:01 danielk1977 Exp $
*/
#ifndef SQLITE_OMIT_DISKIO
#include "sqliteInt.h"
return rc;
}
assert( pPg->pgno==pgno );
+ assert( pPg->pPager==pPager || pPg->pPager==0 );
if( pPg->pPager==0 ){
/* The pager cache has created a new page. Its content needs to
** be initialized.
int nMax;
PAGER_INCR(pPager->nMiss);
pPg->pPager = pPager;
- memset(pPg->pExtra, 0, pPager->nExtra);
rc = sqlite3PagerPagecount(pPager, &nMax);
if( rc!=SQLITE_OK ){
sqlite3PagerUnref(pPg);
return SQLITE_FULL;
}
- memset(pPg->pData, 0, pPager->pageSize);
if( noContent ){
/* Failure to set the bits in the InJournal bit-vectors is benign.
** It merely means that we might do some extra work to journal a
TESTONLY( rc = ) addToSavepointBitvecs(pPager, pgno);
testcase( rc==SQLITE_NOMEM );
sqlite3EndBenignMalloc();
+ }else{
+ memset(pPg->pData, 0, pPager->pageSize);
}
IOTRACE(("ZERO %p %d\n", pPager, pgno));
}else{
** subsystem. The page cache subsystem reads and writes a file a page
** at a time and provides a journal for rollback.
**
-** @(#) $Id: pager.h,v 1.96 2009/01/20 17:06:27 danielk1977 Exp $
+** @(#) $Id: pager.h,v 1.97 2009/01/23 16:45:01 danielk1977 Exp $
*/
#ifndef _PAGER_H_
/* Open and close a Pager connection. */
int sqlite3PagerOpen(sqlite3_vfs *, Pager **ppPager, const char*, int,int,int);
int sqlite3PagerClose(Pager *pPager);
+int sqlite3PagerReadFileheader(Pager*, int, unsigned char*);
/* Functions used to configure a Pager object. */
void sqlite3PagerSetBusyhandler(Pager*, int(*)(void *), void *);
void sqlite3PagerSetReiniter(Pager*, void(*)(DbPage*));
int sqlite3PagerSetPagesize(Pager*, u16*);
int sqlite3PagerMaxPageCount(Pager*, int);
-int sqlite3PagerReadFileheader(Pager*, int, unsigned char*);
void sqlite3PagerSetCachesize(Pager*, int);
void sqlite3PagerSetSafetyLevel(Pager*,int,int);
int sqlite3PagerLockingMode(Pager *, int);
*************************************************************************
** This file implements that page cache.
**
-** @(#) $Id: pcache.c,v 1.42 2009/01/20 17:06:27 danielk1977 Exp $
+** @(#) $Id: pcache.c,v 1.43 2009/01/23 16:45:01 danielk1977 Exp $
*/
#include "sqliteInt.h"
}
if( pPage ){
+ if( !pPage->pData ){
+ memset(pPage, 0, sizeof(PgHdr) + pCache->szExtra);
+ pPage->pExtra = (void*)&pPage[1];
+ pPage->pData = (void *)&((char *)pPage)[sizeof(PgHdr) + pCache->szExtra];
+ pPage->pCache = pCache;
+ pPage->pgno = pgno;
+ }
+ assert( pPage->pCache==pCache );
+ assert( pPage->pgno==pgno );
+ assert( pPage->pExtra==(void *)&pPage[1] );
+
if( 0==pPage->nRef ){
pCache->nRef++;
}
pPage->nRef++;
- pPage->pData = (void*)&pPage[1];
- pPage->pExtra = (void*)&((char*)pPage->pData)[pCache->szPage];
- pPage->pCache = pCache;
- pPage->pgno = pgno;
if( pgno==1 ){
pCache->pPage1 = pPage;
}
** If the default page cache implementation is overriden, then neither of
** these two features are available.
**
-** @(#) $Id: pcache1.c,v 1.7 2009/01/07 15:18:21 danielk1977 Exp $
+** @(#) $Id: pcache1.c,v 1.8 2009/01/23 16:45:01 danielk1977 Exp $
*/
#include "sqliteInt.h"
int nByte = sizeof(PgHdr1) + pCache->szPage;
PgHdr1 *p = (PgHdr1 *)pcache1Alloc(nByte);
if( p ){
- memset(p, 0, nByte);
if( pCache->bPurgeable ){
pcache1.nCurrentPage++;
}
if( pPage ){
unsigned int h = iKey % pCache->nHash;
- memset(pPage, 0, pCache->szPage + sizeof(PgHdr1));
+ *(void **)(PGHDR1_TO_PAGE(pPage)) = 0;
pCache->nPage++;
pPage->iKey = iKey;
pPage->pNext = pCache->apHash[h];
pPage->pCache = pCache;
+ pPage->pLruPrev = 0;
+ pPage->pLruNext = 0;
pCache->apHash[h] = pPage;
}
** the version number) and changes its name to "sqlite3.h" as
** part of the build process.
**
-** @(#) $Id: sqlite.h.in,v 1.421 2008/12/30 06:24:58 danielk1977 Exp $
+** @(#) $Id: sqlite.h.in,v 1.422 2009/01/23 16:45:01 danielk1977 Exp $
*/
#ifndef _SQLITE3_H_
#define _SQLITE3_H_
** in which case SQLite will attempt to unpin one or more
** pages before re-requesting the same page, or it can
** allocate a new page and return a pointer to it. If a new
-** page is allocated, then it must be completely zeroed before
-** it is returned.
+** page is allocated, then the first sizeof(void*) bytes of
+** it (at least) must be zeroed before it is returned.
** <tr><td>2<td>If createFlag is set to 2, then SQLite is not holding any
** pinned pages associated with the specific cache passed
** as the first argument to xFetch() that can be unpinned. The
** cache implementation should attempt to allocate a new
-** cache entry and return a pointer to it. Again, the new
-** page should be zeroed before it is returned. If the xFetch()
-** method returns NULL when createFlag==2, SQLite assumes that
-** a memory allocation failed and returns SQLITE_NOMEM to the
-** user.
+** cache entry and return a pointer to it. Again, the first
+** sizeof(void*) bytes of the page should be zeroed before
+** it is returned. If the xFetch() method returns NULL when
+** createFlag==2, SQLite assumes that a memory allocation
+** failed and returns SQLITE_NOMEM to the user.
** </table>
**
** xUnpin() is called by SQLite with a pointer to a currently pinned page