1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-30 19:03:16 +03:00

More RTREE performance optimizations related to decoding values.

FossilOrigin-Name: c5395e7496d0cd593f5e16ee5f6719d020dc0c66
This commit is contained in:
drh
2017-02-01 02:25:28 +00:00
parent 35497fccbe
commit 14494fa712
3 changed files with 24 additions and 8 deletions

View File

@ -370,12 +370,20 @@ static int readInt16(u8 *p){
return (p[0]<<8) + p[1];
}
static void readCoord(u8 *p, RtreeCoord *pCoord){
#if defined(SQLITE_BYTEORDER) && SQLITE_BYTEORDER==1234
memcpy(&pCoord->u, p, 4);
pCoord->u = ((pCoord->u>>24)&0xff)|((pCoord->u>>8)&0xff00)|
((pCoord->u&0xff)<<24)|((pCoord->u&0xff00)<<8);
#elif defined(SQLITE_BYTEORDER) && SQLITE_BYTEORDER==4321
memcpy(&pCoord->u, p, 4);
#else
pCoord->u = (
(((u32)p[0]) << 24) +
(((u32)p[1]) << 16) +
(((u32)p[2]) << 8) +
(((u32)p[3]) << 0)
);
#endif
}
static i64 readInt64(u8 *p){
return (
@ -736,13 +744,21 @@ static void nodeGetCell(
){
u8 *pData;
RtreeCoord *pCoord;
int ii;
int ii = 0;
pCell->iRowid = nodeGetRowid(pRtree, pNode, iCell);
pData = pNode->zData + (12 + pRtree->nBytesPerCell*iCell);
pCoord = pCell->aCoord;
do{
readCoord(pData, &pCoord[ii]);
readCoord(pData+4, &pCoord[ii+1]);
pData += 8;
ii += 2;
}while( ii<pRtree->nDim*2 );
#if 0
for(ii=0; ii<pRtree->nDim*2; ii++){
readCoord(&pData[ii*4], &pCoord[ii]);
}
#endif
}