Fix bugs associated with the codec. (CVS 1846)
FossilOrigin-Name: b0a3becd82b9a4203c23f35dc5a5fd725e046f21
diff --git a/main.mk b/main.mk
index e8fe510..a194c48 100644
--- a/main.mk
+++ b/main.mk
@@ -54,7 +54,7 @@
# Object files for the SQLite library.
#
-LIBOBJ = attach.o auth.o btree.o build.o date.o delete.o \
+LIBOBJ+= attach.o auth.o btree.o build.o date.o delete.o \
expr.o func.o hash.o insert.o \
main.o opcodes.o os_mac.o os_unix.o os_win.o \
pager.o parse.o pragma.o printf.o random.o \
diff --git a/manifest b/manifest
index eee4fd8..f719889 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Changes\sin\ssupport\sof\susing\sa\scodec.\s(CVS\s1845)
-D 2004-07-22T02:40:39
+C Fix\sbugs\sassociated\swith\sthe\scodec.\s(CVS\s1846)
+D 2004-07-22T15:02:25
F Makefile.in 4a5e570a9e2d35b09c31b3cf01b78cea764ade4b
F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
@@ -17,7 +17,7 @@
F doc/report1.txt a031aaf37b185e4fa540223cb516d3bccec7eeac
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895
F ltmain.sh f6b283068efa69f06eb8aa1fe4bddfdbdeb35826
-F main.mk 1fabb57eba6c25d98ec8a2127850673f2425c458
+F main.mk 1957885390af52f5a69679bb43ec4cd8904c7a9f
F mkdll.sh 68d34a961a1fdfa15ef27fc4f4740be583112124
F publish.sh 73703b55b590a7b7ee305b05445a424ec47be29e
F spec.template b2f6c4e488cbc3b993a57deba22cbc36203c4da3
@@ -25,7 +25,7 @@
F sqlite.pc.in 30552343140c53304c2a658c080fbe810cd09ca2
F sqlite3.def 7610bb4092dcfa7db8fe6d9a92d3e51adce23566
F sqlite3.pc.in 985b9bf34192a549d7d370e0f0b6b34a4f61369a
-F src/attach.c 2e5d8eae9c08d15ee92ec0d831faeeda996d1a95
+F src/attach.c 784456629b3d7e50e4691f496700658fd1f16441
F src/auth.c 60db23b98bb94c8b0178180faaf49dc116674217
F src/btree.c 9f1727185200c5b9488f3e99a1bdb250f841c876
F src/btree.h fab5e800b5d91a5700c0b344d711b98de6f7ad0e
@@ -51,19 +51,19 @@
F src/os_unix.h f3097815e041e82e24d92505e1ff61ba24172d13
F src/os_win.c 54181eb73cb4783c4241feca9eaa490768b39008
F src/os_win.h babd4e912967c6b09088cfe38a45e8005a07ba44
-F src/pager.c 1354e8f80889a8c967f4bc4ee2723485624eb6e7
+F src/pager.c e0865a9afa64f59c6dc1cc1ab50bc700f67ee28b
F src/pager.h 67739fe649f33be55dba522ca8a9cc4e42d14f71
-F src/parse.y 1c22ccb2b60237a7263873892a4d580ea5e53536
+F src/parse.y 0bcc53bba498081a544e50c8845bf4857ebfccb9
F src/pragma.c c8be18093f0492f9983406647808781ca0073d8b
F src/printf.c 36090f6d7b4946539de97c1850675ce55ef66c16
F src/random.c eff68e3f257e05e81eae6c4d50a51eb88beb4ff3
F src/select.c aefda626660086addca4ce85c34aeef5d0f44c25
F src/shell.c 93c96c847228c02fb84bb381875d87ee71fbbeb4
F src/sqlite.h.in 80de11cde2c9f78eff4dab0aad1eb5196d6e2a3f
-F src/sqliteInt.h 17ed61c040c1e47e1dd660daef3adda9ea9cb4fb
+F src/sqliteInt.h 049cb4f716f7b7ea3657f26c7e26a4f821aca53c
F src/table.c 4521c278892f60e4d630788c0ea5cf4db1e75c49
F src/tclsqlite.c 8652b55cac11dc1025cd4a336180330ebade3cd7
-F src/test1.c 004885b49a7b5a594192f137c671135920f64c94
+F src/test1.c ef00096c283ccfec1b2ae5fdaccb85fb06e24281
F src/test2.c f4c2f3928f1998fd8cb75a81e33a60e025ea85d4
F src/test3.c 8576bb977937265e2c1a4d3fab3793e1974153e8
F src/test4.c a921a69821fd30209589228e64f94e9f715b6fe2
@@ -97,7 +97,7 @@
F test/btree6.test a5ede6bfbbb2ec8b27e62813612c0f28e8f3e027
F test/btree7.test 429b96cfef5b51a7d512cfb4b5b3e453384af293
F test/capi2.test 78f2c486689fcc80394a24c2cc32725330ab6299
-F test/capi3.test 85c4445cd9bd1fa0cd9d8af56a4fae361b57c553
+F test/capi3.test e2d47b59c1ca5be2e5986fb77f716a7fdd228e25
F test/collate1.test 2ee4fa3a47a652ccf56c5ddf65dcc44d9bad82ef
F test/collate2.test c1a3b41f761b28853c5696037f92de928f93233b
F test/collate3.test e60b428e07ec945492ba90ff1c895902ee3a8a50
@@ -131,7 +131,7 @@
F test/laststmtchanges.test 417aa27eb2b5cdfafb46e390e2c9ddd0a20eba43
F test/limit.test e4ee72ab4869992950f8cfce256e04a0a2a98b23
F test/lock.test 1dbf1d06b0a7eb36237b4f107cfb3da9726b449e
-F test/lock2.test 4108cabaa108a142e5eed83de3b13b6e579c12cf
+F test/lock2.test 2213590d442147d09fd2334c905a755586c1c398
F test/main.test e8c4d9ca6d1e5f5e55e6550d31aec488883b2ed9
F test/malloc.test 769b240d89a7ef3320d88919fdb6765f9395a51f
F test/memdb.test b8a13fa79f006bd087bbcf135ce8eb62056a6027
@@ -146,10 +146,10 @@
F test/null.test c14d0f4739f21e929b8115b72bf0c765b6bb1721
F test/pager.test 059cc5c58d3b5a851343dff8c56cf7286425d03a
F test/pager2.test 55469c7c1c1a54d6b32d7b3cc99001e90101a1ce
-F test/pragma.test 212d810e02a51c0ff9784a19d55e35d23382005d
+F test/pragma.test f7414c1d902688825ca11f7f5e03628704d903b5
F test/printf.test 428ad9be92963b68ba222dac4c19724cc4e304ea
F test/progress.test 76c722f090b1ccb575e7e4e203a71608c5763beb x
-F test/quick.test 62cd0e248b3128c3e900d11d99c550aaec41db5f
+F test/quick.test 5bb4afdb204c57329c86fa11f3f0a5296675fd7f
F test/quote.test 08f23385c685d3dc7914ec760d492cacea7f6e3d
F test/rollback.test 4097328d44510277244ef4fa51b22b2f11d7ef4c
F test/rowid.test b3d059f5c8d8874fa1c31030e0636f67405d20ea
@@ -175,7 +175,7 @@
F test/trigger2.test 0767ab30cb5a2c8402c8524f3d566b410b6f5263
F test/trigger3.test 70931be83fa3f563f7a5ca9e88b86f476af73948
F test/trigger4.test 97c11d3cf43d752b172809bb82536372ee5e399c
-F test/types.test fdf7920c9d3aabbba25c11daa48c872d1870bce9
+F test/types.test db5483a8dc5c8fadc737c3ab36d9cbd96ba25e14
F test/types2.test f23c147a2ab3e51d5dbcfa9987200db5acba7aa7
F test/unique.test 0e38d4cc7affeef2527720d1dafd1f6870f02f2b
F test/update.test b29bd9061a1150426dab6959806fcc73a41b1217
@@ -237,7 +237,7 @@
F www/vdbe.tcl 59288db1ac5c0616296b26dce071c36cb611dfe9
F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0
F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
-P b77bec35742f07d79da3e85baee09a90c1494415
-R 3e3f31107533fb8a64f00d1c99d78fca
+P 58505bf9be8e7f9d33a7a52f0d2ac167448f7b3a
+R f3db447534ed74e51b726af7a9dab6bc
U drh
-Z 0ca92d2eb65daa15aadbbce8e6c55b3b
+Z b2bfc42df168bf93298aa49508a9d11e
diff --git a/manifest.uuid b/manifest.uuid
index 8263fe8..ba95a9d 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-58505bf9be8e7f9d33a7a52f0d2ac167448f7b3a
\ No newline at end of file
+b0a3becd82b9a4203c23f35dc5a5fd725e046f21
\ No newline at end of file
diff --git a/src/attach.c b/src/attach.c
index cd36936..4fa8447 100644
--- a/src/attach.c
+++ b/src/attach.c
@@ -11,7 +11,7 @@
*************************************************************************
** This file contains code used to implement the ATTACH and DETACH commands.
**
-** $Id: attach.c,v 1.24 2004/07/22 02:40:38 drh Exp $
+** $Id: attach.c,v 1.25 2004/07/22 15:02:25 drh Exp $
*/
#include "sqliteInt.h"
@@ -23,7 +23,13 @@
** The pFilename and pDbname arguments are the tokens that define the
** filename and dbname in the ATTACH statement.
*/
-void sqlite3Attach(Parse *pParse, Token *pFilename, Token *pDbname, Token *pKey){
+void sqlite3Attach(
+ Parse *pParse, /* The parser context */
+ Token *pFilename, /* Name of database file */
+ Token *pDbname, /* Name of the database to use internally */
+ int keyType, /* 0: no key. 1: TEXT, 2: BLOB */
+ Token *pKey /* Text of the key for keytype 2 and 3 */
+){
Db *aNew;
int rc, i;
char *zFile, *zName;
@@ -91,14 +97,32 @@
sqlite3ErrorMsg(pParse, "unable to open database: %s", zFile);
}
#if SQLITE_HAS_CODEC
- assert( pKey!=0 );
- if( pKey->n>0 ){
- extern int sqlite3CodecAttach(sqlite*, int, void*, int);
- char *zKey = 0;
+ {
+ extern int sqlite3CodecAttach(sqlite3*, int, void*, int);
+ char *zKey;
int nKey;
+ if( keyType==0 ){
+ /* No key specified. Use the key from the main database */
+ extern void sqlite3CodecGetKey(sqlite3*, int, void**, int*);
+ sqlite3CodecGetKey(db, 0, (void**)&zKey, &nKey);
+ }else if( keyType==1 ){
+ /* Key specified as text */
+ zKey = sqlite3NameFromToken(pKey);
+ nKey = strlen(zKey);
+ }else{
+ /* Key specified as a BLOB */
+ char *zTemp;
+ assert( keyType==2 );
+ pKey->z++;
+ pKey->n--;
+ zTemp = sqlite3NameFromToken(pKey);
+ zKey = sqlite3HexToBlob(zTemp);
+ sqliteFree(zTemp);
+ }
sqlite3CodecAttach(db, db->nDb-1, zKey, nKey);
- zKey = sqlite3NameFromToken(pKey);
- nKey = strlen(zKey);
+ if( keyType ){
+ sqliteFree(zKey);
+ }
}
#endif
sqliteFree(zFile);
diff --git a/src/pager.c b/src/pager.c
index fc7bce9..36445b4 100644
--- a/src/pager.c
+++ b/src/pager.c
@@ -18,7 +18,7 @@
** file simultaneously, or one process from reading the database while
** another is writing.
**
-** @(#) $Id: pager.c,v 1.152 2004/07/22 01:19:35 drh Exp $
+** @(#) $Id: pager.c,v 1.153 2004/07/22 15:02:25 drh Exp $
*/
#include "os.h" /* Must be first to enable large file support */
#include "sqliteInt.h"
@@ -1001,8 +1001,8 @@
sqlite3OsSeek(&pPager->fd, pPager->pageSize*(off_t)(pPg->pgno-1));
rc = sqlite3OsRead(&pPager->fd, zBuf, pPager->pageSize);
TRACE2("REFETCH page %d\n", pPg->pgno);
- CODEC(pPager, zBuf, pPg->pgno, 2);
if( rc ) break;
+ CODEC(pPager, zBuf, pPg->pgno, 2);
}else{
memset(zBuf, 0, pPager->pageSize);
}
@@ -2516,12 +2516,13 @@
}
pPg->inJournal = 1;
}else{
- u32 cksum = pager_cksum(pPager, pPg->pgno, pData);
+ u32 cksum;
+ CODEC(pPager, pData, pPg->pgno, 7);
+ cksum = pager_cksum(pPager, pPg->pgno, pData);
saved = *(u32*)PGHDR_TO_EXTRA(pPg, pPager);
store32bits(cksum, pPg, pPager->pageSize);
szPg = pPager->pageSize+8;
store32bits(pPg->pgno, pPg, -4);
- CODEC(pPager, pData, pPg->pgno, 7);
rc = sqlite3OsWrite(&pPager->jfd, &((char*)pData)[-4], szPg);
pPager->journalOff += szPg;
TRACE3("JOURNAL page %d needSync=%d\n", pPg->pgno, pPg->needSync);
diff --git a/src/parse.y b/src/parse.y
index 260e0f2..efb2420 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -14,7 +14,7 @@
** the parser. Lemon will also generate a header file containing
** numeric codes for all of the tokens.
**
-** @(#) $Id: parse.y,v 1.130 2004/07/20 14:06:52 drh Exp $
+** @(#) $Id: parse.y,v 1.131 2004/07/22 15:02:25 drh Exp $
*/
%token_prefix TK_
%token_type {Token}
@@ -54,6 +54,11 @@
*/
struct TrigEvent { int a; IdList * b; };
+/*
+** An instance of this structure holds the ATTACH key and the key type.
+*/
+struct AttachKey { int type; Token key; };
+
} // end %include
// These are extra tokens used by the lexer but never seen by the
@@ -893,11 +898,14 @@
//////////////////////// ATTACH DATABASE file AS name /////////////////////////
cmd ::= ATTACH database_kw_opt ids(F) AS nm(D) key_opt(K). {
- sqlite3Attach(pParse, &F, &D, &K);
+ sqlite3Attach(pParse, &F, &D, K.type, &K.key);
}
-%type key_opt {Token}
-key_opt(A) ::= USING ids(X). { A = X; }
-key_opt(A) ::= . { A.z = 0; A.n = 0; }
+%type key_opt {struct AttachKey}
+key_opt(A) ::= . { A.type = 0; }
+%ifdef SQLITE_HAS_CODEC
+key_opt(A) ::= KEY ids(X). { A.type=1; A.key = X; }
+key_opt(A) ::= KEY BLOB(X). { A.type=2; A.Key = X; }
+%endif
database_kw_opt ::= DATABASE.
database_kw_opt ::= .
diff --git a/src/sqliteInt.h b/src/sqliteInt.h
index 1db96f2..d6cde4e 100644
--- a/src/sqliteInt.h
+++ b/src/sqliteInt.h
@@ -11,7 +11,7 @@
*************************************************************************
** Internal interface definitions for SQLite.
**
-** @(#) $Id: sqliteInt.h,v 1.307 2004/07/22 01:19:35 drh Exp $
+** @(#) $Id: sqliteInt.h,v 1.308 2004/07/22 15:02:25 drh Exp $
*/
#ifndef _SQLITEINT_H_
#define _SQLITEINT_H_
@@ -1330,7 +1330,7 @@
# define sqlite3AuthContextPush(a,b,c)
# define sqlite3AuthContextPop(a) ((void)(a))
#endif
-void sqlite3Attach(Parse*, Token*, Token*, Token*);
+void sqlite3Attach(Parse*, Token*, Token*, int, Token*);
void sqlite3Detach(Parse*, Token*);
int sqlite3BtreeFactory(const sqlite *db, const char *zFilename,
int omitJournal, int nCache, Btree **ppBtree);
diff --git a/src/test1.c b/src/test1.c
index 852a164..61758fc 100644
--- a/src/test1.c
+++ b/src/test1.c
@@ -13,7 +13,7 @@
** is not included in the SQLite library. It is used for automated
** testing of the SQLite library.
**
-** $Id: test1.c,v 1.94 2004/07/17 21:56:10 drh Exp $
+** $Id: test1.c,v 1.95 2004/07/22 15:02:26 drh Exp $
*/
#include "sqliteInt.h"
#include "tcl.h"
@@ -305,6 +305,62 @@
}
/*
+** Usage: sqlite3_key DB KEY
+**
+** Set the codec key.
+*/
+static int test_key(
+ void *NotUsed,
+ Tcl_Interp *interp, /* The TCL interpreter that invoked this command */
+ int argc, /* Number of arguments */
+ char **argv /* Text of each argument */
+){
+ sqlite *db;
+ const char *zKey;
+ int nKey;
+ if( argc!=3 ){
+ Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
+ " FILENAME\"", 0);
+ return TCL_ERROR;
+ }
+ if( getDbPointer(interp, argv[1], &db) ) return TCL_ERROR;
+ zKey = argv[2];
+ nKey = strlen(zKey);
+#ifdef SQLITE_HAS_CODEC
+ sqlite3_key(db, zKey, nKey);
+#endif
+ return TCL_OK;
+}
+
+/*
+** Usage: sqlite3_rekey DB KEY
+**
+** Change the codec key.
+*/
+static int test_rekey(
+ void *NotUsed,
+ Tcl_Interp *interp, /* The TCL interpreter that invoked this command */
+ int argc, /* Number of arguments */
+ char **argv /* Text of each argument */
+){
+ sqlite *db;
+ const char *zKey;
+ int nKey;
+ if( argc!=3 ){
+ Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
+ " FILENAME\"", 0);
+ return TCL_ERROR;
+ }
+ if( getDbPointer(interp, argv[1], &db) ) return TCL_ERROR;
+ zKey = argv[2];
+ nKey = strlen(zKey);
+#ifdef SQLITE_HAS_CODEC
+ sqlite3_rekey(db, zKey, nKey);
+#endif
+ return TCL_OK;
+}
+
+/*
** Usage: sqlite3_close DB
**
** Closes the database opened by sqlite3_open.
@@ -2328,8 +2384,10 @@
{ "sqlite_malloc_fail", (Tcl_CmdProc*)sqlite_malloc_fail },
{ "sqlite_malloc_stat", (Tcl_CmdProc*)sqlite_malloc_stat },
#endif
- { "sqlite_bind", (Tcl_CmdProc*)test_bind },
- { "breakpoint", (Tcl_CmdProc*)test_breakpoint },
+ { "sqlite_bind", (Tcl_CmdProc*)test_bind },
+ { "breakpoint", (Tcl_CmdProc*)test_breakpoint },
+ { "sqlite3_key", (Tcl_CmdProc*)test_key },
+ { "sqlite3_rekey", (Tcl_CmdProc*)test_rekey },
};
static struct {
char *zName;
diff --git a/test/capi3.test b/test/capi3.test
index a595bff..1d8f5d5 100644
--- a/test/capi3.test
+++ b/test/capi3.test
@@ -11,7 +11,7 @@
# This file implements regression tests for SQLite library. The
# focus of this script testing the callback-free C/C++ API.
#
-# $Id: capi3.test,v 1.19 2004/06/30 06:30:26 danielk1977 Exp $
+# $Id: capi3.test,v 1.20 2004/07/22 15:02:26 drh Exp $
#
set testdir [file dirname $argv0]
@@ -443,6 +443,7 @@
do_test capi3-6.0 {
set DB [sqlite3_open test.db]
+ sqlite3_key $DB xyzzy
set sql {SELECT a FROM t1 order by rowid}
set STMT [sqlite3_prepare $DB $sql -1 TAIL]
expr 0
@@ -461,87 +462,93 @@
sqlite3_close $DB
} {SQLITE_OK}
-# Test what happens when the library encounters a newer file format.
-# Do this by updating the file format via the btree layer.
-do_test capi3-7.1 {
- set ::bt [btree_open test.db 10 0]
- btree_begin_transaction $::bt
- set meta [btree_get_meta $::bt]
- lset meta 2 2
- eval [concat btree_update_meta $::bt [lrange $meta 0 end]]
- btree_commit $::bt
- btree_close $::bt
-} {}
-do_test capi3-7.2 {
- sqlite3 db test.db
-breakpoint
- catchsql {
- SELECT * FROM sqlite_master;
- }
-} {1 {unsupported file format}}
-
-# Now test that the library correctly handles bogus entries in the
-# sqlite_master table (schema corruption).
-do_test capi3-8.1 {
+if {![sqlite3 -has-codec]} {
+ # Test what happens when the library encounters a newer file format.
+ # Do this by updating the file format via the btree layer.
+ do_test capi3-7.1 {
+ set ::bt [btree_open test.db 10 0]
+ btree_begin_transaction $::bt
+ set meta [btree_get_meta $::bt]
+ lset meta 2 2
+ eval [concat btree_update_meta $::bt [lrange $meta 0 end]]
+ btree_commit $::bt
+ btree_close $::bt
+ } {}
+ do_test capi3-7.2 {
+ sqlite3 db test.db
+ catchsql {
+ SELECT * FROM sqlite_master;
+ }
+ } {1 {unsupported file format}}
db close
- file delete -force test.db
- sqlite3 db test.db
- execsql {
- CREATE TABLE t1(a);
- }
+}
+
+if {![sqlite3 -has-codec]} {
+ # Now test that the library correctly handles bogus entries in the
+ # sqlite_master table (schema corruption).
+ do_test capi3-8.1 {
+ file delete -force test.db
+ file delete -force test.db-journal
+ sqlite3 db test.db
+ execsql {
+ CREATE TABLE t1(a);
+ }
+ db close
+ } {}
+ do_test capi3-8.2 {
+ set ::bt [btree_open test.db 10 0]
+ btree_begin_transaction $::bt
+ set ::bc [btree_cursor $::bt 1 1]
+
+ # Build a 5-field row record consisting of 5 null records. This is
+ # officially black magic.
+ catch {unset data}
+ set data [binary format c6 {6 0 0 0 0 0}]
+ btree_insert $::bc 5 $data
+
+ btree_close_cursor $::bc
+ btree_commit $::bt
+ btree_close $::bt
+ } {}
+ do_test capi3-8.3 {
+ sqlite3 db test.db
+ catchsql {
+ SELECT * FROM sqlite_master;
+ }
+ } {1 {malformed database schema}}
+ do_test capi3-8.4 {
+ set ::bt [btree_open test.db 10 0]
+ btree_begin_transaction $::bt
+ set ::bc [btree_cursor $::bt 1 1]
+
+ # Build a 5-field row record. The first field is a string 'table', and
+ # subsequent fields are all NULL. Replace the other broken record with
+ # this one and try to read the schema again. The broken record uses
+ # either UTF-8 or native UTF-16 (if this file is being run by
+ # utf16.test).
+ if { [string match UTF-16* $::ENC] } {
+ set data [binary format c6a10 {6 33 0 0 0 0} [utf16 table]]
+ } else {
+ set data [binary format c6a5 {6 23 0 0 0 0} table]
+ }
+ btree_insert $::bc 5 $data
+
+ btree_close_cursor $::bc
+ btree_commit $::bt
+ btree_close $::bt
+ } {}
+ do_test capi3-8.5 {
+ db close
+ sqlite3 db test.db
+ catchsql {
+ SELECT * FROM sqlite_master;
+ }
+ } {1 {malformed database schema}}
db close
-} {}
-do_test capi3-8.2 {
- set ::bt [btree_open test.db 10 0]
- btree_begin_transaction $::bt
- set ::bc [btree_cursor $::bt 1 1]
-
- # Build a 5-field row record consisting of 5 null records. This is
- # officially black magic.
- catch {unset data}
- set data [binary format c6 {6 0 0 0 0 0}]
- btree_insert $::bc 5 $data
-
- btree_close_cursor $::bc
- btree_commit $::bt
- btree_close $::bt
-} {}
-do_test capi3-8.3 {
- sqlite3 db test.db
- catchsql {
- SELECT * FROM sqlite_master;
- }
-} {1 {malformed database schema}}
-do_test capi3-8.4 {
- set ::bt [btree_open test.db 10 0]
- btree_begin_transaction $::bt
- set ::bc [btree_cursor $::bt 1 1]
-
- # Build a 5-field row record. The first field is a string 'table', and
- # subsequent fields are all NULL. Replace the other broken record with
- # this one and try to read the schema again. The broken record uses
- # either UTF-8 or native UTF-16 (if this file is being run by
- # utf16.test).
- if { [string match UTF-16* $::ENC] } {
- set data [binary format c6a10 {6 33 0 0 0 0} [utf16 table]]
- } else {
- set data [binary format c6a5 {6 23 0 0 0 0} table]
- }
- btree_insert $::bc 5 $data
-
- btree_close_cursor $::bc
- btree_commit $::bt
- btree_close $::bt
-} {}
-do_test capi3-8.5 {
- db close
- sqlite3 db test.db
- catchsql {
- SELECT * FROM sqlite_master;
- }
-} {1 {malformed database schema}}
-db close
+}
file delete -force test.db
+file delete -force test.db-journal
+
# Test the english language string equivalents for sqlite error codes
set code2english [list \
@@ -761,4 +768,3 @@
finish_test
-
diff --git a/test/lock2.test b/test/lock2.test
index 317f5f4..ea5923a 100644
--- a/test/lock2.test
+++ b/test/lock2.test
@@ -11,7 +11,7 @@
# This file implements regression tests for SQLite library. The
# focus of this script is database locks between competing processes.
#
-# $Id: lock2.test,v 1.2 2004/06/28 11:52:46 drh Exp $
+# $Id: lock2.test,v 1.3 2004/07/22 15:02:26 drh Exp $
set testdir [file dirname $argv0]
@@ -89,7 +89,7 @@
do_test lock2-1.1 {
set ::tf1 [launch_testfixture]
testfixture $::tf1 {
- sqlite3 db test.db
+ sqlite3 db test.db -key xyzzy
db eval {select * from sqlite_master}
}
} {}
diff --git a/test/pragma.test b/test/pragma.test
index 04704f0..9cea4c0 100644
--- a/test/pragma.test
+++ b/test/pragma.test
@@ -12,7 +12,7 @@
#
# This file implements tests for the PRAGMA command.
#
-# $Id: pragma.test,v 1.15 2004/06/26 19:35:30 drh Exp $
+# $Id: pragma.test,v 1.16 2004/07/22 15:02:26 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@@ -207,7 +207,8 @@
# Construct a corrupted index and make sure the integrity_check
# pragma finds it.
#
-if {![sqlite3 -has-codec]} {
+# These tests won't work if the database is encrypted
+#
do_test pragma-3.1 {
execsql {
BEGIN;
@@ -219,19 +220,19 @@
SELECT rowid, * from t2;
}
} {1 11 2 3 2 22 3 4}
-do_test pragma-3.2 {
- set rootpage [execsql {SELECT rootpage FROM sqlite_master WHERE name='i2'}]
- set db [btree_open test.db 100 0]
- btree_begin_transaction $db
- set c [btree_cursor $db $rootpage 1]
- btree_first $c
- btree_delete $c
- btree_commit $db
- btree_close $db
- execsql {PRAGMA integrity_check}
-} {{rowid 1 missing from index i2} {wrong # of entries in index i2}}
-}; # endif has-codec
-
+if {![sqlite3 -has-codec]} {
+ do_test pragma-3.2 {
+ set rootpage [execsql {SELECT rootpage FROM sqlite_master WHERE name='i2'}]
+ set db [btree_open test.db 100 0]
+ btree_begin_transaction $db
+ set c [btree_cursor $db $rootpage 1]
+ btree_first $c
+ btree_delete $c
+ btree_commit $db
+ btree_close $db
+ execsql {PRAGMA integrity_check}
+ } {{rowid 1 missing from index i2} {wrong # of entries in index i2}}
+}
do_test pragma-3.3 {
execsql {
DROP INDEX i2;
diff --git a/test/quick.test b/test/quick.test
index c9757e1..4857daf 100644
--- a/test/quick.test
+++ b/test/quick.test
@@ -10,7 +10,7 @@
#***********************************************************************
# This file runs all tests.
#
-# $Id: quick.test,v 1.27 2004/07/19 00:39:46 drh Exp $
+# $Id: quick.test,v 1.28 2004/07/22 15:02:26 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@@ -25,18 +25,13 @@
malloc.test
memleak.test
misuse.test
- format3.test
crash.test
utf16.test
}
if {[sqlite3 -has-codec]} {
- lappend EXCLUDE \
- attach.test \
- attach2.test \
- auth.test \
- format3.test \
- version.test
+ # lappend EXCLUDE \
+ # conflict.test
}
foreach testfile [lsort -dictionary [glob $testdir/*.test]] {
diff --git a/test/types.test b/test/types.test
index 1233e90..2402de8 100644
--- a/test/types.test
+++ b/test/types.test
@@ -12,7 +12,7 @@
# it tests that the different storage classes (integer, real, text etc.)
# all work correctly.
#
-# $Id: types.test,v 1.9 2004/06/30 03:08:25 drh Exp $
+# $Id: types.test,v 1.10 2004/07/22 15:02:26 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@@ -37,6 +37,10 @@
# types-3.*: Test that the '=' operator respects manifest types.
#
+# Disable encryption on the database for this test.
+db close
+set DB [sqlite3 db test.db]
+sqlite3_rekey $DB {}
# Create a table with one column for each type of affinity
do_test types-1.1.0 {