]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Further updates to rtreedoc.test.
authordan <Dan Kennedy>
Wed, 15 Sep 2021 15:53:01 +0000 (15:53 +0000)
committerdan <Dan Kennedy>
Wed, 15 Sep 2021 15:53:01 +0000 (15:53 +0000)
FossilOrigin-Name: e66727837ddd5d1344c252323d52600b6138f5a2471f63d09b5a28ea2c22e595

ext/rtree/rtreedoc.test
manifest
manifest.uuid

index c19a336ae21a2020dc54e261949fc32bdeb818e8..b2d37d6c1f255f59cfdb0f2627d0f163f15732f4 100644 (file)
@@ -1023,8 +1023,23 @@ proc rnode_contains {aData rowid} {
   return 0
 }
 
+proc rnode_replace_cell {aData iCell cell} {
+  set aCell [binary format WIIII {*}$cell]
+  set nDim 2
+  set nBytePerCell [expr (8 + 2*$nDim*4)]
+  set iOff [expr $iCell*$nBytePerCell+4]
+
+  set aNew [binary format a*a*a* \
+      [string range $aData 0 $iOff-1]     \
+      $aCell     \
+      [string range $aData $iOff+$nBytePerCell end] \
+  ]
+  return $aNew
+}
+
 db function rnode rnode
 db function rnode_contains rnode_contains
