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# 14*cf2ad7aeSdan# TESTRUNNER: slow 15ebbf3687Sdan 16ebbf3687Sdanset testdir [file dirname $argv0] 17ebbf3687Sdansource $testdir/tester.tcl 18ebbf3687Sdanset testprefix vacuum6 19ebbf3687Sdan 20ebbf3687Sdan# If the VACUUM statement is disabled in the current build, skip all 21ebbf3687Sdan# the tests in this file. 22ebbf3687Sdan# 23ebbf3687Sdanifcapable !vacuum { 24ebbf3687Sdan finish_test 25ebbf3687Sdan return 26ebbf3687Sdan} 27ebbf3687Sdan 28ebbf3687Sdan 29ebbf3687Sdando_execsql_test 1.0 { 30ebbf3687Sdan CREATE TABLE t1(x INTEGER PRIMARY KEY, y); 31ebbf3687Sdan INSERT INTO t1 VALUES(1, 1); 32ebbf3687Sdan} {} 33855aed19Sdan 34ebbf3687Sdando_execsql_test 1.1 { 35ebbf3687Sdan VACUUM 36ebbf3687Sdan} 37ebbf3687Sdan 38855aed19Sdanreset_db 39855aed19Sdando_execsql_test 1.2 { 40855aed19Sdan CREATE TABLE t1(x,b); 41855aed19Sdan CREATE INDEX x1 ON t1(x); 42855aed19Sdan CREATE INDEX x2 ON t1(x); 43855aed19Sdan CREATE INDEX x3 ON t1(x); 44855aed19Sdan INSERT INTO t1 SELECT 2,''; 45855aed19Sdan VACUUM; 46855aed19Sdan} 47855aed19Sdan 48ebbf3687Sdan#------------------------------------------------------------------------- 49d2ffc972Sdan# 50ebbf3687Sdanreset_db 51ebbf3687Sdanforeach {tn sz} {1 400 2 4000 3 9999} { 52ebbf3687Sdan reset_db 53ebbf3687Sdan do_execsql_test 2.$tn.1 { 54ebbf3687Sdan CREATE TABLE t1(a INTEGER PRIMARY KEY, b); 55ebbf3687Sdan WITH s(i) AS ( 56ebbf3687Sdan SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<100 57ebbf3687Sdan ) 58ebbf3687Sdan INSERT INTO t1 SELECT i, randomblob($sz) FROM s; 59ebbf3687Sdan } 60ebbf3687Sdan 61ebbf3687Sdan do_execsql_test 2.$tn.2 { 62ebbf3687Sdan vacuum; 63ebbf3687Sdan } 64ebbf3687Sdan 65ebbf3687Sdan do_execsql_test 2.$tn.3 { 66ebbf3687Sdan PRAGMA integrity_check; 67ebbf3687Sdan } {ok} 68ebbf3687Sdan} 69ebbf3687Sdan 70ebbf3687Sdanreset_db 71ebbf3687Sdando_execsql_test 3.0 { 72ebbf3687Sdan PRAGMA page_size = 1024; 73ebbf3687Sdan CREATE TABLE t1(x INTEGER PRIMARY KEY, y); 74ebbf3687Sdan INSERT INTO t1 VALUES(2, randomblob(1200)); 75ebbf3687Sdan} {} 76ebbf3687Sdando_execsql_test 3.1 { 77ebbf3687Sdan PRAGMA page_size = 512; 78ebbf3687Sdan VACUUM; 79ebbf3687Sdan} 80ebbf3687Sdando_execsql_test 3.2 { 81ebbf3687Sdan PRAGMA integrity_check 82ebbf3687Sdan} {ok} 83ebbf3687Sdan 84ebbf3687Sdan#------------------------------------------------------------------------- 85d2ffc972Sdan# 86ebbf3687Sdanreset_db 87ebbf3687Sdando_execsql_test 4.0 { 88ebbf3687Sdan CREATE TABLE tx(a, b); 89ebbf3687Sdan CREATE INDEX i1 ON tx(b); 90ebbf3687Sdan WITH s(i) AS ( 91d2ffc972Sdan SELECT 8000 UNION ALL SELECT i+1 FROM s WHERE i<10000 92ebbf3687Sdan ) 93ebbf3687Sdan INSERT INTO tx SELECT i, randomblob(i) FROM s; 94d2ffc972Sdan 95d2ffc972Sdan SELECT sum(length(b)) FROM tx; 96d2ffc972Sdan} {18009000} 97d2ffc972Sdanforeach {tn pgsz av} { 98d2ffc972Sdan 1 2048 0 99d2ffc972Sdan 2 1024 1 100d2ffc972Sdan 3 65536 0 101d2ffc972Sdan 4 8192 1 102d2ffc972Sdan 5 512 0 103d2ffc972Sdan 6 4096 1 104ebbf3687Sdan} { 105ebbf3687Sdan do_execsql_test 4.1.$tn.1 " 106d2ffc972Sdan PRAGMA page_size = $pgsz; 107d2ffc972Sdan PRAGMA auto_vacuum = $av; 108ebbf3687Sdan " 109ebbf3687Sdan do_execsql_test 4.1.$tn.2 VACUUM 110ebbf3687Sdan integrity_check 4.1.$tn.3 111ebbf3687Sdan} 112ebbf3687Sdan 113ebbf3687Sdanfinish_test 114