xref: /sqlite-3.40.0/test/fts4merge3.test (revision c7dbce0f)
1# 2012 March 06
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# This file implements regression tests for SQLite library.  The
12# focus of this script is testing the incremental merge function.
13#
14
15set testdir [file dirname $argv0]
16source $testdir/tester.tcl
17source $testdir/fts3_common.tcl
18source $testdir/lock_common.tcl
19source $testdir/bc_common.tcl
20
21set ::testprefix fts4merge3
22
23ifcapable !fts3 {
24  finish_test
25  return
26}
27
28if {"" == [bc_find_binaries backcompat.test]} {
29  finish_test
30  return
31}
32
33db close
34do_all_bc_test {
35
36  sql2 { PRAGMA page_size = 512 }
37  if { 0==[catch { sql2 { CREATE VIRTUAL TABLE x USING fts4 } } ] } {
38
39    # Build a large database.
40    set msg "this takes around 12 seconds"
41    do_test "1.1 ($msg)" { fts3_build_db_2 20000 } {}
42
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}
46
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]
54
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    }
62
63    do_test 1.7 { sql2 {
64      SELECT level, count(*) FROM t2_segdir GROUP BY level ORDER BY 1
65    } } {2 15 3 5}
66
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    } {}
73
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]
77
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}
83
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}
92
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}
97
98    do_test 1.15 { sql2 {
99      SELECT level, count(*) FROM t2_segdir GROUP BY level ORDER BY 1
100    } } {4 1}
101  }
102}
103
104
105finish_test
106