From 31a13495153ece728af9641e4327f009088cab3f Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 1 Feb 2017 17:08:56 +0000 Subject: [PATCH] Unwind the RTREE dimension loop inside of rtreeCallbackConstraint(). FossilOrigin-Name: 4854ea9c18e7d8066c90b41568d0fae97b01ea6d --- ext/rtree/rtree.c | 41 ++++++++++++++++++++++++++++++++--------- manifest | 12 ++++++------ manifest.uuid | 2 +- 3 files changed, 39 insertions(+), 16 deletions(-) diff --git a/ext/rtree/rtree.c b/ext/rtree/rtree.c index 4d67d67044..ac76c18485 100644 --- a/ext/rtree/rtree.c +++ b/ext/rtree/rtree.c @@ -1078,6 +1078,7 @@ static int rtreeCallbackConstraint( sqlite3_rtree_query_info *pInfo = pConstraint->pInfo; /* Callback info */ int nCoord = pInfo->nCoord; /* No. of coordinates */ int rc; /* Callback return code */ + RtreeCoord c; /* Translator union */ sqlite3_rtree_dbl aCoord[RTREE_MAX_DIMENSIONS*2]; /* Decoded coordinates */ assert( pConstraint->op==RTREE_MATCH || pConstraint->op==RTREE_QUERY ); @@ -1086,15 +1087,37 @@ static int rtreeCallbackConstraint( if( pConstraint->op==RTREE_QUERY && pSearch->iLevel==1 ){ pInfo->iRowid = readInt64(pCellData); } - assert( nCoord>=2 && (nCoord&1)==0 ); - i = 0; - do{ - pCellData += 8; - assert( ((((char*)pCellData) - (char*)0)&3)==0 ); /* 4-byte aligned */ - RTREE_DECODE_COORD(eInt, pCellData, aCoord[i]); - RTREE_DECODE_COORD(eInt, (pCellData+4), aCoord[i+1]); - i+= 2; - }while( iop==RTREE_MATCH ){ rc = pConstraint->u.xGeom((sqlite3_rtree_geometry*)pInfo, nCoord, aCoord, &i); diff --git a/manifest b/manifest index 62887ba814..8bb675991a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Completely\sunroll\sthe\sdimension\sloop\sinside\sof\scellArea()\sin\sRTREE. -D 2017-02-01T16:41:30.471 +C Unwind\sthe\sRTREE\sdimension\sloop\sinside\sof\srtreeCallbackConstraint(). +D 2017-02-01T17:08:56.249 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 60df707ce5ae232351fc7fc8e916738b1a06bf26 +F ext/rtree/rtree.c f2c8604fcdbe13f960c5f0b97acbc2a870b72bf2 F ext/rtree/rtree.h 834dbcb82dc85b2481cde6a07cdadfddc99e9b9e F ext/rtree/rtree1.test 42dadfc7b44a436cd74a1bebc0b9b689e4eaf7ec F ext/rtree/rtree2.test acbb3a4ce0f4fbc2c304d2b4b784cfa161856bba @@ -1552,7 +1552,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 f1f3c8cc733a05c12dd980f2dfa0ab4ccd76c04b -R f244aabca54009b102530102725b0e43 +P 3c4c0126c287f844220b65e00fec17c059fbb7c8 +R f35bf88856ef1a64759d9b647928073d U drh -Z 396b9b4a99bf06a5c73ba01696403f75 +Z 9add4b4d28dce63431ad3a0684bb5601 diff --git a/manifest.uuid b/manifest.uuid index a4a1237e47..8728c8d9a3 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3c4c0126c287f844220b65e00fec17c059fbb7c8 \ No newline at end of file +4854ea9c18e7d8066c90b41568d0fae97b01ea6d \ No newline at end of file