+db function rnode_replace_cell rnode_replace_cell
 
 foreach {tn nm} {
   1 x1
@@ -1136,6 +1151,10 @@ set testprefix rtreedoc-12
 reset_db
 forcedelete test.db2
 
+db function rnode rnode
+db function rnode_contains rnode_contains
+db function rnode_replace_cell rnode_replace_cell
+
 # EVIDENCE-OF: R-13571-45795 The scalar SQL function rtreecheck(R) or
 # rtreecheck(S,R) runs an integrity check on the rtree table named R
 # contained within database S.
@@ -1190,5 +1209,107 @@ do_execsql_test 2.2 {
   SELECT rtreecheck('demo_index');
 } {{Found (44 -> 44) in %_rowid table, expected (44 -> 4)}}
 
+
+do_execsql_test 3.0 {
+  CREATE VIRTUAL TABLE rt2 USING rtree_i32(id, a, b, c, d);
+  WITH s(i) AS (
+    VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<200
+  )
+  INSERT INTO rt2 SELECT i, i, i+2, i, i+2 FROM s;
+}
+
+# EVIDENCE-OF: R-02555-31045 for each dimension, (coord1 <= coord2).
+#
+execsql BEGIN
+do_test 3.1 {
+  set cell [
+    lindex [execsql {SELECT rnode(data) FROM rt2_node WHERE nodeno=3}] 0 3
+  ]
+  set cell [list [lindex $cell 0]       \
+    [lindex $cell 2] [lindex $cell 1]   \
+    [lindex $cell 3] [lindex $cell 4]   \
+  ]
+  execsql { 
+    UPDATE rt2_node SET data=rnode_replace_cell(data, 3, $cell) WHERE nodeno=3 
+  }
+  execsql { SELECT rtreecheck('rt2') }
+} {{Dimension 0 of cell 3 on node 3 is corrupt}}
+execsql ROLLBACK
+
+# EVIDENCE-OF: R-13844-15873 unless the cell is on the root node, that
+# the cell is bounded by the parent cell on the parent node.
+#
+execsql BEGIN
+do_test 3.2 {
+  set cell [
+    lindex [execsql {SELECT rnode(data) FROM rt2_node WHERE nodeno=3}] 0 3
+  ]
+  lset cell 3 450
+  lset cell 4 451
+  execsql { 
+    UPDATE rt2_node SET data=rnode_replace_cell(data, 3, $cell) WHERE nodeno=3 
+  }
+  execsql { SELECT rtreecheck('rt2') }
+} {{Dimension 1 of cell 3 on node 3 is corrupt relative to parent}}
+execsql ROLLBACK
+
+# EVIDENCE-OF: R-02505-03621 for leaf nodes, that there is an entry in
+# the %_rowid table corresponding to the cell's rowid value that points
+# to the correct node.
+#
+execsql BEGIN
+do_test 3.3 {
+  execsql { 
+    UPDATE rt2_rowid SET rowid=452 WHERE rowid=100
+  }
+  execsql { SELECT rtreecheck('rt2') }
+} {{Mapping (100 -> 6) missing from %_rowid table}}
+execsql ROLLBACK
+
+# EVIDENCE-OF: R-50927-02218 for cells on non-leaf nodes, that there is
+# an entry in the %_parent table mapping from the cell's child node to
+# the node that it resides on.
+#
+execsql BEGIN
+do_test 3.4.1 {
+  execsql { 
+    UPDATE rt2_parent SET parentnode=123 WHERE nodeno=3
+  }
+  execsql { SELECT rtreecheck('rt2') }
+} {{Found (3 -> 123) in %_parent table, expected (3 -> 1)}}
+execsql ROLLBACK
+execsql BEGIN
+do_test 3.4.2 {
+  execsql { 
+    UPDATE rt2_parent SET nodeno=123 WHERE nodeno=3
+  }
+  execsql { SELECT rtreecheck('rt2') }
+} {{Mapping (3 -> 1) missing from %_parent table}}
+execsql ROLLBACK
+
+# EVIDENCE-OF: R-23235-09153 That there are the same number of entries
+# in the %_rowid table as there are leaf cells in the r-tree structure,
+# and that there is a leaf cell that corresponds to each entry in the
+# %_rowid table.
+execsql BEGIN
+do_test 3.5 {
+  execsql { INSERT INTO rt2_rowid VALUES(1000, 1000) }
+  execsql { SELECT rtreecheck('rt2') }
+} {{Wrong number of entries in %_rowid table - expected 200, actual 201}}
+execsql ROLLBACK
+
+# EVIDENCE-OF: R-62800-43436 That there are the same number of entries
+# in the %_parent table as there are non-leaf cells in the r-tree
+# structure, and that there is a non-leaf cell that corresponds to each
+# entry in the %_parent table.
+execsql BEGIN
+do_test 3.6 {
+  execsql { INSERT INTO rt2_parent VALUES(1000, 1000) }
+  execsql { SELECT rtreecheck('rt2') }
+} {{Wrong number of entries in %_parent table - expected 9, actual 10}}
+execsql ROLLBACK
+
+
+
 finish_test
 
index cfc7426a6187d629731d56825f09725398eafc84..ee491ae1c0b96b5a07630fa7e84cb4e7ab38c018 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\snon-build\sfor\sa\stest\sconfiguration
-D 2021-09-15T14:48:02.836
+C Further\supdates\sto\srtreedoc.test.
+D 2021-09-15T15:53:01.779
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -418,7 +418,7 @@ F ext/rtree/rtree_util.tcl db734b4c5e75fed6acc56d9701f2235345acfdec750b5fc7b5879
 F ext/rtree/rtreecheck.test d67d5b3e9e45bfa8cd90734e8e9302144ac415b8e9176c6f02d4f92892ee8a35
 F ext/rtree/rtreecirc.test aec664eb21ae943aeb344191407afff5d392d3ae9d12b9a112ced0d9c5de298e
 F ext/rtree/rtreeconnect.test 225ad3fcb483d36cbee423a25052a6bbae762c9576ae9268332360c68c170d3d
-F ext/rtree/rtreedoc.test 91293ef6c10524d8c945ffc5be20732f62eb8b98f84615b44d46a20a74e9a561
+F ext/rtree/rtreedoc.test c914acfbb0b9ce23352c1d1218cb02ec0770db476af5e36d310a3a8d1950c5e1
 F ext/rtree/rtreefuzz001.test 0fc793f67897c250c5fde96cefee455a5e2fb92f4feeabde5b85ea02040790ee
 F ext/rtree/sqlite3rtree.h 03c8db3261e435fbddcfc961471795cbf12b24e03001d0015b2636b0f3881373
 F ext/rtree/tkt3363.test 142ab96eded44a3615ec79fba98c7bde7d0f96de
@@ -1923,7 +1923,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 0c4f37aa475bd4bd17c20c02ab2d9f63d0a6a08b0e2bbfa559f7b972ece6f4fc
-R 95a882d3b488c7d33842ae8cf3c458d0
-U larrybr
-Z d4230adb6305c9ccf882c75e49e654d2
+P c9a4ab059050a83d811149ff196ff16ea9e4c301627482800982b87cd30ddbbc
+R 643f236de9623efc217e1a933b077826
+U dan
+Z e83a55511fb15637419b1c82774942f2
index d9bf78c93970aa8e40ef4f5c9c4229967eccadf3..e1cf80a26ec9ebd25b0fbb1d83699d14d1f87a36 100644 (file)
@@ -1 +1 @@
-c9a4ab059050a83d811149ff196ff16ea9e4c301627482800982b87cd30ddbbc
\ No newline at end of file
+e66727837ddd5d1344c252323d52600b6138f5a2471f63d09b5a28ea2c22e595
\ No newline at end of file