CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
sort3.test114 linesDownload Raw Back to test
1# 2014 March 25.2#3# The author disclaims copyright to this source code.  In place of4# a legal notice, here is a blessing:5#6#    May you do good and not evil.7#    May you find forgiveness for yourself and forgive others.8#    May you share freely, never taking more than you give.9#10#***********************************************************************11# This file implements regression tests for SQLite library. 12#13# The tests in this file verify that sorting works when the library is14# configured to use mmap(), but the temporary files generated by the15# sorter are too large to be completely mapped.16#17 18set testdir [file dirname $argv0]19source $testdir/tester.tcl20set testprefix sort321 22#-------------------------------------------------------------------------23# Sort some large ( > 4KiB) records.24#25proc cksum {x} {26  set i1 127  set i2 228  binary scan $x c* L29  foreach {a b} $L {30    set i1 [expr (($i2<<3) + $a) & 0x7FFFFFFF]31    set i2 [expr (($i1<<3) + $b) & 0x7FFFFFFF]32  }33  list $i1 $i234}35db func cksum cksum36 37do_execsql_test 1.0 {38  PRAGMA cache_size = 5;39  CREATE TABLE t11(a, b);40  INSERT INTO t11 VALUES(randomblob(5000), NULL);41  INSERT INTO t11 SELECT randomblob(5000), NULL FROM t11; --242  INSERT INTO t11 SELECT randomblob(5000), NULL FROM t11; --343  INSERT INTO t11 SELECT randomblob(5000), NULL FROM t11; --444  INSERT INTO t11 SELECT randomblob(5000), NULL FROM t11; --545  INSERT INTO t11 SELECT randomblob(5000), NULL FROM t11; --646  INSERT INTO t11 SELECT randomblob(5000), NULL FROM t11; --747  INSERT INTO t11 SELECT randomblob(5000), NULL FROM t11; --848  INSERT INTO t11 SELECT randomblob(5000), NULL FROM t11; --949  UPDATE t11 SET b = cksum(a);50}51 52foreach {tn mmap_limit} {53  1 054  2 100000055} {56  do_test 1.$tn {57    sqlite3_test_control SQLITE_TESTCTRL_SORTER_MMAP db $mmap_limit58    set prev ""59    db eval { SELECT * FROM t11 ORDER BY b } {60      if {$b != [cksum $a]} {error "checksum failed"}61      if {[string compare $b $prev] < 0} {error "sort failed"}62      set prev $b63    }64    set {} {}65  } {}66}67 68 69# Sort roughly 20MB of data. Once with a mmap limit of 5MB and once without.70#71foreach {itest limit} {72  1 500000073  2 0x7FFFFFFF74} {75  sqlite3_test_control SQLITE_TESTCTRL_SORTER_MMAP db $limit76  do_execsql_test 2.$itest {77    WITH r(x,y) AS (78        SELECT 1, randomblob(1000)79        UNION ALL80        SELECT x+1, randomblob(1000) FROM r81        LIMIT 2000082    )83    SELECT count(*), sum(length(y)) FROM r GROUP BY (x%5);84  } {85    4000 4000000 86    4000 4000000 87    4000 4000000 88    4000 4000000 89    4000 400000090  }91}92 93# Sort more than 2GB of data. At one point this was causing a problem.94# This test might take one minute or more to run.95#96do_execsql_test 3 {97  PRAGMA cache_size = 20000;98  WITH r(x,y) AS (99    SELECT 1, randomblob(1000)100    UNION ALL101    SELECT x+1, randomblob(1000) FROM r102    LIMIT 2200000103  )104  SELECT count(*), sum(length(y)) FROM r GROUP BY (x%5);105} {106  440000 440000000 107  440000 440000000 108  440000 440000000 109  440000 440000000 110  440000 440000000111}112 113finish_test114