-C Miscellaneous\scode\ssimplifications\sand\scleanup\sand\stest\scoverage\nenhancements.\s(CVS\s4730)
-D 2008-01-19T20:11:26
+C Additional\stest\scoverage\simprovements.\s\sTest\scoverage\snow\sstands\sat\s98.73%.\s(CVS\s4731)
+D 2008-01-19T23:50:26
F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7
F Makefile.in 30789bf70614bad659351660d76b8e533f3340e9
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
F src/attach.c f7a34eb0f0e01db5fbfd8acb12109f87aed8159d
F src/auth.c c8b2ab5c8bad4bd90ed7c294694f48269162c627
F src/btmutex.c 5d39da37c9d1282f3c6f9967afae6a34ee36b7ff
-F src/btree.c 5164b32950cfd41f2c5c31e8ff82c4a499918aef
+F src/btree.c a3125bd53a4112f2f259af858ef2eff63e397c9b
F src/btree.h 19dcf5ad23c17b98855da548e9a8e3eb4429d5eb
F src/btreeInt.h 1c5a9da165718ef7de81e35ce9ab5d9ba9283f76
F src/build.c 27a3be10a7186515915ac73c40667dc55beacbac
F src/date.c 8ce763c68143b1e8fb6f79dcfc8b801853c97017
F src/delete.c 739ccbab8fa7478762bded5c9cc67f16a4d09dbe
F src/experimental.c 1b2d1a6cd62ecc39610e97670332ca073c50792b
-F src/expr.c 9ac9177466b17b57e814f0beabc9e7bba88f8e38
-F src/func.c 996071cf0af9d967e58b69fce1909555059ebc7d
+F src/expr.c 07318c7e5e3062e2d33314f72819ea420b210dc1
+F src/func.c a7f44eaca16faec54d50756168f1665958b16f25
F src/hash.c 45a7005aac044b6c86bd7e49c44bc15d30006d6c
F src/hash.h 031cd9f915aff27e12262cb9eb570ac1b8326b53
F src/insert.c 969b543eedaeb3ec4cd52cd6931db94da67388c3
F src/sqliteLimit.h ee4430f88f69bf63527967bb35ca52af7b0ccb1e
F src/table.c 1aeb9eab57b4235db86fe15a35dec76fb445a9c4
F src/tclsqlite.c 9923abeffc9b3d7dad58e92b319661521f60debf
-F src/test1.c cf222abaa6de1919bfd0c8ede4d280e4e368302b
+F src/test1.c 157f46f5945840dd89b959b8e72cc3410a075ed9
F src/test2.c 77b34303883b9d722c65a6879bb0163a400e3789
-F src/test3.c df62cd5c971dc1ae0be0a1842f9df3390934e7a6
+F src/test3.c 6b49ddb0946907a07210998810807ace51be00a5
F src/test4.c c2c0f5dc907f1346f5d4b65eb5799f11eb9e4071
F src/test5.c 3a6a5717a149d7ca2e6d14f5be72cf7555d54dc4
F src/test6.c 8944b6482be3a54505c4f14339392448e4cabe66
F src/utf.c ef4b7d83bae533b76c3e1bf635b113fdad86a736
F src/util.c deda8c5a400530e1c27c03619cc4cd1a06fc5281
F src/vacuum.c 3f34f278809bf3eb0b62ec46ff779e9c385b28f0
-F src/vdbe.c 65a3ad903f1c7a0f6e557fdc7671c3cb2d70fa12
+F src/vdbe.c 7d193674c491c28b670194862e108c976f5bf3ae
F src/vdbe.h 58a7d931ffb704e034b2a725981cfa5bd406fad9
F src/vdbeInt.h 835e6f0337ce89d705ef9a162338788808adc4b7
F src/vdbeapi.c cb8c427a3ab646490c83204a98e94eff03ee2e89
F test/bind.test 261fd1603613e7f877a516d29f281c9d8c2ecf52
F test/bindxfer.test b9a57f66dbd317feeefa28bd65b6576f1592ee98
F test/blob.test 28c3b25150684ee3d108bb78cfb67a472deef2f0
-F test/btree.test eef24f3dd52b5b268321ae5aacfe30d3baca4e84
+F test/btree.test 41c328449887a4a532650db28cf346556ff70d4e
F test/btree2.test 4b56a2a4a4f84d68c77aef271223a713bf5ebafc
F test/btree4.test 3797b4305694c7af6828675b0f4b1424b8ca30e4
F test/btree5.test 8e5ff32c02e685d36516c6499add9375fe1377f2
F test/capi2.test cc64df7560a96f848f919ea2926c60acf639684b
F test/capi3.test 432fabf9c6402ed8ff1ae291e01f0e04b64df3ea
F test/capi3b.test 664eb55318132f292f2c436f90906f578cad6b97
-F test/capi3c.test 0b089837ee65a17dd73ea171c4dee5d7ea79dabb
+F test/capi3c.test 7bcff27698351b6fbe45be5ebae95c1d2a1f4b1a
F test/cast.test ce8f14fc80f70b30ed984480cc0d8914a459e8f9
F test/check.test 024ed399600b799160378cf9d9f436bdf5dfd184
F test/collate1.test e3eaa48c21e150814be1a7b852d2a8af24458d04
F test/distinctagg.test 2b89d1c5220d966a30ba4b40430338669301188b
F test/enc.test e54531cd6bf941ee6760be041dff19a104c7acea
F test/enc2.test 6d91a5286f59add0cfcbb2d0da913b76f2242398
-F test/enc3.test 9331988b9d72decec96995c90637e87b00d747a5
+F test/enc3.test adb01b50ca1084658437eb68987969e8fa409276
F test/exclusive.test ebaf72ce9ff8f7ab3a09bf8f58fd65393dfff386
F test/exclusive2.test d13bf66753dca46e61241d35d36ab7c868b0d313
F test/exclusive3.test 0e49c35b7e7cb8e7280b4ce3f0359d30b207d2ff
F test/io.test 80a7a7f1a2792e037d447b03e8c22ee1f6eaf339
F test/ioerr.test 5382046b2ef19b9084652e7d2d1e82ab33c0deda
F test/ioerr2.test e3d52c40f43f9b61da9b38951a737e7b84ebae96
-F test/ioerr3.test 6f62c1b40365e87d58589def770f35b5d63539e1
+F test/ioerr3.test d3cec5e1a11ad6d27527d0d38573fbff14c71bdd
F test/join.test af0443185378b64878750aa1cf4b83c216f246b4
F test/join2.test f2171c265e57ee298a27e57e7051d22962f9f324
F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0
F test/lock3.test 615111293cf32aa2ed16d01c6611737651c96fb9
F test/lock4.test f358fa835dff485d462072eee991111f09e87441
F test/main.test 05f585bb70c05caac3e047903b517cbb319ed204
-F test/malloc.test 760f346ba190fae9d5b6e495b844c9ce4db989cb
+F test/malloc.test 010b60540ce24d90c00bcd46762f06beb80f165d
F test/malloc2.test bacb55551f6f4dc58c538589a8d3e29b127ef8d0
F test/malloc3.test 5d3839afd98bff92b82d13405f41c96e77ac2a6b
F test/malloc4.test f0e5e0f639f61e2776a6c3f5308f836b3ad8b3c7
F test/minmax3.test 5b89f055df7ed03334e96eec0efb804afb7de638
F test/misc1.test 1b89c02c4a33b49dee4cd1d20d161aaaba719075
F test/misc2.test 1ee89298de9c16b61454658b24999c403e86afe4
-F test/misc3.test 7952978e14c0a1b52c6fc983af0f4d785d57f065
+F test/misc3.test aea079f4c3d93e9962186f45c0ff0954310e6b11
F test/misc4.test 91e8ed25c092c2bb4e0bb01864631e2930f8d7de
F test/misc5.test b0b4b7e0dd5d40335c8e849e5738d11a40bddc7c
F test/misc6.test 953cc693924d88e6117aeba16f46f0bf5abede91
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
-P d9ebe9d78c558af050c44ac4437ce0ef8193a4a8
-R 94e60cf83c5be7070b2e0c99c104b013
+P af129b6d158cc90ce9752dd6383c1de47f7b3e43
+R 29177cb746663a31c6843d98589f65e8
U drh
-Z 37d21009eb42b23cbb42db5cde98321f
+Z 52f8bb1305af66e6799c302ba2f646a8
-af129b6d158cc90ce9752dd6383c1de47f7b3e43
\ No newline at end of file
+010f7b780cb9c8f21af9ce810494fbd2be98a13f
\ No newline at end of file
** May you share freely, never taking more than you give.
**
*************************************************************************
-** $Id: btree.c,v 1.436 2008/01/02 11:50:51 danielk1977 Exp $
+** $Id: btree.c,v 1.437 2008/01/19 23:50:26 drh Exp $
**
** This file implements a external (disk-based) database using BTrees.
** See the header comment on "btreeInt.h" for additional information.
assert( sqlite3_mutex_held(pBt->mutex) );
if( pBt->inTransaction==TRANS_NONE && pBt->pCursor==0 && pBt->pPage1!=0 ){
if( sqlite3PagerRefcount(pBt->pPager)>=1 ){
+ assert( pBt->pPage1->aData );
+#if 0
if( pBt->pPage1->aData==0 ){
MemPage *pPage = pBt->pPage1;
pPage->aData = sqlite3PagerGetData(pPage->pDbPage);
pPage->pBt = pBt;
pPage->pgno = 1;
}
+#endif
releasePage(pBt->pPage1);
}
pBt->pPage1 = 0;
** This file contains routines used for analyzing expressions and
** for generating VDBE code that evaluates expressions in SQLite.
**
-** $Id: expr.c,v 1.350 2008/01/18 14:08:24 drh Exp $
+** $Id: expr.c,v 1.351 2008/01/19 23:50:26 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
** more matches. Either way, we have an error.
*/
if( cnt!=1 ){
- char *z = 0;
- char *zErr;
- zErr = cnt==0 ? "no such column: %s" : "ambiguous column name: %s";
+ const char *zErr;
+ zErr = cnt==0 ? "no such column" : "ambiguous column name";
if( zDb ){
- sqlite3SetString(&z, zDb, ".", zTab, ".", zCol, (char*)0);
+ sqlite3ErrorMsg(pParse, "%s: %s.%s.%s", zErr, zDb, zTab, zCol);
}else if( zTab ){
- sqlite3SetString(&z, zTab, ".", zCol, (char*)0);
+ sqlite3ErrorMsg(pParse, "%s: %s.%s", zErr, zTab, zCol);
}else{
- z = sqlite3StrDup(zCol);
- }
- if( z ){
- sqlite3ErrorMsg(pParse, zErr, z);
- sqlite3_free(z);
- pTopNC->nErr++;
- }else{
- db->mallocFailed = 1;
+ sqlite3ErrorMsg(pParse, "%s: %s", zErr, zCol);
}
+ pTopNC->nErr++;
}
/* If a column from a table in pSrcList is referenced, then record
/*
** Generate code that evalutes the given expression and puts the result
-** in register target. If target==-1, then allocate a temporary register
-** in which to store the result. In either case, return the register
-** number where the result is stored.
+** in register target.
**
** Also make a copy of the expression results into another "cache" register
** and modify the expression so that the next time it is evaluated,
Vdbe *v = pParse->pVdbe;
int inReg;
inReg = sqlite3ExprCode(pParse, pExpr, target);
+ assert( target>0 );
if( pExpr->op!=TK_REGISTER ){
int iMem;
- if( target<0 ){
- iMem = inReg;
- }else{
- iMem = ++pParse->nMem;
- sqlite3VdbeAddOp2(v, OP_Copy, inReg, iMem);
- }
+ iMem = ++pParse->nMem;
+ sqlite3VdbeAddOp2(v, OP_Copy, inReg, iMem);
pExpr->iTable = iMem;
pExpr->op = TK_REGISTER;
}
** sqliteRegisterBuildinFunctions() found at the bottom of the file.
** All other code has file scope.
**
-** $Id: func.c,v 1.181 2007/12/13 21:54:11 drh Exp $
+** $Id: func.c,v 1.182 2008/01/19 23:50:26 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
if( zAux ){
zRet[i*2] = '1';
if( strcmp(zAux, z) ){
- sqlite3_result_error(pCtx, "Auxilary data corruption", -1);
+ sqlite3_result_error(pCtx, "auxdata corruption", -1);
return;
}
}else {
** is not included in the SQLite library. It is used for automated
** testing of the SQLite library.
**
-** $Id: test1.c,v 1.283 2008/01/19 20:11:26 drh Exp $
+** $Id: test1.c,v 1.284 2008/01/19 23:50:26 drh Exp $
*/
#include "sqliteInt.h"
#include "tcl.h"
pVal = sqlite3ValueNew(0);
sqlite3ValueSetStr(pVal, -1, Tcl_GetStringResult(interp),
SQLITE_UTF8, SQLITE_STATIC);
+ sqlite3_result_text16(pCtx, sqlite3_value_text16le(pVal),
+ -1, SQLITE_TRANSIENT);
+ sqlite3_result_text16be(pCtx, sqlite3_value_text16le(pVal),
+ -1, SQLITE_TRANSIENT);
sqlite3_result_text16le(pCtx, sqlite3_value_text16le(pVal),
-1, SQLITE_TRANSIENT);
sqlite3ValueFree(pVal);
** is not included in the SQLite library. It is used for automated
** testing of the SQLite library.
**
-** $Id: test3.c,v 1.88 2007/12/07 18:55:29 drh Exp $
+** $Id: test3.c,v 1.89 2008/01/19 23:50:26 drh Exp $
*/
#include "sqliteInt.h"
#include "btreeInt.h"
return TCL_ERROR;
}
pBt = sqlite3TextToPtr(argv[1]);
-#ifdef SQLITE_DEBUG
+#ifdef SQLITE_TEST
sqlite3BtreeEnter(pBt);
sqlite3PagerRefdump(sqlite3BtreePager(pBt));
sqlite3BtreeLeave(pBt);
** 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.701 2008/01/19 20:11:26 drh Exp $
+** $Id: vdbe.c,v 1.702 2008/01/19 23:50:26 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
** It is just copied onto the P2 register exactly as
** it is found in the database file.
**
-** If the cursor is not pointing to a valid row, a NULL value is
-** written into P2.
+** If the P1 cursor must be pointing to a valid row (not a NULL row)
+** of a real table, not a pseudo-table.
*/
/* Opcode: RowKey P1 P2 * * *
**
** The key is copied onto the P3 register exactly as
** it is found in the database file.
**
-** If the cursor is not pointing to a valid row, a NULL is
-** written into P2.
+** If the P1 cursor must be pointing to a valid row (not a NULL row)
+** of a real table, not a pseudo-table.
*/
case OP_RowKey: /* out2-prerelease */
case OP_RowData: { /* out2-prerelease */
int i = pOp->p1;
Cursor *pC;
+ BtCursor *pCrsr;
u32 n;
/* Note that RowKey and RowData are really exactly the same instruction */
assert( pC->isTable || pOp->opcode==OP_RowKey );
assert( pC->isIndex || pOp->opcode==OP_RowData );
assert( pC!=0 );
- if( pC->nullRow ){
- pOut->flags = MEM_Null;
- }else if( pC->pCursor!=0 ){
- BtCursor *pCrsr = pC->pCursor;
- rc = sqlite3VdbeCursorMoveto(pC);
- if( rc ) goto abort_due_to_error;
- if( pC->isIndex ){
- i64 n64;
- assert( !pC->isTable );
- sqlite3BtreeKeySize(pCrsr, &n64);
- if( n64>SQLITE_MAX_LENGTH ){
- goto too_big;
- }
- n = n64;
- }else{
- sqlite3BtreeDataSize(pCrsr, &n);
+ assert( pC->nullRow==0 );
+ assert( pC->pseudoTable==0 );
+ assert( pC->pCursor!=0 );
+ pCrsr = pC->pCursor;
+ rc = sqlite3VdbeCursorMoveto(pC);
+ if( rc ) goto abort_due_to_error;
+ if( pC->isIndex ){
+ i64 n64;
+ assert( !pC->isTable );
+ sqlite3BtreeKeySize(pCrsr, &n64);
+ if( n64>SQLITE_MAX_LENGTH ){
+ goto too_big;
}
+ n = n64;
+ }else{
+ sqlite3BtreeDataSize(pCrsr, &n);
if( n>SQLITE_MAX_LENGTH ){
goto too_big;
}
- pOut->n = n;
- if( n<=NBFS ){
- pOut->flags = MEM_Blob | MEM_Short;
- pOut->z = pOut->zShort;
- }else{
- char *z = sqlite3_malloc( n );
- if( z==0 ) goto no_mem;
- pOut->flags = MEM_Blob | MEM_Dyn;
- pOut->xDel = 0;
- pOut->z = z;
- }
- if( pC->isIndex ){
- rc = sqlite3BtreeKey(pCrsr, 0, n, pOut->z);
- }else{
- rc = sqlite3BtreeData(pCrsr, 0, n, pOut->z);
- }
+ }
+ pOut->n = n;
+ if( n<=NBFS ){
+ pOut->flags = MEM_Blob | MEM_Short;
+ pOut->z = pOut->zShort;
}else{
- assert( pC->pseudoTable );
- pOut->n = pC->nData;
- assert( pC->nData<=SQLITE_MAX_LENGTH );
- pOut->z = pC->pData;
- pOut->flags = MEM_Blob|MEM_Ephem;
+ char *z = sqlite3_malloc( n );
+ if( z==0 ) goto no_mem;
+ pOut->flags = MEM_Blob | MEM_Dyn;
+ pOut->xDel = 0;
+ pOut->z = z;
+ }
+ if( pC->isIndex ){
+ rc = sqlite3BtreeKey(pCrsr, 0, n, pOut->z);
+ }else{
+ rc = sqlite3BtreeData(pCrsr, 0, n, pOut->z);
}
pOut->enc = SQLITE_UTF8; /* In case the blob is ever cast to text */
UPDATE_MAX_BLOBSIZE(pOut);
*/
case OP_VRowid: { /* out2-prerelease */
const sqlite3_module *pModule;
-
+ sqlite_int64 iRow;
Cursor *pCur = p->apCsr[pOp->p1];
+
assert( pCur->pVtabCursor );
pModule = pCur->pVtabCursor->pVtab->pModule;
- if( pModule->xRowid==0 ){
- sqlite3SetString(&p->zErrMsg, "Unsupported module operation: xRowid", 0);
- rc = SQLITE_ERROR;
- } else {
- sqlite_int64 iRow;
-
- if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse;
- rc = pModule->xRowid(pCur->pVtabCursor, &iRow);
- if( sqlite3SafetyOn(db) ) goto abort_due_to_misuse;
- pOut->flags = MEM_Int;
- pOut->u.i = iRow;
- }
-
+ assert( pModule->xRowid );
+ if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse;
+ rc = pModule->xRowid(pCur->pVtabCursor, &iRow);
+ if( sqlite3SafetyOn(db) ) goto abort_due_to_misuse;
+ pOut->flags = MEM_Int;
+ pOut->u.i = iRow;
break;
}
#endif /* SQLITE_OMIT_VIRTUALTABLE */
*/
case OP_VColumn: {
const sqlite3_module *pModule;
+ Mem *pDest;
+ sqlite3_context sContext;
Cursor *pCur = p->apCsr[pOp->p1];
assert( pCur->pVtabCursor );
pModule = pCur->pVtabCursor->pVtab->pModule;
- if( pModule->xColumn==0 ){
- sqlite3SetString(&p->zErrMsg, "Unsupported module operation: xColumn", 0);
- rc = SQLITE_ERROR;
- } else {
- Mem *pDest;
- sqlite3_context sContext;
- memset(&sContext, 0, sizeof(sContext));
- sContext.s.flags = MEM_Null;
- sContext.s.db = db;
- if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse;
- rc = pModule->xColumn(pCur->pVtabCursor, &sContext, pOp->p2);
+ assert( pModule->xColumn );
+ memset(&sContext, 0, sizeof(sContext));
+ sContext.s.flags = MEM_Null;
+ sContext.s.db = db;
+ if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse;
+ rc = pModule->xColumn(pCur->pVtabCursor, &sContext, pOp->p2);
- /* Copy the result of the function to the P3 register. We
- ** do this regardless of whether or not an error occured to ensure any
- ** dynamic allocation in sContext.s (a Mem struct) is released.
- */
- sqlite3VdbeChangeEncoding(&sContext.s, encoding);
- assert( pOp->p3>0 && pOp->p3<=p->nMem );
- pDest = &p->aMem[pOp->p3];
- REGISTER_TRACE(pOp->p3, pDest);
- sqlite3VdbeMemMove(pDest, &sContext.s);
- UPDATE_MAX_BLOBSIZE(pDest);
-
- if( sqlite3SafetyOn(db) ){
- goto abort_due_to_misuse;
- }
- if( sqlite3VdbeMemTooBig(pDest) ){
- goto too_big;
- }
+ /* Copy the result of the function to the P3 register. We
+ ** do this regardless of whether or not an error occured to ensure any
+ ** dynamic allocation in sContext.s (a Mem struct) is released.
+ */
+ sqlite3VdbeChangeEncoding(&sContext.s, encoding);
+ assert( pOp->p3>0 && pOp->p3<=p->nMem );
+ pDest = &p->aMem[pOp->p3];
+ REGISTER_TRACE(pOp->p3, pDest);
+ sqlite3VdbeMemMove(pDest, &sContext.s);
+ UPDATE_MAX_BLOBSIZE(pDest);
+
+ if( sqlite3SafetyOn(db) ){
+ goto abort_due_to_misuse;
+ }
+ if( sqlite3VdbeMemTooBig(pDest) ){
+ goto too_big;
}
-
break;
}
#endif /* SQLITE_OMIT_VIRTUALTABLE */
Cursor *pCur = p->apCsr[pOp->p1];
assert( pCur->pVtabCursor );
pModule = pCur->pVtabCursor->pVtab->pModule;
- if( pModule->xNext==0 ){
- sqlite3SetString(&p->zErrMsg, "Unsupported module operation: xNext", 0);
- rc = SQLITE_ERROR;
- } else {
- /* Invoke the xNext() method of the module. There is no way for the
- ** underlying implementation to return an error if one occurs during
- ** xNext(). Instead, if an error occurs, true is returned (indicating that
- ** data is available) and the error code returned when xColumn or
- ** some other method is next invoked on the save virtual table cursor.
- */
- if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse;
- p->inVtabMethod = 1;
- rc = pModule->xNext(pCur->pVtabCursor);
- p->inVtabMethod = 0;
- if( rc==SQLITE_OK ){
- res = pModule->xEof(pCur->pVtabCursor);
- }
- if( sqlite3SafetyOn(db) ) goto abort_due_to_misuse;
+ assert( pModule->xNext );
- if( !res ){
- /* If there is data, jump to P2 */
- pc = pOp->p2 - 1;
- }
+ /* Invoke the xNext() method of the module. There is no way for the
+ ** underlying implementation to return an error if one occurs during
+ ** xNext(). Instead, if an error occurs, true is returned (indicating that
+ ** data is available) and the error code returned when xColumn or
+ ** some other method is next invoked on the save virtual table cursor.
+ */
+ if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse;
+ p->inVtabMethod = 1;
+ rc = pModule->xNext(pCur->pVtabCursor);
+ p->inVtabMethod = 0;
+ if( rc==SQLITE_OK ){
+ res = pModule->xEof(pCur->pVtabCursor);
}
+ if( sqlite3SafetyOn(db) ) goto abort_due_to_misuse;
+ if( !res ){
+ /* If there is data, jump to P2 */
+ pc = pOp->p2 - 1;
+ }
break;
}
#endif /* SQLITE_OMIT_VIRTUALTABLE */
# This file implements regression tests for SQLite library. The
# focus of this script is btree database backend
#
-# $Id: btree.test,v 1.41 2007/09/06 22:19:15 drh Exp $
+# $Id: btree.test,v 1.42 2008/01/19 23:50:26 drh Exp $
set testdir [file dirname $argv0]
do_test btree-8.1.1 {
lindex [btree_pager_stats $::b1] 1
} {1}
-#btree_pager_ref_dump $::b1
+btree_pager_ref_dump $::b1
do_test btree-8.2 {
btree_move_to $::c1 2020
string length [btree_data $::c1]
# This is a copy of the capi3.test file that has been adapted to
# test the new sqlite3_prepare_v2 interface.
#
-# $Id: capi3c.test,v 1.13 2007/12/13 21:54:11 drh Exp $
+# $Id: capi3c.test,v 1.14 2008/01/19 23:50:26 drh Exp $
#
set testdir [file dirname $argv0]
db eval {DROP TABLE t3}
sqlite3_step $STMT
} SQLITE_SCHEMA
+do_test capi3c-19.4.1 {
+ sqlite3_errmsg $DB
+} {no such table: t3}
do_test capi3c-19.4.2 {
+ sqlite3_expired $STMT
+} 1
+do_test capi3c-19.4.3 {
sqlite3_errmsg $DB
} {no such table: t3}
+do_test capi3c-19.4.4 {
+ sqlite3_expired 0
+} 1
do_test capi3c-19.5 {
sqlite3_reset $STMT
db eval {
}
sqlite3_step $STMT
} SQLITE_ROW
+do_test capi3c-19.5.2 {
+ sqlite3_expired $STMT
+} 0
do_test capi3c-19.6 {
sqlite3_column_int $STMT 1
} 2
# The focus of this file is testing of the proper handling of conversions
# to the native text representation.
#
-# $Id: enc3.test,v 1.6 2007/05/10 21:14:03 drh Exp $
+# $Id: enc3.test,v 1.7 2008/01/19 23:50:26 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
} {1}
}
+# Try to attach a database with a different encoding.
+#
+ifcapable {utf16} {
+ file delete -force test8.db test8.db-journal
+ sqlite3 dbaux test8.db
+ do_test enc3-3.1 {
+ dbaux eval {
+ PRAGMA encoding='utf8';
+ CREATE TABLE t1(x);
+ PRAGMA encoding
+ }
+ } {UTF-8}
+ do_test enc3-3.2 {
+ catchsql {
+ ATTACH 'test.db' AS utf16;
+ SELECT 1 FROM utf16.sqlite_master LIMIT 1;
+ } dbaux
+ } {1 {attached databases must use the same text encoding as main database}}
+ catch {dbaux close}
+ file delete -force test8.db test8.db-journal
+}
finish_test
# focus of this file is testing for correct handling of I/O errors
# in conjunction with very small soft-heap-limit values.
#
-# $Id: ioerr3.test,v 1.1 2007/12/19 09:20:42 danielk1977 Exp $
+# $Id: ioerr3.test,v 1.2 2008/01/19 23:50:26 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
execsql COMMIT
}
+do_ioerr_test ioerr3-2 -sqlbody {
+ CREATE TEMP TABLE t1(x,y);
+}
+
sqlite3_soft_heap_limit 0
finish_test
# to see what happens in the library if a malloc were to really fail
# due to an out-of-memory situation.
#
-# $Id: malloc.test,v 1.54 2008/01/16 17:46:38 drh Exp $
+# $Id: malloc.test,v 1.55 2008/01/19 23:50:26 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
return
}
+# Do a couple of memory dumps just to exercise the memory dump logic
+# that that we can say that we have.
+#
+puts stderr "This is a test. Ignore the error that follows:"
+sqlite3_memdebug_dump $testdir
+puts "Memory dump to file memdump.txt..."
+sqlite3_memdebug_dump memdump.txt
+
source $testdir/malloc_common.tcl
ifcapable bloblit&&subquery {
# This file implements tests for miscellanous features that were
# left out of other test files.
#
-# $Id: misc3.test,v 1.17 2008/01/19 20:11:26 drh Exp $
+# $Id: misc3.test,v 1.18 2008/01/19 23:50:26 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
# Do some additional EXPLAIN operations to exercise the displayP4 logic.
do_test misc3-6.10 {
set x [execsql {
- CREATE TABLE ex1(a INTEGER, b TEXT DEFAULT "hello", c);
+ CREATE TABLE ex1(
+ a INTEGER DEFAULT 54321,
+ b TEXT DEFAULT "hello",
+ c REAL DEFAULT 3.1415926
+ );
CREATE UNIQUE INDEX ex1i1 ON ex1(a);
EXPLAIN REINDEX;
}]