]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
No prepare-time penality for ordered-set aggregates for applications that
authordrh <>
Sun, 1 Sep 2024 19:19:26 +0000 (19:19 +0000)
committerdrh <>
Sun, 1 Sep 2024 19:19:26 +0000 (19:19 +0000)
do not use them.

FossilOrigin-Name: e070c16d2183312e416ff6af770346041e4d3836c4db2c9ea6049f63fb0eaa07

manifest
manifest.uuid
src/parse.y
src/resolve.c
src/sqlite.h.in
src/sqliteInt.h

index 7827fc9c59fa1ea138a10ace22b507515c507ea6..575b14e652161ed54e35a602473f65325ab09f61 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Merge\sfixes\sfrom\strunk\sinto\sthe\sordere-set-agg\sbranch.
-D 2024-09-01T18:57:52.231
+C No\sprepare-time\spenality\sfor\sordered-set\saggregates\sfor\sapplications\sthat\ndo\snot\suse\sthem.
+D 2024-09-01T19:19:26.665
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -754,7 +754,7 @@ F src/os_win.c 6ff43bac175bd9ed79e7c0f96840b139f2f51d01689a638fd05128becf94908a
 F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
 F src/pager.c b08600ebf0db90b6d1e9b8b6577c6fa3877cbe1a100bd0b2899e4c6e9adad4b3
 F src/pager.h 4b1140d691860de0be1347474c51fee07d5420bd7f802d38cbab8ea4ab9f538a
-F src/parse.y 93b0f932dbae742fa8e1fd4fd74f8ca9330b396e0a108664010954311dd9a4ea
+F src/parse.y ee8ed7b79a4b855e803efd9494f634eb9365aa0e0f84e436414eb2e0e20ce874
 F src/pcache.c 588cc3c5ccaaadde689ed35ce5c5c891a1f7b1f4d1f56f6cf0143b74d8ee6484
 F src/pcache.h 1497ce1b823cf00094bb0cf3bac37b345937e6f910890c626b16512316d3abf5
 F src/pcache1.c 49516ad7718a3626f28f710fa7448ef1fce3c07fd169acbb4817341950264319
@@ -763,14 +763,14 @@ F src/pragma.h e690a356c18e98414d2e870ea791c1be1545a714ba623719deb63f7f226d8bb7
 F src/prepare.c d99931f45416652895e502328ca49fe782cfc4e1ebdcda13b3736d991ebf42ce
 F src/printf.c 6a87534ebfb9e5346011191b1f3a7ebc457f5938c7e4feeea478ecf53f6a41b2
 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
-F src/resolve.c b7e50d31c5dd15dd129b30943212a77d24ee62058d6c60cfc6ed5de9570f2063
+F src/resolve.c 2c127880c0634962837f16f2f48a295e514357af959330cc038de73015d5b5e8
 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
 F src/select.c 4b14337a2742f0c0beeba490e9a05507e9b4b12184b9cd12773501d08d48e3fe
 F src/shell.c.in 40de636c1d90fb8a9ca7f49dc8f50d930f1b60736e73aca5eb37c4c7d0e47f9d
-F src/sqlite.h.in 4929a538ee660b23d774dd691f444f91b4aff2c05d6e98acce607ee7ae93e833
+F src/sqlite.h.in f703fff052233db19a269cfda8ff6648d91dfa3159652ec4d8b211445f70c159
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
 F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54
-F src/sqliteInt.h aa6ed92b72969d97def6c346dfc6b5194276f44f43c332184e7d8861a7abb0d0
+F src/sqliteInt.h 889cd632f4386bbd8619b166abb7d25f1c8ce6514e90cb7f22f63bd530fc6107
 F src/sqliteLimit.h 6878ab64bdeb8c24a1d762d45635e34b96da21132179023338c93f820eee6728
 F src/status.c cb11f8589a6912af2da3bb1ec509a94dd8ef27df4d4c1a97e0bcf2309ece972b
 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
@@ -2211,8 +2211,8 @@ F vsixtest/vsixtest.tcl 6195aba1f12a5e10efc2b8c0009532167be5e301abe5b31385638080
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 317d901429303340290334dbe7680a36339df0a50b586e3f71b6c5e5eba6d411 9f84e8d59bcda642e732565e840f6a880a01b2fc65af2651248f6a8a6e1cb65a
-R 5acc7ba4dfcfa66be05e9be878c8ce45
+P 7528ddcfdf155116353266e00e6408c526e29f04cb00ca2d9e84b105329b17c0
+R d3f3c0474c71bd75891856c6ee9d7573
 U drh
