-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
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
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
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.
}
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;
}
}
** [[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>
*/