pRtree 151231 ext/sqlite3/libsqlite/sqlite3.c (pRtree->eCoordType==RTREE_COORD_REAL32) ? \ pRtree 151407 ext/sqlite3/libsqlite/sqlite3.c static void nodeZero(Rtree *pRtree, RtreeNode *p){ pRtree 151408 ext/sqlite3/libsqlite/sqlite3.c memset(&p->zData[2], 0, pRtree->iNodeSize-2); pRtree 151424 ext/sqlite3/libsqlite/sqlite3.c static RtreeNode *nodeHashLookup(Rtree *pRtree, i64 iNode){ pRtree 151426 ext/sqlite3/libsqlite/sqlite3.c for(p=pRtree->aHash[nodeHash(iNode)]; p && p->iNode!=iNode; p=p->pNext); pRtree 151433 ext/sqlite3/libsqlite/sqlite3.c static void nodeHashInsert(Rtree *pRtree, RtreeNode *pNode){ pRtree 151437 ext/sqlite3/libsqlite/sqlite3.c pNode->pNext = pRtree->aHash[iHash]; pRtree 151438 ext/sqlite3/libsqlite/sqlite3.c pRtree->aHash[iHash] = pNode; pRtree 151444 ext/sqlite3/libsqlite/sqlite3.c static void nodeHashDelete(Rtree *pRtree, RtreeNode *pNode){ pRtree 151447 ext/sqlite3/libsqlite/sqlite3.c pp = &pRtree->aHash[nodeHash(pNode->iNode)]; pRtree 151460 ext/sqlite3/libsqlite/sqlite3.c static RtreeNode *nodeNew(Rtree *pRtree, RtreeNode *pParent){ pRtree 151462 ext/sqlite3/libsqlite/sqlite3.c pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode) + pRtree->iNodeSize); pRtree 151464 ext/sqlite3/libsqlite/sqlite3.c memset(pNode, 0, sizeof(RtreeNode) + pRtree->iNodeSize); pRtree 151478 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree, /* R-tree structure */ pRtree 151490 ext/sqlite3/libsqlite/sqlite3.c if( (pNode = nodeHashLookup(pRtree, iNode)) ){ pRtree 151501 ext/sqlite3/libsqlite/sqlite3.c sqlite3_bind_int64(pRtree->pReadNode, 1, iNode); pRtree 151502 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3_step(pRtree->pReadNode); pRtree 151504 ext/sqlite3/libsqlite/sqlite3.c const u8 *zBlob = sqlite3_column_blob(pRtree->pReadNode, 0); pRtree 151505 ext/sqlite3/libsqlite/sqlite3.c if( pRtree->iNodeSize==sqlite3_column_bytes(pRtree->pReadNode, 0) ){ pRtree 151506 ext/sqlite3/libsqlite/sqlite3.c pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode)+pRtree->iNodeSize); pRtree 151516 ext/sqlite3/libsqlite/sqlite3.c memcpy(pNode->zData, zBlob, pRtree->iNodeSize); pRtree 151521 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3_reset(pRtree->pReadNode); pRtree 151531 ext/sqlite3/libsqlite/sqlite3.c pRtree->iDepth = readInt16(pNode->zData); pRtree 151532 ext/sqlite3/libsqlite/sqlite3.c if( pRtree->iDepth>RTREE_MAX_DEPTH ){ pRtree 151542 ext/sqlite3/libsqlite/sqlite3.c if( NCELL(pNode)>((pRtree->iNodeSize-4)/pRtree->nBytesPerCell) ){ pRtree 151549 ext/sqlite3/libsqlite/sqlite3.c nodeHashInsert(pRtree, pNode); pRtree 151566 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree, /* The overall R-Tree */ pRtree 151572 ext/sqlite3/libsqlite/sqlite3.c u8 *p = &pNode->zData[4 + pRtree->nBytesPerCell*iCell]; pRtree 151574 ext/sqlite3/libsqlite/sqlite3.c for(ii=0; ii<(pRtree->nDim*2); ii++){ pRtree 151583 ext/sqlite3/libsqlite/sqlite3.c static void nodeDeleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell){ pRtree 151584 ext/sqlite3/libsqlite/sqlite3.c u8 *pDst = &pNode->zData[4 + pRtree->nBytesPerCell*iCell]; pRtree 151585 ext/sqlite3/libsqlite/sqlite3.c u8 *pSrc = &pDst[pRtree->nBytesPerCell]; pRtree 151586 ext/sqlite3/libsqlite/sqlite3.c int nByte = (NCELL(pNode) - iCell - 1) * pRtree->nBytesPerCell; pRtree 151599 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree, /* The overall R-Tree */ pRtree 151606 ext/sqlite3/libsqlite/sqlite3.c nMaxCell = (pRtree->iNodeSize-4)/pRtree->nBytesPerCell; pRtree 151611 ext/sqlite3/libsqlite/sqlite3.c nodeOverwriteCell(pRtree, pNode, pCell, nCell); pRtree 151622 ext/sqlite3/libsqlite/sqlite3.c static int nodeWrite(Rtree *pRtree, RtreeNode *pNode){ pRtree 151625 ext/sqlite3/libsqlite/sqlite3.c sqlite3_stmt *p = pRtree->pWriteNode; pRtree 151631 ext/sqlite3/libsqlite/sqlite3.c sqlite3_bind_blob(p, 2, pNode->zData, pRtree->iNodeSize, SQLITE_STATIC); pRtree 151636 ext/sqlite3/libsqlite/sqlite3.c pNode->iNode = sqlite3_last_insert_rowid(pRtree->db); pRtree 151637 ext/sqlite3/libsqlite/sqlite3.c nodeHashInsert(pRtree, pNode); pRtree 151647 ext/sqlite3/libsqlite/sqlite3.c static int nodeRelease(Rtree *pRtree, RtreeNode *pNode){ pRtree 151654 ext/sqlite3/libsqlite/sqlite3.c pRtree->iDepth = -1; pRtree 151657 ext/sqlite3/libsqlite/sqlite3.c rc = nodeRelease(pRtree, pNode->pParent); pRtree 151660 ext/sqlite3/libsqlite/sqlite3.c rc = nodeWrite(pRtree, pNode); pRtree 151662 ext/sqlite3/libsqlite/sqlite3.c nodeHashDelete(pRtree, pNode); pRtree 151675 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree, /* The overall R-Tree */ pRtree 151680 ext/sqlite3/libsqlite/sqlite3.c return readInt64(&pNode->zData[4 + pRtree->nBytesPerCell*iCell]); pRtree 151687 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree, /* The overall R-Tree */ pRtree 151693 ext/sqlite3/libsqlite/sqlite3.c readCoord(&pNode->zData[12 + pRtree->nBytesPerCell*iCell + 4*iCoord], pCoord); pRtree 151701 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree, /* The overall R-Tree */ pRtree 151709 ext/sqlite3/libsqlite/sqlite3.c pCell->iRowid = nodeGetRowid(pRtree, pNode, iCell); pRtree 151710 ext/sqlite3/libsqlite/sqlite3.c pData = pNode->zData + (12 + pRtree->nBytesPerCell*iCell); pRtree 151712 ext/sqlite3/libsqlite/sqlite3.c for(ii=0; ii<pRtree->nDim*2; ii++){ pRtree 151754 ext/sqlite3/libsqlite/sqlite3.c static void rtreeReference(Rtree *pRtree){ pRtree 151755 ext/sqlite3/libsqlite/sqlite3.c pRtree->nBusy++; pRtree 151762 ext/sqlite3/libsqlite/sqlite3.c static void rtreeRelease(Rtree *pRtree){ pRtree 151763 ext/sqlite3/libsqlite/sqlite3.c pRtree->nBusy--; pRtree 151764 ext/sqlite3/libsqlite/sqlite3.c if( pRtree->nBusy==0 ){ pRtree 151765 ext/sqlite3/libsqlite/sqlite3.c sqlite3_finalize(pRtree->pReadNode); pRtree 151766 ext/sqlite3/libsqlite/sqlite3.c sqlite3_finalize(pRtree->pWriteNode); pRtree 151767 ext/sqlite3/libsqlite/sqlite3.c sqlite3_finalize(pRtree->pDeleteNode); pRtree 151768 ext/sqlite3/libsqlite/sqlite3.c sqlite3_finalize(pRtree->pReadRowid); pRtree 151769 ext/sqlite3/libsqlite/sqlite3.c sqlite3_finalize(pRtree->pWriteRowid); pRtree 151770 ext/sqlite3/libsqlite/sqlite3.c sqlite3_finalize(pRtree->pDeleteRowid); pRtree 151771 ext/sqlite3/libsqlite/sqlite3.c sqlite3_finalize(pRtree->pReadParent); pRtree 151772 ext/sqlite3/libsqlite/sqlite3.c sqlite3_finalize(pRtree->pWriteParent); pRtree 151773 ext/sqlite3/libsqlite/sqlite3.c sqlite3_finalize(pRtree->pDeleteParent); pRtree 151774 ext/sqlite3/libsqlite/sqlite3.c sqlite3_free(pRtree); pRtree 151790 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree = (Rtree *)pVtab; pRtree 151796 ext/sqlite3/libsqlite/sqlite3.c pRtree->zDb, pRtree->zName, pRtree 151797 ext/sqlite3/libsqlite/sqlite3.c pRtree->zDb, pRtree->zName, pRtree 151798 ext/sqlite3/libsqlite/sqlite3.c pRtree->zDb, pRtree->zName pRtree 151803 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3_exec(pRtree->db, zCreate, 0, 0, 0); pRtree 151807 ext/sqlite3/libsqlite/sqlite3.c rtreeRelease(pRtree); pRtree 151854 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree = (Rtree *)(cur->pVtab); pRtree 151859 ext/sqlite3/libsqlite/sqlite3.c for(ii=0; ii<RTREE_CACHE_SZ; ii++) nodeRelease(pRtree, pCsr->aNode[ii]); pRtree 152037 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree, pRtree 152046 ext/sqlite3/libsqlite/sqlite3.c if( nodeGetRowid(pRtree, pNode, ii)==iRowid ){ pRtree 152058 ext/sqlite3/libsqlite/sqlite3.c static int nodeParentIndex(Rtree *pRtree, RtreeNode *pNode, int *piIndex){ pRtree 152061 ext/sqlite3/libsqlite/sqlite3.c return nodeRowidIndex(pRtree, pParent, pNode->iNode, piIndex); pRtree 152287 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree = RTREE_OF_CURSOR(pCur); pRtree 152297 ext/sqlite3/libsqlite/sqlite3.c eInt = pRtree->eCoordType==RTREE_COORD_INT32; pRtree 152305 ext/sqlite3/libsqlite/sqlite3.c u8 *pCellData = pNode->zData + (4+pRtree->nBytesPerCell*p->iCell); pRtree 152384 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree = (Rtree *)cur->pVtab; pRtree 152394 ext/sqlite3/libsqlite/sqlite3.c sqlite3_result_int64(ctx, nodeGetRowid(pRtree, pNode, p->iCell)); pRtree 152397 ext/sqlite3/libsqlite/sqlite3.c nodeGetCoord(pRtree, pNode, p->iCell, i-1, &c); pRtree 152399 ext/sqlite3/libsqlite/sqlite3.c if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ pRtree 152404 ext/sqlite3/libsqlite/sqlite3.c assert( pRtree->eCoordType==RTREE_COORD_INT32 ); pRtree 152419 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree, /* RTree to search */ pRtree 152426 ext/sqlite3/libsqlite/sqlite3.c sqlite3_bind_int64(pRtree->pReadRowid, 1, iRowid); pRtree 152427 ext/sqlite3/libsqlite/sqlite3.c if( sqlite3_step(pRtree->pReadRowid)==SQLITE_ROW ){ pRtree 152428 ext/sqlite3/libsqlite/sqlite3.c i64 iNode = sqlite3_column_int64(pRtree->pReadRowid, 0); pRtree 152430 ext/sqlite3/libsqlite/sqlite3.c rc = nodeAcquire(pRtree, iNode, 0, ppLeaf); pRtree 152431 ext/sqlite3/libsqlite/sqlite3.c sqlite3_reset(pRtree->pReadRowid); pRtree 152433 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3_reset(pRtree->pReadRowid); pRtree 152495 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree = (Rtree *)pVtabCursor->pVtab; pRtree 152502 ext/sqlite3/libsqlite/sqlite3.c rtreeReference(pRtree); pRtree 152508 ext/sqlite3/libsqlite/sqlite3.c pCsr->base.pVtab = (sqlite3_vtab*)pRtree; pRtree 152517 ext/sqlite3/libsqlite/sqlite3.c rc = findLeafNode(pRtree, iRowid, &pLeaf, &iNode); pRtree 152524 ext/sqlite3/libsqlite/sqlite3.c rc = nodeRowidIndex(pRtree, pLeaf, iRowid, &iCell); pRtree 152534 ext/sqlite3/libsqlite/sqlite3.c rc = nodeAcquire(pRtree, 1, 0, &pRoot); pRtree 152542 ext/sqlite3/libsqlite/sqlite3.c memset(pCsr->anQueue, 0, sizeof(u32)*(pRtree->iDepth + 1)); pRtree 152558 ext/sqlite3/libsqlite/sqlite3.c p->pInfo->nCoord = pRtree->nDim*2; pRtree 152560 ext/sqlite3/libsqlite/sqlite3.c p->pInfo->mxLevel = pRtree->iDepth + 1; pRtree 152573 ext/sqlite3/libsqlite/sqlite3.c pNew = rtreeSearchPointNew(pCsr, RTREE_ZERO, pRtree->iDepth+1); pRtree 152586 ext/sqlite3/libsqlite/sqlite3.c nodeRelease(pRtree, pRoot); pRtree 152587 ext/sqlite3/libsqlite/sqlite3.c rtreeRelease(pRtree); pRtree 152639 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree = (Rtree*)tab; pRtree 152700 ext/sqlite3/libsqlite/sqlite3.c nRow = pRtree->nRowEst / (iIdx + 1); pRtree 152710 ext/sqlite3/libsqlite/sqlite3.c static RtreeDValue cellArea(Rtree *pRtree, RtreeCell *p){ pRtree 152713 ext/sqlite3/libsqlite/sqlite3.c for(ii=0; ii<(pRtree->nDim*2); ii+=2){ pRtree 152723 ext/sqlite3/libsqlite/sqlite3.c static RtreeDValue cellMargin(Rtree *pRtree, RtreeCell *p){ pRtree 152726 ext/sqlite3/libsqlite/sqlite3.c for(ii=0; ii<(pRtree->nDim*2); ii+=2){ pRtree 152735 ext/sqlite3/libsqlite/sqlite3.c static void cellUnion(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){ pRtree 152737 ext/sqlite3/libsqlite/sqlite3.c if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ pRtree 152738 ext/sqlite3/libsqlite/sqlite3.c for(ii=0; ii<(pRtree->nDim*2); ii+=2){ pRtree 152743 ext/sqlite3/libsqlite/sqlite3.c for(ii=0; ii<(pRtree->nDim*2); ii+=2){ pRtree 152754 ext/sqlite3/libsqlite/sqlite3.c static int cellContains(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){ pRtree 152756 ext/sqlite3/libsqlite/sqlite3.c int isInt = (pRtree->eCoordType==RTREE_COORD_INT32); pRtree 152757 ext/sqlite3/libsqlite/sqlite3.c for(ii=0; ii<(pRtree->nDim*2); ii+=2){ pRtree 152772 ext/sqlite3/libsqlite/sqlite3.c static RtreeDValue cellGrowth(Rtree *pRtree, RtreeCell *p, RtreeCell *pCell){ pRtree 152776 ext/sqlite3/libsqlite/sqlite3.c area = cellArea(pRtree, &cell); pRtree 152777 ext/sqlite3/libsqlite/sqlite3.c cellUnion(pRtree, &cell, pCell); pRtree 152778 ext/sqlite3/libsqlite/sqlite3.c return (cellArea(pRtree, &cell)-area); pRtree 152782 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree, pRtree 152792 ext/sqlite3/libsqlite/sqlite3.c for(jj=0; jj<(pRtree->nDim*2); jj+=2){ pRtree 152814 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree, /* Rtree table */ pRtree 152822 ext/sqlite3/libsqlite/sqlite3.c rc = nodeAcquire(pRtree, 1, 0, &pNode); pRtree 152824 ext/sqlite3/libsqlite/sqlite3.c for(ii=0; rc==SQLITE_OK && ii<(pRtree->iDepth-iHeight); ii++){ pRtree 152845 ext/sqlite3/libsqlite/sqlite3.c nodeGetCell(pRtree, pNode, iCell, &cell); pRtree 152846 ext/sqlite3/libsqlite/sqlite3.c growth = cellGrowth(pRtree, &cell, pCell); pRtree 152847 ext/sqlite3/libsqlite/sqlite3.c area = cellArea(pRtree, &cell); pRtree 152859 ext/sqlite3/libsqlite/sqlite3.c rc = nodeAcquire(pRtree, iBest, pNode, &pChild); pRtree 152860 ext/sqlite3/libsqlite/sqlite3.c nodeRelease(pRtree, pNode); pRtree 152874 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree, /* Rtree table */ pRtree 152884 ext/sqlite3/libsqlite/sqlite3.c if( nodeParentIndex(pRtree, p, &iCell) ){ pRtree 152888 ext/sqlite3/libsqlite/sqlite3.c nodeGetCell(pRtree, pParent, iCell, &cell); pRtree 152889 ext/sqlite3/libsqlite/sqlite3.c if( !cellContains(pRtree, &cell, pCell) ){ pRtree 152890 ext/sqlite3/libsqlite/sqlite3.c cellUnion(pRtree, &cell, pCell); pRtree 152891 ext/sqlite3/libsqlite/sqlite3.c nodeOverwriteCell(pRtree, pParent, &cell, iCell); pRtree 152902 ext/sqlite3/libsqlite/sqlite3.c static int rowidWrite(Rtree *pRtree, sqlite3_int64 iRowid, sqlite3_int64 iNode){ pRtree 152903 ext/sqlite3/libsqlite/sqlite3.c sqlite3_bind_int64(pRtree->pWriteRowid, 1, iRowid); pRtree 152904 ext/sqlite3/libsqlite/sqlite3.c sqlite3_bind_int64(pRtree->pWriteRowid, 2, iNode); pRtree 152905 ext/sqlite3/libsqlite/sqlite3.c sqlite3_step(pRtree->pWriteRowid); pRtree 152906 ext/sqlite3/libsqlite/sqlite3.c return sqlite3_reset(pRtree->pWriteRowid); pRtree 152912 ext/sqlite3/libsqlite/sqlite3.c static int parentWrite(Rtree *pRtree, sqlite3_int64 iNode, sqlite3_int64 iPar){ pRtree 152913 ext/sqlite3/libsqlite/sqlite3.c sqlite3_bind_int64(pRtree->pWriteParent, 1, iNode); pRtree 152914 ext/sqlite3/libsqlite/sqlite3.c sqlite3_bind_int64(pRtree->pWriteParent, 2, iPar); pRtree 152915 ext/sqlite3/libsqlite/sqlite3.c sqlite3_step(pRtree->pWriteParent); pRtree 152916 ext/sqlite3/libsqlite/sqlite3.c return sqlite3_reset(pRtree->pWriteParent); pRtree 153006 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree, pRtree 153023 ext/sqlite3/libsqlite/sqlite3.c SortByDimension(pRtree, aLeft, nLeft, iDim, aCell, aSpare); pRtree 153024 ext/sqlite3/libsqlite/sqlite3.c SortByDimension(pRtree, aRight, nRight, iDim, aCell, aSpare); pRtree 153065 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree, pRtree 153081 ext/sqlite3/libsqlite/sqlite3.c int nByte = (pRtree->nDim+1)*(sizeof(int*)+nCell*sizeof(int)); pRtree 153088 ext/sqlite3/libsqlite/sqlite3.c aSpare = &((int *)&aaSorted[pRtree->nDim])[pRtree->nDim*nCell]; pRtree 153090 ext/sqlite3/libsqlite/sqlite3.c for(ii=0; ii<pRtree->nDim; ii++){ pRtree 153092 ext/sqlite3/libsqlite/sqlite3.c aaSorted[ii] = &((int *)&aaSorted[pRtree->nDim])[ii*nCell]; pRtree 153096 ext/sqlite3/libsqlite/sqlite3.c SortByDimension(pRtree, aaSorted[ii], nCell, ii, aCell, aSpare); pRtree 153099 ext/sqlite3/libsqlite/sqlite3.c for(ii=0; ii<pRtree->nDim; ii++){ pRtree 153107 ext/sqlite3/libsqlite/sqlite3.c nLeft=RTREE_MINCELLS(pRtree); pRtree 153108 ext/sqlite3/libsqlite/sqlite3.c nLeft<=(nCell-RTREE_MINCELLS(pRtree)); pRtree 153121 ext/sqlite3/libsqlite/sqlite3.c cellUnion(pRtree, &left, &aCell[aaSorted[ii][kk]]); pRtree 153123 ext/sqlite3/libsqlite/sqlite3.c cellUnion(pRtree, &right, &aCell[aaSorted[ii][kk]]); pRtree 153126 ext/sqlite3/libsqlite/sqlite3.c margin += cellMargin(pRtree, &left); pRtree 153127 ext/sqlite3/libsqlite/sqlite3.c margin += cellMargin(pRtree, &right); pRtree 153128 ext/sqlite3/libsqlite/sqlite3.c overlap = cellOverlap(pRtree, &left, &right, 1); pRtree 153129 ext/sqlite3/libsqlite/sqlite3.c area = cellArea(pRtree, &left) + cellArea(pRtree, &right); pRtree 153130 ext/sqlite3/libsqlite/sqlite3.c if( (nLeft==RTREE_MINCELLS(pRtree)) pRtree 153153 ext/sqlite3/libsqlite/sqlite3.c nodeInsertCell(pRtree, pTarget, pCell); pRtree 153154 ext/sqlite3/libsqlite/sqlite3.c cellUnion(pRtree, pBbox, pCell); pRtree 153163 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree, pRtree 153171 ext/sqlite3/libsqlite/sqlite3.c RtreeNode *pChild = nodeHashLookup(pRtree, iRowid); pRtree 153173 ext/sqlite3/libsqlite/sqlite3.c nodeRelease(pRtree, pChild->pParent); pRtree 153178 ext/sqlite3/libsqlite/sqlite3.c return xSetMapping(pRtree, iRowid, pNode->iNode); pRtree 153182 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree, pRtree 153212 ext/sqlite3/libsqlite/sqlite3.c nodeGetCell(pRtree, pNode, i, &aCell[i]); pRtree 153214 ext/sqlite3/libsqlite/sqlite3.c nodeZero(pRtree, pNode); pRtree 153219 ext/sqlite3/libsqlite/sqlite3.c pRight = nodeNew(pRtree, pNode); pRtree 153220 ext/sqlite3/libsqlite/sqlite3.c pLeft = nodeNew(pRtree, pNode); pRtree 153221 ext/sqlite3/libsqlite/sqlite3.c pRtree->iDepth++; pRtree 153223 ext/sqlite3/libsqlite/sqlite3.c writeInt16(pNode->zData, pRtree->iDepth); pRtree 153226 ext/sqlite3/libsqlite/sqlite3.c pRight = nodeNew(pRtree, pLeft->pParent); pRtree 153235 ext/sqlite3/libsqlite/sqlite3.c memset(pLeft->zData, 0, pRtree->iNodeSize); pRtree 153236 ext/sqlite3/libsqlite/sqlite3.c memset(pRight->zData, 0, pRtree->iNodeSize); pRtree 153238 ext/sqlite3/libsqlite/sqlite3.c rc = splitNodeStartree(pRtree, aCell, nCell, pLeft, pRight, pRtree 153249 ext/sqlite3/libsqlite/sqlite3.c if( SQLITE_OK!=(rc = nodeWrite(pRtree, pRight)) pRtree 153250 ext/sqlite3/libsqlite/sqlite3.c || (0==pLeft->iNode && SQLITE_OK!=(rc = nodeWrite(pRtree, pLeft))) pRtree 153259 ext/sqlite3/libsqlite/sqlite3.c rc = rtreeInsertCell(pRtree, pLeft->pParent, &leftbbox, iHeight+1); pRtree 153266 ext/sqlite3/libsqlite/sqlite3.c rc = nodeParentIndex(pRtree, pLeft, &iCell); pRtree 153268 ext/sqlite3/libsqlite/sqlite3.c nodeOverwriteCell(pRtree, pParent, &leftbbox, iCell); pRtree 153269 ext/sqlite3/libsqlite/sqlite3.c rc = AdjustTree(pRtree, pParent, &leftbbox); pRtree 153275 ext/sqlite3/libsqlite/sqlite3.c if( (rc = rtreeInsertCell(pRtree, pRight->pParent, &rightbbox, iHeight+1)) ){ pRtree 153280 ext/sqlite3/libsqlite/sqlite3.c i64 iRowid = nodeGetRowid(pRtree, pRight, i); pRtree 153281 ext/sqlite3/libsqlite/sqlite3.c rc = updateMapping(pRtree, iRowid, pRight, iHeight); pRtree 153291 ext/sqlite3/libsqlite/sqlite3.c i64 iRowid = nodeGetRowid(pRtree, pLeft, i); pRtree 153292 ext/sqlite3/libsqlite/sqlite3.c rc = updateMapping(pRtree, iRowid, pLeft, iHeight); pRtree 153298 ext/sqlite3/libsqlite/sqlite3.c rc = updateMapping(pRtree, pCell->iRowid, pLeft, iHeight); pRtree 153302 ext/sqlite3/libsqlite/sqlite3.c rc = nodeRelease(pRtree, pRight); pRtree 153306 ext/sqlite3/libsqlite/sqlite3.c rc = nodeRelease(pRtree, pLeft); pRtree 153311 ext/sqlite3/libsqlite/sqlite3.c nodeRelease(pRtree, pRight); pRtree 153312 ext/sqlite3/libsqlite/sqlite3.c nodeRelease(pRtree, pLeft); pRtree 153328 ext/sqlite3/libsqlite/sqlite3.c static int fixLeafParent(Rtree *pRtree, RtreeNode *pLeaf){ pRtree 153333 ext/sqlite3/libsqlite/sqlite3.c sqlite3_bind_int64(pRtree->pReadParent, 1, pChild->iNode); pRtree 153334 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3_step(pRtree->pReadParent); pRtree 153344 ext/sqlite3/libsqlite/sqlite3.c iNode = sqlite3_column_int64(pRtree->pReadParent, 0); pRtree 153347 ext/sqlite3/libsqlite/sqlite3.c rc2 = nodeAcquire(pRtree, iNode, 0, &pChild->pParent); pRtree 153350 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3_reset(pRtree->pReadParent); pRtree 153360 ext/sqlite3/libsqlite/sqlite3.c static int removeNode(Rtree *pRtree, RtreeNode *pNode, int iHeight){ pRtree 153369 ext/sqlite3/libsqlite/sqlite3.c rc = nodeParentIndex(pRtree, pNode, &iCell); pRtree 153373 ext/sqlite3/libsqlite/sqlite3.c rc = deleteCell(pRtree, pParent, iCell, iHeight+1); pRtree 153375 ext/sqlite3/libsqlite/sqlite3.c rc2 = nodeRelease(pRtree, pParent); pRtree 153384 ext/sqlite3/libsqlite/sqlite3.c sqlite3_bind_int64(pRtree->pDeleteNode, 1, pNode->iNode); pRtree 153385 ext/sqlite3/libsqlite/sqlite3.c sqlite3_step(pRtree->pDeleteNode); pRtree 153386 ext/sqlite3/libsqlite/sqlite3.c if( SQLITE_OK!=(rc = sqlite3_reset(pRtree->pDeleteNode)) ){ pRtree 153391 ext/sqlite3/libsqlite/sqlite3.c sqlite3_bind_int64(pRtree->pDeleteParent, 1, pNode->iNode); pRtree 153392 ext/sqlite3/libsqlite/sqlite3.c sqlite3_step(pRtree->pDeleteParent); pRtree 153393 ext/sqlite3/libsqlite/sqlite3.c if( SQLITE_OK!=(rc = sqlite3_reset(pRtree->pDeleteParent)) ){ pRtree 153400 ext/sqlite3/libsqlite/sqlite3.c nodeHashDelete(pRtree, pNode); pRtree 153402 ext/sqlite3/libsqlite/sqlite3.c pNode->pNext = pRtree->pDeleted; pRtree 153404 ext/sqlite3/libsqlite/sqlite3.c pRtree->pDeleted = pNode; pRtree 153409 ext/sqlite3/libsqlite/sqlite3.c static int fixBoundingBox(Rtree *pRtree, RtreeNode *pNode){ pRtree 153416 ext/sqlite3/libsqlite/sqlite3.c nodeGetCell(pRtree, pNode, 0, &box); pRtree 153419 ext/sqlite3/libsqlite/sqlite3.c nodeGetCell(pRtree, pNode, ii, &cell); pRtree 153420 ext/sqlite3/libsqlite/sqlite3.c cellUnion(pRtree, &box, &cell); pRtree 153423 ext/sqlite3/libsqlite/sqlite3.c rc = nodeParentIndex(pRtree, pNode, &ii); pRtree 153425 ext/sqlite3/libsqlite/sqlite3.c nodeOverwriteCell(pRtree, pParent, &box, ii); pRtree 153426 ext/sqlite3/libsqlite/sqlite3.c rc = fixBoundingBox(pRtree, pParent); pRtree 153436 ext/sqlite3/libsqlite/sqlite3.c static int deleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell, int iHeight){ pRtree 153440 ext/sqlite3/libsqlite/sqlite3.c if( SQLITE_OK!=(rc = fixLeafParent(pRtree, pNode)) ){ pRtree 153447 ext/sqlite3/libsqlite/sqlite3.c nodeDeleteCell(pRtree, pNode, iCell); pRtree 153457 ext/sqlite3/libsqlite/sqlite3.c if( NCELL(pNode)<RTREE_MINCELLS(pRtree) ){ pRtree 153458 ext/sqlite3/libsqlite/sqlite3.c rc = removeNode(pRtree, pNode, iHeight); pRtree 153460 ext/sqlite3/libsqlite/sqlite3.c rc = fixBoundingBox(pRtree, pNode); pRtree 153468 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree, pRtree 153509 ext/sqlite3/libsqlite/sqlite3.c nodeGetCell(pRtree, pNode, ii, &aCell[ii]); pRtree 153512 ext/sqlite3/libsqlite/sqlite3.c for(iDim=0; iDim<pRtree->nDim; iDim++){ pRtree 153517 ext/sqlite3/libsqlite/sqlite3.c for(iDim=0; iDim<pRtree->nDim; iDim++){ pRtree 153523 ext/sqlite3/libsqlite/sqlite3.c for(iDim=0; iDim<pRtree->nDim; iDim++){ pRtree 153531 ext/sqlite3/libsqlite/sqlite3.c nodeZero(pRtree, pNode); pRtree 153533 ext/sqlite3/libsqlite/sqlite3.c for(ii=0; rc==SQLITE_OK && ii<(nCell-(RTREE_MINCELLS(pRtree)+1)); ii++){ pRtree 153535 ext/sqlite3/libsqlite/sqlite3.c nodeInsertCell(pRtree, pNode, p); pRtree 153538 ext/sqlite3/libsqlite/sqlite3.c rc = rowidWrite(pRtree, p->iRowid, pNode->iNode); pRtree 153540 ext/sqlite3/libsqlite/sqlite3.c rc = parentWrite(pRtree, p->iRowid, pNode->iNode); pRtree 153545 ext/sqlite3/libsqlite/sqlite3.c rc = fixBoundingBox(pRtree, pNode); pRtree 153553 ext/sqlite3/libsqlite/sqlite3.c rc = ChooseLeaf(pRtree, p, iHeight, &pInsert); pRtree 153556 ext/sqlite3/libsqlite/sqlite3.c rc = rtreeInsertCell(pRtree, pInsert, p, iHeight); pRtree 153557 ext/sqlite3/libsqlite/sqlite3.c rc2 = nodeRelease(pRtree, pInsert); pRtree 153573 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree, pRtree 153580 ext/sqlite3/libsqlite/sqlite3.c RtreeNode *pChild = nodeHashLookup(pRtree, pCell->iRowid); pRtree 153582 ext/sqlite3/libsqlite/sqlite3.c nodeRelease(pRtree, pChild->pParent); pRtree 153587 ext/sqlite3/libsqlite/sqlite3.c if( nodeInsertCell(pRtree, pNode, pCell) ){ pRtree 153588 ext/sqlite3/libsqlite/sqlite3.c if( iHeight<=pRtree->iReinsertHeight || pNode->iNode==1){ pRtree 153589 ext/sqlite3/libsqlite/sqlite3.c rc = SplitNode(pRtree, pNode, pCell, iHeight); pRtree 153591 ext/sqlite3/libsqlite/sqlite3.c pRtree->iReinsertHeight = iHeight; pRtree 153592 ext/sqlite3/libsqlite/sqlite3.c rc = Reinsert(pRtree, pNode, pCell, iHeight); pRtree 153595 ext/sqlite3/libsqlite/sqlite3.c rc = AdjustTree(pRtree, pNode, pCell); pRtree 153598 ext/sqlite3/libsqlite/sqlite3.c rc = rowidWrite(pRtree, pCell->iRowid, pNode->iNode); pRtree 153600 ext/sqlite3/libsqlite/sqlite3.c rc = parentWrite(pRtree, pCell->iRowid, pNode->iNode); pRtree 153607 ext/sqlite3/libsqlite/sqlite3.c static int reinsertNodeContent(Rtree *pRtree, RtreeNode *pNode){ pRtree 153615 ext/sqlite3/libsqlite/sqlite3.c nodeGetCell(pRtree, pNode, ii, &cell); pRtree 153620 ext/sqlite3/libsqlite/sqlite3.c rc = ChooseLeaf(pRtree, &cell, (int)pNode->iNode, &pInsert); pRtree 153623 ext/sqlite3/libsqlite/sqlite3.c rc = rtreeInsertCell(pRtree, pInsert, &cell, (int)pNode->iNode); pRtree 153624 ext/sqlite3/libsqlite/sqlite3.c rc2 = nodeRelease(pRtree, pInsert); pRtree 153636 ext/sqlite3/libsqlite/sqlite3.c static int newRowid(Rtree *pRtree, i64 *piRowid){ pRtree 153638 ext/sqlite3/libsqlite/sqlite3.c sqlite3_bind_null(pRtree->pWriteRowid, 1); pRtree 153639 ext/sqlite3/libsqlite/sqlite3.c sqlite3_bind_null(pRtree->pWriteRowid, 2); pRtree 153640 ext/sqlite3/libsqlite/sqlite3.c sqlite3_step(pRtree->pWriteRowid); pRtree 153641 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3_reset(pRtree->pWriteRowid); pRtree 153642 ext/sqlite3/libsqlite/sqlite3.c *piRowid = sqlite3_last_insert_rowid(pRtree->db); pRtree 153649 ext/sqlite3/libsqlite/sqlite3.c static int rtreeDeleteRowid(Rtree *pRtree, sqlite3_int64 iDelete){ pRtree 153657 ext/sqlite3/libsqlite/sqlite3.c rc = nodeAcquire(pRtree, 1, 0, &pRoot); pRtree 153663 ext/sqlite3/libsqlite/sqlite3.c rc = findLeafNode(pRtree, iDelete, &pLeaf, 0); pRtree 153669 ext/sqlite3/libsqlite/sqlite3.c rc = nodeRowidIndex(pRtree, pLeaf, iDelete, &iCell); pRtree 153671 ext/sqlite3/libsqlite/sqlite3.c rc = deleteCell(pRtree, pLeaf, iCell, 0); pRtree 153673 ext/sqlite3/libsqlite/sqlite3.c rc2 = nodeRelease(pRtree, pLeaf); pRtree 153681 ext/sqlite3/libsqlite/sqlite3.c sqlite3_bind_int64(pRtree->pDeleteRowid, 1, iDelete); pRtree 153682 ext/sqlite3/libsqlite/sqlite3.c sqlite3_step(pRtree->pDeleteRowid); pRtree 153683 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3_reset(pRtree->pDeleteRowid); pRtree 153694 ext/sqlite3/libsqlite/sqlite3.c if( rc==SQLITE_OK && pRtree->iDepth>0 && NCELL(pRoot)==1 ){ pRtree 153697 ext/sqlite3/libsqlite/sqlite3.c i64 iChild = nodeGetRowid(pRtree, pRoot, 0); pRtree 153698 ext/sqlite3/libsqlite/sqlite3.c rc = nodeAcquire(pRtree, iChild, pRoot, &pChild); pRtree 153700 ext/sqlite3/libsqlite/sqlite3.c rc = removeNode(pRtree, pChild, pRtree->iDepth-1); pRtree 153702 ext/sqlite3/libsqlite/sqlite3.c rc2 = nodeRelease(pRtree, pChild); pRtree 153705 ext/sqlite3/libsqlite/sqlite3.c pRtree->iDepth--; pRtree 153706 ext/sqlite3/libsqlite/sqlite3.c writeInt16(pRoot->zData, pRtree->iDepth); pRtree 153712 ext/sqlite3/libsqlite/sqlite3.c for(pLeaf=pRtree->pDeleted; pLeaf; pLeaf=pRtree->pDeleted){ pRtree 153714 ext/sqlite3/libsqlite/sqlite3.c rc = reinsertNodeContent(pRtree, pLeaf); pRtree 153716 ext/sqlite3/libsqlite/sqlite3.c pRtree->pDeleted = pLeaf->pNext; pRtree 153722 ext/sqlite3/libsqlite/sqlite3.c rc = nodeRelease(pRtree, pRoot); pRtree 153724 ext/sqlite3/libsqlite/sqlite3.c nodeRelease(pRtree, pRoot); pRtree 153769 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree = (Rtree *)pVtab; pRtree 153774 ext/sqlite3/libsqlite/sqlite3.c rtreeReference(pRtree); pRtree 153801 ext/sqlite3/libsqlite/sqlite3.c assert( nData<=(pRtree->nDim*2 + 3) ); pRtree 153804 ext/sqlite3/libsqlite/sqlite3.c if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ pRtree 153834 ext/sqlite3/libsqlite/sqlite3.c sqlite3_bind_int64(pRtree->pReadRowid, 1, cell.iRowid); pRtree 153835 ext/sqlite3/libsqlite/sqlite3.c steprc = sqlite3_step(pRtree->pReadRowid); pRtree 153836 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3_reset(pRtree->pReadRowid); pRtree 153838 ext/sqlite3/libsqlite/sqlite3.c if( sqlite3_vtab_on_conflict(pRtree->db)==SQLITE_REPLACE ){ pRtree 153839 ext/sqlite3/libsqlite/sqlite3.c rc = rtreeDeleteRowid(pRtree, cell.iRowid); pRtree 153855 ext/sqlite3/libsqlite/sqlite3.c rc = rtreeDeleteRowid(pRtree, sqlite3_value_int64(azData[0])); pRtree 153868 ext/sqlite3/libsqlite/sqlite3.c rc = newRowid(pRtree, &cell.iRowid); pRtree 153873 ext/sqlite3/libsqlite/sqlite3.c rc = ChooseLeaf(pRtree, &cell, 0, &pLeaf); pRtree 153877 ext/sqlite3/libsqlite/sqlite3.c pRtree->iReinsertHeight = -1; pRtree 153878 ext/sqlite3/libsqlite/sqlite3.c rc = rtreeInsertCell(pRtree, pLeaf, &cell, 0); pRtree 153879 ext/sqlite3/libsqlite/sqlite3.c rc2 = nodeRelease(pRtree, pLeaf); pRtree 153887 ext/sqlite3/libsqlite/sqlite3.c rtreeRelease(pRtree); pRtree 153895 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree = (Rtree *)pVtab; pRtree 153901 ext/sqlite3/libsqlite/sqlite3.c , pRtree->zDb, pRtree->zName, zNewName pRtree 153902 ext/sqlite3/libsqlite/sqlite3.c , pRtree->zDb, pRtree->zName, zNewName pRtree 153903 ext/sqlite3/libsqlite/sqlite3.c , pRtree->zDb, pRtree->zName, zNewName pRtree 153906 ext/sqlite3/libsqlite/sqlite3.c rc = sqlite3_exec(pRtree->db, zSql, 0, 0, 0); pRtree 153917 ext/sqlite3/libsqlite/sqlite3.c static int rtreeQueryStat1(sqlite3 *db, Rtree *pRtree){ pRtree 153924 ext/sqlite3/libsqlite/sqlite3.c zSql = sqlite3_mprintf(zFmt, pRtree->zDb, pRtree->zName); pRtree 153938 ext/sqlite3/libsqlite/sqlite3.c pRtree->nRowEst = RTREE_DEFAULT_ROWEST; pRtree 153940 ext/sqlite3/libsqlite/sqlite3.c pRtree->nRowEst = MAX(nRow, RTREE_MIN_ROWEST); pRtree 153976 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree, pRtree 154004 ext/sqlite3/libsqlite/sqlite3.c pRtree->db = db; pRtree 154013 ext/sqlite3/libsqlite/sqlite3.c zDb, zPrefix, zDb, zPrefix, zDb, zPrefix, zDb, zPrefix, pRtree->iNodeSize pRtree 154025 ext/sqlite3/libsqlite/sqlite3.c appStmt[0] = &pRtree->pReadNode; pRtree 154026 ext/sqlite3/libsqlite/sqlite3.c appStmt[1] = &pRtree->pWriteNode; pRtree 154027 ext/sqlite3/libsqlite/sqlite3.c appStmt[2] = &pRtree->pDeleteNode; pRtree 154028 ext/sqlite3/libsqlite/sqlite3.c appStmt[3] = &pRtree->pReadRowid; pRtree 154029 ext/sqlite3/libsqlite/sqlite3.c appStmt[4] = &pRtree->pWriteRowid; pRtree 154030 ext/sqlite3/libsqlite/sqlite3.c appStmt[5] = &pRtree->pDeleteRowid; pRtree 154031 ext/sqlite3/libsqlite/sqlite3.c appStmt[6] = &pRtree->pReadParent; pRtree 154032 ext/sqlite3/libsqlite/sqlite3.c appStmt[7] = &pRtree->pWriteParent; pRtree 154033 ext/sqlite3/libsqlite/sqlite3.c appStmt[8] = &pRtree->pDeleteParent; pRtree 154035 ext/sqlite3/libsqlite/sqlite3.c rc = rtreeQueryStat1(db, pRtree); pRtree 154088 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree, /* Rtree handle */ pRtree 154096 ext/sqlite3/libsqlite/sqlite3.c zSql = sqlite3_mprintf("PRAGMA %Q.page_size", pRtree->zDb); pRtree 154099 ext/sqlite3/libsqlite/sqlite3.c pRtree->iNodeSize = iPageSize-64; pRtree 154100 ext/sqlite3/libsqlite/sqlite3.c if( (4+pRtree->nBytesPerCell*RTREE_MAXCELLS)<pRtree->iNodeSize ){ pRtree 154101 ext/sqlite3/libsqlite/sqlite3.c pRtree->iNodeSize = 4+pRtree->nBytesPerCell*RTREE_MAXCELLS; pRtree 154109 ext/sqlite3/libsqlite/sqlite3.c pRtree->zDb, pRtree->zName pRtree 154111 ext/sqlite3/libsqlite/sqlite3.c rc = getIntFromStmt(db, zSql, &pRtree->iNodeSize); pRtree 154139 ext/sqlite3/libsqlite/sqlite3.c Rtree *pRtree; pRtree 154162 ext/sqlite3/libsqlite/sqlite3.c pRtree = (Rtree *)sqlite3_malloc(sizeof(Rtree)+nDb+nName+2); pRtree 154163 ext/sqlite3/libsqlite/sqlite3.c if( !pRtree ){ pRtree 154166 ext/sqlite3/libsqlite/sqlite3.c memset(pRtree, 0, sizeof(Rtree)+nDb+nName+2); pRtree 154167 ext/sqlite3/libsqlite/sqlite3.c pRtree->nBusy = 1; pRtree 154168 ext/sqlite3/libsqlite/sqlite3.c pRtree->base.pModule = &rtreeModule; pRtree 154169 ext/sqlite3/libsqlite/sqlite3.c pRtree->zDb = (char *)&pRtree[1]; pRtree 154170 ext/sqlite3/libsqlite/sqlite3.c pRtree->zName = &pRtree->zDb[nDb+1]; pRtree 154171 ext/sqlite3/libsqlite/sqlite3.c pRtree->nDim = (argc-4)/2; pRtree 154172 ext/sqlite3/libsqlite/sqlite3.c pRtree->nBytesPerCell = 8 + pRtree->nDim*4*2; pRtree 154173 ext/sqlite3/libsqlite/sqlite3.c pRtree->eCoordType = eCoordType; pRtree 154174 ext/sqlite3/libsqlite/sqlite3.c memcpy(pRtree->zDb, argv[1], nDb); pRtree 154175 ext/sqlite3/libsqlite/sqlite3.c memcpy(pRtree->zName, argv[2], nName); pRtree 154178 ext/sqlite3/libsqlite/sqlite3.c rc = getNodeSize(db, pRtree, isCreate, pzErr); pRtree 154185 ext/sqlite3/libsqlite/sqlite3.c if( (rc = rtreeSqlInit(pRtree, db, argv[1], argv[2], isCreate)) ){ pRtree 154211 ext/sqlite3/libsqlite/sqlite3.c *ppVtab = (sqlite3_vtab *)pRtree; pRtree 154214 ext/sqlite3/libsqlite/sqlite3.c assert( pRtree->nBusy==1 ); pRtree 154215 ext/sqlite3/libsqlite/sqlite3.c rtreeRelease(pRtree);