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