diff --git a/manifest b/manifest index 7758afc840..8189768335 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sanother\sproblem\swith\sreusing\sLSM\scursors\sfor\srange\sscans. -D 2018-07-07T20:26:30.030 +C Simplifications\sto\sthe\simplementation\sof\sthe\ssum()\sSQL\sfunction. +D 2018-07-07T20:55:16.666 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 0a3a6c81e6fcb969ff9106e882f0a08547014ba463cb6beca4c4efaecc924ee6 @@ -450,7 +450,7 @@ F src/delete.c 4c8c7604277a2041647f96b78f4b9a47858e9217e4fb333d35e7b5ab32c5b57f F src/expr.c 7e257eeffe9553c10a6ac0a1f0177bf740c4da834e7d6e2cbb7d3ebaa3d7f3e1 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c b1da9ef8dc834603bb0d28972378a7ce65897847f9a1e89ab800bbdf24c788ee -F src/func.c e3174d1f10dbaef9478a243d4a4d51135a9092d73ceaeafac3663aeff60737c4 +F src/func.c e94214037dbc9d258ece54434fe120b419880550239c80dcd101afe7b2a51131 F src/global.c 9bf034fd560bdd514715170ed8460bb7f823cec113f0569ef3f18a20c7ccd128 F src/hash.c a12580e143f10301ed5166ea4964ae2853d3905a511d4e0c44497245c7ce1f7a F src/hash.h ab34c5c54a9e9de2e790b24349ba5aab3dbb4fd4 @@ -1745,7 +1745,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 4b8cfe7bfe5f049eb4607fd480429fcd2060e691891d8bffc9917f13fa373988 -R 30589e318928e413de309a69449a613b -U dan -Z 36c3a96195f8670c51ccae820f038ab1 +P ae3fc7652f27ba0a86f4c26f64c2e148d9496a5edb7f54dc9980edd91c326e4f +R 7fefa3b6e3f1ad000f6b20afb58dadef +U drh +Z a5540dd7ff49b20c02f142203cdf3720 diff --git a/manifest.uuid b/manifest.uuid index dccd51a652..3934e737f3 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -ae3fc7652f27ba0a86f4c26f64c2e148d9496a5edb7f54dc9980edd91c326e4f \ No newline at end of file +a8b13002378fc4ef0b41c367b44b67bf2b28b6624303c087a3c6d657b5bfe32e \ No newline at end of file diff --git a/src/func.c b/src/func.c index 3e780ce60f..61575745ad 100644 --- a/src/func.c +++ b/src/func.c @@ -1505,7 +1505,7 @@ static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){ i64 v = sqlite3_value_int64(argv[0]); p->rSum += v; if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){ - p->overflow = 1; + p->approx = p->overflow = 1; } }else{ p->rSum += sqlite3_value_double(argv[0]); @@ -1524,16 +1524,15 @@ static void sumInverse(sqlite3_context *context, int argc, sqlite3_value**argv){ /* p is always non-NULL because sumStep() will have been called first ** to initialize it */ if( ALWAYS(p) && type!=SQLITE_NULL ){ + assert( p->cnt>0 ); p->cnt--; - if( type==SQLITE_INTEGER ){ + assert( type==SQLITE_INTEGER || p->approx ); + if( type==SQLITE_INTEGER && p->approx==0 ){ i64 v = sqlite3_value_int64(argv[0]); p->rSum -= v; - if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, -1*v) ){ - p->overflow = 1; - } + p->iSum -= v; }else{ p->rSum -= sqlite3_value_double(argv[0]); - p->approx = 1; } } }