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