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