Index: third_party/sqlite/src/test/dbstatus.test |
diff --git a/third_party/sqlite/src/test/dbstatus.test b/third_party/sqlite/src/test/dbstatus.test |
index 202f34a0435f928e93784e7724e0700280f48979..368c6b28e59a3f806b07a96ef053f08304a1ec9f 100644 |
--- a/third_party/sqlite/src/test/dbstatus.test |
+++ b/third_party/sqlite/src/test/dbstatus.test |
@@ -15,6 +15,11 @@ |
set testdir [file dirname $argv0] |
source $testdir/tester.tcl |
+ifcapable !compound { |
+ finish_test |
+ return |
+} |
+ |
# Memory statistics must be enabled for this test. |
db close |
sqlite3_shutdown |
@@ -56,6 +61,17 @@ proc lookaside {db} { |
} |
} |
+ifcapable stat4||stat3 { |
+ set STAT3 1 |
+} else { |
+ set STAT3 0 |
+} |
+ |
+ifcapable malloc_usable_size { |
+ finish_test |
+ return |
+} |
+ |
#--------------------------------------------------------------------------- |
# Run the dbstatus-2 and dbstatus-3 tests with several of different |
# lookaside buffer sizes. |
@@ -118,7 +134,7 @@ foreach ::lookaside_buffer_size {0 64 120} { |
CREATE TABLE t2(c, d); |
CREATE VIEW v1 AS SELECT * FROM t1 UNION SELECT * FROM t2; |
} |
- 6 { |
+ 6k { |
CREATE TABLE t1(a, b); |
CREATE INDEX i1 ON t1(a); |
CREATE INDEX i2 ON t1(a,b); |
@@ -155,7 +171,7 @@ foreach ::lookaside_buffer_size {0 64 120} { |
# Step 1. |
db close |
- file delete -force test.db |
+ forcedelete test.db |
sqlite3 db test.db |
sqlite3_db_config_lookaside db 0 $::lookaside_buffer_size 500 |
db cache size 0 |
@@ -188,6 +204,11 @@ foreach ::lookaside_buffer_size {0 64 120} { |
set nSchema4 [lindex [sqlite3_db_status db SQLITE_DBSTATUS_SCHEMA_USED 0] 1] |
set nFree [expr {$nAlloc1-$nAlloc2}] |
+ # Tests for which the test name ends in an "k" report slightly less |
+ # memory than is actually freed when all schema items are finalized. |
+ # This is because memory allocated by KeyInfo objects is no longer |
+ # counted as "schema memory". |
+ # |
# Tests for which the test name ends in an "x" report slightly less |
# memory than is actually freed when all schema items are finalized. |
# This is because memory allocated by virtual table implementations |
@@ -198,7 +219,17 @@ foreach ::lookaside_buffer_size {0 64 120} { |
# much greater than just that reported by DBSTATUS_SCHEMA_USED in this |
# case. |
# |
- if {[string match *x $tn] || $AUTOVACUUM} { |
+ # Some of the memory used for sqlite_stat4 is unaccounted for by |
+ # dbstatus. |
+ # |
+ # Finally, on osx the estimate of memory used by the schema may be |
+ # slightly low. |
+ # |
+ if {[string match *k $tn] |
+ || [string match *x $tn] || $AUTOVACUUM |
+ || ([string match *y $tn] && $STAT3) |
+ || ($::tcl_platform(os) == "Darwin") |
+ } { |
do_test dbstatus-2.$tn.ax { expr {($nSchema1-$nSchema2)<=$nFree} } 1 |
} else { |
do_test dbstatus-2.$tn.a { expr {$nSchema1-$nSchema2} } $nFree |
@@ -221,7 +252,7 @@ foreach ::lookaside_buffer_size {0 64 120} { |
# lookaside memory allocated by SQLite, and the memory allocated |
# for the prepared statements according to sqlite3_db_status(). |
# |
- # 3. Finalize all prepared statements Measure the total memory |
+ # 3. Finalize all prepared statements. Measure the total memory |
# and the prepared statement memory again. |
# |
# 4. Repeat step 2. |
@@ -287,7 +318,7 @@ foreach ::lookaside_buffer_size {0 64 120} { |
# Step 1. |
db close |
- file delete -force test.db |
+ forcedelete test.db |
sqlite3 db test.db |
sqlite3_db_config_lookaside db 0 $::lookaside_buffer_size 500 |
db cache size 1000 |