Fix a problem causing the recovery extension to use excessive memory and CPU time...
[sqlite.git] / test / fts4merge3.test
blob08b68b97d9653669b0e8a9f9edf40fc0f3f1f5c7
1 # 2012 March 06
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.  The
12 # focus of this script is testing the incremental merge function.
15 set testdir [file dirname $argv0]
16 source $testdir/tester.tcl
17 source $testdir/fts3_common.tcl
18 source $testdir/lock_common.tcl
19 source $testdir/bc_common.tcl
21 set ::testprefix fts4merge3
23 ifcapable !fts3 {
24   finish_test
25   return
28 if {"" == [bc_find_binaries backcompat.test]} {
29   finish_test
30   return
33 db close
34 do_all_bc_test {
36   sql2 { PRAGMA page_size = 512 }
37   if { 0==[catch { sql2 { CREATE VIRTUAL TABLE x USING fts4 } } ] } {
39     # Build a large database.
40     set msg "this takes around 12 seconds"
41     do_test "1.1 ($msg)" { fts3_build_db_2 20000 } {}
43     # Run some queries on it, using the old and new versions.
44     do_test 1.2 { sql1 "SELECT docid FROM t2 WHERE t2 MATCH 'abc'" } {1485}
45     do_test 1.3 { sql2 "SELECT docid FROM t2 WHERE t2 MATCH 'abc'" } {1485}
47     do_test 1.4 {
48       set x [sql2 "PRAGMA page_count"]
49       expr {$x>=1284 && $x<=1286}
50     } {1}
51     do_test 1.5 { sql2 { 
52       SELECT level, count(*) FROM t2_segdir GROUP BY level ORDER BY 1
53     } } [list 0 15    1 1     2 14    3 4]
55     # Run some incr-merge operations on the db.
56     for {set i 0} {$i<10} {incr i} {
57       do_test 1.6.$i.1 { sql1 { INSERT INTO t2(t2) VALUES('merge=2,2') } } {}
58       do_test 1.6.$i.2 { 
59         sql2 "SELECT docid FROM t2 WHERE t2 MATCH 'abc'" 
60       } {1485}
61     }
63     do_test 1.7 { sql2 { 
64       SELECT level, count(*) FROM t2_segdir GROUP BY level ORDER BY 1
65     } } {2 15 3 5}
67     # Using the old connection, insert many rows. 
68     do_test 1.8 {
69       for {set i 0} {$i < 1500} {incr i} {
70         sql2 "INSERT INTO t2 SELECT content FROM t2 WHERE docid = $i"
71       }
72     } {}
74     do_test 1.9 { sql2 { 
75       SELECT level, count(*) FROM t2_segdir GROUP BY level ORDER BY 1
76     } } [list  0 12  1 13  2 4  3 6]
78     # Run a big incr-merge operation on the db.
79     do_test 1.10 { sql1 { INSERT INTO t2(t2) VALUES('merge=2000,2') } } {}
80     do_test 1.11 { 
81       sql2 "SELECT docid FROM t2 WHERE t2 MATCH 'abc'" 
82     } {1485 21485}
84     do_test 1.12 {
85       for {set i 0} {$i < 1500} {incr i} {
86         sql2 "INSERT INTO t2 SELECT content FROM t2 WHERE docid = $i"
87       }
88     } {}
89     do_test 1.13 { 
90       sql2 "SELECT docid FROM t2 WHERE t2 MATCH 'abc'" 
91     } {1485 21485 22985}
93     do_test 1.14 { 
94       sql2 "INSERT INTO t2(t2) VALUES('optimize')"
95       sql2 "SELECT docid FROM t2 WHERE t2 MATCH 'abc'" 
96     } {1485 21485 22985}
98     do_test 1.15 { sql2 { 
99       SELECT level, count(*) FROM t2_segdir GROUP BY level ORDER BY 1
100     } } {4 1}
101   }
105 finish_test