]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Remove some bad assert() statements from the implementations of window
authordan <dan@noemail.net>
Fri, 6 Jul 2018 13:25:02 +0000 (13:25 +0000)
committerdan <dan@noemail.net>
Fri, 6 Jul 2018 13:25:02 +0000 (13:25 +0000)
functions percent_rank() and cume_dist().

FossilOrigin-Name: 443f0c286f1659937fd61b4ef2de17d0d015369e5ff5249a9e0c3d0ee4925158

manifest
manifest.uuid
src/vdbe.h
src/vdbeapi.c
src/window.c
test/window4.tcl
test/window4.test
test/windowfault.test

index e1bc66a7ccac7c96c0aeb828f2f40b9422f81ad9..aa15820caef28ce804ff63521b5be2febd45eceb 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Return\san\serror\sif\sDISTINCT\sis\sused\swith\sa\swindow-function\s(.i.e.\n"count(DISTINCT\s<expr>)\sOVER\s(...)".
-D 2018-07-06T07:42:42.390
+C Remove\ssome\sbad\sassert()\sstatements\sfrom\sthe\simplementations\sof\swindow\nfunctions\spercent_rank()\sand\scume_dist().
+D 2018-07-06T13:25:02.772
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in 0a3a6c81e6fcb969ff9106e882f0a08547014ba463cb6beca4c4efaecc924ee6
@@ -567,9 +567,9 @@ F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5
 F src/util.c d9eb0a6c4aae1b00a7369eadd7ca0bbe946cb4c953b6751aa20d357c2f482157
 F src/vacuum.c 36e7d21a20c0bf6ef4ef7c399d192b5239410b7c4d3c1070fba4e30810d0b855
 F src/vdbe.c 4e2768e83fd5b705b6244855818ae40178be2edf4288a45c625c03a9f755711b
-F src/vdbe.h 847735b3e083285aa225d2bf1fe97107a0a2b8942c80d643cdb764990705820d
+F src/vdbe.h 9c8c245fa3785266c269ab02c135c836ff49a307612186686bcdae500f409945
 F src/vdbeInt.h 6b5cbd338dc9aaad343fb11b455e47463b0474d9f79710f50e647158941146e0
-F src/vdbeapi.c e35f813312b0f6e8e2835b357f121e0d1da6d3013bac3e367fe4efd518e7a2ec
+F src/vdbeapi.c af4a3de00d1851bcbc55b85dfbe52849aa2b1e17b4a5a1f3d9c257df7af361ff
 F src/vdbeaux.c c2d65c763b0811afe409e02e9d0d1f300c6e97892474fc94eec3da71955cd418
 F src/vdbeblob.c f5c70f973ea3a9e915d1693278a5f890dc78594300cf4d54e64f2b0917c94191
 F src/vdbemem.c a699a1d7ccc3f94cdff69ddf35d5f7540dbf52ca44cf040eda3c87520e67858c
@@ -584,7 +584,7 @@ F src/where.c 0bcbf9e191ca07f9ea2008aa80e70ded46bcdffd26560c83397da501f00aece6
 F src/whereInt.h b90ef9b9707ef750eab2a7a080c48fb4900315033274689def32d0cf5a81ebe4
 F src/wherecode.c 3317f2b083a66d3e65a03edf316ade4ccb0a99c9956273282ebb579b95d4ba96
 F src/whereexpr.c 571618c67a3eb5ce0f1158c2792c1aee9b4a4a264392fc4fb1b35467f80abf9a
-F src/window.c 6f58bfcd558a880f1ac3fc32530b665b22e427272ce20f137fd132fd2ba161e4
+F src/window.c 5bb6f305800d1502047d37ed8278a153f984fc4e3365c7eec2b9129f9dbec6af
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
 F test/affinity3.test 6a101af2fc945ce2912f6fe54dd646018551710d
@@ -1624,11 +1624,11 @@ F test/window2.tcl 9bfa842d8a62b0d36dc8c1b5972206393c43847433c6d75940b87fec93ce3
 F test/window2.test 8e6d2a1b9f54dfebee1cde961c8590cd87b4db45c50f44947a211e1b63c2a05e
 F test/window3.tcl 577a3b1ff913208e5248c04dab9df17fd760ce159a752789e26d0cb4a5f91823
 F test/window3.test 87fb18021903fc4d1659b8b2092aea55d611a9606cfa7272686234e5197c4b31
-F test/window4.tcl 7cec7e578aa9f78b7265bff8d552cda17a1d8d89f0449d0e74970a527b8846f5
-F test/window4.test dcd8767869988e0d23d56bc3f8b46ec116de23127b81b5f66fd48d5529072ed1
+F test/window4.tcl a7f0e514602c8a6c43bc68c25ecc4def4f3e2abc5f721c4e6cf70eade1a6cfdf
+F test/window4.test 048b4760d0335ccefda73403ff2c054085383cbe5a0e5c175f56eda9d2f419f6
 F test/window5.test 8187f46597c90b73e8f96659e893353cbda337479cc582f7a488eab351ba08d3
 F test/window6.test b3a17d3ca14c211859d1947c2f0b238c4a3f0757d771b6fcb6e03129153ea429
-F test/windowfault.test 97d5fc404308edb579a5a183e294ed874c844ecf01f0a28ba46df3141ebaee1f
+F test/windowfault.test a44baa1b0bdf339d7792623ad3a6ebe057b1a6d7a7fd7ae880c8b744cfc0dafb
 F test/with1.test 58475190cd8caaeebea8cfeb2a264ec97a0c492b8ffe9ad20cefbb23df462f96
 F test/with2.test e0030e2f0267a910d6c0e4f46f2dfe941c1cc0d4f659ba69b3597728e7e8f1ab
 F test/with3.test 5e8ce2c585170bbbc0544e2a01a4941fa0be173ba5265e5c92eb588cd99a232d
@@ -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 fa6538050938ffeb042fbee31512514d6d3ace514b2a3dfd8365bbeb13f35a78
-R 905e7bab4836c398b4da7ed05c2ddee2
+P d59bcc8eea4fcf0ee3c2263d31ee42f9f26c28434d2f0045f2d3329f18791d1c
+R e6aae1c3707698b3e970a44453d51d22
 U dan
-Z 30f785d3f688c11464a096ce2434bfda
+Z 888d6a8bdd8b40734a66b9eb28cd59e6
index ae20b791b02170fb7491d4a6e9937d9e408d6a83..82c045993f5c97fa86b09e7133f08f191d0f09c9 100644 (file)
@@ -1 +1 @@
-d59bcc8eea4fcf0ee3c2263d31ee42f9f26c28434d2f0045f2d3329f18791d1c
\ No newline at end of file
+443f0c286f1659937fd61b4ef2de17d0d015369e5ff5249a9e0c3d0ee4925158
\ No newline at end of file
index 8bf0a2c3fc0938b693aff68146d5dedf7ce1d84b..51995e384c38e558374af0bc16fac2b386430caa 100644 (file)
@@ -243,7 +243,6 @@ void sqlite3VdbeResolveLabel(Vdbe*, int);
 int sqlite3VdbeCurrentAddr(Vdbe*);
 #ifdef SQLITE_DEBUG
   int sqlite3VdbeAssertMayAbort(Vdbe *, int);
-  int sqlite3VdbeAssertAggContext(sqlite3_context*);
 #endif
 void sqlite3VdbeResetStepResult(Vdbe*);
 void sqlite3VdbeRewind(Vdbe*);
index 270756c2990cf5dcf873435f3c3978274496ee20..fcc315bc653eae7accfeb32231e572064e4c7f90 100644 (file)
@@ -824,18 +824,6 @@ void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){
   }
 }
 
