goto splitnode_out;
}
- /* Ensure both child nodes have node numbers assigned to them. */
- if( (0==pRight->iNode && SQLITE_OK!=(rc = nodeWrite(pRtree, pRight)))
+ /* Ensure both child nodes have node numbers assigned to them by calling
+ ** nodeWrite(). Node pRight always needs a node number, as it was created
+ ** by nodeNew() above. But node pLeft sometimes already has a node number.
+ ** In this case avoid the all to nodeWrite().
+ */
+ if( SQLITE_OK!=(rc = nodeWrite(pRtree, pRight))
|| (0==pLeft->iNode && SQLITE_OK!=(rc = nodeWrite(pRtree, pLeft)))
){
goto splitnode_out;
static int fixLeafParent(Rtree *pRtree, RtreeNode *pLeaf){
int rc = SQLITE_OK;
if( pLeaf->iNode!=1 && pLeaf->pParent==0 ){
+ int rc2; /* sqlite3_reset() return code */
sqlite3_bind_int64(pRtree->pReadParent, 1, pLeaf->iNode);
- if( sqlite3_step(pRtree->pReadParent)==SQLITE_ROW ){
+ rc = sqlite3_step(pRtree->pReadParent);
+ if( rc==SQLITE_ROW ){
i64 iNode = sqlite3_column_int64(pRtree->pReadParent, 0);
rc = nodeAcquire(pRtree, iNode, 0, &pLeaf->pParent);
- }else{
- rc = SQLITE_ERROR;
+ }else if( rc==SQLITE_DONE ){
+ rc = SQLITE_CORRUPT;
+ }
+ rc2 = sqlite3_reset(pRtree->pReadParent);
+ if( rc==SQLITE_OK ){
+ rc = rc2;
}
- sqlite3_reset(pRtree->pReadParent);
if( rc==SQLITE_OK ){
rc = fixLeafParent(pRtree, pLeaf->pParent);
}
** function "rtreenode".
*/
int sqlite3RtreeInit(sqlite3 *db){
- int rc = SQLITE_OK;
+ const int utf8 = SQLITE_UTF8;
+ int rc;
- if( rc==SQLITE_OK ){
- int utf8 = SQLITE_UTF8;
- rc = sqlite3_create_function(db, "rtreenode", 2, utf8, 0, rtreenode, 0, 0);
- }
+ rc = sqlite3_create_function(db, "rtreenode", 2, utf8, 0, rtreenode, 0, 0);
if( rc==SQLITE_OK ){
int utf8 = SQLITE_UTF8;
rc = sqlite3_create_function(db, "rtreedepth", 1, utf8, 0,rtreedepth, 0, 0);
return
}
-if 1 {
-
do_faultsim_test rtree3-1 -faults oom* -prep {
faultsim_delete_and_reopen
} -body {
db eval COMMIT
}
-}
-
do_test rtree3-4.prep {
faultsim_delete_and_reopen
execsql {
faultsim_save_and_close
} {}
-do_faultsim_test rtree3-4 -faults oom-transient -prep {
+do_faultsim_test rtree3-4a -faults oom-transient -prep {
faultsim_restore_and_reopen
} -body {
db eval { SELECT count(*) FROM rt }
} -test {
faultsim_test_result {0 1500}
}
+do_faultsim_test rtree3-4b -faults oom-transient -prep {
+ faultsim_restore_and_reopen
+} -body {
+ db eval { DELETE FROM rt WHERE ii BETWEEN 880 AND 920 }
+} -test {
+ faultsim_test_result {0 {}}
+}
finish_test
} {1 {database disk image is malformed}}
do_execsql_test rtree8-2.1.6 {
- DELETE FROM t1_node;
- DELETE FROM t1_parent;
- DELETE FROM t1_rowid;
DROP TABLE t1;
CREATE VIRTUAL TABLE t1 USING rtree_i32(id, x1, x2);
} {}
+
+populate_t1 50
+do_execsql_test rtree8-2.2.1 {
+ DELETE FROM t1_parent
+} {}
+do_catchsql_test rtree8-2.2.2 {
+ DELETE FROM t1 WHERE id=25
+} {1 {database disk image is malformed}}
+do_execsql_test rtree8-2.2.3 {
+ DROP TABLE t1;
+ CREATE VIRTUAL TABLE t1 USING rtree_i32(id, x1, x2);
+} {}
+
+
#-------------------------------------------------------------------------
# Test that trying to use the MATCH operator with the r-tree module does
# not confuse it.
populate_t1 10
do_catchsql_test rtree8-3.1 {
SELECT * FROM t1 WHERE x1 MATCH '1234'
-} {1 {}}
+} {1 {unable to use function MATCH in the requested context}}
finish_test
-C Test\scases\sto\simprove\scoverage\sof\srtree\smodule.\sFixes\sassociated\swith\sthe\ssame.
-D 2010-08-25T17:53:17
+C Further\stest\scoverage\simprovements\sfor\srtree.c.
+D 2010-08-25T19:04:38
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 543f91f24cd7fee774ecc0a61c19704c0c3e78fd
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F ext/icu/icu.c 850e9a36567bbcce6bd85a4b68243cad8e3c2de2
F ext/icu/sqliteicu.h 728867a802baa5a96de7495e9689a8e01715ef37
F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761
-F ext/rtree/rtree.c 73a4df9b61bfdb39e29d9d8a9927d811bb0f3389
+F ext/rtree/rtree.c 586c8d6a72ff67060e3850d3a9ef86a85caf38dc
F ext/rtree/rtree.h 834dbcb82dc85b2481cde6a07cdadfddc99e9b9e
F ext/rtree/rtree1.test 51bb0cd0405970501e63258401ae5ad235a4f468
F ext/rtree/rtree2.test 47b90f549a59e667e9fb01338956ead6f66c8d9d
-F ext/rtree/rtree3.test 5ffcb3f44fe925e7a2e6e1960f3d2bf628683db3
+F ext/rtree/rtree3.test d2a408858ef14a2bf50ec2e7031c35782243b94d
F ext/rtree/rtree4.test 2adce44dc544f6eb570898c8d5270bdf6ca64bd8
F ext/rtree/rtree5.test 92508f5152a50110af6551fa5b769d1bbd7c4ef3
F ext/rtree/rtree6.test 903720aaab819764c3693aaac0affe8174104ac8
F ext/rtree/rtree7.test 6fd29fb8e13795c822f4ceeea92ab5d61c96976d
-F ext/rtree/rtree8.test d226534180f063924ee9d5500d43aebaeba28c7e
+F ext/rtree/rtree8.test 7ba5d3b6ce7bb75fcce41a0a2da8796b99b69b5b
F ext/rtree/rtree_perf.tcl 6c18c1f23cd48e0f948930c98dfdd37dfccb5195
F ext/rtree/rtree_util.tcl 06aab2ed5b826545bf215fff90ecb9255a8647ea
F ext/rtree/tkt3363.test 2bf324f7908084a5f463de3109db9c6e607feb1b
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P 40526d8390896ccb883c45afa70e7adb568d174f
-R 34bbfc350aec51a2c8611327e89641b5
+P 865cec04e4d814f63fb71feb67de7f06f8d54035
+R c8194745b3bd7fb8c0dc3d8838dec5f9
U dan
-Z ca03a4a4ecb8f93f6b9fcda928df5c52
+Z 5bf1b8b670d95aa442bbc4a1f760237b
-865cec04e4d814f63fb71feb67de7f06f8d54035
\ No newline at end of file
+05f6c1aebbe757dd3b54fd027057b9db7ae3a990
\ No newline at end of file