# 2018-05-16 # # 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 contains tests for the r-tree module, specifically the # auxiliary column mechanism. if {![info exists testdir]} { set testdir [file join [file dirname [info script]] .. .. test] } source [file join [file dirname [info script]] rtree_util.tcl] source $testdir/tester.tcl ifcapable !rtree { finish_test ; return } do_execsql_test rtreeH-100 { CREATE VIRTUAL TABLE t1 USING rtree(id,x0,x1,y0,y1,+label,+other); INSERT INTO t1(x0,x1,y0,y1,label) VALUES (0,10,0,10,'lower-left corner'), (0,10,90,100,'upper-left corner'), (90,100,0,10,'lower-right corner'), (90,100,90,100,'upper-right corner'), (40,60,40,60,'center'), (0,5,0,100,'left edge'), (95,100,0,100,'right edge'), (0,100,0,5,'bottom edge'), (0,100,95,100,'top edge'), (0,100,0,100,'the whole thing'), (0,50,0,100,'left half'), (51,100,0,100,'right half'), (0,100,0,50,'bottom half'), (0,100,51,100,'top half'); } {} do_execsql_test rtreeH-101 { SELECT * FROM t1_rowid ORDER BY rowid } {1 1 {lower-left corner} {} 2 1 {upper-left corner} {} 3 1 {lower-right corner} {} 4 1 {upper-right corner} {} 5 1 center {} 6 1 {left edge} {} 7 1 {right edge} {} 8 1 {bottom edge} {} 9 1 {top edge} {} 10 1 {the whole thing} {} 11 1 {left half} {} 12 1 {right half} {} 13 1 {bottom half} {} 14 1 {top half} {}} do_execsql_test rtreeH-102 { SELECT * FROM t1 WHERE rowid=5; } {5 40.0 60.0 40.0 60.0 center {}} do_execsql_test rtreeH-103 { SELECT * FROM t1 WHERE label='center'; } {5 40.0 60.0 40.0 60.0 center {}} do_rtree_integrity_test rtreeH-110 t1 do_execsql_test rtreeH-120 { SELECT label FROM t1 WHERE x1<=50 ORDER BY id } {{lower-left corner} {upper-left corner} {left edge} {left half}} do_execsql_test rtreeH-121 { SELECT label FROM t1 WHERE x1<=50 AND label NOT LIKE '%corner%' ORDER BY id } {{left edge} {left half}} do_execsql_test rtreeH-200 { WITH RECURSIVE c1(x) AS (VALUES(0) UNION ALL SELECT x+1 FROM c1 WHERE x<99), c2(y) AS (VALUES(0) UNION ALL SELECT y+1 FROM c2 WHERE y<99) INSERT INTO t1(id, x0,x1,y0,y1,label) SELECT 1000+x+y*100, x, x+1, y, y+1, printf('box-%d,%d',x,y) FROM c1, c2; } {} do_execsql_test rtreeH-210 { SELECT label FROM t1 WHERE x0>=48 AND x1<=50 AND y0>=48 AND y1<=50 ORDER BY id; } {box-48,48 box-49,48 box-48,49 box-49,49} do_execsql_test rtreeH-300 { UPDATE t1 SET label='x'||label WHERE x0>=49 AND x1<=50 AND y0>=49 AND y1<=50; SELECT label FROM t1 WHERE x0>=48 AND x1<=50 AND y0>=48 AND y1<=50 ORDER BY id; } {box-48,48 box-49,48 box-48,49 xbox-49,49} finish_test