mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-16 23:02:26 +03:00
Changes to reenable codec operation and to handle memory allocation
failures within a codec. (CVS 6746) FossilOrigin-Name: 43a6ca98b1a6aff1f0f674ecabdc929efb314db7
This commit is contained in:
16
manifest
16
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Do\snot\slet\sthe\sreverse_unordered_selects\spragma\sforce\sthe\suse\sof\san\sindex\sthat\r\nwould\snot\sotherwise\sbe\sused.\s\sTicket\s#3904.\r\nAlso:\sremove\san\stest\swhich\sis\salways\strue.\s(CVS\s6745)
|
C Changes\sto\sreenable\scodec\soperation\sand\sto\shandle\smemory\sallocation\nfailures\swithin\sa\scodec.\s(CVS\s6746)
|
||||||
D 2009-06-10T19:33:29
|
D 2009-06-11T00:47:21
|
||||||
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
|
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
|
||||||
F Makefile.in 8b8fb7823264331210cddf103831816c286ba446
|
F Makefile.in 8b8fb7823264331210cddf103831816c286ba446
|
||||||
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
|
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
|
||||||
@@ -109,7 +109,7 @@ F src/btmutex.c 9b899c0d8df3bd68f527b0afe03088321b696d3c
|
|||||||
F src/btree.c b883af5a932982547989a23187ffae5283dfd804
|
F src/btree.c b883af5a932982547989a23187ffae5283dfd804
|
||||||
F src/btree.h f70b694e8c163227369a66863b01fbff9009f323
|
F src/btree.h f70b694e8c163227369a66863b01fbff9009f323
|
||||||
F src/btreeInt.h df64030d632f8c8ac217ed52e8b6b3eacacb33a5
|
F src/btreeInt.h df64030d632f8c8ac217ed52e8b6b3eacacb33a5
|
||||||
F src/build.c 20e02fd72249159ff6829009f3029d16d59cdff5
|
F src/build.c 6c7b96103cebc558710ae72e2ce99b91c8ccd961
|
||||||
F src/callback.c 57359fa93de47c341b6b8ee504a88ff276397686
|
F src/callback.c 57359fa93de47c341b6b8ee504a88ff276397686
|
||||||
F src/complete.c 5ad5c6cd4548211867c204c41a126d73a9fbcea0
|
F src/complete.c 5ad5c6cd4548211867c204c41a126d73a9fbcea0
|
||||||
F src/date.c ab5f7137656652a48434d64f96bdcdc823bb23b3
|
F src/date.c ab5f7137656652a48434d64f96bdcdc823bb23b3
|
||||||
@@ -146,7 +146,7 @@ F src/os_common.h 8c61457df58f1a4bd5f5adc3e90e01b37bf7afbc
|
|||||||
F src/os_os2.c bed77dc26e3a95ce4a204936b9a1ca6fe612fcc5
|
F src/os_os2.c bed77dc26e3a95ce4a204936b9a1ca6fe612fcc5
|
||||||
F src/os_unix.c e55d977c516ed880a2f83f0610b019efd9f8bc06
|
F src/os_unix.c e55d977c516ed880a2f83f0610b019efd9f8bc06
|
||||||
F src/os_win.c 725c38a524d168ce280446ad8761d731bc516405
|
F src/os_win.c 725c38a524d168ce280446ad8761d731bc516405
|
||||||
F src/pager.c 30aafb668c2b88a653d5232b2a61f59d3da32df2
|
F src/pager.c 7bc85a618a8ae0d011675bb844c8a29a8a6632db
|
||||||
F src/pager.h 73f481a308a873ccd626d97331c081db3b53e2e5
|
F src/pager.h 73f481a308a873ccd626d97331c081db3b53e2e5
|
||||||
F src/parse.y 07690df997d50b3fdb5e5121e5a27f1a080db13d
|
F src/parse.y 07690df997d50b3fdb5e5121e5a27f1a080db13d
|
||||||
F src/pcache.c 395f752a13574120bd7513a400ba02a265aaa76d
|
F src/pcache.c 395f752a13574120bd7513a400ba02a265aaa76d
|
||||||
@@ -162,7 +162,7 @@ F src/select.c 2d97084a176a63eabce2d043eb4fbb13c46d6e9f
|
|||||||
F src/shell.c db2643650b9268df89a4bedca3f1c6d9e786f1bb
|
F src/shell.c db2643650b9268df89a4bedca3f1c6d9e786f1bb
|
||||||
F src/sqlite.h.in 9fe53ec7a8310d7d18d482b85e46f5556abfd1de
|
F src/sqlite.h.in 9fe53ec7a8310d7d18d482b85e46f5556abfd1de
|
||||||
F src/sqlite3ext.h 1db7d63ab5de4b3e6b83dd03d1a4e64fef6d2a17
|
F src/sqlite3ext.h 1db7d63ab5de4b3e6b83dd03d1a4e64fef6d2a17
|
||||||
F src/sqliteInt.h f8d70341d527404c5f162dc7fcc0f005700d0b48
|
F src/sqliteInt.h 3445ca4373dacae7fe87240d8916b5724624f8d4
|
||||||
F src/sqliteLimit.h ffe93f5a0c4e7bd13e70cd7bf84cfb5c3465f45d
|
F src/sqliteLimit.h ffe93f5a0c4e7bd13e70cd7bf84cfb5c3465f45d
|
||||||
F src/status.c 237b193efae0cf6ac3f0817a208de6c6c6ef6d76
|
F src/status.c 237b193efae0cf6ac3f0817a208de6c6c6ef6d76
|
||||||
F src/table.c cc86ad3d6ad54df7c63a3e807b5783c90411a08d
|
F src/table.c cc86ad3d6ad54df7c63a3e807b5783c90411a08d
|
||||||
@@ -733,7 +733,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
|
|||||||
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
||||||
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
||||||
F tool/vdbe-compress.tcl 672f81d693a03f80f5ae60bfefacd8a349e76746
|
F tool/vdbe-compress.tcl 672f81d693a03f80f5ae60bfefacd8a349e76746
|
||||||
P c27f23bbafd2e4fa453c8e3b83667ea8173183a7
|
P 78a391dca05dbe3ad1d8124b80b31bc2ce75778f
|
||||||
R 77cbdb78ecef08356b37cf19f9a70883
|
R 1e24699e08b9d5dc7b0fbd04e5c66fbb
|
||||||
U drh
|
U drh
|
||||||
Z 1f50addb00094da913f2d4235a78d8cc
|
Z 1969b58a290b247f789d9bc333ab6e41
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
78a391dca05dbe3ad1d8124b80b31bc2ce75778f
|
43a6ca98b1a6aff1f0f674ecabdc929efb314db7
|
||||||
11
src/build.c
11
src/build.c
@@ -22,7 +22,7 @@
|
|||||||
** COMMIT
|
** COMMIT
|
||||||
** ROLLBACK
|
** ROLLBACK
|
||||||
**
|
**
|
||||||
** $Id: build.c,v 1.549 2009/06/03 11:25:07 danielk1977 Exp $
|
** $Id: build.c,v 1.550 2009/06/11 00:47:21 drh Exp $
|
||||||
*/
|
*/
|
||||||
#include "sqliteInt.h"
|
#include "sqliteInt.h"
|
||||||
|
|
||||||
@@ -429,6 +429,15 @@ void sqlite3ResetInternalSchema(sqlite3 *db, int iDb){
|
|||||||
** schema hash tables and therefore do not have to make any changes
|
** schema hash tables and therefore do not have to make any changes
|
||||||
** to any of those tables.
|
** to any of those tables.
|
||||||
*/
|
*/
|
||||||
|
#ifdef SQLITE_HAS_CODEC
|
||||||
|
for(i=0; i<db->nDb; i++){
|
||||||
|
struct Db *pDb = &db->aDb[i];
|
||||||
|
if( pDb->pBt==0 ){
|
||||||
|
if( pDb->pAux && pDb->xFreeAux ) pDb->xFreeAux(pDb->pAux);
|
||||||
|
pDb->pAux = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
for(i=j=2; i<db->nDb; i++){
|
for(i=j=2; i<db->nDb; i++){
|
||||||
struct Db *pDb = &db->aDb[i];
|
struct Db *pDb = &db->aDb[i];
|
||||||
if( pDb->pBt==0 ){
|
if( pDb->pBt==0 ){
|
||||||
|
|||||||
29
src/pager.c
29
src/pager.c
@@ -18,7 +18,7 @@
|
|||||||
** file simultaneously, or one process from reading the database while
|
** file simultaneously, or one process from reading the database while
|
||||||
** another is writing.
|
** another is writing.
|
||||||
**
|
**
|
||||||
** @(#) $Id: pager.c,v 1.591 2009/06/02 21:31:39 drh Exp $
|
** @(#) $Id: pager.c,v 1.592 2009/06/11 00:47:21 drh Exp $
|
||||||
*/
|
*/
|
||||||
#ifndef SQLITE_OMIT_DISKIO
|
#ifndef SQLITE_OMIT_DISKIO
|
||||||
#include "sqliteInt.h"
|
#include "sqliteInt.h"
|
||||||
@@ -103,11 +103,14 @@ int sqlite3PagerTrace=1; /* True to enable tracing */
|
|||||||
** A macro used for invoking the codec if there is one
|
** A macro used for invoking the codec if there is one
|
||||||
*/
|
*/
|
||||||
#ifdef SQLITE_HAS_CODEC
|
#ifdef SQLITE_HAS_CODEC
|
||||||
# define CODEC1(P,D,N,X) if( P->xCodec!=0 ){ P->xCodec(P->pCodecArg,D,N,X); }
|
# define CODEC1(P,D,N,X,E) \
|
||||||
# define CODEC2(P,D,N,X) ((char*)(P->xCodec!=0?P->xCodec(P->pCodecArg,D,N,X):D))
|
if( P->xCodec && P->xCodec(P->pCodecArg,D,N,X)==0 ){ E; }
|
||||||
|
# define CODEC2(P,D,N,X,E,O) \
|
||||||
|
if( P->xCodec==0 ){ O=(char*)D; }else \
|
||||||
|
if( (O=(char*)(P->xCodec(P->pCodecArg,D,N,X)))==0 ){ E; }
|
||||||
#else
|
#else
|
||||||
# define CODEC1(P,D,N,X) /* NO-OP */
|
# define CODEC1(P,D,N,X,E) /* NO-OP */
|
||||||
# define CODEC2(P,D,N,X) ((char*)D)
|
# define CODEC2(P,D,N,X,E,O) O=(char*)D
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1595,7 +1598,7 @@ static int pager_playback_one_page(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Decode the page just read from disk */
|
/* Decode the page just read from disk */
|
||||||
CODEC1(pPager, pData, pPg->pgno, 3);
|
CODEC1(pPager, pData, pPg->pgno, 3, rc=SQLITE_NOMEM);
|
||||||
sqlite3PcacheRelease(pPg);
|
sqlite3PcacheRelease(pPg);
|
||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
@@ -2887,8 +2890,11 @@ static int pager_write_pagelist(PgHdr *pList){
|
|||||||
** set (set by sqlite3PagerDontWrite()).
|
** set (set by sqlite3PagerDontWrite()).
|
||||||
*/
|
*/
|
||||||
if( pgno<=pPager->dbSize && 0==(pList->flags&PGHDR_DONT_WRITE) ){
|
if( pgno<=pPager->dbSize && 0==(pList->flags&PGHDR_DONT_WRITE) ){
|
||||||
i64 offset = (pgno-1)*(i64)pPager->pageSize; /* Offset to write */
|
i64 offset = (pgno-1)*(i64)pPager->pageSize; /* Offset to write */
|
||||||
char *pData = CODEC2(pPager, pList->pData, pgno, 6); /* Data to write */
|
char *pData; /* Data to write */
|
||||||
|
|
||||||
|
/* Encode the database */
|
||||||
|
CODEC2(pPager, pList->pData, pgno, 6, return SQLITE_NOMEM, pData);
|
||||||
|
|
||||||
/* Write out the page data. */
|
/* Write out the page data. */
|
||||||
rc = sqlite3OsWrite(pPager->fd, pData, pPager->pageSize, offset);
|
rc = sqlite3OsWrite(pPager->fd, pData, pPager->pageSize, offset);
|
||||||
@@ -2943,8 +2949,9 @@ static int subjournalPage(PgHdr *pPg){
|
|||||||
if( isOpen(pPager->sjfd) ){
|
if( isOpen(pPager->sjfd) ){
|
||||||
void *pData = pPg->pData;
|
void *pData = pPg->pData;
|
||||||
i64 offset = pPager->nSubRec*(4+pPager->pageSize);
|
i64 offset = pPager->nSubRec*(4+pPager->pageSize);
|
||||||
char *pData2 = CODEC2(pPager, pData, pPg->pgno, 7);
|
char *pData2;
|
||||||
|
|
||||||
|
CODEC2(pPager, pData, pPg->pgno, 7, return SQLITE_NOMEM, pData2);
|
||||||
PAGERTRACE(("STMT-JOURNAL %d page %d\n", PAGERID(pPager), pPg->pgno));
|
PAGERTRACE(("STMT-JOURNAL %d page %d\n", PAGERID(pPager), pPg->pgno));
|
||||||
|
|
||||||
assert( pageInJournal(pPg) || pPg->pgno>pPager->dbOrigSize );
|
assert( pageInJournal(pPg) || pPg->pgno>pPager->dbOrigSize );
|
||||||
@@ -3487,7 +3494,7 @@ static int readDbPage(PgHdr *pPg){
|
|||||||
u8 *dbFileVers = &((u8*)pPg->pData)[24];
|
u8 *dbFileVers = &((u8*)pPg->pData)[24];
|
||||||
memcpy(&pPager->dbFileVers, dbFileVers, sizeof(pPager->dbFileVers));
|
memcpy(&pPager->dbFileVers, dbFileVers, sizeof(pPager->dbFileVers));
|
||||||
}
|
}
|
||||||
CODEC1(pPager, pPg->pData, pgno, 3);
|
CODEC1(pPager, pPg->pData, pgno, 3, rc = SQLITE_NOMEM);
|
||||||
|
|
||||||
PAGER_INCR(sqlite3_pager_readdb_count);
|
PAGER_INCR(sqlite3_pager_readdb_count);
|
||||||
PAGER_INCR(pPager->nRead);
|
PAGER_INCR(pPager->nRead);
|
||||||
@@ -4185,7 +4192,7 @@ static int pager_write(PgHdr *pPg){
|
|||||||
** contains the database locks. The following assert verifies
|
** contains the database locks. The following assert verifies
|
||||||
** that we do not. */
|
** that we do not. */
|
||||||
assert( pPg->pgno!=PAGER_MJ_PGNO(pPager) );
|
assert( pPg->pgno!=PAGER_MJ_PGNO(pPager) );
|
||||||
pData2 = CODEC2(pPager, pData, pPg->pgno, 7);
|
CODEC2(pPager, pData, pPg->pgno, 7, return SQLITE_NOMEM, pData2);
|
||||||
cksum = pager_cksum(pPager, (u8*)pData2);
|
cksum = pager_cksum(pPager, (u8*)pData2);
|
||||||
rc = write32bits(pPager->jfd, pPager->journalOff, pPg->pgno);
|
rc = write32bits(pPager->jfd, pPager->journalOff, pPg->pgno);
|
||||||
if( rc==SQLITE_OK ){
|
if( rc==SQLITE_OK ){
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
*************************************************************************
|
*************************************************************************
|
||||||
** Internal interface definitions for SQLite.
|
** Internal interface definitions for SQLite.
|
||||||
**
|
**
|
||||||
** @(#) $Id: sqliteInt.h,v 1.882 2009/06/05 14:17:23 drh Exp $
|
** @(#) $Id: sqliteInt.h,v 1.883 2009/06/11 00:47:21 drh Exp $
|
||||||
*/
|
*/
|
||||||
#ifndef _SQLITEINT_H_
|
#ifndef _SQLITEINT_H_
|
||||||
#define _SQLITEINT_H_
|
#define _SQLITEINT_H_
|
||||||
@@ -644,6 +644,10 @@ struct Db {
|
|||||||
u8 inTrans; /* 0: not writable. 1: Transaction. 2: Checkpoint */
|
u8 inTrans; /* 0: not writable. 1: Transaction. 2: Checkpoint */
|
||||||
u8 safety_level; /* How aggressive at syncing data to disk */
|
u8 safety_level; /* How aggressive at syncing data to disk */
|
||||||
Schema *pSchema; /* Pointer to database schema (possibly shared) */
|
Schema *pSchema; /* Pointer to database schema (possibly shared) */
|
||||||
|
#ifdef SQLITE_HAS_CODEC
|
||||||
|
void *pAux; /* Auxiliary data. Usually NULL */
|
||||||
|
void (*xFreeAux)(void*); /* Routine to free pAux */
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user