# 2016-08-19
#
# The author disclaims copyright to this source code.  In place of
# a legal notice, here is a blessing:
#
#    May you do good and not evil.
#    May you find forgiveness for yourself and forgive others.
#    May you share freely, never taking more than you give.
#
#***********************************************************************
# 
# This file implements a test for VACUUM on attached databases.
#

set testdir [file dirname $argv0]
source $testdir/tester.tcl
set testprefix vacuum5

# If the VACUUM statement is disabled in the current build, skip all
# the tests in this file.
#
ifcapable !vacuum {
  finish_test
  return
}

forcedelete test2.db test3.db
do_execsql_test vacuum5-1.1 {
  PRAGMA auto_vacuum = 0;
  CREATE TABLE main.t1(a,b);
  WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<1000)
    INSERT INTO t1(a,b) SELECT x, randomblob(1000) FROM c;
  CREATE TEMP TABLE ttemp(x,y);
  INSERT INTO ttemp SELECT * FROM t1;
  ATTACH 'test2.db' AS x2;
  ATTACH 'test3.db' AS x3;
  CREATE TABLE x2.t2(c,d);
  INSERT INTO t2 SELECT * FROM t1;
  CREATE TABLE x3.t3(e,f);
  INSERT INTO t3 SELECT * FROM t1;
  DELETE FROM t1 WHERE (rowid%3)!=0;
  DELETE FROM t2 WHERE (rowid%4)!=0;
  DELETE FROM t3 WHERE (rowid%5)!=0;
  PRAGMA main.integrity_check;
  PRAGMA x2.integrity_check;
  PRAGMA x3.integrity_check;
} {ok ok ok}
set size1 [file size test.db]
set size2 [file size test2.db]
set size3 [file size test3.db]

do_execsql_test vacuum5-1.2.1 {
  VACUUM main;
} {}
do_test vacuum5-1.2.2 {
  expr {[file size test.db]<$size1}
} {1}
do_test vacuum5-1.2.3 {
  file size test2.db
} $size2
do_test vacuum5-1.2.4 {
  file size test3.db
} $size3
set size1 [file size test.db]
do_execsql_test vacuum-1.2.5 {
  DELETE FROM t1;
  PRAGMA main.integrity_check;
} {ok}

do_execsql_test vacuum5-1.3.1 {
  VACUUM x2;
} {}
do_test vacuum5-1.3.2 {
  file size test.db
} $size1
do_test vacuum5-1.3.3 {
  expr {[file size test2.db]<$size2}
} 1
do_test vacuum5-1.3.4 {
  file size test3.db
} $size3
set size2 [file size test2.db]
do_execsql_test vacuum-1.3.5 {
  DELETE FROM t2;
  PRAGMA x2.integrity_check;
} {ok}

do_execsql_test vacuum5-1.4.1 {
  VACUUM x3;
} {}
do_test vacuum5-1.3.2 {
  file size test.db
} $size1
do_test vacuum5-1.3.3 {
  file size test2.db
} $size2
do_test vacuum5-1.3.4 {
  expr {[file size test3.db]<$size3}
} 1

# VACUUM is a no-op on the TEMP table
#
set sizeTemp [db one {PRAGMA temp.page_count}]
do_execsql_test vacuum5-1.4.1 {
  VACUUM temp;
} {}
do_execsql_test vacuum5-1.4.2 {
  PRAGMA temp.page_count;
} $sizeTemp

do_catchsql_test vacuum5-2.0 {
  VACUUM olaf;
} {1 {unknown database olaf}}

#-------------------------------------------------------------------------
# Test that a temp file is opened as part of VACUUM.
#
if {$::TEMP_STORE<3 && [permutation]!="inmemory_journal"} {
  db close
  testvfs tvfs 
  tvfs filter xOpen
  tvfs script open_cb
  forcedelete test.db

  set ::openfiles [list]
  proc open_cb {method args} {
    lappend ::openfiles [file tail [lindex $args 0]]
  }
  sqlite3 db test.db -vfs tvfs

  do_execsql_test 3.0 {
    PRAGMA temp_store = file;
    PRAGMA page_size = 1024;
    PRAGMA cache_size = 50;
    CREATE TABLE t1(i INTEGER PRIMARY KEY, j UNIQUE);
    WITH s(i) AS (
      VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<1000
    )
    INSERT INTO t1 SELECT NULL, randomblob(100) FROM s;
  }

  do_execsql_test 3.1 { VACUUM }

  db close
  tvfs delete
  do_test 3.2 {
    lrange $::openfiles 0 4
  } {test.db test.db-journal test.db-journal {} test.db-journal}
} 



finish_test
