Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a reference counting bug in rtree. Ticket #3549. (CVS 6054) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
bbdc0e9f2481f8d59e05ea282b615f97 |
User & Date: | danielk1977 2008-12-22 15:04:32.000 |
Context
2008-12-23
| ||
10:37 | Fix a couple of assert() failures that can occur in btree.c and pager.c. (CVS 6055) (check-in: ae44e74824 user: danielk1977 tags: trunk) | |
2008-12-22
| ||
15:04 | Fix a reference counting bug in rtree. Ticket #3549. (CVS 6054) (check-in: bbdc0e9f24 user: danielk1977 tags: trunk) | |
11:43 | Changes to test scripts so that veryquick.test runs with SQLITE_TEMP_STORE=3 defined. Also a fix to stop the same switch causing a crash in the savepoint code. (CVS 6053) (check-in: ee0e6eae9f user: danielk1977 tags: trunk) | |
Changes
Changes to ext/rtree/rtree.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file contains code for implementations of the r-tree and r*-tree ** algorithms packaged as an SQLite virtual table module. ** | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file contains code for implementations of the r-tree and r*-tree ** algorithms packaged as an SQLite virtual table module. ** ** $Id: rtree.c,v 1.12 2008/12/22 15:04:32 danielk1977 Exp $ */ #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_RTREE) /* ** This file contains an implementation of a couple of different variants ** of the r-tree algorithm. See the README file for further details. The |
︙ | ︙ | |||
396 397 398 399 400 401 402 | RtreeNode *pNode; /* Check if the requested node is already in the hash table. If so, ** increase its reference count and return it. */ if( (pNode = nodeHashLookup(pRtree, iNode)) ){ assert( !pParent || !pNode->pParent || pNode->pParent==pParent ); | | > | 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 | RtreeNode *pNode; /* Check if the requested node is already in the hash table. If so, ** increase its reference count and return it. */ if( (pNode = nodeHashLookup(pRtree, iNode)) ){ assert( !pParent || !pNode->pParent || pNode->pParent==pParent ); if( pParent && !pNode->pParent ){ nodeReference(pParent); pNode->pParent = pParent; } pNode->nRef++; *ppNode = pNode; return SQLITE_OK; } |
︙ | ︙ |
Changes to ext/rtree/rtree1.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2008 Feb 19 # # 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. # #*********************************************************************** # # The focus of this file is testing the r-tree extension. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2008 Feb 19 # # 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. # #*********************************************************************** # # The focus of this file is testing the r-tree extension. # # $Id: rtree1.test,v 1.6 2008/12/22 15:04:32 danielk1977 Exp $ # if {![info exists testdir]} { set testdir [file join [file dirname $argv0] .. .. test] } source [file join [file dirname [info script]] rtree_util.tcl] source $testdir/tester.tcl |
︙ | ︙ | |||
356 357 358 359 360 361 362 | do_test rtree-8.1.3 { execsql { SELECT ii FROM t6 WHERE x1>3 } } {2} do_test rtree-8.1.4 { execsql { SELECT ii FROM t6 WHERE x1>4 } } {} do_test rtree-8.1.5 { execsql { SELECT ii FROM t6 WHERE x1>5 } } {} do_test rtree-8.1.6 { execsql { SELECT ii FROM t6 WHERE x1<3 } } {} do_test rtree-8.1.7 { execsql { SELECT ii FROM t6 WHERE x1<4 } } {1} do_test rtree-8.1.8 { execsql { SELECT ii FROM t6 WHERE x1<5 } } {1 2} | > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 | do_test rtree-8.1.3 { execsql { SELECT ii FROM t6 WHERE x1>3 } } {2} do_test rtree-8.1.4 { execsql { SELECT ii FROM t6 WHERE x1>4 } } {} do_test rtree-8.1.5 { execsql { SELECT ii FROM t6 WHERE x1>5 } } {} do_test rtree-8.1.6 { execsql { SELECT ii FROM t6 WHERE x1<3 } } {} do_test rtree-8.1.7 { execsql { SELECT ii FROM t6 WHERE x1<4 } } {1} do_test rtree-8.1.8 { execsql { SELECT ii FROM t6 WHERE x1<5 } } {1 2} #---------------------------------------------------------------------------- # Test cases rtree-9.* # # Test that ticket #3549 is fixed. do_test rtree-9.1 { execsql { CREATE TABLE foo (id INTEGER PRIMARY KEY); CREATE VIRTUAL TABLE bar USING rtree (id, minX, maxX, minY, maxY); INSERT INTO foo VALUES (null); INSERT INTO foo SELECT null FROM foo; INSERT INTO foo SELECT null FROM foo; INSERT INTO foo SELECT null FROM foo; INSERT INTO foo SELECT null FROM foo; INSERT INTO foo SELECT null FROM foo; INSERT INTO foo SELECT null FROM foo; DELETE FROM foo WHERE id > 40; INSERT INTO bar SELECT NULL, 0, 0, 0, 0 FROM foo; } } {} # This used to crash. do_test rtree-9.2 { execsql { SELECT count(*) FROM bar b1, bar b2, foo s1 WHERE s1.id = b1.id; } } {1600} do_test rtree-9.3 { execsql { SELECT count(*) FROM bar b1, bar b2, foo s1 WHERE b1.minX <= b2.maxX AND s1.id = b1.id; } } {1600} finish_test |