From: drh <> Date: Sun, 1 Sep 2024 19:19:26 +0000 (+0000) Subject: No prepare-time penality for ordered-set aggregates for applications that X-Git-Tag: version-3.47.0~158^2~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7aa01a0ffc3197551d19178797d3d6c5356f2996;p=thirdparty%2Fsqlite.git No prepare-time penality for ordered-set aggregates for applications that do not use them. FossilOrigin-Name: e070c16d2183312e416ff6af770346041e4d3836c4db2c9ea6049f63fb0eaa07 --- diff --git a/manifest b/manifest index 7827fc9c59..575b14e652 100644 --- 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. diff --git a/manifest.uuid b/manifest.uuid index 1f6e329c93..5ee39e884b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7528ddcfdf155116353266e00e6408c526e29f04cb00ca2d9e84b105329b17c0 +e070c16d2183312e416ff6af770346041e4d3836c4db2c9ea6049f63fb0eaa07 diff --git a/src/parse.y b/src/parse.y index 3db20e9acc..c126c815d6 100644 --- a/src/parse.y +++ b/src/parse.y @@ -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; } } diff --git a/src/resolve.c b/src/resolve.c index f448bc324a..b755cc8646 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -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 ){ diff --git a/src/sqlite.h.in b/src/sqlite.h.in index 8e5e327c93..c1f1c1c368 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -5619,9 +5619,9 @@ int sqlite3_create_window_function( ** [[SQLITE_SELFORDER1]]