xref: /sqlite-3.40.0/test/vacuum6.test (revision ebbf3687)
1*ebbf3687Sdan# 2016-08-19
2*ebbf3687Sdan#
3*ebbf3687Sdan# The author disclaims copyright to this source code.  In place of
4*ebbf3687Sdan# a legal notice, here is a blessing:
5*ebbf3687Sdan#
6*ebbf3687Sdan#    May you do good and not evil.
7*ebbf3687Sdan#    May you find forgiveness for yourself and forgive others.
8*ebbf3687Sdan#    May you share freely, never taking more than you give.
9*ebbf3687Sdan#
10*ebbf3687Sdan#***********************************************************************
11*ebbf3687Sdan#
12*ebbf3687Sdan# This file implements a test for VACUUM on attached databases.
13*ebbf3687Sdan#
14*ebbf3687Sdan
15*ebbf3687Sdanset testdir [file dirname $argv0]
16*ebbf3687Sdansource $testdir/tester.tcl
17*ebbf3687Sdanset testprefix vacuum6
18*ebbf3687Sdan
19*ebbf3687Sdan# If the VACUUM statement is disabled in the current build, skip all
20*ebbf3687Sdan# the tests in this file.
21*ebbf3687Sdan#
22*ebbf3687Sdanifcapable !vacuum {
23*ebbf3687Sdan  finish_test
24*ebbf3687Sdan  return
25*ebbf3687Sdan}
26*ebbf3687Sdan
27*ebbf3687Sdan
28*ebbf3687Sdando_execsql_test 1.0 {
29*ebbf3687Sdan  CREATE TABLE t1(x INTEGER PRIMARY KEY, y);
30*ebbf3687Sdan  INSERT INTO t1 VALUES(1, 1);
31*ebbf3687Sdan} {}
32*ebbf3687Sdando_execsql_test 1.1 {
33*ebbf3687Sdan  VACUUM
34*ebbf3687Sdan}
35*ebbf3687Sdan
36*ebbf3687Sdan#-------------------------------------------------------------------------
37*ebbf3687Sdanreset_db
38*ebbf3687Sdanforeach {tn sz} {1 400 2 4000 3 9999} {
39*ebbf3687Sdan  reset_db
40*ebbf3687Sdan  do_execsql_test 2.$tn.1 {
41*ebbf3687Sdan    CREATE TABLE t1(a INTEGER PRIMARY KEY, b);
42*ebbf3687Sdan    WITH s(i) AS (
43*ebbf3687Sdan        SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<100
44*ebbf3687Sdan    )
45*ebbf3687Sdan    INSERT INTO t1 SELECT i, randomblob($sz) FROM s;
46*ebbf3687Sdan  }
47*ebbf3687Sdan
48*ebbf3687Sdan  do_execsql_test 2.$tn.2 {
49*ebbf3687Sdan    vacuum;
50*ebbf3687Sdan  }
51*ebbf3687Sdan
52*ebbf3687Sdan  do_execsql_test 2.$tn.3 {
53*ebbf3687Sdan    PRAGMA integrity_check;
54*ebbf3687Sdan  } {ok}
55*ebbf3687Sdan}
56*ebbf3687Sdan
57*ebbf3687Sdanreset_db
58*ebbf3687Sdando_execsql_test 3.0 {
59*ebbf3687Sdan  PRAGMA page_size = 1024;
60*ebbf3687Sdan  CREATE TABLE t1(x INTEGER PRIMARY KEY, y);
61*ebbf3687Sdan  INSERT INTO t1 VALUES(2, randomblob(1200));
62*ebbf3687Sdan} {}
63*ebbf3687Sdando_execsql_test 3.1 {
64*ebbf3687Sdan  PRAGMA page_size = 512;
65*ebbf3687Sdan  VACUUM;
66*ebbf3687Sdan}
67*ebbf3687Sdando_execsql_test 3.2 {
68*ebbf3687Sdan  PRAGMA integrity_check
69*ebbf3687Sdan} {ok}
70*ebbf3687Sdan
71*ebbf3687Sdan#-------------------------------------------------------------------------
72*ebbf3687Sdanreset_db
73*ebbf3687Sdando_execsql_test 4.0 {
74*ebbf3687Sdan  CREATE TABLE tx(a, b);
75*ebbf3687Sdan  CREATE INDEX i1 ON tx(b);
76*ebbf3687Sdan  WITH s(i) AS (
77*ebbf3687Sdan      SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<10000
78*ebbf3687Sdan  )
79*ebbf3687Sdan  INSERT INTO tx SELECT i, randomblob(i) FROM s;
80*ebbf3687Sdan}
81*ebbf3687Sdanforeach {tn pgsz} {
82*ebbf3687Sdan  1 2048
83*ebbf3687Sdan  2 1024
84*ebbf3687Sdan  3 65536
85*ebbf3687Sdan  4 8192
86*ebbf3687Sdan} {
87*ebbf3687Sdan  do_execsql_test 4.1.$tn.1 "
88*ebbf3687Sdan    PRAGMA page_size = $pgsz
89*ebbf3687Sdan  "
90*ebbf3687Sdan  do_execsql_test 4.1.$tn.2 VACUUM
91*ebbf3687Sdan  integrity_check 4.1.$tn.3
92*ebbf3687Sdan}
93*ebbf3687Sdan
94*ebbf3687Sdanfinish_test
95