Prevent deep recursions on nested COLLATE operators.
[sqlite.git] / test / sort2.test
blobf686654d53a594128e7135d549432b82da35c1ac
1 # 2014 March 25.
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
10 #***********************************************************************
11 # This file implements regression tests for SQLite library. 
13 # Specifically, the tests in this file attempt to verify that 
14 # multi-threaded sorting works.
17 set testdir [file dirname $argv0]
18 source $testdir/tester.tcl
19 set testprefix sort2
20 db close
21 sqlite3_shutdown
22 sqlite3_config_pmasz 10
23 sqlite3_initialize
24 sqlite3 db test.db
26 foreach {tn script} {
27   1 { }
28   2 {
29     catch { db close }
30     reset_db
31     catch { db eval {PRAGMA threads=7} }
32   }
33 } {
34   eval $script
36   do_execsql_test $tn.1 {
37     PRAGMA cache_size = 5;
38     WITH r(x,y) AS (
39       SELECT 1, randomblob(100)
40       UNION ALL
41       SELECT x+1, randomblob(100) FROM r
42       LIMIT 100000
43     )
44     SELECT count(x), length(y) FROM r GROUP BY (x%5)
45   } {
46     20000 100 20000 100 20000 100 20000 100 20000 100
47   }
49   do_execsql_test $tn.2.1 {
50     CREATE TABLE t1(a, b);
51     WITH r(x,y) AS (
52       SELECT 1, randomblob(100)
53       UNION ALL
54       SELECT x+1, randomblob(100) FROM r
55       LIMIT 10000
56     ) INSERT INTO t1 SELECT * FROM r;
57   }
58   
59   do_execsql_test $tn.2.2 {
60     CREATE UNIQUE INDEX i1 ON t1(b, a);
61   }
62   
63   do_execsql_test $tn.2.3 {
64     CREATE UNIQUE INDEX i2 ON t1(a);
65   }
66   
67   do_execsql_test $tn.2.4 { PRAGMA integrity_check } {ok}
68   
69   # Because it uses so much data, this test can take 12-13 seconds even on
70   # a modern workstation. So it is omitted from "veryquick" and other
71   # permutations.test tests.
72   if {[isquick]==0} {
73     do_execsql_test $tn.3 {
74       PRAGMA cache_size = 5;
75       WITH r(x,y) AS (
76           SELECT 1, randomblob(100)
77           UNION ALL
78           SELECT x+1, randomblob(100) FROM r
79           LIMIT 1000000
80           )
81         SELECT count(x), length(y) FROM r GROUP BY (x%5)
82     } {
83       200000 100 200000 100 200000 100 200000 100 200000 100
84     }
85   }
88 finish_test