Index: third_party/sqlite/src/test/sort5.test |
diff --git a/third_party/sqlite/src/test/sort5.test b/third_party/sqlite/src/test/sort5.test |
index a02b8f920f3821200eb3cb96788783cd22dd589a..6ada81c9ccf073bdbacabe5042665549197ca993 100644 |
--- a/third_party/sqlite/src/test/sort5.test |
+++ b/third_party/sqlite/src/test/sort5.test |
@@ -41,5 +41,78 @@ do_execsql_test 1.2 { |
db close |
tvfs delete |
-finish_test |
+#------------------------------------------------------------------------- |
+# Test that the PMA size is determined correctly. The PMA size should be |
+# roughly the same amount of memory allocated to the main pager cache, or |
+# 250 pages if this is larger. |
+# |
+testvfs tvfs |
+tvfs script tv_callback |
+tvfs filter {xOpen xWrite} |
+ |
+proc tv_callback {method args} { |
+ global iTemp |
+ global F |
+ switch $method { |
+ xOpen { |
+ if {[lindex $args 0]==""} { return "temp[incr iTemp]" } |
+ return "SQLITE_OK" |
+ } |
+ |
+ xWrite { |
+ foreach {filename id off amt} $args {} |
+ if {[info exists F($id)]==0 || $F($id)<($off + $amt)} { |
+ set F($id) [expr $off+$amt] |
+ } |
+ } |
+ } |
+} |
+ |
+catch { db close } |
+forcedelete test.db |
+sqlite3 db test.db -vfs tvfs |
+execsql { CREATE TABLE t1(x) } |
+ |
+# Each iteration of the following loop attempts to sort 10001 records |
+# each a bit over 100 bytes in size. In total a little more than 1MiB |
+# of data. |
+# |
+foreach {tn pgsz cachesz bTemp} { |
+ 1 4096 1000 0 |
+ 2 1024 1000 1 |
+ |
+ 3 4096 -1000 1 |
+ 4 1024 -1000 1 |
+ |
+ 5 4096 -9000 0 |
+ 6 1024 -9000 0 |
+} { |
+ do_execsql_test 2.$tn.0 " |
+ PRAGMA page_size = $pgsz; |
+ VACUUM; |
+ PRAGMA cache_size = $cachesz; |
+ " |
+ |
+ if {[db one {PRAGMA page_size}]!=$pgsz} { |
+ # SEE is not able to change page sizes and that messes up the |
+ # results that follow. |
+ continue |
+ } |
+ |
+ do_test 2.$tn.1 { |
+ set ::iTemp 0 |
+ catch { array unset F } |
+ execsql { |
+ WITH x(i, j) AS ( |
+ SELECT 1, randomblob(100) |
+ UNION ALL |
+ SELECT i+1, randomblob(100) FROM x WHERE i<10000 |
+ ) |
+ SELECT * FROM x ORDER BY j; |
+ } |
+ expr {[array names F]!=""} |
+ } $bTemp |
+} |
+ |
+finish_test |