1b6b4b79fSdrh# 2014-08-21 2b6b4b79fSdrh# 3b6b4b79fSdrh# The author disclaims copyright to this source code. In place of 4b6b4b79fSdrh# a legal notice, here is a blessing: 5b6b4b79fSdrh# 6b6b4b79fSdrh# May you do good and not evil. 7b6b4b79fSdrh# May you find forgiveness for yourself and forgive others. 8b6b4b79fSdrh# May you share freely, never taking more than you give. 9b6b4b79fSdrh# 10b6b4b79fSdrh#*********************************************************************** 11b6b4b79fSdrh# This file contains tests for the r-tree module. 12b6b4b79fSdrh# 13b6b4b79fSdrh# This file contains test cases for the ticket 14b6b4b79fSdrh# [369d57fb8e5ccdff06f197a37147a88f9de95cda] (2014-08-21) 15b6b4b79fSdrh# 16b6b4b79fSdrh# The following SQL causes an assertion fault while running 17b6b4b79fSdrh# sqlite3_prepare() on the DELETE statement: 18b6b4b79fSdrh# 19b6b4b79fSdrh# CREATE TABLE t1(x); 20b6b4b79fSdrh# CREATE TABLE t2(y); 21b6b4b79fSdrh# CREATE VIRTUAL TABLE t3 USING rtree(a,b,c); 22b6b4b79fSdrh# CREATE TRIGGER t2del AFTER DELETE ON t2 WHEN (SELECT 1 from t1) BEGIN 23b6b4b79fSdrh# DELETE FROM t3 WHERE a=old.y; 24b6b4b79fSdrh# END; 25b6b4b79fSdrh# DELETE FROM t2 WHERE y=1; 26b6b4b79fSdrh# 27b6b4b79fSdrh 28b6b4b79fSdrhif {![info exists testdir]} { 29b6b4b79fSdrh set testdir [file join [file dirname [info script]] .. .. test] 30b6b4b79fSdrh} 31*1917e92fSdansource [file join [file dirname [info script]] rtree_util.tcl] 32b6b4b79fSdrhsource $testdir/tester.tcl 33b6b4b79fSdrhifcapable !rtree { finish_test ; return } 34b6b4b79fSdrh 35b6b4b79fSdrhdo_execsql_test rtreeF-1.1 { 36b6b4b79fSdrh CREATE TABLE t1(x); 37b6b4b79fSdrh CREATE TABLE t2(y); 38b6b4b79fSdrh CREATE VIRTUAL TABLE t3 USING rtree(a,b,c); 39b6b4b79fSdrh CREATE TRIGGER t2dwl AFTER DELETE ON t2 WHEN (SELECT 1 from t1) BEGIN 40b6b4b79fSdrh DELETE FROM t3 WHERE a=old.y; 41b6b4b79fSdrh END; 42b6b4b79fSdrh 43b6b4b79fSdrh INSERT INTO t1(x) VALUES(999); 44b6b4b79fSdrh INSERT INTO t2(y) VALUES(1),(2),(3),(4),(5); 45b6b4b79fSdrh INSERT INTO t3(a,b,c) VALUES(1,2,3),(2,3,4),(3,4,5),(4,5,6),(5,6,7); 46b6b4b79fSdrh 47b6b4b79fSdrh SELECT a FROM t3 ORDER BY a; 48b6b4b79fSdrh SELECT '|'; 49b6b4b79fSdrh SELECT y FROM t2 ORDER BY y; 50b6b4b79fSdrh} {1 2 3 4 5 | 1 2 3 4 5} 51b6b4b79fSdrhdo_execsql_test rtreeF-1.2 { 52b6b4b79fSdrh DELETE FROM t2 WHERE y=3; 53b6b4b79fSdrh 54b6b4b79fSdrh SELECT a FROM t3 ORDER BY a; 55b6b4b79fSdrh SELECT '|'; 56b6b4b79fSdrh SELECT y FROM t2 ORDER BY y; 57b6b4b79fSdrh} {1 2 4 5 | 1 2 4 5} 58b6b4b79fSdrhdo_execsql_test rtreeF-1.3 { 59b6b4b79fSdrh DELETE FROM t1; 60b6b4b79fSdrh DELETE FROM t2 WHERE y=5; 61b6b4b79fSdrh 62b6b4b79fSdrh SELECT a FROM t3 ORDER BY a; 63b6b4b79fSdrh SELECT '|'; 64b6b4b79fSdrh SELECT y FROM t2 ORDER BY y; 65b6b4b79fSdrh} {1 2 4 5 | 1 2 4} 66b6b4b79fSdrhdo_execsql_test rtreeF-1.4 { 67b6b4b79fSdrh INSERT INTO t1 DEFAULT VALUES; 68b6b4b79fSdrh DELETE FROM t2 WHERE y=5; 69b6b4b79fSdrh 70b6b4b79fSdrh SELECT a FROM t3 ORDER BY a; 71b6b4b79fSdrh SELECT '|'; 72b6b4b79fSdrh SELECT y FROM t2 ORDER BY y; 73b6b4b79fSdrh} {1 2 4 5 | 1 2 4} 74b6b4b79fSdrhdo_execsql_test rtreeF-1.5 { 75b6b4b79fSdrh DELETE FROM t2 WHERE y=2; 76b6b4b79fSdrh 77b6b4b79fSdrh SELECT a FROM t3 ORDER BY a; 78b6b4b79fSdrh SELECT '|'; 79b6b4b79fSdrh SELECT y FROM t2 ORDER BY y; 80b6b4b79fSdrh} {1 4 5 | 1 4} 81b6b4b79fSdrh 82*1917e92fSdando_rtree_integrity_test rtreeF-1.6 t3 83*1917e92fSdan 84b6b4b79fSdrhfinish_test 85