/ Hex Artifact Content
Login

Artifact ebcef111192a034c64e9f3b6bd42533a539c2062:


0000: 23 20 32 30 30 38 20 46 65 62 20 31 39 0a 23 0a  # 2008 Feb 19.#.
0010: 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73  # The author dis
0020: 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74  claims copyright
0030: 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20   to this source 
0040: 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20  code.  In place 
0050: 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74  of.# a legal not
0060: 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62  ice, here is a b
0070: 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20  lessing:.#.#    
0080: 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20  May you do good 
0090: 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20  and not evil..# 
00a0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00b0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00c0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00d0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20  give others..#  
00e0: 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20    May you share 
00f0: 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61  freely, never ta
0100: 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79  king more than y
0110: 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a  ou give..#.#****
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 0a 23 0a 23 20 54 68 65 20 66 6f 63 75  ***.#.# The focu
0170: 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69  s of this file i
0180: 73 20 74 65 73 74 69 6e 67 20 74 68 65 20 72 2d  s testing the r-
0190: 74 72 65 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0a  tree extension..
01a0: 23 0a 23 20 24 49 64 3a 20 72 74 72 65 65 31 2e  #.# $Id: rtree1.
01b0: 74 65 73 74 2c 76 20 31 2e 36 20 32 30 30 38 2f  test,v 1.6 2008/
01c0: 31 32 2f 32 32 20 31 35 3a 30 34 3a 33 32 20 64  12/22 15:04:32 d
01d0: 61 6e 69 65 6c 6b 31 39 37 37 20 45 78 70 20 24  anielk1977 Exp $
01e0: 0a 23 0a 0a 69 66 20 7b 21 5b 69 6e 66 6f 20 65  .#..if {![info e
01f0: 78 69 73 74 73 20 74 65 73 74 64 69 72 5d 7d 20  xists testdir]} 
0200: 7b 0a 20 20 73 65 74 20 74 65 73 74 64 69 72 20  {.  set testdir 
0210: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 66 69 6c 65  [file join [file
0220: 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d   dirname $argv0]
0230: 20 2e 2e 20 2e 2e 20 74 65 73 74 5d 0a 7d 0a 73   .. .. test].}.s
0240: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ource [file join
0250: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b   [file dirname [
0260: 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 20 72 74  info script]] rt
0270: 72 65 65 5f 75 74 69 6c 2e 74 63 6c 5d 0a 73 6f  ree_util.tcl].so
0280: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65  urce $testdir/te
0290: 73 74 65 72 2e 74 63 6c 0a 0a 23 20 54 65 73 74  ster.tcl..# Test
02a0: 20 70 6c 61 6e 3a 0a 23 0a 23 20 20 20 72 74 72   plan:.#.#   rtr
02b0: 65 65 2d 31 2e 2a 3a 20 43 72 65 61 74 69 6e 67  ee-1.*: Creating
02c0: 2f 64 65 73 74 72 6f 79 69 6e 67 20 72 2d 74 72  /destroying r-tr
02d0: 65 65 20 74 61 62 6c 65 73 2e 0a 23 20 20 20 72  ee tables..#   r
02e0: 74 72 65 65 2d 32 2e 2a 3a 20 54 65 73 74 20 74  tree-2.*: Test t
02f0: 68 65 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 73  he implicit cons
0300: 74 72 61 69 6e 74 73 20 2d 20 75 6e 69 71 75 65  traints - unique
0310: 20 72 6f 77 69 64 20 61 6e 64 0a 23 20 20 20 20   rowid and.#    
0320: 20 20 20 20 20 20 20 20 20 20 28 63 6f 6f 72 64            (coord
0330: 5b 4e 5d 3c 3d 63 6f 6f 72 64 5b 4e 2b 31 5d 29  [N]<=coord[N+1])
0340: 20 66 6f 72 20 65 76 65 6e 20 76 61 6c 75 65 73   for even values
0350: 20 6f 66 20 4e 2e 20 41 6c 73 6f 0a 23 20 20 20   of N. Also.#   
0360: 20 20 20 20 20 20 20 20 20 20 20 61 75 74 6f 6d             autom
0370: 61 74 69 63 20 61 73 73 69 67 6e 69 6e 67 20 6f  atic assigning o
0380: 66 20 72 6f 77 69 64 20 76 61 6c 75 65 73 2e 0a  f rowid values..
0390: 23 20 20 20 72 74 72 65 65 2d 33 2e 2a 3a 20 4c  #   rtree-3.*: L
03a0: 69 6e 65 61 72 20 73 63 61 6e 73 20 6f 66 20 72  inear scans of r
03b0: 2d 74 72 65 65 20 64 61 74 61 2e 0a 23 20 20 20  -tree data..#   
03c0: 72 74 72 65 65 2d 34 2e 2a 3a 20 54 65 73 74 20  rtree-4.*: Test 
03d0: 49 4e 53 45 52 54 0a 23 20 20 20 72 74 72 65 65  INSERT.#   rtree
03e0: 2d 35 2e 2a 3a 20 54 65 73 74 20 44 45 4c 45 54  -5.*: Test DELET
03f0: 45 0a 23 20 20 20 72 74 72 65 65 2d 36 2e 2a 3a  E.#   rtree-6.*:
0400: 20 54 65 73 74 20 55 50 44 41 54 45 0a 23 20 20   Test UPDATE.#  
0410: 20 72 74 72 65 65 2d 37 2e 2a 3a 20 54 65 73 74   rtree-7.*: Test
0420: 20 72 65 6e 61 6d 69 6e 67 20 61 6e 20 72 2d 74   renaming an r-t
0430: 72 65 65 20 74 61 62 6c 65 2e 0a 23 20 20 20 72  ree table..#   r
0440: 74 72 65 65 2d 38 2e 2a 3a 20 54 65 73 74 20 63  tree-8.*: Test c
0450: 6f 6e 73 74 72 61 69 6e 65 64 20 73 63 61 6e 73  onstrained scans
0460: 20 6f 66 20 72 2d 74 72 65 65 20 64 61 74 61 2e   of r-tree data.
0470: 0a 23 0a 0a 69 66 63 61 70 61 62 6c 65 20 21 72  .#..ifcapable !r
0480: 74 72 65 65 20 7b 0a 20 20 66 69 6e 69 73 68 5f  tree {.  finish_
0490: 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a  test.  return.}.
04a0: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
04b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
04f0: 20 54 65 73 74 20 63 61 73 65 73 20 72 74 72 65   Test cases rtre
0500: 65 2d 31 2e 2a 20 74 65 73 74 20 43 52 45 41 54  e-1.* test CREAT
0510: 45 20 61 6e 64 20 44 52 4f 50 20 74 61 62 6c 65  E and DROP table
0520: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 23 0a 0a   statements..#..
0530: 23 20 54 65 73 74 20 63 72 65 61 74 69 6e 67 20  # Test creating 
0540: 61 6e 64 20 64 72 6f 70 70 69 6e 67 20 61 6e 20  and dropping an 
0550: 72 74 72 65 65 20 74 61 62 6c 65 2e 0a 23 0a 64  rtree table..#.d
0560: 6f 5f 74 65 73 74 20 72 74 72 65 65 2d 31 2e 31  o_test rtree-1.1
0570: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
0580: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
0590: 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20 72  TABLE t1 USING r
05a0: 74 72 65 65 28 69 69 2c 20 78 31 2c 20 78 32 2c  tree(ii, x1, x2,
05b0: 20 79 31 2c 20 79 32 29 20 7d 0a 7d 20 7b 7d 0a   y1, y2) }.} {}.
05c0: 64 6f 5f 74 65 73 74 20 72 74 72 65 65 2d 31 2e  do_test rtree-1.
05d0: 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.2 {.  execsql 
05e0: 7b 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52  { SELECT name FR
05f0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0600: 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 20 7d   ORDER BY name }
0610: 0a 7d 20 7b 74 31 20 74 31 5f 6e 6f 64 65 20 74  .} {t1 t1_node t
0620: 31 5f 70 61 72 65 6e 74 20 74 31 5f 72 6f 77 69  1_parent t1_rowi
0630: 64 7d 0a 64 6f 5f 74 65 73 74 20 72 74 72 65 65  d}.do_test rtree
0640: 2d 31 2e 31 2e 33 20 7b 0a 20 20 65 78 65 63 73  -1.1.3 {.  execs
0650: 71 6c 20 7b 20 0a 20 20 20 20 44 52 4f 50 20 54  ql { .    DROP T
0660: 41 42 4c 45 20 74 31 3b 20 0a 20 20 20 20 53 45  ABLE t1; .    SE
0670: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
0680: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 4f 52 44  qlite_master ORD
0690: 45 52 20 42 59 20 6e 61 6d 65 3b 0a 20 20 7d 0a  ER BY name;.  }.
06a0: 7d 20 7b 7d 0a 0a 23 20 54 65 73 74 20 63 72 65  } {}..# Test cre
06b0: 61 74 69 6e 67 20 61 6e 64 20 64 72 6f 70 70 69  ating and droppi
06c0: 6e 67 20 61 6e 20 72 74 72 65 65 20 74 61 62 6c  ng an rtree tabl
06d0: 65 20 77 69 74 68 20 61 6e 20 6f 64 64 20 6e 61  e with an odd na
06e0: 6d 65 20 69 6e 0a 23 20 61 6e 20 61 74 74 61 63  me in.# an attac
06f0: 68 65 64 20 64 61 74 61 62 61 73 65 2e 0a 23 0a  hed database..#.
0700: 64 6f 5f 74 65 73 74 20 72 74 72 65 65 2d 31 2e  do_test rtree-1.
0710: 32 2e 31 20 7b 0a 20 20 66 69 6c 65 20 64 65 6c  2.1 {.  file del
0720: 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 32  ete -force test2
0730: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  .db.  execsql {.
0740: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
0750: 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20  2.db' AS aux;.  
0760: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
0770: 20 54 41 42 4c 45 20 61 75 78 2e 27 61 22 20 22   TABLE aux.'a" "
0780: 62 27 20 55 53 49 4e 47 20 72 74 72 65 65 28 69  b' USING rtree(i
0790: 69 2c 20 78 31 2c 20 78 32 2c 20 79 31 2c 20 79  i, x1, x2, y1, y
07a0: 32 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  2);.  }.} {}.do_
07b0: 74 65 73 74 20 72 74 72 65 65 2d 31 2e 32 2e 32  test rtree-1.2.2
07c0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 53   {.  execsql { S
07d0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
07e0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 4f 52  sqlite_master OR
07f0: 44 45 52 20 42 59 20 6e 61 6d 65 20 7d 0a 7d 20  DER BY name }.} 
0800: 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 74 72 65 65  {}.do_test rtree
0810: 2d 31 2e 32 2e 33 20 7b 0a 20 20 65 78 65 63 73  -1.2.3 {.  execs
0820: 71 6c 20 7b 20 53 45 4c 45 43 54 20 6e 61 6d 65  ql { SELECT name
0830: 20 46 52 4f 4d 20 61 75 78 2e 73 71 6c 69 74 65   FROM aux.sqlite
0840: 5f 6d 61 73 74 65 72 20 4f 52 44 45 52 20 42 59  _master ORDER BY
0850: 20 6e 61 6d 65 20 7d 0a 7d 20 7b 7b 61 22 20 22   name }.} {{a" "
0860: 62 7d 20 7b 61 22 20 22 62 5f 6e 6f 64 65 7d 20  b} {a" "b_node} 
0870: 7b 61 22 20 22 62 5f 70 61 72 65 6e 74 7d 20 7b  {a" "b_parent} {
0880: 61 22 20 22 62 5f 72 6f 77 69 64 7d 7d 0a 64 6f  a" "b_rowid}}.do
0890: 5f 74 65 73 74 20 72 74 72 65 65 2d 31 2e 32 2e  _test rtree-1.2.
08a0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  4 {.  execsql { 
08b0: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
08c0: 61 75 78 2e 27 61 22 20 22 62 27 3b 20 0a 20 20  aux.'a" "b'; .  
08d0: 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52    SELECT name FR
08e0: 4f 4d 20 61 75 78 2e 73 71 6c 69 74 65 5f 6d 61  OM aux.sqlite_ma
08f0: 73 74 65 72 20 4f 52 44 45 52 20 42 59 20 6e 61  ster ORDER BY na
0900: 6d 65 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20  me;.  }.} {}..# 
0910: 54 65 73 74 20 74 68 61 74 20 74 68 65 20 6c 6f  Test that the lo
0920: 67 69 63 20 66 6f 72 20 63 68 65 63 6b 69 6e 67  gic for checking
0930: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
0940: 6f 6c 75 6d 6e 73 20 73 70 65 63 69 66 69 65 64  olumns specified
0950: 0a 23 20 66 6f 72 20 61 6e 20 72 74 72 65 65 20  .# for an rtree 
0960: 74 61 62 6c 65 2e 20 41 63 63 65 70 74 61 62 6c  table. Acceptabl
0970: 65 20 76 61 6c 75 65 73 20 61 72 65 20 6f 64 64  e values are odd
0980: 20 6e 75 6d 62 65 72 73 20 62 65 74 77 65 65 6e   numbers between
0990: 20 33 20 61 6e 64 0a 23 20 31 31 2c 20 69 6e 63   3 and.# 11, inc
09a0: 6c 75 73 69 76 65 2e 0a 23 0a 73 65 74 20 63 6f  lusive..#.set co
09b0: 6c 73 20 5b 6c 69 73 74 20 69 31 20 69 32 20 69  ls [list i1 i2 i
09c0: 33 20 69 34 20 69 35 20 69 36 20 69 37 20 69 38  3 i4 i5 i6 i7 i8
09d0: 20 69 39 20 69 41 20 69 42 20 69 43 20 69 44 20   i9 iA iB iC iD 
09e0: 69 45 20 69 46 20 69 47 20 69 48 20 69 49 20 69  iE iF iG iH iI i
09f0: 4a 20 69 4b 5d 0a 66 6f 72 20 7b 73 65 74 20 6e  J iK].for {set n
0a00: 43 6f 6c 20 31 7d 20 7b 24 6e 43 6f 6c 3c 5b 6c  Col 1} {$nCol<[l
0a10: 6c 65 6e 67 74 68 20 24 63 6f 6c 73 5d 7d 20 7b  length $cols]} {
0a20: 69 6e 63 72 20 6e 43 6f 6c 7d 20 7b 0a 0a 20 20  incr nCol} {..  
0a30: 73 65 74 20 63 6f 6c 75 6d 6e 73 20 5b 6a 6f 69  set columns [joi
0a40: 6e 20 5b 6c 72 61 6e 67 65 20 24 63 6f 6c 73 20  n [lrange $cols 
0a50: 30 20 5b 65 78 70 72 20 7b 24 6e 43 6f 6c 2d 31  0 [expr {$nCol-1
0a60: 7d 5d 5d 20 2c 5d 0a 0a 20 20 73 65 74 20 58 20  }]] ,]..  set X 
0a70: 7b 30 20 7b 7d 7d 0a 20 20 69 66 20 7b 24 6e 43  {0 {}}.  if {$nC
0a80: 6f 6c 25 32 20 3d 3d 20 30 7d 20 20 7b 20 73 65  ol%2 == 0}  { se
0a90: 74 20 58 20 7b 31 20 7b 57 72 6f 6e 67 20 6e 75  t X {1 {Wrong nu
0aa0: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
0ab0: 66 6f 72 20 61 6e 20 72 74 72 65 65 20 74 61 62  for an rtree tab
0ac0: 6c 65 7d 7d 20 7d 0a 20 20 69 66 20 7b 24 6e 43  le}} }.  if {$nC
0ad0: 6f 6c 20 3c 20 33 7d 20 20 20 20 20 7b 20 73 65  ol < 3}     { se
0ae0: 74 20 58 20 7b 31 20 7b 54 6f 6f 20 66 65 77 20  t X {1 {Too few 
0af0: 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 61 6e 20 72  columns for an r
0b00: 74 72 65 65 20 74 61 62 6c 65 7d 7d 20 7d 0a 20  tree table}} }. 
0b10: 20 69 66 20 7b 24 6e 43 6f 6c 20 3e 20 31 31 7d   if {$nCol > 11}
0b20: 20 20 20 20 7b 20 73 65 74 20 58 20 7b 31 20 7b      { set X {1 {
0b30: 54 6f 6f 20 6d 61 6e 79 20 63 6f 6c 75 6d 6e 73  Too many columns
0b40: 20 66 6f 72 20 61 6e 20 72 74 72 65 65 20 74 61   for an rtree ta
0b50: 62 6c 65 7d 7d 20 7d 0a 0a 20 20 64 6f 5f 74 65  ble}} }..  do_te
0b60: 73 74 20 72 74 72 65 65 2d 31 2e 33 2e 24 6e 43  st rtree-1.3.$nC
0b70: 6f 6c 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71  ol {.    catchsq
0b80: 6c 20 22 20 0a 20 20 20 20 20 20 43 52 45 41 54  l " .      CREAT
0b90: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
0ba0: 74 31 20 55 53 49 4e 47 20 72 74 72 65 65 28 24  t1 USING rtree($
0bb0: 63 6f 6c 75 6d 6e 73 29 3b 0a 20 20 20 20 22 0a  columns);.    ".
0bc0: 20 20 7d 20 24 58 0a 0a 20 20 63 61 74 63 68 73    } $X..  catchs
0bd0: 71 6c 20 7b 20 44 52 4f 50 20 54 41 42 4c 45 20  ql { DROP TABLE 
0be0: 74 31 20 7d 0a 7d 0a 0a 23 20 54 65 73 74 20 74  t1 }.}..# Test t
0bf0: 68 61 74 20 69 74 20 69 73 20 70 6f 73 73 69 62  hat it is possib
0c00: 6c 65 20 74 6f 20 6f 70 65 6e 20 61 6e 20 65 78  le to open an ex
0c10: 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
0c20: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a 23 20  that contains.# 
0c30: 72 2d 74 72 65 65 20 74 61 62 6c 65 73 2e 0a 23  r-tree tables..#
0c40: 0a 64 6f 5f 74 65 73 74 20 72 74 72 65 65 2d 31  .do_test rtree-1
0c50: 2e 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .4.1 {.  execsql
0c60: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49   {.    CREATE VI
0c70: 52 54 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55  RTUAL TABLE t1 U
0c80: 53 49 4e 47 20 72 74 72 65 65 28 69 69 2c 20 78  SING rtree(ii, x
0c90: 31 2c 20 78 32 29 3b 0a 20 20 20 20 49 4e 53 45  1, x2);.    INSE
0ca0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0cb0: 53 28 31 2c 20 35 2e 30 2c 20 31 30 2e 30 29 3b  S(1, 5.0, 10.0);
0cc0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0cd0: 20 74 31 20 56 41 4c 55 45 53 28 32 2c 20 31 35   t1 VALUES(2, 15
0ce0: 2e 30 2c 20 32 30 2e 30 29 3b 0a 20 20 7d 0a 7d  .0, 20.0);.  }.}
0cf0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 74 72 65   {}.do_test rtre
0d00: 65 2d 31 2e 34 2e 32 20 7b 0a 20 20 64 62 20 63  e-1.4.2 {.  db c
0d10: 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64  lose.  sqlite3 d
0d20: 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63  b test.db.  exec
0d30: 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20 46  sql { SELECT * F
0d40: 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
0d50: 69 69 20 7d 0a 7d 20 7b 31 20 35 2e 30 20 31 30  ii }.} {1 5.0 10
0d60: 2e 30 20 32 20 31 35 2e 30 20 32 30 2e 30 7d 0a  .0 2 15.0 20.0}.
0d70: 64 6f 5f 74 65 73 74 20 72 74 72 65 65 2d 31 2e  do_test rtree-1.
0d80: 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.3 {.  execsql 
0d90: 7b 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 20  { DROP TABLE t1 
0da0: 7d 0a 7d 20 7b 7d 0a 0a 23 20 54 65 73 74 20 74  }.} {}..# Test t
0db0: 68 61 74 20 69 74 20 69 73 20 70 6f 73 73 69 62  hat it is possib
0dc0: 6c 65 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  le to create an 
0dd0: 72 2d 74 72 65 65 20 74 61 62 6c 65 20 77 69 74  r-tree table wit
0de0: 68 20 72 69 64 69 63 75 6c 6f 75 73 0a 23 20 63  h ridiculous.# c
0df0: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2e 0a 23 0a 64  olumn names..#.d
0e00: 6f 5f 74 65 73 74 20 72 74 72 65 65 2d 31 2e 35  o_test rtree-1.5
0e10: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
0e20: 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54  .    CREATE VIRT
0e30: 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55 53 49  UAL TABLE t1 USI
0e40: 4e 47 20 72 74 72 65 65 28 22 74 68 65 20 6b 65  NG rtree("the ke
0e50: 79 22 2c 20 22 78 20 64 69 6d 2e 22 2c 20 22 78  y", "x dim.", "x
0e60: 32 27 64 69 6d 22 29 3b 0a 20 20 20 20 49 4e 53  2'dim");.    INS
0e70: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
0e80: 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a 20 20 20  ES(1, 2, 3);.   
0e90: 20 53 45 4c 45 43 54 20 22 74 68 65 20 6b 65 79   SELECT "the key
0ea0: 22 2c 20 22 78 20 64 69 6d 2e 22 2c 20 22 78 32  ", "x dim.", "x2
0eb0: 27 64 69 6d 22 20 46 52 4f 4d 20 74 31 3b 0a 20  'dim" FROM t1;. 
0ec0: 20 7d 0a 7d 20 7b 31 20 32 2e 30 20 33 2e 30 7d   }.} {1 2.0 3.0}
0ed0: 0a 64 6f 5f 74 65 73 74 20 72 74 72 65 65 2d 31  .do_test rtree-1
0ee0: 2e 35 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .5.1 {.  execsql
0ef0: 20 7b 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31   { DROP TABLE t1
0f00: 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 46 6f 72 63 65   }.} {}..# Force
0f10: 20 74 68 65 20 72 2d 74 72 65 65 20 63 6f 6e 73   the r-tree cons
0f20: 74 72 75 63 74 6f 72 20 74 6f 20 66 61 69 6c 2e  tructor to fail.
0f30: 0a 23 0a 64 6f 5f 74 65 73 74 20 72 74 72 65 65  .#.do_test rtree
0f40: 2d 31 2e 36 2e 31 20 7b 0a 20 20 65 78 65 63 73  -1.6.1 {.  execs
0f50: 71 6c 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c  ql { CREATE TABL
0f60: 45 20 74 31 5f 72 6f 77 69 64 28 61 29 3b 20 7d  E t1_rowid(a); }
0f70: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
0f80: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
0f90: 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20   TABLE t1 USING 
0fa0: 72 74 72 65 65 28 22 74 68 65 20 6b 65 79 22 2c  rtree("the key",
0fb0: 20 22 78 20 64 69 6d 2e 22 2c 20 22 78 32 27 64   "x dim.", "x2'd
0fc0: 69 6d 22 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b  im");.  }.} {1 {
0fd0: 74 61 62 6c 65 20 22 74 31 5f 72 6f 77 69 64 22  table "t1_rowid"
0fe0: 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 7d   already exists}
0ff0: 7d 0a 64 6f 5f 74 65 73 74 20 72 74 72 65 65 2d  }.do_test rtree-
1000: 31 2e 36 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  1.6.1 {.  execsq
1010: 6c 20 7b 20 44 52 4f 50 20 54 41 42 4c 45 20 74  l { DROP TABLE t
1020: 31 5f 72 6f 77 69 64 20 7d 0a 7d 20 7b 7d 0a 0a  1_rowid }.} {}..
1030: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
1040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
1080: 54 65 73 74 20 63 61 73 65 73 20 72 74 72 65 65  Test cases rtree
1090: 2d 32 2e 2a 20 0a 23 0a 64 6f 5f 74 65 73 74 20  -2.* .#.do_test 
10a0: 72 74 72 65 65 2d 32 2e 31 2e 31 20 7b 0a 20 20  rtree-2.1.1 {.  
10b0: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 43  execsql { .    C
10c0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
10d0: 42 4c 45 20 74 31 20 55 53 49 4e 47 20 72 74 72  BLE t1 USING rtr
10e0: 65 65 28 69 69 2c 20 78 31 2c 20 78 32 2c 20 79  ee(ii, x1, x2, y
10f0: 31 2c 20 79 32 29 3b 0a 20 20 20 20 53 45 4c 45  1, y2);.    SELE
1100: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
1110: 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20  }.} {}..do_test 
1120: 72 74 72 65 65 2d 32 2e 31 2e 32 20 7b 0a 20 20  rtree-2.1.2 {.  
1130: 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54  execsql { INSERT
1140: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
1150: 4e 55 4c 4c 2c 20 31 2c 20 33 2c 20 32 2c 20 34  NULL, 1, 3, 2, 4
1160: 29 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  ) }.  execsql { 
1170: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
1180: 20 7d 0a 7d 20 7b 31 20 31 2e 30 20 33 2e 30 20   }.} {1 1.0 3.0 
1190: 32 2e 30 20 34 2e 30 7d 0a 64 6f 5f 74 65 73 74  2.0 4.0}.do_test
11a0: 20 72 74 72 65 65 2d 32 2e 31 2e 33 20 7b 0a 20   rtree-2.1.3 {. 
11b0: 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52   execsql { INSER
11c0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
11d0: 28 4e 55 4c 4c 2c 20 31 2c 20 33 2c 20 32 2c 20  (NULL, 1, 3, 2, 
11e0: 34 29 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b  4) }.  execsql {
11f0: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52   SELECT rowid FR
1200: 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 72  OM t1 ORDER BY r
1210: 6f 77 69 64 20 7d 0a 7d 20 7b 31 20 32 7d 0a 64  owid }.} {1 2}.d
1220: 6f 5f 74 65 73 74 20 72 74 72 65 65 2d 32 2e 31  o_test rtree-2.1
1230: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
1240: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
1250: 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 31 2c 20  VALUES(NULL, 1, 
1260: 33 2c 20 32 2c 20 34 29 20 7d 0a 20 20 65 78 65  3, 2, 4) }.  exe
1270: 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 69 69  csql { SELECT ii
1280: 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42   FROM t1 ORDER B
1290: 59 20 69 69 20 7d 0a 7d 20 7b 31 20 32 20 33 7d  Y ii }.} {1 2 3}
12a0: 0a 0a 64 6f 5f 74 65 73 74 20 72 74 72 65 65 2d  ..do_test rtree-
12b0: 32 2e 32 2e 31 20 7b 0a 20 20 63 61 74 63 68 73  2.2.1 {.  catchs
12c0: 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f  ql { INSERT INTO
12d0: 20 74 31 20 56 41 4c 55 45 53 28 32 2c 20 31 2c   t1 VALUES(2, 1,
12e0: 20 33 2c 20 32 2c 20 34 29 20 7d 0a 7d 20 7b 31   3, 2, 4) }.} {1
12f0: 20 7b 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69   {constraint fai
1300: 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 72 74  led}}.do_test rt
1310: 72 65 65 2d 32 2e 32 2e 32 20 7b 0a 20 20 63 61  ree-2.2.2 {.  ca
1320: 74 63 68 73 71 6c 20 7b 20 49 4e 53 45 52 54 20  tchsql { INSERT 
1330: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 34  INTO t1 VALUES(4
1340: 2c 20 31 2c 20 33 2c 20 34 2c 20 32 29 20 7d 0a  , 1, 3, 4, 2) }.
1350: 7d 20 7b 31 20 7b 63 6f 6e 73 74 72 61 69 6e 74  } {1 {constraint
1360: 20 66 61 69 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73   failed}}.do_tes
1370: 74 20 72 74 72 65 65 2d 32 2e 32 2e 33 20 7b 0a  t rtree-2.2.3 {.
1380: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 49 4e 53    catchsql { INS
1390: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
13a0: 45 53 28 34 2c 20 33 2c 20 31 2c 20 32 2c 20 34  ES(4, 3, 1, 2, 4
13b0: 29 20 7d 0a 7d 20 7b 31 20 7b 63 6f 6e 73 74 72  ) }.} {1 {constr
13c0: 61 69 6e 74 20 66 61 69 6c 65 64 7d 7d 0a 64 6f  aint failed}}.do
13d0: 5f 74 65 73 74 20 72 74 72 65 65 2d 32 2e 32 2e  _test rtree-2.2.
13e0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  4 {.  execsql { 
13f0: 53 45 4c 45 43 54 20 69 69 20 46 52 4f 4d 20 74  SELECT ii FROM t
1400: 31 20 4f 52 44 45 52 20 42 59 20 69 69 20 7d 0a  1 ORDER BY ii }.
1410: 7d 20 7b 31 20 32 20 33 7d 0a 0a 64 6f 5f 74 65  } {1 2 3}..do_te
1420: 73 74 20 72 74 72 65 65 2d 32 2e 58 20 7b 0a 20  st rtree-2.X {. 
1430: 20 65 78 65 63 73 71 6c 20 7b 20 44 52 4f 50 20   execsql { DROP 
1440: 54 41 42 4c 45 20 74 31 20 7d 0a 7d 20 7b 7d 0a  TABLE t1 }.} {}.
1450: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
1460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
14a0: 20 54 65 73 74 20 63 61 73 65 73 20 72 74 72 65   Test cases rtre
14b0: 65 2d 33 2e 2a 20 74 65 73 74 20 6c 69 6e 65 61  e-3.* test linea
14c0: 72 20 73 63 61 6e 73 20 6f 66 20 72 2d 74 72 65  r scans of r-tre
14d0: 65 20 74 61 62 6c 65 20 64 61 74 61 2e 20 54 6f  e table data. To
14e0: 20 74 65 73 74 0a 23 20 74 68 69 73 20 77 65 20   test.# this we 
14f0: 68 61 76 65 20 74 6f 20 69 6e 73 65 72 74 20 73  have to insert s
1500: 6f 6d 65 20 64 61 74 61 20 69 6e 74 6f 20 61 6e  ome data into an
1510: 20 72 2d 74 72 65 65 2c 20 62 75 74 20 74 68 61   r-tree, but tha
1520: 74 20 69 73 20 6e 6f 74 20 74 68 65 0a 23 20 66  t is not the.# f
1530: 6f 63 75 73 20 6f 66 20 74 68 65 73 65 20 74 65  ocus of these te
1540: 73 74 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 72  sts..#.do_test r
1550: 74 72 65 65 2d 33 2e 31 2e 31 20 7b 0a 20 20 65  tree-3.1.1 {.  e
1560: 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 43 52  xecsql { .    CR
1570: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
1580: 4c 45 20 74 31 20 55 53 49 4e 47 20 72 74 72 65  LE t1 USING rtre
1590: 65 28 69 69 2c 20 78 31 2c 20 78 32 2c 20 79 31  e(ii, x1, x2, y1
15a0: 2c 20 79 32 29 3b 0a 20 20 20 20 53 45 4c 45 43  , y2);.    SELEC
15b0: 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  T * FROM t1;.  }
15c0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 74  .} {}.do_test rt
15d0: 72 65 65 2d 33 2e 31 2e 32 20 7b 0a 20 20 65 78  ree-3.1.2 {.  ex
15e0: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 49 4e 53  ecsql { .    INS
15f0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
1600: 45 53 28 35 2c 20 31 2c 20 33 2c 20 32 2c 20 34  ES(5, 1, 3, 2, 4
1610: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
1620: 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b  FROM t1;.  }.} {
1630: 35 20 31 2e 30 20 33 2e 30 20 32 2e 30 20 34 2e  5 1.0 3.0 2.0 4.
1640: 30 7d 0a 64 6f 5f 74 65 73 74 20 72 74 72 65 65  0}.do_test rtree
1650: 2d 33 2e 31 2e 33 20 7b 0a 20 20 65 78 65 63 73  -3.1.3 {.  execs
1660: 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20  ql {.    INSERT 
1670: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 36  INTO t1 VALUES(6
1680: 2c 20 32 2c 20 36 2c 20 34 2c 20 38 29 3b 0a 20  , 2, 6, 4, 8);. 
1690: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
16a0: 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 35 20 31 2e   t1;.  }.} {5 1.
16b0: 30 20 33 2e 30 20 32 2e 30 20 34 2e 30 20 36 20  0 3.0 2.0 4.0 6 
16c0: 32 2e 30 20 36 2e 30 20 34 2e 30 20 38 2e 30 7d  2.0 6.0 4.0 8.0}
16d0: 0a 0a 23 20 54 65 73 74 20 74 68 65 20 63 6f 6e  ..# Test the con
16e0: 73 74 72 61 69 6e 74 20 6f 6e 20 74 68 65 20 63  straint on the c
16f0: 6f 6f 72 64 69 6e 61 74 65 73 20 28 63 5b 69 5d  oordinates (c[i]
1700: 3c 3d 63 5b 69 2b 31 5d 20 77 68 65 72 65 20 28  <=c[i+1] where (
1710: 69 25 32 3d 3d 30 29 29 3a 0a 64 6f 5f 74 65 73  i%2==0)):.do_tes
1720: 74 20 72 74 72 65 65 2d 33 2e 32 2e 31 20 7b 0a  t rtree-3.2.1 {.
1730: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 49 4e 53    catchsql { INS
1740: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
1750: 45 53 28 37 2c 20 32 2c 20 36 2c 20 34 2c 20 33  ES(7, 2, 6, 4, 3
1760: 29 20 7d 0a 7d 20 7b 31 20 7b 63 6f 6e 73 74 72  ) }.} {1 {constr
1770: 61 69 6e 74 20 66 61 69 6c 65 64 7d 7d 0a 64 6f  aint failed}}.do
1780: 5f 74 65 73 74 20 72 74 72 65 65 2d 33 2e 32 2e  _test rtree-3.2.
1790: 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  2 {.  catchsql {
17a0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
17b0: 56 41 4c 55 45 53 28 38 2c 20 32 2c 20 36 2c 20  VALUES(8, 2, 6, 
17c0: 33 2c 20 33 29 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  3, 3) }.} {0 {}}
17d0: 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..#-------------
17e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1800: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
1820: 23 20 54 65 73 74 20 63 61 73 65 73 20 72 74 72  # Test cases rtr
1830: 65 65 2d 35 2e 2a 20 74 65 73 74 20 44 45 4c 45  ee-5.* test DELE
1840: 54 45 20 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 23  TE operations..#
1850: 0a 64 6f 5f 74 65 73 74 20 72 74 72 65 65 2d 35  .do_test rtree-5
1860: 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.1 {.  execsql
1870: 20 7b 20 43 52 45 41 54 45 20 56 49 52 54 55 41   { CREATE VIRTUA
1880: 4c 20 54 41 42 4c 45 20 74 32 20 55 53 49 4e 47  L TABLE t2 USING
1890: 20 72 74 72 65 65 28 69 69 2c 20 78 31 2c 20 78   rtree(ii, x1, x
18a0: 32 29 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  2) }.} {}.do_tes
18b0: 74 20 72 74 72 65 65 2d 35 2e 31 2e 32 20 7b 0a  t rtree-5.1.2 {.
18c0: 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20    execsql { .   
18d0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
18e0: 56 41 4c 55 45 53 28 31 2c 20 31 30 2c 20 32 30  VALUES(1, 10, 20
18f0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
1900: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32 2c 20  TO t2 VALUES(2, 
1910: 33 30 2c 20 34 30 29 3b 0a 20 20 20 20 49 4e 53  30, 40);.    INS
1920: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
1930: 45 53 28 33 2c 20 35 30 2c 20 36 30 29 3b 0a 20  ES(3, 50, 60);. 
1940: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1950: 20 74 32 20 4f 52 44 45 52 20 42 59 20 69 69 3b   t2 ORDER BY ii;
1960: 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 2e 30 20 32  .  }.} {1 10.0 2
1970: 30 2e 30 20 32 20 33 30 2e 30 20 34 30 2e 30 20  0.0 2 30.0 40.0 
1980: 33 20 35 30 2e 30 20 36 30 2e 30 7d 0a 64 6f 5f  3 50.0 60.0}.do_
1990: 74 65 73 74 20 72 74 72 65 65 2d 35 2e 31 2e 33  test rtree-5.1.3
19a0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 0a   {.  execsql { .
19b0: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
19c0: 74 32 20 57 48 45 52 45 20 69 69 3d 32 3b 0a 20  t2 WHERE ii=2;. 
19d0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
19e0: 20 74 32 20 4f 52 44 45 52 20 42 59 20 69 69 3b   t2 ORDER BY ii;
19f0: 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 2e 30 20 32  .  }.} {1 10.0 2
1a00: 30 2e 30 20 33 20 35 30 2e 30 20 36 30 2e 30 7d  0.0 3 50.0 60.0}
1a10: 0a 64 6f 5f 74 65 73 74 20 72 74 72 65 65 2d 35  .do_test rtree-5
1a20: 2e 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.4 {.  execsql
1a30: 20 7b 20 0a 20 20 20 20 44 45 4c 45 54 45 20 46   { .    DELETE F
1a40: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 69 69 3d  ROM t2 WHERE ii=
1a50: 31 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  1;.    SELECT * 
1a60: 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42 59  FROM t2 ORDER BY
1a70: 20 69 69 3b 0a 20 20 7d 0a 7d 20 7b 33 20 35 30   ii;.  }.} {3 50
1a80: 2e 30 20 36 30 2e 30 7d 0a 64 6f 5f 74 65 73 74  .0 60.0}.do_test
1a90: 20 72 74 72 65 65 2d 35 2e 31 2e 35 20 7b 0a 20   rtree-5.1.5 {. 
1aa0: 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20   execsql { .    
1ab0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 32 20 57  DELETE FROM t2 W
1ac0: 48 45 52 45 20 69 69 3d 33 3b 0a 20 20 20 20 53  HERE ii=3;.    S
1ad0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20  ELECT * FROM t2 
1ae0: 4f 52 44 45 52 20 42 59 20 69 69 3b 0a 20 20 7d  ORDER BY ii;.  }
1af0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 74  .} {}.do_test rt
1b00: 72 65 65 2d 35 2e 31 2e 36 20 7b 0a 20 20 65 78  ree-5.1.6 {.  ex
1b10: 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a  ecsql { SELECT *
1b20: 20 46 52 4f 4d 20 74 32 5f 72 6f 77 69 64 20 7d   FROM t2_rowid }
1b30: 0a 7d 20 7b 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  .} {}..#--------
1b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1b50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1b60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1b70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1b80: 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63 61 73 65  ----.# Test case
1b90: 73 20 72 74 72 65 65 2d 35 2e 2a 20 74 65 73 74  s rtree-5.* test
1ba0: 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f   UPDATE operatio
1bb0: 6e 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 72 74  ns..#.do_test rt
1bc0: 72 65 65 2d 36 2e 31 2e 31 20 7b 0a 20 20 65 78  ree-6.1.1 {.  ex
1bd0: 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20 56  ecsql { CREATE V
1be0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 33 20  IRTUAL TABLE t3 
1bf0: 55 53 49 4e 47 20 72 74 72 65 65 28 69 69 2c 20  USING rtree(ii, 
1c00: 78 31 2c 20 78 32 2c 20 79 31 2c 20 79 32 29 20  x1, x2, y1, y2) 
1c10: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 72  }.} {}.do_test r
1c20: 74 72 65 65 2d 36 2e 31 2e 32 20 7b 0a 20 20 65  tree-6.1.2 {.  e
1c30: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53  xecsql {.    INS
1c40: 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55  ERT INTO t3 VALU
1c50: 45 53 28 31 2c 20 32 2c 20 33 2c 20 34 2c 20 35  ES(1, 2, 3, 4, 5
1c60: 29 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74 33  );.    UPDATE t3
1c70: 20 53 45 54 20 78 32 3d 35 3b 0a 20 20 20 20 53   SET x2=5;.    S
1c80: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 3b  ELECT * FROM t3;
1c90: 0a 20 20 7d 0a 7d 20 7b 31 20 32 2e 30 20 35 2e  .  }.} {1 2.0 5.
1ca0: 30 20 34 2e 30 20 35 2e 30 7d 0a 64 6f 5f 74 65  0 4.0 5.0}.do_te
1cb0: 73 74 20 72 74 72 65 65 2d 36 2e 31 2e 33 20 7b  st rtree-6.1.3 {
1cc0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 55 50 44  .  execsql { UPD
1cd0: 41 54 45 20 74 33 20 53 45 54 20 69 69 20 3d 20  ATE t3 SET ii = 
1ce0: 32 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  2 }.  execsql { 
1cf0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
1d00: 20 7d 0a 7d 20 7b 32 20 32 2e 30 20 35 2e 30 20   }.} {2 2.0 5.0 
1d10: 34 2e 30 20 35 2e 30 7d 0a 0a 23 2d 2d 2d 2d 2d  4.0 5.0}..#-----
1d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1d30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1d40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1d50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1d60: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63  -------.# Test c
1d70: 61 73 65 73 20 72 74 72 65 65 2d 37 2e 2a 20 74  ases rtree-7.* t
1d80: 65 73 74 20 72 65 6e 61 6d 65 20 6f 70 65 72 61  est rename opera
1d90: 74 69 6f 6e 73 2e 0a 23 0a 64 6f 5f 74 65 73 74  tions..#.do_test
1da0: 20 72 74 72 65 65 2d 37 2e 31 2e 31 20 7b 0a 20   rtree-7.1.1 {. 
1db0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
1dc0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
1dd0: 42 4c 45 20 74 34 20 55 53 49 4e 47 20 72 74 72  BLE t4 USING rtr
1de0: 65 65 28 69 69 2c 20 78 31 2c 20 78 32 2c 20 79  ee(ii, x1, x2, y
1df0: 31 2c 20 79 32 2c 20 7a 31 2c 20 7a 32 29 3b 0a  1, y2, z1, z2);.
1e00: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1e10: 74 34 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20  t4 VALUES(1, 2, 
1e20: 33 2c 20 34 2c 20 35 2c 20 36 2c 20 37 29 3b 0a  3, 4, 5, 6, 7);.
1e30: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
1e40: 20 72 74 72 65 65 2d 37 2e 31 2e 32 20 7b 0a 20   rtree-7.1.2 {. 
1e50: 20 65 78 65 63 73 71 6c 20 7b 20 41 4c 54 45 52   execsql { ALTER
1e60: 20 54 41 42 4c 45 20 74 34 20 52 45 4e 41 4d 45   TABLE t4 RENAME
1e70: 20 54 4f 20 74 35 20 7d 0a 20 20 65 78 65 63 73   TO t5 }.  execs
1e80: 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52  ql { SELECT * FR
1e90: 4f 4d 20 74 35 20 7d 0a 7d 20 7b 31 20 32 2e 30  OM t5 }.} {1 2.0
1ea0: 20 33 2e 30 20 34 2e 30 20 35 2e 30 20 36 2e 30   3.0 4.0 5.0 6.0
1eb0: 20 37 2e 30 7d 0a 64 6f 5f 74 65 73 74 20 72 74   7.0}.do_test rt
1ec0: 72 65 65 2d 37 2e 31 2e 33 20 7b 0a 20 20 64 62  ree-7.1.3 {.  db
1ed0: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
1ee0: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
1ef0: 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a  ecsql { SELECT *
1f00: 20 46 52 4f 4d 20 74 35 20 7d 0a 7d 20 7b 31 20   FROM t5 }.} {1 
1f10: 32 2e 30 20 33 2e 30 20 34 2e 30 20 35 2e 30 20  2.0 3.0 4.0 5.0 
1f20: 36 2e 30 20 37 2e 30 7d 0a 64 6f 5f 74 65 73 74  6.0 7.0}.do_test
1f30: 20 72 74 72 65 65 2d 37 2e 31 2e 34 20 7b 0a 20   rtree-7.1.4 {. 
1f40: 20 65 78 65 63 73 71 6c 20 7b 20 41 4c 54 45 52   execsql { ALTER
1f50: 20 54 41 42 4c 45 20 74 35 20 52 45 4e 41 4d 45   TABLE t5 RENAME
1f60: 20 54 4f 20 27 72 61 69 73 61 72 61 20 22 6f 6e   TO 'raisara "on
1f70: 65 22 27 27 27 7d 0a 20 20 65 78 65 63 73 71 6c  e"'''}.  execsql
1f80: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
1f90: 20 22 72 61 69 73 61 72 61 20 22 22 6f 6e 65 22   "raisara ""one"
1fa0: 22 27 22 20 7d 0a 7d 20 7b 31 20 32 2e 30 20 33  "'" }.} {1 2.0 3
1fb0: 2e 30 20 34 2e 30 20 35 2e 30 20 36 2e 30 20 37  .0 4.0 5.0 6.0 7
1fc0: 2e 30 7d 0a 64 6f 5f 74 65 73 74 20 72 74 72 65  .0}.do_test rtre
1fd0: 65 2d 37 2e 31 2e 35 20 7b 0a 20 20 65 78 65 63  e-7.1.5 {.  exec
1fe0: 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20 46  sql { SELECT * F
1ff0: 52 4f 4d 20 27 72 61 69 73 61 72 61 20 22 6f 6e  ROM 'raisara "on
2000: 65 22 27 27 27 20 7d 0a 7d 20 7b 31 20 32 2e 30  e"''' }.} {1 2.0
2010: 20 33 2e 30 20 34 2e 30 20 35 2e 30 20 36 2e 30   3.0 4.0 5.0 6.0
2020: 20 37 2e 30 7d 0a 64 6f 5f 74 65 73 74 20 72 74   7.0}.do_test rt
2030: 72 65 65 2d 37 2e 31 2e 36 20 7b 0a 20 20 65 78  ree-7.1.6 {.  ex
2040: 65 63 73 71 6c 20 7b 20 41 4c 54 45 52 20 54 41  ecsql { ALTER TA
2050: 42 4c 45 20 22 72 61 69 73 61 72 61 20 22 22 6f  BLE "raisara ""o
2060: 6e 65 22 22 27 22 20 52 45 4e 41 4d 45 20 54 4f  ne""'" RENAME TO
2070: 20 22 61 62 63 20 31 32 33 22 20 7d 0a 20 20 65   "abc 123" }.  e
2080: 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20  xecsql { SELECT 
2090: 2a 20 46 52 4f 4d 20 22 61 62 63 20 31 32 33 22  * FROM "abc 123"
20a0: 20 7d 0a 7d 20 7b 31 20 32 2e 30 20 33 2e 30 20   }.} {1 2.0 3.0 
20b0: 34 2e 30 20 35 2e 30 20 36 2e 30 20 37 2e 30 7d  4.0 5.0 6.0 7.0}
20c0: 0a 64 6f 5f 74 65 73 74 20 72 74 72 65 65 2d 37  .do_test rtree-7
20d0: 2e 31 2e 37 20 7b 0a 20 20 64 62 20 63 6c 6f 73  .1.7 {.  db clos
20e0: 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  e.  sqlite3 db t
20f0: 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c  est.db.  execsql
2100: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
2110: 20 22 61 62 63 20 31 32 33 22 20 7d 0a 7d 20 7b   "abc 123" }.} {
2120: 31 20 32 2e 30 20 33 2e 30 20 34 2e 30 20 35 2e  1 2.0 3.0 4.0 5.
2130: 30 20 36 2e 30 20 37 2e 30 7d 0a 0a 23 20 41 6e  0 6.0 7.0}..# An
2140: 20 65 72 72 6f 72 20 6d 69 64 77 61 79 20 74 68   error midway th
2150: 72 6f 75 67 68 20 61 20 72 65 6e 61 6d 65 20 6f  rough a rename o
2160: 70 65 72 61 74 69 6f 6e 2e 0a 64 6f 5f 74 65 73  peration..do_tes
2170: 74 20 72 74 72 65 65 2d 37 2e 32 2e 31 20 7b 0a  t rtree-7.2.1 {.
2180: 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20    execsql { .   
2190: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34   CREATE TABLE t4
21a0: 5f 6e 6f 64 65 28 61 29 3b 0a 20 20 7d 0a 20 20  _node(a);.  }.  
21b0: 63 61 74 63 68 73 71 6c 20 7b 20 41 4c 54 45 52  catchsql { ALTER
21c0: 20 54 41 42 4c 45 20 22 61 62 63 20 31 32 33 22   TABLE "abc 123"
21d0: 20 52 45 4e 41 4d 45 20 54 4f 20 74 34 20 7d 0a   RENAME TO t4 }.
21e0: 7d 20 7b 31 20 7b 53 51 4c 20 6c 6f 67 69 63 20  } {1 {SQL logic 
21f0: 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67  error or missing
2200: 20 64 61 74 61 62 61 73 65 7d 7d 0a 64 6f 5f 74   database}}.do_t
2210: 65 73 74 20 72 74 72 65 65 2d 37 2e 32 2e 32 20  est rtree-7.2.2 
2220: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45  {.  execsql { SE
2230: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 22 61 62 63  LECT * FROM "abc
2240: 20 31 32 33 22 20 7d 0a 7d 20 7b 31 20 32 2e 30   123" }.} {1 2.0
2250: 20 33 2e 30 20 34 2e 30 20 35 2e 30 20 36 2e 30   3.0 4.0 5.0 6.0
2260: 20 37 2e 30 7d 0a 64 6f 5f 74 65 73 74 20 72 74   7.0}.do_test rt
2270: 72 65 65 2d 37 2e 32 2e 33 20 7b 0a 20 20 65 78  ree-7.2.3 {.  ex
2280: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 44 52 4f  ecsql { .    DRO
2290: 50 20 54 41 42 4c 45 20 74 34 5f 6e 6f 64 65 3b  P TABLE t4_node;
22a0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
22b0: 45 20 74 34 5f 72 6f 77 69 64 28 61 29 3b 0a 20  E t4_rowid(a);. 
22c0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20   }.  catchsql { 
22d0: 41 4c 54 45 52 20 54 41 42 4c 45 20 22 61 62 63  ALTER TABLE "abc
22e0: 20 31 32 33 22 20 52 45 4e 41 4d 45 20 54 4f 20   123" RENAME TO 
22f0: 74 34 20 7d 0a 7d 20 7b 31 20 7b 53 51 4c 20 6c  t4 }.} {1 {SQL l
2300: 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20 6d 69  ogic error or mi
2310: 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 7d 7d  ssing database}}
2320: 0a 64 6f 5f 74 65 73 74 20 72 74 72 65 65 2d 37  .do_test rtree-7
2330: 2e 32 2e 34 20 7b 0a 20 20 64 62 20 63 6c 6f 73  .2.4 {.  db clos
2340: 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  e.  sqlite3 db t
2350: 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c  est.db.  execsql
2360: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
2370: 20 22 61 62 63 20 31 32 33 22 20 7d 0a 7d 20 7b   "abc 123" }.} {
2380: 31 20 32 2e 30 20 33 2e 30 20 34 2e 30 20 35 2e  1 2.0 3.0 4.0 5.
2390: 30 20 36 2e 30 20 37 2e 30 7d 0a 64 6f 5f 74 65  0 6.0 7.0}.do_te
23a0: 73 74 20 72 74 72 65 65 2d 37 2e 32 2e 35 20 7b  st rtree-7.2.5 {
23b0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 44 52 4f  .  execsql { DRO
23c0: 50 20 54 41 42 4c 45 20 74 34 5f 72 6f 77 69 64  P TABLE t4_rowid
23d0: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 41   }.  execsql { A
23e0: 4c 54 45 52 20 54 41 42 4c 45 20 22 61 62 63 20  LTER TABLE "abc 
23f0: 31 32 33 22 20 52 45 4e 41 4d 45 20 54 4f 20 74  123" RENAME TO t
2400: 34 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  4 }.  execsql { 
2410: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34  SELECT * FROM t4
2420: 20 7d 0a 7d 20 7b 31 20 32 2e 30 20 33 2e 30 20   }.} {1 2.0 3.0 
2430: 34 2e 30 20 35 2e 30 20 36 2e 30 20 37 2e 30 7d  4.0 5.0 6.0 7.0}
2440: 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ...#------------
2450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2490: 0a 23 20 54 65 73 74 20 63 61 73 65 73 20 72 74  .# Test cases rt
24a0: 72 65 65 2d 38 2e 2a 0a 23 0a 0a 23 20 54 65 73  ree-8.*.#..# Tes
24b0: 74 20 74 68 61 74 20 74 68 65 20 66 75 6e 63 74  t that the funct
24c0: 69 6f 6e 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ion to determine
24d0: 20 69 66 20 61 20 6c 65 61 66 20 63 65 6c 6c 20   if a leaf cell 
24e0: 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a 23  is part of the.#
24f0: 20 72 65 73 75 6c 74 20 73 65 74 20 77 6f 72 6b   result set work
2500: 73 2e 0a 64 6f 5f 74 65 73 74 20 72 74 72 65 65  s..do_test rtree
2510: 2d 38 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63 73  -8.1.1 {.  execs
2520: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
2530: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 36  VIRTUAL TABLE t6
2540: 20 55 53 49 4e 47 20 72 74 72 65 65 28 69 69 2c   USING rtree(ii,
2550: 20 78 31 2c 20 78 32 29 3b 0a 20 20 20 20 49 4e   x1, x2);.    IN
2560: 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56 41 4c  SERT INTO t6 VAL
2570: 55 45 53 28 31 2c 20 33 2c 20 37 29 3b 0a 20 20  UES(1, 3, 7);.  
2580: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36    INSERT INTO t6
2590: 20 56 41 4c 55 45 53 28 32 2c 20 34 2c 20 36 29   VALUES(2, 4, 6)
25a0: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
25b0: 73 74 20 72 74 72 65 65 2d 38 2e 31 2e 32 20 7b  st rtree-8.1.2 {
25c0: 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43   execsql { SELEC
25d0: 54 20 69 69 20 46 52 4f 4d 20 74 36 20 57 48 45  T ii FROM t6 WHE
25e0: 52 45 20 78 31 3e 32 20 7d 20 7d 20 7b 31 20 32  RE x1>2 } } {1 2
25f0: 7d 0a 64 6f 5f 74 65 73 74 20 72 74 72 65 65 2d  }.do_test rtree-
2600: 38 2e 31 2e 33 20 7b 20 65 78 65 63 73 71 6c 20  8.1.3 { execsql 
2610: 7b 20 53 45 4c 45 43 54 20 69 69 20 46 52 4f 4d  { SELECT ii FROM
2620: 20 74 36 20 57 48 45 52 45 20 78 31 3e 33 20 7d   t6 WHERE x1>3 }
2630: 20 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 72   } {2}.do_test r
2640: 74 72 65 65 2d 38 2e 31 2e 34 20 7b 20 65 78 65  tree-8.1.4 { exe
2650: 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 69 69  csql { SELECT ii
2660: 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 78   FROM t6 WHERE x
2670: 31 3e 34 20 7d 20 7d 20 7b 7d 0a 64 6f 5f 74 65  1>4 } } {}.do_te
2680: 73 74 20 72 74 72 65 65 2d 38 2e 31 2e 35 20 7b  st rtree-8.1.5 {
2690: 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43   execsql { SELEC
26a0: 54 20 69 69 20 46 52 4f 4d 20 74 36 20 57 48 45  T ii FROM t6 WHE
26b0: 52 45 20 78 31 3e 35 20 7d 20 7d 20 7b 7d 0a 64  RE x1>5 } } {}.d
26c0: 6f 5f 74 65 73 74 20 72 74 72 65 65 2d 38 2e 31  o_test rtree-8.1
26d0: 2e 36 20 7b 20 65 78 65 63 73 71 6c 20 7b 20 53  .6 { execsql { S
26e0: 45 4c 45 43 54 20 69 69 20 46 52 4f 4d 20 74 36  ELECT ii FROM t6
26f0: 20 57 48 45 52 45 20 78 31 3c 33 20 7d 20 7d 20   WHERE x1<3 } } 
2700: 7b 7d 0a 64 6f 5f 74 65 73 74 20 72 74 72 65 65  {}.do_test rtree
2710: 2d 38 2e 31 2e 37 20 7b 20 65 78 65 63 73 71 6c  -8.1.7 { execsql
2720: 20 7b 20 53 45 4c 45 43 54 20 69 69 20 46 52 4f   { SELECT ii FRO
2730: 4d 20 74 36 20 57 48 45 52 45 20 78 31 3c 34 20  M t6 WHERE x1<4 
2740: 7d 20 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  } } {1}.do_test 
2750: 72 74 72 65 65 2d 38 2e 31 2e 38 20 7b 20 65 78  rtree-8.1.8 { ex
2760: 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 69  ecsql { SELECT i
2770: 69 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20  i FROM t6 WHERE 
2780: 78 31 3c 35 20 7d 20 7d 20 7b 31 20 32 7d 0a 0a  x1<5 } } {1 2}..
2790: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
27a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
27b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
27c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
27d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
27e0: 54 65 73 74 20 63 61 73 65 73 20 72 74 72 65 65  Test cases rtree
27f0: 2d 39 2e 2a 0a 23 0a 23 20 54 65 73 74 20 74 68  -9.*.#.# Test th
2800: 61 74 20 74 69 63 6b 65 74 20 23 33 35 34 39 20  at ticket #3549 
2810: 69 73 20 66 69 78 65 64 2e 0a 64 6f 5f 74 65 73  is fixed..do_tes
2820: 74 20 72 74 72 65 65 2d 39 2e 31 20 7b 0a 20 20  t rtree-9.1 {.  
2830: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
2840: 45 41 54 45 20 54 41 42 4c 45 20 66 6f 6f 20 28  EATE TABLE foo (
2850: 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  id INTEGER PRIMA
2860: 52 59 20 4b 45 59 29 3b 0a 20 20 20 20 43 52 45  RY KEY);.    CRE
2870: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
2880: 45 20 62 61 72 20 55 53 49 4e 47 20 72 74 72 65  E bar USING rtre
2890: 65 20 28 69 64 2c 20 6d 69 6e 58 2c 20 6d 61 78  e (id, minX, max
28a0: 58 2c 20 6d 69 6e 59 2c 20 6d 61 78 59 29 3b 0a  X, minY, maxY);.
28b0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
28c0: 66 6f 6f 20 56 41 4c 55 45 53 20 28 6e 75 6c 6c  foo VALUES (null
28d0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
28e0: 54 4f 20 66 6f 6f 20 53 45 4c 45 43 54 20 6e 75  TO foo SELECT nu
28f0: 6c 6c 20 46 52 4f 4d 20 66 6f 6f 3b 0a 20 20 20  ll FROM foo;.   
2900: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 6f 6f   INSERT INTO foo
2910: 20 53 45 4c 45 43 54 20 6e 75 6c 6c 20 46 52 4f   SELECT null FRO
2920: 4d 20 66 6f 6f 3b 0a 20 20 20 20 49 4e 53 45 52  M foo;.    INSER
2930: 54 20 49 4e 54 4f 20 66 6f 6f 20 53 45 4c 45 43  T INTO foo SELEC
2940: 54 20 6e 75 6c 6c 20 46 52 4f 4d 20 66 6f 6f 3b  T null FROM foo;
2950: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
2960: 20 66 6f 6f 20 53 45 4c 45 43 54 20 6e 75 6c 6c   foo SELECT null
2970: 20 46 52 4f 4d 20 66 6f 6f 3b 0a 20 20 20 20 49   FROM foo;.    I
2980: 4e 53 45 52 54 20 49 4e 54 4f 20 66 6f 6f 20 53  NSERT INTO foo S
2990: 45 4c 45 43 54 20 6e 75 6c 6c 20 46 52 4f 4d 20  ELECT null FROM 
29a0: 66 6f 6f 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  foo;.    INSERT 
29b0: 49 4e 54 4f 20 66 6f 6f 20 53 45 4c 45 43 54 20  INTO foo SELECT 
29c0: 6e 75 6c 6c 20 46 52 4f 4d 20 66 6f 6f 3b 0a 20  null FROM foo;. 
29d0: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 66     DELETE FROM f
29e0: 6f 6f 20 57 48 45 52 45 20 69 64 20 3e 20 34 30  oo WHERE id > 40
29f0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2a00: 4f 20 62 61 72 20 53 45 4c 45 43 54 20 4e 55 4c  O bar SELECT NUL
2a10: 4c 2c 20 30 2c 20 30 2c 20 30 2c 20 30 20 46 52  L, 0, 0, 0, 0 FR
2a20: 4f 4d 20 66 6f 6f 3b 0a 20 20 7d 0a 7d 20 7b 7d  OM foo;.  }.} {}
2a30: 0a 0a 23 20 54 68 69 73 20 75 73 65 64 20 74 6f  ..# This used to
2a40: 20 63 72 61 73 68 2e 0a 64 6f 5f 74 65 73 74 20   crash..do_test 
2a50: 72 74 72 65 65 2d 39 2e 32 20 7b 0a 20 20 65 78  rtree-9.2 {.  ex
2a60: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
2a70: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
2a80: 20 62 61 72 20 62 31 2c 20 62 61 72 20 62 32 2c   bar b1, bar b2,
2a90: 20 66 6f 6f 20 73 31 20 57 48 45 52 45 20 73 31   foo s1 WHERE s1
2aa0: 2e 69 64 20 3d 20 62 31 2e 69 64 3b 0a 20 20 7d  .id = b1.id;.  }
2ab0: 0a 7d 20 7b 31 36 30 30 7d 0a 64 6f 5f 74 65 73  .} {1600}.do_tes
2ac0: 74 20 72 74 72 65 65 2d 39 2e 33 20 7b 0a 20 20  t rtree-9.3 {.  
2ad0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
2ae0: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
2af0: 4f 4d 20 62 61 72 20 62 31 2c 20 62 61 72 20 62  OM bar b1, bar b
2b00: 32 2c 20 66 6f 6f 20 73 31 20 0a 20 20 20 20 57  2, foo s1 .    W
2b10: 48 45 52 45 20 62 31 2e 6d 69 6e 58 20 3c 3d 20  HERE b1.minX <= 
2b20: 62 32 2e 6d 61 78 58 20 41 4e 44 20 73 31 2e 69  b2.maxX AND s1.i
2b30: 64 20 3d 20 62 31 2e 69 64 3b 0a 20 20 7d 0a 7d  d = b1.id;.  }.}
2b40: 20 7b 31 36 30 30 7d 0a 0a 66 69 6e 69 73 68 5f   {1600}..finish_
2b50: 74 65 73 74 0a                                   test.