1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-10-24 09:53:10 +03:00

Add a prototype "group_concat()" aggregate function to func.c.

Disabled by default.  No documentation nor test cases.  No effort
to make it efficient. (CVS 4519)

FossilOrigin-Name: 61987a89d1c4af59c745d1c5f17bab3301588b6c
This commit is contained in:
drh
2007-11-01 17:38:30 +00:00
parent 7c055b9b7c
commit b0689696f2
3 changed files with 49 additions and 9 deletions

View File

@@ -1,5 +1,5 @@
C Avoid\sleaking\sa\sfile\sdescriptor\safter\sa\smalloc\sfailure\son\sunix.\s(CVS\s4518) C Add\sa\sprototype\s"group_concat()"\saggregate\sfunction\sto\sfunc.c.\nDisabled\sby\sdefault.\s\sNo\sdocumentation\snor\stest\scases.\s\sNo\seffort\nto\smake\sit\sefficient.\s(CVS\s4519)
D 2007-10-30T17:28:52 D 2007-11-01T17:38:31
F Makefile.in 30c7e3ba426ddb253b8ef037d1873425da6009a8 F Makefile.in 30c7e3ba426ddb253b8ef037d1873425da6009a8
F Makefile.linux-gcc 65241babba6faf1152bf86574477baab19190499 F Makefile.linux-gcc 65241babba6faf1152bf86574477baab19190499
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -91,7 +91,7 @@ F src/date.c 49c5a6d2de6c12000905b4d36868b07d3011bbf6
F src/delete.c 849846d06d29851dde0d9f424a5de5817eb140d1 F src/delete.c 849846d06d29851dde0d9f424a5de5817eb140d1
F src/experimental.c 1b2d1a6cd62ecc39610e97670332ca073c50792b F src/experimental.c 1b2d1a6cd62ecc39610e97670332ca073c50792b
F src/expr.c 23fac3749024deeaaa6c25b6b5c521e8d140a2c5 F src/expr.c 23fac3749024deeaaa6c25b6b5c521e8d140a2c5
F src/func.c e8e8978804ba453e9e1377db8824c90871b53cfb F src/func.c 73b4974e5ff03cc71345cc3a33b0022f7b99974a
F src/hash.c 45a7005aac044b6c86bd7e49c44bc15d30006d6c F src/hash.c 45a7005aac044b6c86bd7e49c44bc15d30006d6c
F src/hash.h 031cd9f915aff27e12262cb9eb570ac1b8326b53 F src/hash.h 031cd9f915aff27e12262cb9eb570ac1b8326b53
F src/insert.c df9712e1f67201573a9677d3a2fe401d52d84dda F src/insert.c df9712e1f67201573a9677d3a2fe401d52d84dda
@@ -584,7 +584,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5 F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
P 4ad60bdba0f1aa068dcc42fb58b80d7912e36b1b P c249d5da721b32f6fe409a5b55a5d49a58994fec
R eab92563ee745f8784bf52cc2537c42c R dd9daad3a663125d3750f5ba94a500df
U danielk1977 U drh
Z b867cfa02d41c621c1fcb64d6a074295 Z 6d1463c2813fdf26e95139312eb630a5

View File

@@ -1 +1 @@
c249d5da721b32f6fe409a5b55a5d49a58994fec 61987a89d1c4af59c745d1c5f17bab3301588b6c

View File

@@ -16,7 +16,7 @@
** sqliteRegisterBuildinFunctions() found at the bottom of the file. ** sqliteRegisterBuildinFunctions() found at the bottom of the file.
** All other code has file scope. ** All other code has file scope.
** **
** $Id: func.c,v 1.175 2007/10/12 19:11:55 drh Exp $ ** $Id: func.c,v 1.176 2007/11/01 17:38:31 drh Exp $
*/ */
#include "sqliteInt.h" #include "sqliteInt.h"
#include <ctype.h> #include <ctype.h>
@@ -1312,6 +1312,42 @@ static void minMaxFinalize(sqlite3_context *context){
} }
} }
#ifdef SQLITE_GROUP_CONCAT
/*
** group_concat(EXPR, ?SEPARATOR?)
*/
static void groupConcatStep(
sqlite3_context *context,
int argc,
sqlite3_value **argv
){
const char *zVal;
char **pzAccumulator;
const char *zSep;
if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
zVal = sqlite3_value_text(argv[0]);
pzAccumulator = (char**)sqlite3_aggregate_context(context, sizeof(char*));
if( pzAccumulator ){
if( *pzAccumulator==0 ){
*pzAccumulator = sqlite3_mprintf("%s", zVal);
}else{
if( argc==2 ){
zSep = sqlite3_value_text(argv[1]);
}else{
zSep = ",";
}
*pzAccumulator = sqlite3_mprintf("%z%s%s", *pzAccumulator, zSep, zVal);
}
}
}
static void groupConcatFinalize(sqlite3_context *context){
char **pzAccum;
pzAccum = sqlite3_aggregate_context(context, 0);
if( pzAccum ){
sqlite3_result_text(context, *pzAccum, -1, sqlite3_free);
}
}
#endif /*SQLITE_GROUP_CONCAT*/
/* /*
** This function registered all of the above C functions as SQL ** This function registered all of the above C functions as SQL
@@ -1391,6 +1427,10 @@ void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
{ "avg", 1, 0, 0, sumStep, avgFinalize }, { "avg", 1, 0, 0, sumStep, avgFinalize },
{ "count", 0, 0, 0, countStep, countFinalize }, { "count", 0, 0, 0, countStep, countFinalize },
{ "count", 1, 0, 0, countStep, countFinalize }, { "count", 1, 0, 0, countStep, countFinalize },
#ifdef SQLITE_GROUP_CONCAT
{ "group_concat", 1, 0, 0, groupConcatStep, groupConcatFinalize },
{ "group_concat", 2, 0, 0, groupConcatStep, groupConcatFinalize },
#endif
}; };
int i; int i;