-/*
-** This function is only used within assert() statements to check that the
-** aggregate context has already been allocated. i.e.:
-**
-**   assert( sqlite3VdbeAssertAggContext(p) );
-*/
-#ifdef SQLITE_DEBUG
-int sqlite3VdbeAssertAggContext(sqlite3_context *p){
-  return ((p->pMem->flags & MEM_Agg)!=0);
-}
-#endif /* SQLITE_DEBUG */
-
 /*
 ** Return the auxiliary data pointer, if any, for the iArg'th argument to
 ** the user-function defined by pCtx.
index b31ed156d7c3d3bd91c913c929c246defe206aad..d20b90b583ff3ced18dbb8a135d539d78e35fca3 100644 (file)
@@ -255,9 +255,8 @@ static void percent_rankStepFunc(
   struct CallCount *p;
   assert( nArg==1 );
 
-  assert( sqlite3VdbeAssertAggContext(pCtx) );
   p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p));
-  if( ALWAYS(p) ){
+  if( p ){
     if( p->nTotal==0 ){
       p->nTotal = sqlite3_value_int64(apArg[0]);
     }
@@ -301,9 +300,8 @@ static void cume_distStepFunc(
   struct CallCount *p;
   assert( nArg==1 );
 
-  assert( sqlite3VdbeAssertAggContext(pCtx) );
   p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p));
-  if( ALWAYS(p) ){
+  if( p ){
     if( p->nTotal==0 ){
       p->nTotal = sqlite3_value_int64(apArg[0]);
     }
index b3b9ab2ee09b9d7690819c46ee4798a10ca5ff3d..5417c3a3447889aabe722d7aeed40e0bc0f9e99b 100644 (file)
@@ -332,5 +332,13 @@ execsql_test 9.5 {
   SELECT DISTINCT x, rank() OVER (ORDER BY x) FROM t2 ORDER BY 1,2
 }
 
+execsql_float_test 9.6 {
+  SELECT percent_rank() OVER () FROM t1
+}
+
+execsql_float_test 9.7 {
+  SELECT cume_dist() OVER () FROM t1
+}
+
 finish_test
 
index 2376e07a38e650fc57fb968e76149969ea79a4f2..c81173e1dfdd802441cbec8b92a16cf9adfa6061 100644 (file)
@@ -1233,4 +1233,20 @@ do_execsql_test 9.5 {
   SELECT DISTINCT x, rank() OVER (ORDER BY x) FROM t2 ORDER BY 1,2
 } {1 1   4 4   6 6   7 7}
 
+do_test 9.6 {
+  set myres {}
+  foreach r [db eval {SELECT percent_rank() OVER () FROM t1}] {
+    lappend myres [format %.2f [set r]]
+  }
+  set myres
+} {0.00 0.00 0.00}
+
+do_test 9.7 {
+  set myres {}
+  foreach r [db eval {SELECT cume_dist() OVER () FROM t1}] {
+    lappend myres [format %.2f [set r]]
+  }
+  set myres
+} {1.00 1.00 1.00}
+
 finish_test
index 73d63a98fefaf594a1dcdbcdf35d6a4c65ced8c4..6b684fa71c63125702cf4f5b2184dade7fbf11f8 100644 (file)
@@ -129,5 +129,15 @@ do_faultsim_test 5 -start 1 -faults oom-* -prep {
   faultsim_test_result {0 {5 1 9 5 9 9}}
 }
 
+do_faultsim_test 6 -faults oom-* -prep {
+  faultsim_restore_and_reopen
+} -body {
+  execsql {
+    SELECT percent_rank() OVER (), cume_dist() OVER () FROM t1
+  }
+} -test {
+  faultsim_test_result {0 {0.0 1.0 0.0 1.0 0.0 1.0}}
+}
+
 finish_test