xref: /sqlite-3.40.0/test/vacuum6.test (revision d2ffc972)
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} {}
32ebbf3687Sdando_execsql_test 1.1 {
33ebbf3687Sdan  VACUUM
34ebbf3687Sdan}
35ebbf3687Sdan
36ebbf3687Sdan#-------------------------------------------------------------------------
37*d2ffc972Sdan#
38ebbf3687Sdanreset_db
39ebbf3687Sdanforeach {tn sz} {1 400 2 4000 3 9999} {
40ebbf3687Sdan  reset_db
41ebbf3687Sdan  do_execsql_test 2.$tn.1 {
42ebbf3687Sdan    CREATE TABLE t1(a INTEGER PRIMARY KEY, b);
43ebbf3687Sdan    WITH s(i) AS (
44ebbf3687Sdan        SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<100
45ebbf3687Sdan    )
46ebbf3687Sdan    INSERT INTO t1 SELECT i, randomblob($sz) FROM s;
47ebbf3687Sdan  }
48ebbf3687Sdan
49ebbf3687Sdan  do_execsql_test 2.$tn.2 {
50ebbf3687Sdan    vacuum;
51ebbf3687Sdan  }
52ebbf3687Sdan
53ebbf3687Sdan  do_execsql_test 2.$tn.3 {
54ebbf3687Sdan    PRAGMA integrity_check;
55ebbf3687Sdan  } {ok}
56ebbf3687Sdan}
57ebbf3687Sdan
58ebbf3687Sdanreset_db
59ebbf3687Sdando_execsql_test 3.0 {
60ebbf3687Sdan  PRAGMA page_size = 1024;
61ebbf3687Sdan  CREATE TABLE t1(x INTEGER PRIMARY KEY, y);
62ebbf3687Sdan  INSERT INTO t1 VALUES(2, randomblob(1200));
63ebbf3687Sdan} {}
64ebbf3687Sdando_execsql_test 3.1 {
65ebbf3687Sdan  PRAGMA page_size = 512;
66ebbf3687Sdan  VACUUM;
67ebbf3687Sdan}
68ebbf3687Sdando_execsql_test 3.2 {
69ebbf3687Sdan  PRAGMA integrity_check
70ebbf3687Sdan} {ok}
71ebbf3687Sdan
72ebbf3687Sdan#-------------------------------------------------------------------------
73*d2ffc972Sdan#
74ebbf3687Sdanreset_db
75ebbf3687Sdando_execsql_test 4.0 {
76ebbf3687Sdan  CREATE TABLE tx(a, b);
77ebbf3687Sdan  CREATE INDEX i1 ON tx(b);
78ebbf3687Sdan  WITH s(i) AS (
79*d2ffc972Sdan      SELECT 8000 UNION ALL SELECT i+1 FROM s WHERE i<10000
80ebbf3687Sdan  )
81ebbf3687Sdan  INSERT INTO tx SELECT i, randomblob(i) FROM s;
82*d2ffc972Sdan
83*d2ffc972Sdan  SELECT sum(length(b)) FROM tx;
84*d2ffc972Sdan} {18009000}
85*d2ffc972Sdanforeach {tn pgsz av} {
86*d2ffc972Sdan  1 2048   0
87*d2ffc972Sdan  2 1024   1
88*d2ffc972Sdan  3 65536  0
89*d2ffc972Sdan  4 8192   1
90*d2ffc972Sdan  5 512    0
91*d2ffc972Sdan  6 4096   1
92ebbf3687Sdan} {
93ebbf3687Sdan  do_execsql_test 4.1.$tn.1 "
94*d2ffc972Sdan    PRAGMA page_size = $pgsz;
95*d2ffc972Sdan    PRAGMA auto_vacuum = $av;
96ebbf3687Sdan  "
97ebbf3687Sdan  do_execsql_test 4.1.$tn.2 VACUUM
98ebbf3687Sdan  integrity_check 4.1.$tn.3
99ebbf3687Sdan}
100ebbf3687Sdan
101ebbf3687Sdanfinish_test
102