| Index: third_party/sqlite/sqlite-src-3170000/test/sort5.test
|
| diff --git a/third_party/sqlite/sqlite-src-3170000/test/sort5.test b/third_party/sqlite/sqlite-src-3170000/test/sort5.test
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6ada81c9ccf073bdbacabe5042665549197ca993
|
| --- /dev/null
|
| +++ b/third_party/sqlite/sqlite-src-3170000/test/sort5.test
|
| @@ -0,0 +1,118 @@
|
| +# 2014 September 15.
|
| +#
|
| +# The author disclaims copyright to this source code. In place of
|
| +# a legal notice, here is a blessing:
|
| +#
|
| +# May you do good and not evil.
|
| +# May you find forgiveness for yourself and forgive others.
|
| +# May you share freely, never taking more than you give.
|
| +#
|
| +#***********************************************************************
|
| +# This file implements regression tests for SQLite library.
|
| +#
|
| +
|
| +set testdir [file dirname $argv0]
|
| +source $testdir/tester.tcl
|
| +set testprefix sort5
|
| +
|
| +
|
| +#-------------------------------------------------------------------------
|
| +# Verify that sorting works with a version 1 sqlite3_io_methods structure.
|
| +#
|
| +testvfs tvfs -iversion 1 -default true
|
| +reset_db
|
| +do_execsql_test 1.0 {
|
| + PRAGMA mmap_size = 10000000;
|
| + PRAGMA cache_size = 10;
|
| + CREATE TABLE t1(a, b);
|
| +} {0}
|
| +
|
| +do_test 1.1 {
|
| + execsql BEGIN
|
| + for {set i 0} {$i < 2000} {incr i} {
|
| + execsql { INSERT INTO t1 VALUES($i, randomblob(2000)) }
|
| + }
|
| + execsql COMMIT
|
| +} {}
|
| +
|
| +do_execsql_test 1.2 {
|
| + CREATE INDEX i1 ON t1(b);
|
| +}
|
| +
|
| +db close
|
| +tvfs delete
|
| +
|
| +#-------------------------------------------------------------------------
|
| +# 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
|
|
|