From 14494fa712d71370eb92e15c4e4db20534fcd832 Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 1 Feb 2017 02:25:28 +0000 Subject: [PATCH] More RTREE performance optimizations related to decoding values. FossilOrigin-Name: c5395e7496d0cd593f5e16ee5f6719d020dc0c66 --- ext/rtree/rtree.c | 18 +++++++++++++++++- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/ext/rtree/rtree.c b/ext/rtree/rtree.c index d69c966ddd..f1db60b22f 100644 --- a/ext/rtree/rtree.c +++ b/ext/rtree/rtree.c @@ -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( iinDim*2 ); +#if 0 for(ii=0; iinDim*2; ii++){ readCoord(&pData[ii*4], &pCoord[ii]); } +#endif } diff --git a/manifest b/manifest index cd07701b23..3a5177423f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Improved\scomments\son\sthe\sstatGet()\simplementation\sin\sANALYZE.\s\sNo\schanges\nto\scode. -D 2017-02-01T01:34:15.043 +C More\sRTREE\sperformance\soptimizations\srelated\sto\sdecoding\svalues. +D 2017-02-01T02:25:28.535 F Makefile.in 5f415e7867296d678fed2e6779aea10c1318b4bc F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc b8ca53350ae545e3562403d5da2a69cec79308da @@ -264,7 +264,7 @@ F ext/rbu/sqlite3rbu.c bb0de6cdbdb14a7d55a097238a434b7e99caf318 F ext/rbu/sqlite3rbu.h 6fb6294c34a9ca93b5894a33bca530c6f08decba F ext/rbu/test_rbu.c 5aa22616afac6f71ebd3d9bc9bf1006cfabcca88 F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761 -F ext/rtree/rtree.c 81fea8b100c6195f8a42119109d6ec2016e613f3 +F ext/rtree/rtree.c f66b3d232ea98285548107caaac55f110a0b6709 F ext/rtree/rtree.h 834dbcb82dc85b2481cde6a07cdadfddc99e9b9e F ext/rtree/rtree1.test 42dadfc7b44a436cd74a1bebc0b9b689e4eaf7ec F ext/rtree/rtree2.test acbb3a4ce0f4fbc2c304d2b4b784cfa161856bba @@ -1549,7 +1549,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 0bf7b51896ec441f62490964c7a44a3c75c6b7e2 -R bb550435b988e435dcc2fd1779602487 +P 9663eea2a16bb4eec71476d307a3722a768308c3 +R 5d2055e5a67aa8455e161eeb4945e6a1 U drh -Z 36c251bda157d6101f2fb97842697f89 +Z 3923bc85bfbb1c570a9230cd663fc66b diff --git a/manifest.uuid b/manifest.uuid index 1081a26f59..becf54d88b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9663eea2a16bb4eec71476d307a3722a768308c3 \ No newline at end of file +c5395e7496d0cd593f5e16ee5f6719d020dc0c66 \ No newline at end of file