aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2018-01-03 23:40:02 +0000
committerdrh <drh@noemail.net>2018-01-03 23:40:02 +0000
commita5bb43518b406098d4545c98fcffc80724c9f1fc (patch)
tree485180f51c0e013f3cf7e8c411eba66b311d1485
parent99abe5c478d5340616bc9418f7fd7c07b33dedfe (diff)
downloadsqlite-a5bb43518b406098d4545c98fcffc80724c9f1fc.tar.gz
sqlite-a5bb43518b406098d4545c98fcffc80724c9f1fc.zip
New test cases and fixes for minor problems.
FossilOrigin-Name: e0da2cc382e0db33d0423372133115f52c77bd0093dbf816c7e88a0aad5f6582
-rw-r--r--manifest16
-rw-r--r--manifest.uuid2
-rw-r--r--src/attach.c1
-rw-r--r--src/tclsqlite.c4
-rw-r--r--test/memdb1.test104
5 files changed, 116 insertions, 11 deletions
diff --git a/manifest b/manifest
index 4f22c2b67..77a6b3f32 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Miscellaneous\scode\sand\scomment\scleanup.
-D 2018-01-03T22:48:38.759
+C New\stest\scases\sand\sfixes\sfor\sminor\sproblems.
+D 2018-01-03T23:40:02.979
F Makefile.in 892bf253c48f3d2d8d4e4e89b44b71aa548a0eba11b148c338690cfb99822859
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc 3b7ee2ebaf579fe7d30bece93e61e52782c3ff836455cba3a192f7a8f6f269d6
@@ -415,7 +415,7 @@ F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786
F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
F src/alter.c cf7a8af45cb0ace672f47a1b29ab24092a9e8cd8d945a9974e3b5d925f548594
F src/analyze.c 0d0ccf7520a201d8747ea2f02c92c26e26f801bc161f714f27b9f7630dde0421
-F src/attach.c af582a55cdb0435dc21da926cfcd5545eadfd99ea201b5b9e067cbeae1077077
+F src/attach.c 8158394251d62a6513d6e395f14c9b8ad3f3447d8a1249c242c940cde5c1453e
F src/auth.c 6277d63837357549fe14e723490d6dc1a38768d71c795c5eb5c0f8a99f918f73
F src/backup.c faf17e60b43233c214aae6a8179d24503a61e83b
F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33
@@ -488,7 +488,7 @@ F src/sqliteInt.h 713ee4be20beddf2f053b3ac1871c1f0d9ab54d1cc21c24a4365b560181b5d
F src/sqliteLimit.h 1513bfb7b20378aa0041e7022d04acb73525de35b80b252f1b83fedb4de6a76b
F src/status.c 9737ed017279a9e0c5da748701c3c7bf1e8ae0dae459aad20dd64fcff97a7e35
F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34
-F src/tclsqlite.c 8370ce15f97277304e7a17c47e18d47c1a31701fcd213eded727d09c547da2fc
+F src/tclsqlite.c 4f4ca19af1a666da6f80d35443e58905d1fb7cbdb9899cf9ce7da60aeede5830
F src/test1.c 8ef15f7a357f85dfc41c6c748ce9c947b4f676e01bb5ae6a45bee4923dff8b51
F src/test2.c 3efb99ab7f1fc8d154933e02ae1378bac9637da5
F src/test3.c b8434949dfb8aff8dfa082c8b592109e77844c2135ed3c492113839b6956255b
@@ -1056,7 +1056,7 @@ F test/malloc_common.tcl aac62499b76be719fac31e7a3e54a7fd53272e7f
F test/manydb.test 28385ae2087967aa05c38624cec7d96ec74feb3e
F test/mem5.test c6460fba403c5703141348cd90de1c294188c68f
F test/memdb.test c1f2a343ad14398d5d6debda6ea33e80d0dafcc7
-F test/memdb1.test 6ae9f9fe51c918bf203ee5135f88d74f6e4446b573a9c07b141356f8f5fbeaf1
+F test/memdb1.test 526252d466ecc3701550000651e1405d08ccefe0bf23e2dc86ada90e81a8eacc
F test/memleak.test 10b9c6c57e19fc68c32941495e9ba1c50123f6e2
F test/memsubsys1.test 9e7555a22173b8f1c96c281ce289b338fcba2abe8b157f8798ca195bbf1d347e
F test/memsubsys2.test 3e4a8d0c05fd3e5fa92017c64666730a520c7e08
@@ -1690,7 +1690,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 2f6e9df9f0c5a9e5b1acb99cfa9486850cc1822d35b0989e779a7a10f3b1f1ac
-R bb0359f4210b8aee0e32802f6ef52a4c
+P fa6069fb3b0a4411fd6661dec7de40ece3064a2fe4b94ebfbda9e5e524e04e86
+R 80c4d802a2eb305cbf9b2f9ece314afe
U drh
-Z c49fae41835e3bd8d0d8eeb0cf1f4a88
+Z e7e409e5145088df0792d1925f4056dd
diff --git a/manifest.uuid b/manifest.uuid
index cf39388ce..069635c8d 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-fa6069fb3b0a4411fd6661dec7de40ece3064a2fe4b94ebfbda9e5e524e04e86 \ No newline at end of file
+e0da2cc382e0db33d0423372133115f52c77bd0093dbf816c7e88a0aad5f6582 \ No newline at end of file
diff --git a/src/attach.c b/src/attach.c
index f177f1a5b..597351fa3 100644
--- a/src/attach.c
+++ b/src/attach.c
@@ -229,6 +229,7 @@ static void attachFunc(
*/
if( rc==SQLITE_OK ){
sqlite3BtreeEnterAll(db);
+ db->init.iDb = 0;
rc = sqlite3Init(db, &zErrDyn);
sqlite3BtreeLeaveAll(db);
}
diff --git a/src/tclsqlite.c b/src/tclsqlite.c
index c9b4ff610..f3261d1e7 100644
--- a/src/tclsqlite.c
+++ b/src/tclsqlite.c
@@ -2442,11 +2442,11 @@ static int SQLITE_TCLAPI DbObjCmd(
}
pBA = Tcl_GetByteArrayFromObj(pValue, &len);
pData = sqlite3_malloc64( len );
- if( pData==0 ){
+ if( pData==0 && len>0 ){
Tcl_AppendResult(interp, "out of memory", (char*)0);
rc = TCL_ERROR;
}else{
- memcpy(pData, pBA, len);
+ if( len>0 ) memcpy(pData, pBA, len);
xrc = sqlite3_deserialize(pDb->db, zSchema, pData, len, len,
SQLITE_DESERIALIZE_FREEONCLOSE |
SQLITE_DESERIALIZE_RESIZEABLE);
diff --git a/test/memdb1.test b/test/memdb1.test
index c37cac266..48f9fca5e 100644
--- a/test/memdb1.test
+++ b/test/memdb1.test
@@ -54,5 +54,109 @@ do_execsql_test 110 {
SELECT * FROM t1;
} {1 2}
+# What happens when we try to VACUUM a MEMDB database?
+#
+do_execsql_test 120 {
+ VACUUM;
+} {}
+do_execsql_test 130 {
+ CREATE TABLE t2(x, y);
+ WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100)
+ INSERT INTO t2(x, y) SELECT x, randomblob(1000) FROM c;
+ DROP TABLE t2;
+ PRAGMA page_count;
+} {116}
+do_execsql_test 140 {
+ VACUUM;
+ PRAGMA page_count;
+} {2}
+
+# Build a largish on-disk database and serialize it. Verify that the
+# serialization works.
+#
+db close
+forcedelete test.db
+sqlite3 db test.db
+do_execsql_test 200 {
+ CREATE TABLE t3(x, y);
+ WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<400)
+ INSERT INTO t3(x, y) SELECT x, randomblob(1000) FROM c;
+ PRAGMA quick_check;
+} {ok}
+set fd [open test.db rb]
+unset -nocomplain direct
+set direct [read $fd]
+close $fd
+do_test 210 {
+ string length [db serialize]
+} [string length $direct]
+do_test 220 {
+ db eval {ATTACH ':memory:' AS aux1}
+ db deserialize aux1 $::direct
+ db eval {
+ SELECT x, y FROM main.t3 EXCEPT SELECT x, y FROM aux1.t3;
+ }
+} {}
+unset -nocomplain direct
+
+# Do the same with a :memory: database.
+#
+db close
+sqlite3 db :memory:
+do_execsql_test 300 {
+ CREATE TABLE t3(x, y);
+ WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<400)
+ INSERT INTO t3(x, y) SELECT x, randomblob(1000) FROM c;
+ PRAGMA quick_check;
+} {ok}
+do_test 310 {
+ db eval {ATTACH ':memory:' AS aux1}
+ db deserialize aux1 [db serialize main]
+ db eval {
+ SELECT x, y FROM main.t3 EXCEPT SELECT x, y FROM aux1.t3;
+ }
+} {}
+
+# Deserialize an empty database
+#
+db close
+sqlite3 db
+db deserialize {}
+do_execsql_test 400 {
+ PRAGMA integrity_check;
+} {ok}
+do_execsql_test 410 {
+ CREATE TABLE t4(a,b);
+ INSERT INTO t4 VALUES('hello','world!');
+ PRAGMA integrity_check;
+ SELECT * FROM t4;
+} {ok hello world!}
+
+# Deserialize something that is not a database.
+#
+db close
+sqlite3 db
+do_test 500 {
+ set rc [catch {db deserialize not-a-database} msg]
+ lappend rc $msg
+} {0 {}}
+do_catchsql_test 510 {
+ PRAGMA integrity_check;
+} {1 {file is not a database}}
+
+# Abuse the serialize and deserialize commands. Make sure errors are caught.
+#
+do_test 600 {
+ set rc [catch {db deserialize} msg]
+ lappend rc $msg
+} {1 {wrong # args: should be "db deserialize ?DATABASE? VALUE"}}
+do_test 610 {
+ set rc [catch {db deserialize a b c} msg]
+ lappend rc $msg
+} {1 {wrong # args: should be "db deserialize ?DATABASE? VALUE"}}
+do_test 620 {
+ set rc [catch {db serialize a b} msg]
+ lappend rc $msg
+} {1 {wrong # args: should be "db serialize ?DATABASE?"}}
finish_test