-Z 02d4f1f356aa5a390460fc145367b9bc
+Z 9be7e64939656f5720b58c58cd9e6ba2
 # Remove this line to create a well-formed Fossil manifest.
index 1f6e329c93dc10f1a3eca84aa9c5b0a1ae24f290..5ee39e884beea05dad7bb5c48a17e64b9440186f 100644 (file)
@@ -1 +1 @@
-7528ddcfdf155116353266e00e6408c526e29f04cb00ca2d9e84b105329b17c0
+e070c16d2183312e416ff6af770346041e4d3836c4db2c9ea6049f63fb0eaa07
index 3db20e9acc429687d87527e0b5a8888bcb9c0673..c126c815d633620a81ec8cd7aeb342418f6f4beb 100644 (file)
@@ -1199,12 +1199,20 @@ expr(A) ::= idj(X) LP STAR RP. {
       }
       sqlite3ExprListDelete(pParse->db, pOrig);
     }
-    if( isDistinct==SF_Distinct ){
-      sqlite3ErrorMsg(pParse, "DISTINCT not allows on ordered-set aggregate %T()",
-                      pFuncname);
-    }
     pExpr = sqlite3ExprFunction(pParse, p, pFuncname, 0);
-    if( pExpr ) pExpr->iColumn = 1;
+    if( pParse->nErr==0 ){
+      FuncDef *pDef;
+      u8 enc = ENC(pParse->db);
+      assert( pExpr!=0 );  /* Because otherwise pParse->nErr would not be zero */
+      assert( p!=0 );      /* Because otherwise pParse->nErr would not be zero */
+      pDef = sqlite3FindFunction(pParse->db, pExpr->u.zToken, p->nExpr, enc, 0);
+      if( pDef==0 || (pDef->funcFlags & SQLITE_SELFORDER1)==0 ){
+        sqlite3ErrorMsg(pParse, "%#T() is not an ordered-set aggregate", pExpr);
+      }else if( isDistinct==SF_Distinct ){
+        sqlite3ErrorMsg(pParse, "DISTINCT not allows on ordered-set aggregate %T()",
+                        pFuncname);
+      }
+    }
     return pExpr;
   }
 }
index f448bc324a0a107836955909751518bdd83a5f61..b755cc86464dbdd1aaea8f9ed4da9dfe25451466 100644 (file)
@@ -1292,10 +1292,6 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
       else if( ExprHasProperty(pExpr, EP_WinFunc) || pExpr->pLeft ){
         is_agg = 1;
       }
-      if( pExpr->iColumn && (pDef->funcFlags & SQLITE_SELFORDER1)==0 ){
-        sqlite3ErrorMsg(pParse, "%#T() is not a ordered-set aggregate function",
-                        pExpr);
-      }
       sqlite3WalkExprList(pWalker, pList);
       if( is_agg ){
         if( pExpr->pLeft ){
index 8e5e327c93d81aac2c374dfb5c4842e83280d4a2..c1f1c1c36870dfd61931a4b3763628b8ee985515 100644 (file)
@@ -5619,9 +5619,9 @@ int sqlite3_create_window_function(
 ** [[SQLITE_SELFORDER1]] <dt>SQLITE_SELFORDER1</dt><dd>
 ** The SQLITE_SELFORDER1 flag indicates that the function is an aggregate
 ** that internally orders the values provided to the first argument.  The
-** ordered-set aggregate SQL notation can be used to invoke this function.
-** If the ordered-set aggregate notation is used on a function that lacks
-** this flag, then an error is raised.
+** ordered-set aggregate SQL notation with a single ORDER BY term can be
+** used to invoke this function.  If the ordered-set aggregate notation is
+** used on a function that lacks this flag, then an error is raised.
 ** </dd>
 ** </dl>
 */
index b77f035e7692f482843dbda171dabbe0679c0654..0dab59f7a420d9a7c1b5228956401067fc25bdbb 100644 (file)
@@ -3052,7 +3052,6 @@ struct Expr {
                          ** TK_SELECT: 1st register of result vector */
   ynVar iColumn;         /* TK_COLUMN: column index.  -1 for rowid.
                          ** TK_VARIABLE: variable number (always >= 1).
-                         ** TK_FUNCTION: Uses ordered-set aggregate syntax
                          ** TK_SELECT_COLUMN: column of the result vector */
   i16 iAgg;              /* Which entry in pAggInfo->aCol[] or ->aFunc[] */
   union {