mirror of https://github.com/sqlite/sqlite
Bring test coverage up to 99%. (CVS 5522)
FossilOrigin-Name: 2cd6bae80984126023bcf479e5f3db5eaa5c4134
This commit is contained in:
parent
4cfb22f798
commit
c890fec362
28
manifest
28
manifest
|
@ -1,5 +1,5 @@
|
|||
C Fix\sproblems\sin\stest\sscripts.\s\sAdd\snew\stest\scases\sto\simprove\stest\scoverage.\s(CVS\s5521)
|
||||
D 2008-08-01T18:47:02
|
||||
C Bring\stest\scoverage\sup\sto\s99%.\s(CVS\s5522)
|
||||
D 2008-08-01T20:10:08
|
||||
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
|
||||
F Makefile.in bbb62eecc851379aef5a48a1bf8787eb13e6ec06
|
||||
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
|
||||
|
@ -96,9 +96,9 @@ F src/attach.c a85c14612e7e3410e0c3d2e0241832fa9688bd14
|
|||
F src/auth.c c8b2ab5c8bad4bd90ed7c294694f48269162c627
|
||||
F src/bitvec.c 95c86bd18d8fedf0533f5af196192546e10a7e7d
|
||||
F src/btmutex.c 709cad2cdca0afd013f0f612363810e53f59ec53
|
||||
F src/btree.c 540186cc76840ef9c6be5ec55793de79e33cf409
|
||||
F src/btree.c 0be00cb6a5cd130127a06eb5f661cb5e4a9d0259
|
||||
F src/btree.h 03256ed7ee42b5ecacbe887070b0f8249e7d069d
|
||||
F src/btreeInt.h 6e4cb69a9192a8d609c27034ae5f921cf0ecdde1
|
||||
F src/btreeInt.h ab18c7b4980314e9e4b402e5dcde09f3c2545576
|
||||
F src/build.c 77d5518a64c0a905024bee80f6df2e794f4f5d43
|
||||
F src/callback.c c9f75a4c403f166af3761df47d78a806587d63af
|
||||
F src/complete.c cb14e06dbe79dee031031f0d9e686ff306afe07c
|
||||
|
@ -183,14 +183,14 @@ F src/update.c 79b77a3cc8ed5f8903a7f37055fcedd69388dcae
|
|||
F src/utf.c a7004436a6ef2aee012ace93de274dd0f3c7624e
|
||||
F src/util.c afe659ccc05d1f8af9e8631dabfec3ee3a7144af
|
||||
F src/vacuum.c ef342828002debc97514617af3424aea8ef8522c
|
||||
F src/vdbe.c 90296a45d28939fd631c05c235dab7e123f94f57
|
||||
F src/vdbe.h c46155c221418bea29ee3a749d5950fcf85a70e2
|
||||
F src/vdbe.c a548d1dd6c5d99b2bd38e522aba2fa401340c99c
|
||||
F src/vdbe.h 647fcf33a551ba10a974162c56846cb9aef2276b
|
||||
F src/vdbeInt.h ab27f964458fd070c6660f80694ab85d56d5f4c5
|
||||
F src/vdbeapi.c 25dd01c8b12978c14ec30e9a50666b23da767b27
|
||||
F src/vdbeaux.c 78c9d6413b8720edfe5b2a40a14850d21b0079b7
|
||||
F src/vdbeapi.c 6a769ea6708f75b1e55268ec1c7bcf8e96fc7628
|
||||
F src/vdbeaux.c 81a433ce73b79df605cc9709af430362e771ecdc
|
||||
F src/vdbeblob.c f93110888ddc246215e9ba1f831d3d375bfd8355
|
||||
F src/vdbefifo.c 20fda2a7c4c0bcee1b90eb7e545fefcdbf2e1de7
|
||||
F src/vdbemem.c bdf92746583b0187655d736c4a20a2622eb9ab69
|
||||
F src/vdbemem.c c37b2a266a49eaf0c0f5080157f9f1a908fdaac3
|
||||
F src/vtab.c 914db4c9435c61a522e3cdaf103dac163d38aa30
|
||||
F src/where.c a800184a2d023b15d6f2758b7a6c7ab011258fee
|
||||
F tclinstaller.tcl 4356d9d94d2b5ed5e68f9f0c80c4df3048dd7617
|
||||
|
@ -207,7 +207,7 @@ F test/async3.test 9ffa0977a78cc6351862a1583be2b1eecd41736d
|
|||
F test/attach.test 75a5d22f88e730967d68f2c9f95e786e3953d8e3
|
||||
F test/attach2.test a295d2d7061adcee5884ef4a93c7c96a82765437
|
||||
F test/attach3.test 7b92dc8e40c1ebca9732ca6f2d3fefbd46f196df
|
||||
F test/attachmalloc.test 56c5e55563dba6d64641ef2f70ce06900df16912
|
||||
F test/attachmalloc.test f7f62363896475080b0d41907a85a9fd94625296
|
||||
F test/auth.test 9eb4b6b99eee54c95711c74c4b9694acf4d850ed
|
||||
F test/auth2.test ee3ba272e2b975e913afc9b041ee75706e190005
|
||||
F test/autoinc.test 42af2c407c4e37d0626f9cda57ed381e94522c9d
|
||||
|
@ -411,7 +411,7 @@ F test/mallocD.test f78c295e8e18ea3029e65ca08278690e00c22100
|
|||
F test/mallocE.test db1ed69d7eded1b080952e2a7c37f364ad241b08
|
||||
F test/mallocF.test 2d5c590ebc2fc7f0dcebdf5aa8498b9aed69107e
|
||||
F test/mallocG.test 4584d0d8ddb8009f16ca0c8bab1fa37f6358efa2
|
||||
F test/mallocH.test 10df29d6d8ee429e30cfa51f1583fb96956d9ae1
|
||||
F test/mallocH.test 79b65aed612c9b3ed2dcdaa727c85895fd1bfbdb
|
||||
F test/malloc_common.tcl 753eb1ff3481f6cddb65cff33b9ef9f72c5ccdf7
|
||||
F test/manydb.test 8de36b8d33aab5ef295b11d9e95310aeded31af8
|
||||
F test/memdb.test a67bda4ff90a38f2b19f6c7f95aa7289e051d893
|
||||
|
@ -616,7 +616,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81
|
|||
F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
|
||||
F tool/speedtest8.c 1dbced29de5f59ba2ebf877edcadf171540374d1
|
||||
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
||||
P 4f4a9ccae7d25b9856d1203f6b289d552c2b425e
|
||||
R 18c217d4a8c206615c26839f44ff5969
|
||||
P b65f493c7519e8a5ee632a395b57d45269741dda
|
||||
R 569ccbda0a2f36d2174f959575a5f332
|
||||
U drh
|
||||
Z 42613daae14dfac0693542545b969121
|
||||
Z f6ba4601378d31882289341741f7ff01
|
||||
|
|
|
@ -1 +1 @@
|
|||
b65f493c7519e8a5ee632a395b57d45269741dda
|
||||
2cd6bae80984126023bcf479e5f3db5eaa5c4134
|
29
src/btree.c
29
src/btree.c
|
@ -9,7 +9,7 @@
|
|||
** May you share freely, never taking more than you give.
|
||||
**
|
||||
*************************************************************************
|
||||
** $Id: btree.c,v 1.492 2008/07/28 19:34:53 drh Exp $
|
||||
** $Id: btree.c,v 1.493 2008/08/01 20:10:08 drh Exp $
|
||||
**
|
||||
** This file implements a external (disk-based) database using BTrees.
|
||||
** See the header comment on "btreeInt.h" for additional information.
|
||||
|
@ -6492,6 +6492,9 @@ static void checkAppendMsg(
|
|||
}
|
||||
sqlite3VXPrintf(&pCheck->errMsg, 1, zFormat, ap);
|
||||
va_end(ap);
|
||||
if( pCheck->errMsg.mallocFailed ){
|
||||
pCheck->mallocFailed = 1;
|
||||
}
|
||||
}
|
||||
#endif /* SQLITE_OMIT_INTEGRITY_CHECK */
|
||||
|
||||
|
@ -6735,7 +6738,9 @@ static int checkTreePage(
|
|||
data = pPage->aData;
|
||||
hdr = pPage->hdrOffset;
|
||||
hit = sqlite3PageMalloc( pBt->pageSize );
|
||||
if( hit ){
|
||||
if( hit==0 ){
|
||||
pCheck->mallocFailed = 1;
|
||||
}else{
|
||||
memset(hit, 0, usableSize );
|
||||
memset(hit, 1, get2byte(&data[hdr+5]));
|
||||
nCell = get2byte(&data[hdr+3]);
|
||||
|
@ -6791,10 +6796,10 @@ static int checkTreePage(
|
|||
** an array of pages numbers were each page number is the root page of
|
||||
** a table. nRoot is the number of entries in aRoot.
|
||||
**
|
||||
** If everything checks out, this routine returns NULL. If something is
|
||||
** amiss, an error message is written into memory obtained from malloc()
|
||||
** and a pointer to that error message is returned. The calling function
|
||||
** is responsible for freeing the error message when it is done.
|
||||
** Write the number of error seen in *pnErr. Except for some memory
|
||||
** allocation errors, nn error message is held in memory obtained from
|
||||
** malloc is returned if *pnErr is non-zero. If *pnErr==0 then NULL is
|
||||
** returned.
|
||||
*/
|
||||
char *sqlite3BtreeIntegrityCheck(
|
||||
Btree *p, /* The btree to be checked */
|
||||
|
@ -6813,14 +6818,16 @@ char *sqlite3BtreeIntegrityCheck(
|
|||
pBt->db = p->db;
|
||||
nRef = sqlite3PagerRefcount(pBt->pPager);
|
||||
if( lockBtreeWithRetry(p)!=SQLITE_OK ){
|
||||
*pnErr = 1;
|
||||
sqlite3BtreeLeave(p);
|
||||
return sqlite3DbStrDup(0, "Unable to acquire a read lock on the database");
|
||||
return sqlite3DbStrDup(0, "cannot acquire a read lock on the database");
|
||||
}
|
||||
sCheck.pBt = pBt;
|
||||
sCheck.pPager = pBt->pPager;
|
||||
sCheck.nPage = pagerPagecount(sCheck.pPager);
|
||||
sCheck.mxErr = mxErr;
|
||||
sCheck.nErr = 0;
|
||||
sCheck.mallocFailed = 0;
|
||||
*pnErr = 0;
|
||||
#ifndef SQLITE_OMIT_AUTOVACUUM
|
||||
if( pBt->nTrunc!=0 ){
|
||||
|
@ -6837,8 +6844,7 @@ char *sqlite3BtreeIntegrityCheck(
|
|||
unlockBtreeIfUnused(pBt);
|
||||
*pnErr = 1;
|
||||
sqlite3BtreeLeave(p);
|
||||
return sqlite3MPrintf(p->db, "Unable to malloc %d bytes",
|
||||
(sCheck.nPage+1)*sizeof(sCheck.anRef[0]));
|
||||
return 0;
|
||||
}
|
||||
for(i=0; i<=sCheck.nPage; i++){ sCheck.anRef[i] = 0; }
|
||||
i = PENDING_BYTE_PAGE(pBt);
|
||||
|
@ -6900,6 +6906,11 @@ char *sqlite3BtreeIntegrityCheck(
|
|||
*/
|
||||
sqlite3BtreeLeave(p);
|
||||
sqlite3_free(sCheck.anRef);
|
||||
if( sCheck.mallocFailed ){
|
||||
sqlite3StrAccumReset(&sCheck.errMsg);
|
||||
*pnErr = sCheck.nErr+1;
|
||||
return 0;
|
||||
}
|
||||
*pnErr = sCheck.nErr;
|
||||
if( sCheck.nErr==0 ) sqlite3StrAccumReset(&sCheck.errMsg);
|
||||
return sqlite3StrAccumFinish(&sCheck.errMsg);
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
** May you share freely, never taking more than you give.
|
||||
**
|
||||
*************************************************************************
|
||||
** $Id: btreeInt.h,v 1.29 2008/07/18 09:34:57 danielk1977 Exp $
|
||||
** $Id: btreeInt.h,v 1.30 2008/08/01 20:10:08 drh Exp $
|
||||
**
|
||||
** This file implements a external (disk-based) database using BTrees.
|
||||
** For a detailed discussion of BTrees, refer to
|
||||
|
@ -601,6 +601,7 @@ struct IntegrityCk {
|
|||
int *anRef; /* Number of times each page is referenced */
|
||||
int mxErr; /* Stop accumulating errors when this reaches zero */
|
||||
int nErr; /* Number of messages written to zErrMsg so far */
|
||||
int mallocFailed; /* A memory allocation error has occurred */
|
||||
StrAccum errMsg; /* Accumulate the error message text here */
|
||||
};
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
** in this file for details. If in doubt, do not deviate from existing
|
||||
** commenting and indentation practices when changing or adding code.
|
||||
**
|
||||
** $Id: vdbe.c,v 1.770 2008/08/01 17:37:41 danielk1977 Exp $
|
||||
** $Id: vdbe.c,v 1.771 2008/08/01 20:10:08 drh Exp $
|
||||
*/
|
||||
#include "sqliteInt.h"
|
||||
#include <ctype.h>
|
||||
|
@ -4249,16 +4249,18 @@ case OP_IntegrityCk: {
|
|||
assert( (p->btreeMask & (1<<pOp->p5))!=0 );
|
||||
z = sqlite3BtreeIntegrityCheck(db->aDb[pOp->p5].pBt, aRoot, nRoot,
|
||||
pnErr->u.i, &nErr);
|
||||
sqlite3DbFree(db, aRoot);
|
||||
pnErr->u.i -= nErr;
|
||||
sqlite3VdbeMemSetNull(pIn1);
|
||||
if( nErr==0 ){
|
||||
assert( z==0 );
|
||||
}else if( z==0 ){
|
||||
goto no_mem;
|
||||
}else{
|
||||
sqlite3VdbeMemSetStr(pIn1, z, -1, SQLITE_UTF8, sqlite3_free);
|
||||
}
|
||||
UPDATE_MAX_BLOBSIZE(pIn1);
|
||||
sqlite3VdbeChangeEncoding(pIn1, encoding);
|
||||
sqlite3DbFree(db, aRoot);
|
||||
break;
|
||||
}
|
||||
#endif /* SQLITE_OMIT_INTEGRITY_CHECK */
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
** or VDBE. The VDBE implements an abstract machine that runs a
|
||||
** simple program to access and modify the underlying database.
|
||||
**
|
||||
** $Id: vdbe.h,v 1.134 2008/06/25 00:12:41 drh Exp $
|
||||
** $Id: vdbe.h,v 1.135 2008/08/01 20:10:08 drh Exp $
|
||||
*/
|
||||
#ifndef _SQLITE_VDBE_H_
|
||||
#define _SQLITE_VDBE_H_
|
||||
|
@ -177,7 +177,7 @@ int sqlite3VdbeCurrentAddr(Vdbe*);
|
|||
void sqlite3VdbeTrace(Vdbe*,FILE*);
|
||||
#endif
|
||||
void sqlite3VdbeResetStepResult(Vdbe*);
|
||||
int sqlite3VdbeReset(Vdbe*, int);
|
||||
int sqlite3VdbeReset(Vdbe*);
|
||||
void sqlite3VdbeSetNumCols(Vdbe*,int);
|
||||
int sqlite3VdbeSetColName(Vdbe*, int, int, const char *, int);
|
||||
void sqlite3VdbeCountChanges(Vdbe*);
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
** This file contains code use to implement APIs that are part of the
|
||||
** VDBE.
|
||||
**
|
||||
** $Id: vdbeapi.c,v 1.136 2008/07/28 19:34:54 drh Exp $
|
||||
** $Id: vdbeapi.c,v 1.137 2008/08/01 20:10:08 drh Exp $
|
||||
*/
|
||||
#include "sqliteInt.h"
|
||||
#include "vdbeInt.h"
|
||||
|
@ -228,7 +228,7 @@ int sqlite3_reset(sqlite3_stmt *pStmt){
|
|||
}else{
|
||||
Vdbe *v = (Vdbe*)pStmt;
|
||||
sqlite3_mutex_enter(v->db->mutex);
|
||||
rc = sqlite3VdbeReset(v, 1);
|
||||
rc = sqlite3VdbeReset(v);
|
||||
stmtLruAdd(v);
|
||||
sqlite3VdbeMakeReady(v, -1, 0, 0, 0);
|
||||
assert( (rc & (v->db->errMask))==rc );
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
** to version 2.8.7, all this code was combined into the vdbe.c source file.
|
||||
** But that file was getting too big so this subroutines were split out.
|
||||
**
|
||||
** $Id: vdbeaux.c,v 1.403 2008/08/01 17:37:41 danielk1977 Exp $
|
||||
** $Id: vdbeaux.c,v 1.404 2008/08/01 20:10:08 drh Exp $
|
||||
*/
|
||||
#include "sqliteInt.h"
|
||||
#include <ctype.h>
|
||||
|
@ -759,17 +759,13 @@ void sqlite3VdbePrintOp(FILE *pOut, int pc, Op *pOp){
|
|||
/*
|
||||
** Release an array of N Mem elements
|
||||
*/
|
||||
static void releaseMemArray(Mem *p, int N, int freebuffers){
|
||||
static void releaseMemArray(Mem *p, int N){
|
||||
if( p && N ){
|
||||
sqlite3 *db = p->db;
|
||||
int malloc_failed = db->mallocFailed;
|
||||
while( N-->0 ){
|
||||
assert( N<2 || p[0].db==p[1].db );
|
||||
if( freebuffers ){
|
||||
sqlite3VdbeMemRelease(p);
|
||||
}else{
|
||||
sqlite3VdbeMemReleaseExternal(p);
|
||||
}
|
||||
sqlite3VdbeMemRelease(p);
|
||||
p->flags = MEM_Null;
|
||||
p++;
|
||||
}
|
||||
|
@ -824,7 +820,7 @@ int sqlite3VdbeList(
|
|||
** the result, result columns may become dynamic if the user calls
|
||||
** sqlite3_column_text16(), causing a translation to UTF-16 encoding.
|
||||
*/
|
||||
releaseMemArray(pMem, p->nMem, 1);
|
||||
releaseMemArray(pMem, p->nMem);
|
||||
|
||||
do{
|
||||
i = p->pc++;
|
||||
|
@ -1132,14 +1128,14 @@ static void closeAllCursorsExceptActiveVtabs(Vdbe *p){
|
|||
** sorters that were left open. It also deletes the values of
|
||||
** variables in the aVar[] array.
|
||||
*/
|
||||
static void Cleanup(Vdbe *p, int freebuffers){
|
||||
static void Cleanup(Vdbe *p){
|
||||
int i;
|
||||
sqlite3 *db = p->db;
|
||||
closeAllCursorsExceptActiveVtabs(p);
|
||||
for(i=1; i<=p->nMem; i++){
|
||||
MemSetTypeFlag(&p->aMem[i], MEM_Null);
|
||||
}
|
||||
releaseMemArray(&p->aMem[1], p->nMem, freebuffers);
|
||||
releaseMemArray(&p->aMem[1], p->nMem);
|
||||
sqlite3VdbeFifoClear(&p->sFifo);
|
||||
if( p->contextStack ){
|
||||
for(i=0; i<p->contextStackTop; i++){
|
||||
|
@ -1166,7 +1162,7 @@ void sqlite3VdbeSetNumCols(Vdbe *p, int nResColumn){
|
|||
int n;
|
||||
sqlite3 *db = p->db;
|
||||
|
||||
releaseMemArray(p->aColName, p->nResColumn*COLNAME_N, 1);
|
||||
releaseMemArray(p->aColName, p->nResColumn*COLNAME_N);
|
||||
sqlite3DbFree(db, p->aColName);
|
||||
n = nResColumn*COLNAME_N;
|
||||
p->nResColumn = nResColumn;
|
||||
|
@ -1696,7 +1692,7 @@ void sqlite3VdbeResetStepResult(Vdbe *p){
|
|||
** virtual machine from VDBE_MAGIC_RUN or VDBE_MAGIC_HALT back to
|
||||
** VDBE_MAGIC_INIT.
|
||||
*/
|
||||
int sqlite3VdbeReset(Vdbe *p, int freebuffers){
|
||||
int sqlite3VdbeReset(Vdbe *p){
|
||||
sqlite3 *db;
|
||||
db = p->db;
|
||||
|
||||
|
@ -1737,7 +1733,7 @@ int sqlite3VdbeReset(Vdbe *p, int freebuffers){
|
|||
|
||||
/* Reclaim all memory used by the VDBE
|
||||
*/
|
||||
Cleanup(p, freebuffers);
|
||||
Cleanup(p);
|
||||
|
||||
/* Save profiling information from this VDBE run.
|
||||
*/
|
||||
|
@ -1775,12 +1771,11 @@ int sqlite3VdbeReset(Vdbe *p, int freebuffers){
|
|||
int sqlite3VdbeFinalize(Vdbe *p){
|
||||
int rc = SQLITE_OK;
|
||||
if( p->magic==VDBE_MAGIC_RUN || p->magic==VDBE_MAGIC_HALT ){
|
||||
rc = sqlite3VdbeReset(p, 1);
|
||||
rc = sqlite3VdbeReset(p);
|
||||
assert( (rc & p->db->errMask)==rc );
|
||||
}else if( p->magic!=VDBE_MAGIC_INIT ){
|
||||
return SQLITE_MISUSE;
|
||||
}
|
||||
/* releaseMemArray(&p->aMem[1], p->nMem, 1); */
|
||||
sqlite3VdbeDelete(p);
|
||||
return rc;
|
||||
}
|
||||
|
@ -1832,12 +1827,12 @@ void sqlite3VdbeDelete(Vdbe *p){
|
|||
}
|
||||
sqlite3DbFree(db, p->aOp);
|
||||
}
|
||||
releaseMemArray(p->aVar, p->nVar, 1);
|
||||
releaseMemArray(p->aVar, p->nVar);
|
||||
sqlite3DbFree(db, p->aLabel);
|
||||
if( p->aMem ){
|
||||
sqlite3DbFree(db, &p->aMem[1]);
|
||||
}
|
||||
releaseMemArray(p->aColName, p->nResColumn*COLNAME_N, 1);
|
||||
releaseMemArray(p->aColName, p->nResColumn*COLNAME_N);
|
||||
sqlite3DbFree(db, p->aColName);
|
||||
sqlite3DbFree(db, p->zSql);
|
||||
p->magic = VDBE_MAGIC_DEAD;
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
** only within the VDBE. Interface routines refer to a Mem using the
|
||||
** name sqlite_value
|
||||
**
|
||||
** $Id: vdbemem.c,v 1.120 2008/07/30 13:14:55 drh Exp $
|
||||
** $Id: vdbemem.c,v 1.121 2008/08/01 20:10:09 drh Exp $
|
||||
*/
|
||||
#include "sqliteInt.h"
|
||||
#include <ctype.h>
|
||||
|
@ -631,14 +631,8 @@ int sqlite3VdbeMemSetStr(
|
|||
}else{
|
||||
sqlite3VdbeMemRelease(pMem);
|
||||
pMem->z = (char *)z;
|
||||
if( xDel==SQLITE_DYNAMIC ){
|
||||
pMem->zMalloc = pMem->z;
|
||||
pMem->xDel = 0;
|
||||
flags |= MEM_Dyn;
|
||||
}else{
|
||||
pMem->xDel = xDel;
|
||||
flags |= ((xDel==SQLITE_STATIC)?MEM_Static:MEM_Dyn);
|
||||
}
|
||||
pMem->xDel = xDel;
|
||||
flags |= ((xDel==SQLITE_STATIC)?MEM_Static:MEM_Dyn);
|
||||
}
|
||||
|
||||
pMem->n = nByte;
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
# focus of this script is testing the ATTACH statement and
|
||||
# specifically out-of-memory conditions within that command.
|
||||
#
|
||||
# $Id: attachmalloc.test,v 1.7 2007/10/09 08:29:32 danielk1977 Exp $
|
||||
# $Id: attachmalloc.test,v 1.8 2008/08/01 20:10:09 drh Exp $
|
||||
#
|
||||
|
||||
set testdir [file dirname $argv0]
|
||||
|
@ -35,6 +35,7 @@ do_malloc_test attachmalloc-1 -tclprep {
|
|||
if {[catch {sqlite3 db test.db}]} {
|
||||
error "out of memory"
|
||||
}
|
||||
sqlite3_db_config_lookaside db 0 0
|
||||
sqlite3_extended_result_codes db 1
|
||||
} -sqlbody {
|
||||
ATTACH 'test2.db' AS two;
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#
|
||||
# This test script checks malloc failures in various obscure operations.
|
||||
#
|
||||
# $Id: mallocH.test,v 1.1 2008/08/01 18:47:02 drh Exp $
|
||||
# $Id: mallocH.test,v 1.2 2008/08/01 20:10:09 drh Exp $
|
||||
|
||||
set testdir [file dirname $argv0]
|
||||
source $testdir/tester.tcl
|
||||
|
@ -48,4 +48,26 @@ do_malloc_test mallocH-3 -sqlbody {
|
|||
SELECT replace('ababa','a','xyzzy');
|
||||
}
|
||||
|
||||
# Malloc failures during EXPLAIN.
|
||||
#
|
||||
ifcapable explain {
|
||||
do_malloc_test mallocH-4 -sqlprep {
|
||||
CREATE TABLE abc(a PRIMARY KEY, b, c);
|
||||
} -sqlbody {
|
||||
EXPLAIN SELECT * FROM abc AS t2 WHERE rowid=1;
|
||||
EXPLAIN QUERY PLAN SELECT * FROM abc AS t2 WHERE rowid=1;
|
||||
}
|
||||
}
|
||||
|
||||
# Malloc failure during integrity_check pragma.
|
||||
#
|
||||
do_malloc_test mallocH-5 -sqlprep {
|
||||
CREATE TABLE t1(a PRIMARY KEY, b UNIQUE);
|
||||
CREATE TABLE t2(x,y);
|
||||
INSERT INTO t1 VALUES(1,2);
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
} -sqlbody {
|
||||
PRAGMA integrity_check;
|
||||
}
|
||||
|
||||
finish_test
|
||||
|
|
Loading…
Reference in New Issue