From: drh Date: Fri, 6 Nov 2015 01:04:41 +0000 (+0000) Subject: Increase the precision of integer vs. floating-point comparisons. X-Git-Tag: version-3.10.0~164^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8b8446fc21c194dbd92c57fe2527b1ec08067077;p=thirdparty%2Fsqlite.git Increase the precision of integer vs. floating-point comparisons. Candidate fix for ticket [38a97a87a6e4e8]. FossilOrigin-Name: cfcaa0ff276b1936418abe72c7e0c99d90d37885 --- diff --git a/manifest b/manifest index daf44cfd73..12e3f87135 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\stypo\sin\shelp\sinformation\sfor\san\sFTS5\sscript. -D 2015-11-05T21:49:19.879 +C Increase\sthe\sprecision\sof\sinteger\svs.\sfloating-point\scomparisons.\nCandidate\sfix\sfor\sticket\s[38a97a87a6e4e8]. +D 2015-11-06T01:04:41.562 F Makefile.in 3a705bb4bd12e194212ddbdbf068310d17153cdb F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc 702d3e98f3afc6587a78481257f3c4c900efc3a4 @@ -407,7 +407,7 @@ F src/vdbe.c dfbaae2570172c523bce14299021d352b8508f7f F src/vdbe.h efb7a8c1459e31f3ea4377824c6a7e4cb5068637 F src/vdbeInt.h 33403622c6a8feaaac5f0f3f17f5d1bf6df42286 F src/vdbeapi.c 020681b943e77766b32ae1cddf86d7831b7374ca -F src/vdbeaux.c 717bc2ae9cc0b58ef398fff44bd9164bfd96772a +F src/vdbeaux.c debf7e021cf9008c65319da75f293f1edc1172cb F src/vdbeblob.c 565fabd302f5fca3bdf3d56cac330483616a39b6 F src/vdbemem.c fdd1578e47bea61390d472de53c565781d81e045 F src/vdbesort.c 8b23930a1289526f6d2a3a9f2e965bcc963e4a68 @@ -1398,7 +1398,10 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 445480095e6877cce8220b1c095f334bbb04c1c3 -R 68d01af6e20ce1ec369a81a5012243d6 -U mistachkin -Z 34f3b0f0379f36a413653d60c651c6ba +P 777ae8007f6ff303b120b25f2dc37d7ef6b6a4f8 +R cc9765cd257243db22c6bd69c3d99131 +T *branch * int-float-precision +T *sym-int-float-precision * +T -sym-trunk * +U drh +Z d0948553cd93aaec56b5aa2032a41416 diff --git a/manifest.uuid b/manifest.uuid index 1f1b6d3fb2..4dab4a3e5b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -777ae8007f6ff303b120b25f2dc37d7ef6b6a4f8 \ No newline at end of file +cfcaa0ff276b1936418abe72c7e0c99d90d37885 \ No newline at end of file diff --git a/src/vdbeaux.c b/src/vdbeaux.c index f605ea3ec8..9b3b1be874 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -3665,7 +3665,7 @@ int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const CollSeq *pColl){ ** if both values are integers. */ if( combined_flags&(MEM_Int|MEM_Real) ){ - double r1, r2; + LONGDOUBLE_TYPE r1, r2; if( (f1 & f2 & MEM_Int)!=0 ){ if( pMem1->u.i < pMem2->u.i ) return -1; if( pMem1->u.i > pMem2->u.i ) return 1; @@ -3674,14 +3674,14 @@ int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const CollSeq *pColl){ if( (f1&MEM_Real)!=0 ){ r1 = pMem1->u.r; }else if( (f1&MEM_Int)!=0 ){ - r1 = (double)pMem1->u.i; + r1 = (LONGDOUBLE_TYPE)pMem1->u.i; }else{ return 1; } if( (f2&MEM_Real)!=0 ){ r2 = pMem2->u.r; }else if( (f2&MEM_Int)!=0 ){ - r2 = (double)pMem2->u.i; + r2 = (LONGDOUBLE_TYPE)pMem2->u.i; }else{ return -1; } @@ -3838,7 +3838,7 @@ int sqlite3VdbeRecordCompareWithSkip( }else if( serial_type==0 ){ rc = -1; }else if( serial_type==7 ){ - double rhs = (double)pRhs->u.i; + LONGDOUBLE_TYPE rhs = (LONGDOUBLE_TYPE)pRhs->u.i; sqlite3VdbeSerialGet(&aKey1[d1], serial_type, &mem1); if( mem1.u.ru.r; - double lhs; + LONGDOUBLE_TYPE rhs = pRhs->u.r; + LONGDOUBLE_TYPE lhs; sqlite3VdbeSerialGet(&aKey1[d1], serial_type, &mem1); if( serial_type==7 ){ lhs = mem1.u.r; }else{ - lhs = (double)mem1.u.i; + lhs = (LONGDOUBLE_TYPE)mem1.u.i; } if( lhs