]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
The WITHIN GROUP (ORDER BY ...) syntax is now a compile-time option:
authordrh <>
Sun, 1 Sep 2024 23:27:34 +0000 (23:27 +0000)
committerdrh <>
Sun, 1 Sep 2024 23:27:34 +0000 (23:27 +0000)
SQLITE_ENABLE_ORDERED_SET_FUNCS.  There is no increment in the code size
if the option is omitted.

FossilOrigin-Name: c9367e2532d653738af27c4d92810eb648a9e12f72d7223017c87cb0dddc6804

manifest
manifest.uuid
src/ctime.c
src/parse.y
src/sqlite.h.in
src/test_config.c
test/testrunner_data.tcl
tool/mkctimec.tcl
tool/mkkeywordhash.c

index 72c50d4947f2974d50b7bb9c16ba09996afeb01b..89cd7c0795005d10651c47e3e22c7e0860147af7 100644 (file)
--- 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.
index 8048ca7545bc162d2a3c9e9831bf6f3b5c68dd4c..735947519d894219fc0244cf046f48780e7fa119 100644 (file)
@@ -1 +1 @@
-b1a93f67d6b21df6fe3247c9333fead61dd425574f66ea3eb06b80c2b06f616a
+c9367e2532d653738af27c4d92810eb648a9e12f72d7223017c87cb0dddc6804
index 0ffe2a5bdf1ee9e145dd121b1ec42908094d206e..486b29a26b2d615318359df099134028374c9fc4 100644 (file)
@@ -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
index c126c815d633620a81ec8cd7aeb342418f6f4beb..72c1b66cfadae75e8b21a86e5f7218b487b4d13d 100644 (file)
@@ -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);
index c1f1c1c36870dfd61931a4b3763628b8ee985515..b211299e6d7c7f0b8f417d598ff29853ca8547d7 100644 (file)
@@ -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.
 ** </dd>
 ** </dl>
 */
index 58de5a46253da7abfd9602a3b66cc75053b2e743..c4f06b7cac789f1a1ce0bd862a87bf52d860e870 100644 (file)
@@ -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);
index 71a42ab404eb0ef0635403fd05252112124b7864..10f92625635e8fa609ff242b614c2a2f8049f612 100644 (file)
@@ -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
index 7ca664a37e593a420004d3f9a7e30643bffc8465..90360cb204e6cc2974f5e6836141b217fcd17fa8 100755 (executable)
@@ -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
index d4d04da6e343c04622f00e14f3addf1b466820ed..bf4b0c32d3fb3d22edcf56ae8b4e52ee05f24f69 100644 (file)
@@ -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      },
 };