]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
More RTREE performance optimizations related to decoding values.
authordrh <drh@noemail.net>
Wed, 1 Feb 2017 02:25:28 +0000 (02:25 +0000)
committerdrh <drh@noemail.net>
Wed, 1 Feb 2017 02:25:28 +0000 (02:25 +0000)
FossilOrigin-Name: c5395e7496d0cd593f5e16ee5f6719d020dc0c66

ext/rtree/rtree.c
manifest
manifest.uuid

index d69c966ddd1633992955c260d6fe2b4a08befe71..f1db60b22f0b31593ceff639a03374fd1b5638f4 100644 (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
 }
 
 
index cd07701b23fe358cdff0d6a3ceec60e55f241569..3a5177423f99602c9d47fe8c8950e829a66a9669 100644 (file)
--- 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
index 1081a26f59c2cca5a234ddb6b992dbcd32a8cc36..becf54d88b88de0bb3eeff13c8fb2149d5c9c966 100644 (file)
@@ -1 +1 @@
-9663eea2a16bb4eec71476d307a3722a768308c3
\ No newline at end of file
+c5395e7496d0cd593f5e16ee5f6719d020dc0c66
\ No newline at end of file