]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add ALWAYS() macros on results of sqlite3_aggregate_context() calls in
authordrh <drh@noemail.net>
Sat, 7 Jul 2018 19:47:21 +0000 (19:47 +0000)
committerdrh <drh@noemail.net>
Sat, 7 Jul 2018 19:47:21 +0000 (19:47 +0000)
xInverse() implements, since they can never fail.

FossilOrigin-Name: fdef2a921d451c66ca535021d08af3ec1ab53283da2d2979378a799fd8731ef9

ext/misc/json1.c
manifest
manifest.uuid
src/func.c

index 398dd465c9b6d31c4279df393c558e4a5ce393e7..f4f3507eb2a6786b3cddc6afe5217a09f008f56b 100644 (file)
@@ -1848,7 +1848,9 @@ static void jsonGroupInverse(
   char *z;
   JsonString *pStr;
   pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0);
-  if( !pStr ) return;
+  /* pStr is always non-NULL since jsonArrayStep() or jsonObjectStep() will
+  ** always have been called to initalize it */
+  if( NEVER(!pStr) ) return;
   z = pStr->zBuf;
   for(i=1; z[i]!=',' || inStr; i++){
     assert( i<pStr->nUsed );
index 4052b6db21dedaf30e9436a2760c26c653e40653..d9f84487063a2e1e154ef2358c285500b2e10478 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\san\sassert()\sto\shelp\sverify\sthat\sOP_AggInverse\sis\snever\scalled\son\san\naccumulator\sthat\shas\snot\spreviously\sbeen\sprocessed\sby\sOP_AggStep.
-D 2018-07-07T19:36:04.960
+C Add\sALWAYS()\smacros\son\sresults\sof\ssqlite3_aggregate_context()\scalls\sin\nxInverse()\simplements,\ssince\sthey\scan\snever\sfail.
+D 2018-07-07T19:47:21.666
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in 0a3a6c81e6fcb969ff9106e882f0a08547014ba463cb6beca4c4efaecc924ee6
@@ -281,7 +281,7 @@ F ext/misc/eval.c 6ea9b22a5fa0dd973b67ca4e53555be177bc0b7b263aadf1024429457c82c0
 F ext/misc/fileio.c 48c7751c78fc4cdd29d8c862fd2f3f98bbfefa2a3cf1ca1496df4bf02eb8cded
 F ext/misc/fuzzer.c 7c64b8197bb77b7d64eff7cac7848870235d4c25
 F ext/misc/ieee754.c f190d0cc5182529acb15babd177781be1ac1718c
-F ext/misc/json1.c 8dca18a64560481f566fe03e26b60dfc95b665c709be86934d261ac21d6f1c2f
+F ext/misc/json1.c 0af57bdc87936345a0198c7b0ccca1d8f3bca7d8f4d3c157b335620c78e7363d
 F ext/misc/memvfs.c ab36f49e02ebcdf85a1e08dc4d8599ea8f343e073ac9e0bca18a98b7e1ec9567
 F ext/misc/mmapwarm.c 70b618f2d0bde43fae288ad0b7498a629f2b6f61b50a27e06fae3cd23c83af29
 F ext/misc/nextchar.c 35c8b8baacb96d92abbb34a83a997b797075b342
@@ -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 edbd402a742605bf984c56ed818bf0d59c4ba8085a391c7545cc9cbfc4224f83
+F src/func.c e3174d1f10dbaef9478a243d4a4d51135a9092d73ceaeafac3663aeff60737c4
 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 63f4d306ba19f6ba900a7d7480ccaa3d1e4a204e7c82bf5eb2e4bd849ef3a22f
-R f7d5332c6156e78db8011d9c3f819c01
+P 4213889103fa37f3f11802aea81989522048a0752820603dd556f612128ddfee
+R b4bd6637a560cc2b671471c6eee21129
 U drh
-Z 3827c8ff60b89edfd852655ba9c60594
+Z a050e55c29dd8997b8d0c52a34704773
index 21c88c9bdf4a69e368b0926ce88f6041e6822ab5..c90cf08773c8e19956a90f97063282ac9a19bb0b 100644 (file)
@@ -1 +1 @@
-4213889103fa37f3f11802aea81989522048a0752820603dd556f612128ddfee
\ No newline at end of file
+fdef2a921d451c66ca535021d08af3ec1ab53283da2d2979378a799fd8731ef9
\ No newline at end of file
index 74c2a1b52b574f941e7252c9637ee4e97c2d1833..3e780ce60f8e38d554e7007291b89d57c1fb5294 100644 (file)
@@ -1521,7 +1521,9 @@ static void sumInverse(sqlite3_context *context, int argc, sqlite3_value**argv){
   UNUSED_PARAMETER(argc);
   p = sqlite3_aggregate_context(context, sizeof(*p));
   type = sqlite3_value_numeric_type(argv[0]);
-  if( p && type!=SQLITE_NULL ){
+  /* p is always non-NULL because sumStep() will have been called first
+  ** to initialize it */
+  if( ALWAYS(p) && type!=SQLITE_NULL ){
     p->cnt--;
     if( type==SQLITE_INTEGER ){
       i64 v = sqlite3_value_int64(argv[0]);
@@ -1605,7 +1607,8 @@ static void countFinalize(sqlite3_context *context){
 static void countInverse(sqlite3_context *ctx, int argc, sqlite3_value **argv){
   CountCtx *p;
   p = sqlite3_aggregate_context(ctx, sizeof(*p));
-  if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
+  /* p is always non-NULL since countStep() will have been called first */
+  if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && ALWAYS(p) ){
     p->n--;
 #ifdef SQLITE_DEBUG
     p->bInverse = 1;
@@ -1724,7 +1727,9 @@ static void groupConcatInverse(
   StrAccum *pAccum;
   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
   pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
-  if( pAccum ){
+  /* pAccum is always non-NULL since groupConcatStep() will have always
+  ** run frist to initialize it */
+  if( ALWAYS(pAccum) ){
     n = sqlite3_value_bytes(argv[0]);
     if( argc==2 ){
       n += sqlite3_value_bytes(argv[1]);