mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +03:00
Performance optimizations in the rtreeStepToLeaf() routine of RTree.
FossilOrigin-Name: 4e34e3615ff31f4a6432033797b2e1a6604007ea0e501d714ecb362632776150
This commit is contained in:
@ -1564,13 +1564,14 @@ static int rtreeStepToLeaf(RtreeCursor *pCur){
|
||||
|
||||
eInt = pRtree->eCoordType==RTREE_COORD_INT32;
|
||||
while( (p = rtreeSearchPointFirst(pCur))!=0 && p->iLevel>0 ){
|
||||
u8 *pCellData;
|
||||
pNode = rtreeNodeOfFirstSearchPoint(pCur, &rc);
|
||||
if( rc ) return rc;
|
||||
nCell = NCELL(pNode);
|
||||
assert( nCell<200 );
|
||||
pCellData = pNode->zData + (4+pRtree->nBytesPerCell*p->iCell);
|
||||
while( p->iCell<nCell ){
|
||||
sqlite3_rtree_dbl rScore = (sqlite3_rtree_dbl)-1;
|
||||
u8 *pCellData = pNode->zData + (4+pRtree->nBytesPerCell*p->iCell);
|
||||
eWithin = FULLY_WITHIN;
|
||||
for(ii=0; ii<nConstraint; ii++){
|
||||
RtreeConstraint *pConstraint = pCur->aConstraint + ii;
|
||||
@ -1583,10 +1584,14 @@ static int rtreeStepToLeaf(RtreeCursor *pCur){
|
||||
}else{
|
||||
rtreeNonleafConstraint(pConstraint, eInt, pCellData, &eWithin);
|
||||
}
|
||||
if( eWithin==NOT_WITHIN ) break;
|
||||
if( eWithin==NOT_WITHIN ){
|
||||
p->iCell++;
|
||||
pCellData += pRtree->nBytesPerCell;
|
||||
break;
|
||||
}
|
||||
}
|
||||
p->iCell++;
|
||||
if( eWithin==NOT_WITHIN ) continue;
|
||||
p->iCell++;
|
||||
x.iLevel = p->iLevel - 1;
|
||||
if( x.iLevel ){
|
||||
x.id = readInt64(pCellData);
|
||||
|
Reference in New Issue
Block a user