From: drh <> Date: Sun, 1 Sep 2024 23:27:34 +0000 (+0000) Subject: The WITHIN GROUP (ORDER BY ...) syntax is now a compile-time option: X-Git-Tag: version-3.47.0~158^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1c30df3598e03605906fe127817dc3e42dc27460;p=thirdparty%2Fsqlite.git The WITHIN GROUP (ORDER BY ...) syntax is now a compile-time option: SQLITE_ENABLE_ORDERED_SET_FUNCS. There is no increment in the code size if the option is omitted. FossilOrigin-Name: c9367e2532d653738af27c4d92810eb648a9e12f72d7223017c87cb0dddc6804 --- diff --git a/manifest b/manifest index 72c50d4947..89cd7c0795 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Implement\spercentile_cont()\sand\spercentile_disc(). -D 2024-09-01T20:24:24.177 +C The\sWITHIN\sGROUP\s(ORDER\sBY\s...)\ssyntax\sis\snow\sa\scompile-time\soption:\nSQLITE_ENABLE_ORDERED_SET_FUNCS.\s\sThere\sis\sno\sincrement\sin\sthe\scode\ssize\nif\sthe\soption\sis\somitted. +D 2024-09-01T23:27:34.356 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -710,7 +710,7 @@ F src/btreeInt.h 98aadb6dcb77b012cab2574d6a728fad56b337fc946839b9898c4b4c969e30b F src/build.c 3a1840d9d171ce2d24f4c1f7acda7266ab796c664290c1acba65ff98ce2bd01e F src/callback.c db3a45e376deff6a16c0058163fe0ae2b73a2945f3f408ca32cf74960b28d490 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e -F src/ctime.c 64e4b1227b4ed123146f0aa2989131d1fbd9b927b11e80c9d58c6a68f9cd5ce3 +F src/ctime.c c130635c99df1fcd1212613230d4f326ca3adb6982bfdb92e224a831e188b0ce F src/date.c 89ce1ff20512a7fa5070ba6e7dd5c171148ca7d580955795bf97c79c2456144a F src/dbpage.c 80e46e1df623ec40486da7a5086cb723b0275a6e2a7b01d9f9b5da0f04ba2782 F src/dbstat.c 73362c0df0f40ad5523a6f5501224959d0976757b511299bf892313e79d14f5c @@ -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 ee8ed7b79a4b855e803efd9494f634eb9365aa0e0f84e436414eb2e0e20ce874 +F src/parse.y 228eaa370f4467106af4b2065cd7d1e1382e7f248070dc67e86d1fc8975ad69e F src/pcache.c 588cc3c5ccaaadde689ed35ce5c5c891a1f7b1f4d1f56f6cf0143b74d8ee6484 F src/pcache.h 1497ce1b823cf00094bb0cf3bac37b345937e6f910890c626b16512316d3abf5 F src/pcache1.c 49516ad7718a3626f28f710fa7448ef1fce3c07fd169acbb4817341950264319 @@ -767,7 +767,7 @@ 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 f703fff052233db19a269cfda8ff6648d91dfa3159652ec4d8b211445f70c159 +F src/sqlite.h.in 42c48f4f78a18580de594208ac48fda6ea8f0c68810e059ae502329017c55f98 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54 F src/sqliteInt.h 889cd632f4386bbd8619b166abb7d25f1c8ce6514e90cb7f22f63bd530fc6107 @@ -790,7 +790,7 @@ F src/test_backup.c bd901e3c116c7f3b3bbbd4aae4ce87d99b400c9cbb0a9e7b4610af451d97 F src/test_bestindex.c 3401bee51665cbf7f9ed2552b5795452a8b86365e4c9ece745b54155a55670c6 F src/test_blob.c bcdf6a6c22d0bcc13c41479d63692ef413add2a4d30e1e26b9f74ab85b9fb4d5 F src/test_btree.c 28283787d32b8fa953eb77412ad0de2c9895260e4e5bd5a94b3c7411664f90d5 -F src/test_config.c 46eaf39842cace9d540aeefb50fe24dd3204a622893a97952cbb49c20b2f8b21 +F src/test_config.c 31846473de1803736ab0e4423424173357b6c3e2bc8cae93fea6d01a4c441c04 F src/test_delete.c e2fe07646dff6300b48d49b2fee2fe192ed389e834dd635e3b3bac0ce0bf9f8f F src/test_demovfs.c 3efa2adf4f21e10d95521721687d5ca047aea91fa62dd8cc22ac9e5a9c942383 F src/test_devsym.c 649434ed34d0b03fbd5a6b42df80f0f9a7e53f94dd1710aad5dd8831e91c4e86 @@ -1715,7 +1715,7 @@ F test/temptable3.test d11a0974e52b347e45ee54ef1923c91ed91e4637 F test/temptrigger.test 38f0ca479b1822d3117069e014daabcaacefffcc F test/tester.tcl 2c203a2dd664298f239f0ec3ce22fbc65b5f021c1e09edbae8452af8a694e052 F test/testrunner.tcl 662af46f1f0a41eb197f17583698853dd130ff3d47cf136dd519c3aecd9a9d7d -F test/testrunner_data.tcl f1cbff53fe42087cac3d43ca02f9574bd212c842307442e2b6fff2183f5ccbfe +F test/testrunner_data.tcl 0cdd2d71d2fef65ef1ef72709336cbb229580f12e8deb3cbc55c3af971256ccc F test/thread001.test a0985c117eab62c0c65526e9fa5d1360dd1cac5b03bde223902763274ce21899 F test/thread002.test c24c83408e35ba5a952a3638b7ac03ccdf1ce4409289c54a050ac4c5f1de7502 F test/thread003.test ee4c9efc3b86a6a2767516a37bd64251272560a7 @@ -2131,8 +2131,8 @@ F tool/max-limits.c cbb635fbb37ae4d05f240bfb5b5270bb63c54439 F tool/merge-test.tcl de76b62f2de2a92d4c1ca4f976bce0aea6899e0229e250479b229b2a1914b176 F tool/mkautoconfamal.sh cbdcf993fa83dccbef7fb77b39cdeb31ef9f77d9d88c9e343b58d35ca3898a6a F tool/mkccode.tcl 86463e68ce9c15d3041610fedd285ce32a5cf7a58fc88b3202b8b76837650dbe x -F tool/mkctimec.tcl 48ca8eefa9e615cb9057ce6485b9c9ae5801381f24690d7d60b3b2dc8e6b7457 x -F tool/mkkeywordhash.c d2d7369faacb45e7ec089ccbc2fd48e2fcab3d62d3533648c4017d5df1abd37d +F tool/mkctimec.tcl 643f691143c4ad45d8c743538d1303fa5e78f9b164db4eef6a4e818fa34b5518 x +F tool/mkkeywordhash.c 2f1c62255f5866d85e8d39efaa9ef88216cac4bd3d20e0b971c4bac42c79adc4 F tool/mkmsvcmin.tcl d76c45efda1cce2d4005bcea7b8a22bb752e3256009f331120fb4fecb14ebb7a F tool/mkopcodec.tcl 33d20791e191df43209b77d37f0ff0904620b28465cca6990cf8d60da61a07ef F tool/mkopcodeh.tcl 2b4e6967a670ef21bf53a164964c35c6163277d002a4c6f56fa231d68c88d023 @@ -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 e070c16d2183312e416ff6af770346041e4d3836c4db2c9ea6049f63fb0eaa07 -R ed42ef3fb6a6b57f98420c8f5c685fd3 +P b1a93f67d6b21df6fe3247c9333fead61dd425574f66ea3eb06b80c2b06f616a +R 53af1edd1d9feb68bdee109d972b107c U drh -Z a8f5cefc04272da03f15e22958022f9e +Z 4ca68917083632dff3be94c09fa2e867 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 8048ca7545..735947519d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b1a93f67d6b21df6fe3247c9333fead61dd425574f66ea3eb06b80c2b06f616a +c9367e2532d653738af27c4d92810eb648a9e12f72d7223017c87cb0dddc6804 diff --git a/src/ctime.c b/src/ctime.c index 0ffe2a5bdf..486b29a26b 100644 --- a/src/ctime.c +++ b/src/ctime.c @@ -295,6 +295,9 @@ static const char * const sqlite3azCompileOpt[] = { #ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC "ENABLE_OFFSET_SQL_FUNC", #endif +#ifdef SQLITE_ENABLE_ORDERED_SET_FUNCS + "ENABLE_ORDERED_SET_FUNCS", +#endif #ifdef SQLITE_ENABLE_OVERSIZE_CELL_CHECK "ENABLE_OVERSIZE_CELL_CHECK", #endif diff --git a/src/parse.y b/src/parse.y index c126c815d6..72c1b66cfa 100644 --- a/src/parse.y +++ b/src/parse.y @@ -255,7 +255,7 @@ columnname(A) ::= nm(A) typetoken(Y). {sqlite3AddColumn(pParse,A,Y);} EACH END EXCLUSIVE EXPLAIN FAIL FOR IGNORE IMMEDIATE INITIALLY INSTEAD LIKE_KW MATCH NO PLAN QUERY KEY OF OFFSET PRAGMA RAISE RECURSIVE RELEASE REPLACE RESTRICT ROW ROWS - ROLLBACK SAVEPOINT TEMP TRIGGER VACUUM VIEW VIRTUAL WITH WITHIN WITHOUT + ROLLBACK SAVEPOINT TEMP TRIGGER VACUUM VIEW VIRTUAL WITH WITHOUT NULLS FIRST LAST %ifdef SQLITE_OMIT_COMPOUND_SELECT EXCEPT INTERSECT UNION @@ -264,6 +264,9 @@ columnname(A) ::= nm(A) typetoken(Y). {sqlite3AddColumn(pParse,A,Y);} CURRENT FOLLOWING PARTITION PRECEDING RANGE UNBOUNDED EXCLUDE GROUPS OTHERS TIES %endif SQLITE_OMIT_WINDOWFUNC +%ifdef SQLITE_ENABLE_ORDERED_SET_FUNCS + WITHIN +%endif SQLITE_ENABLE_ORDERED_SET_FUNCS %ifndef SQLITE_OMIT_GENERATED_COLUMNS GENERATED ALWAYS %endif @@ -1179,6 +1182,7 @@ expr(A) ::= idj(X) LP STAR RP. { A = sqlite3ExprFunction(pParse, 0, &X, 0); } +%ifdef SQLITE_ENABLE_ORDERED_SET_FUNCS %include { /* Generate an expression node that represents an ordered-set aggregate function */ static Expr *sqlite3ExprAddOrderedsetFunction( @@ -1219,6 +1223,7 @@ expr(A) ::= idj(X) LP STAR RP. { expr(A) ::= idj(X) LP distinct(D) exprlist(Y) RP WITHIN GROUP LP ORDER BY expr(E) RP. { A = sqlite3ExprAddOrderedsetFunction(pParse, &X, D, Y, E); } +%endif SQLITE_ENABLE_ORDERED_SET_FUNCS %ifndef SQLITE_OMIT_WINDOWFUNC expr(A) ::= idj(X) LP distinct(D) exprlist(Y) RP filter_over(Z). { @@ -1234,13 +1239,15 @@ expr(A) ::= idj(X) LP STAR RP filter_over(Z). { A = sqlite3ExprFunction(pParse, 0, &X, 0); sqlite3WindowAttach(pParse, A, Z); } +%ifdef SQLITE_ENABLE_ORDERED_SET_FUNCS expr(A) ::= idj(X) LP distinct(D) exprlist(Y) RP WITHIN GROUP LP ORDER BY expr(E) RP filter_over(Z). { A = sqlite3ExprAddOrderedsetFunction(pParse, &X, D, Y, E); sqlite3WindowAttach(pParse, A, Z); } +%endif SQLITE_ENABLE_ORDERED_SET_FUNCS -%endif +%endif SQLITE_OMIT_WINDOWFUNC term(A) ::= CTIME_KW(OP). { A = sqlite3ExprFunction(pParse, 0, &OP, 0); diff --git a/src/sqlite.h.in b/src/sqlite.h.in index c1f1c1c368..b211299e6d 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -5621,7 +5621,9 @@ int sqlite3_create_window_function( ** that internally orders the values provided to the first argument. The ** 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. +** used on a function that lacks this flag, then an error is raised. Note +** that the ordered-set aggregate syntax is only available if SQLite is +** built using the -DSQLITE_ENABLE_ORDERED_SET_FUNCS compile-time option. ** ** */ diff --git a/src/test_config.c b/src/test_config.c index 58de5a4625..c4f06b7cac 100644 --- a/src/test_config.c +++ b/src/test_config.c @@ -341,6 +341,14 @@ static void set_options(Tcl_Interp *interp){ Tcl_SetVar2(interp, "sqlite_options", "columnmetadata", "0", TCL_GLOBAL_ONLY); #endif +#ifdef SQLITE_ENABLE_ORDEREDSETFUNC + Tcl_SetVar2(interp, "sqlite_options", "ordered_set_funcs", "1", + TCL_GLOBAL_ONLY); +#else + Tcl_SetVar2(interp, "sqlite_options", "ordered_set_funcs", "0", + TCL_GLOBAL_ONLY); +#endif + #ifdef SQLITE_ENABLE_OVERSIZE_CELL_CHECK Tcl_SetVar2(interp, "sqlite_options", "oversize_cell_check", "1", TCL_GLOBAL_ONLY); diff --git a/test/testrunner_data.tcl b/test/testrunner_data.tcl index 71a42ab404..10f9262563 100644 --- a/test/testrunner_data.tcl +++ b/test/testrunner_data.tcl @@ -95,6 +95,7 @@ namespace eval trd { # set build(All-Debug) { --enable-debug --enable-all + -DSQLITE_ENABLE_ORDERED_SET_FUNCS } set build(All-O0) { -O0 --enable-all diff --git a/tool/mkctimec.tcl b/tool/mkctimec.tcl index 7ca664a37e..90360cb204 100755 --- a/tool/mkctimec.tcl +++ b/tool/mkctimec.tcl @@ -159,6 +159,7 @@ set boolean_defnil_options { SQLITE_ENABLE_MULTIPLEX SQLITE_ENABLE_NORMALIZE SQLITE_ENABLE_NULL_TRIM + SQLITE_ENABLE_ORDERED_SET_FUNCS SQLITE_ENABLE_OFFSET_SQL_FUNC SQLITE_ENABLE_OVERSIZE_CELL_CHECK SQLITE_ENABLE_PREUPDATE_HOOK diff --git a/tool/mkkeywordhash.c b/tool/mkkeywordhash.c index d4d04da6e3..bf4b0c32d3 100644 --- a/tool/mkkeywordhash.c +++ b/tool/mkkeywordhash.c @@ -164,6 +164,11 @@ struct Keyword { #else # define RETURNING 0x00400000 #endif +#ifndef SQLITE_ENABLE_ORDERED_SET_FUNCS +# define ORDERSET 0 +#else +# define ORDERSET 0x00800000 +#endif /* @@ -316,7 +321,7 @@ static Keyword aKeywordTable[] = { { "WHERE", "TK_WHERE", ALWAYS, 10 }, { "WINDOW", "TK_WINDOW", WINDOWFUNC, 3 }, { "WITH", "TK_WITH", CTE, 4 }, - { "WITHIN", "TK_WITHIN", ALWAYS, 1 }, + { "WITHIN", "TK_WITHIN", ORDERSET, 1 }, { "WITHOUT", "TK_WITHOUT", ALWAYS, 1 }, };