xref: /sqlite-3.40.0/test/bigsort.test (revision cfce889c)
1# 2014 November 26
2#
3# The author disclaims copyright to this source code.  In place of
4# 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#
12
13set testdir [file dirname $argv0]
14source $testdir/tester.tcl
15set testprefix bigsort
16
17#--------------------------------------------------------------------
18# At one point there was an overflow problem if the product of the
19# cache-size and page-size was larger than 2^31. Causing an infinite
20# loop if the product was also an integer multiple of 2^32, or
21# inefficiency otherwise.
22#
23# This test causes thrashing on machines with smaller amounts of
24# memory.  Make sure the host has at least 8GB available before running
25# this test.
26#
27# Update: https://sqlite.org/src/info/7c96a56 adds assert() statements
28# that make this test too slow to run with SQLITE_DEBUG builds.
29#
30if {[catch {exec free | grep Mem:} out] || [lindex $out 1]<8000000} {
31  finish_test
32  return
33}
34ifcapable debug {
35  finish_test
36  return
37}
38
39do_execsql_test 1.0 {
40  PRAGMA page_size = 1024;
41  CREATE TABLE t1(a, b);
42  BEGIN;
43  WITH data(x,y) AS (
44    SELECT 1, zeroblob(10000)
45    UNION ALL
46    SELECT x+1, y FROM data WHERE x < 300000
47  )
48  INSERT INTO t1 SELECT * FROM data;
49  COMMIT;
50}
51do_execsql_test 1.1 {
52  PRAGMA cache_size = 4194304;
53  CREATE INDEX i1 ON t1(a, b);
54}
55
56
57finish_test
58