# 2017 August 17
#
# 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.
#
#***********************************************************************
#
# The focus of this file is testing the r-tree extension. Specifically,
# the impact of an SQLITE_SCHEMA error within the rtree module xConnect
# callback.
#


if {![info exists testdir]} {
  set testdir [file join [file dirname [info script]] .. .. test]
} 
source $testdir/tester.tcl
set testprefix rtreeconnect

ifcapable !rtree {
  finish_test
  return
}

do_execsql_test 1.0 {
  CREATE VIRTUAL TABLE r1 USING rtree(id, x1, x2, y1, y2);
  CREATE TABLE t1(id, x1, x2, y1, y2);
  CREATE TABLE log(l);

  CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN
    INSERT INTO r1 VALUES(new.id, new.x1, new.x2, new.y1, new.y2);
    INSERT INTO log VALUES('r1: ' || new.id);
  END;
}

db close
sqlite3 db  test.db
sqlite3 db2 test.db

do_test 1.1 {
  db eval { INSERT INTO log VALUES('startup'); }
  db2 eval { CREATE TABLE newtable(x,y); }
} {}

do_execsql_test 1.2 {
  INSERT INTO t1 VALUES(1, 2, 3, 4, 5);
}

db2 close
db close

finish_test
