# 2017-07-15
#
# 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 regression tests for SQLite library.  The
# focus of this file is the "swarmvtab" extension
#

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

ifcapable !vtab {
  finish_test
  return
}


db close
foreach name [glob -nocomplain test*.db] {
  forcedelete $name
}
sqlite3 db test.db
load_static_extension db unionvtab
proc create_database {filename} {
  sqlite3 dbx $filename
  set num [regsub -all {[^0-9]+} $filename {}]
  set num [string trimleft $num 0]
  set start [expr {$num*1000}]
  set end [expr {$start+999}]
  dbx eval {
    CREATE TABLE t2(a INTEGER PRIMARY KEY,b);
    WITH RECURSIVE c(x) AS (
      VALUES($start) UNION ALL SELECT x+1 FROM c WHERE x<$end
    )
    INSERT INTO t2(a,b) SELECT x, printf('**%05d**',x) FROM c;
  }
  dbx close
}
db func create_database create_database
do_execsql_test 100 {
  CREATE TABLE t1(filename, tablename, istart, iend);
  WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<99)
  INSERT INTO t1 SELECT printf('test%03d.db',x),'t2',x*1000,x*1000+999 FROM c;
  CREATE VIRTUAL TABLE temp.v1 USING swarmvtab(
    'SELECT * FROM t1', 'create_database'
  );
} {}
do_execsql_test 110 {
  SELECT b FROM v1 WHERE a=3875;
} {**03875**}
do_test 120 {
  lsort [glob -nocomplain test?*.db]
} {test001.db test003.db}
do_execsql_test 130 {
  SELECT b FROM v1 WHERE a BETWEEN 3999 AND 4000 ORDER BY a;
} {**03999** **04000**}
do_test 140 {
  lsort [glob -nocomplain test?*.db]
} {test001.db test003.db test004.db}
do_execsql_test 150 {
  SELECT b FROM v1 WHERE a>=99998;
} {**99998** **99999**}
do_test 160 {
  lsort -dictionary [glob -nocomplain test?*.db]
} {test001.db test003.db test004.db test099.db}

finish_test
