Changeset: d6ae000343b1 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d6ae000343b1 Modified Files: sql/common/sql_types.c sql/server/rel_select.c sql/test/group-concat/Tests/groupconcat05.sql sql/test/group-concat/Tests/groupconcat05.stable.out Branch: statistics-analytics Log Message:
Added listagg aggregate, which is the SQL standard name of group_concat diffs (88 lines): diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c --- a/sql/common/sql_types.c +++ b/sql/common/sql_types.c @@ -1412,6 +1412,9 @@ sqltypeinit( sql_allocator *sa) sql_create_aggr(sa, "count_no_nil", "aggr", "count_no_nil", LNG, 0); sql_create_aggr(sa, "count", "aggr", "count", LNG, 1, ANY); + sql_create_aggr(sa, "listagg", "aggr", "str_group_concat", STR, 1, STR); + sql_create_aggr(sa, "listagg", "aggr", "str_group_concat", STR, 2, STR, STR); + /* order based operators */ sql_create_analytic(sa, "diff", "sql", "diff", SCALE_NONE, BIT, 1, ANY); sql_create_analytic(sa, "diff", "sql", "diff", SCALE_NONE, BIT, 2, BIT, ANY); diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -3409,7 +3409,7 @@ static sql_exp * if (!a && list_length(exps) > 1) { sql_subtype *t1 = exp_subtype(exps->h->data); a = sql_bind_member(sql->sa, s, aname, exp_subtype(exps->h->data), F_AGGR, list_length(exps), NULL); - bool is_group_concat = (!a && strcmp(s->base.name, "sys") == 0 && strcmp(aname, "group_concat") == 0); + bool is_group_concat = (!a && ((s && !strcmp(s->base.name, "sys") && !strcmp(aname, "group_concat")) || !strcmp(aname, "listagg"))); if (list_length(exps) != 2 || (!EC_NUMBER(t1->type->eclass) || !a || is_group_concat || subtype_cmp( &((sql_arg*)a->func->ops->h->data)->type, diff --git a/sql/test/group-concat/Tests/groupconcat05.sql b/sql/test/group-concat/Tests/groupconcat05.sql --- a/sql/test/group-concat/Tests/groupconcat05.sql +++ b/sql/test/group-concat/Tests/groupconcat05.sql @@ -28,4 +28,13 @@ select group_concat(a, 8) from testmore; select group_concat(a, b) from testmore; select group_concat(b, a) from testmore; +/* listagg is the SQL standard name of group_concat */ +select listagg(a) from testmore; +select listagg(b) from testmore; + +select listagg(a, a) from testmore; +select listagg(b, b) from testmore; +select listagg(a, b) from testmore; +select listagg(b, a) from testmore; + rollback; diff --git a/sql/test/group-concat/Tests/groupconcat05.stable.out b/sql/test/group-concat/Tests/groupconcat05.stable.out --- a/sql/test/group-concat/Tests/groupconcat05.stable.out +++ b/sql/test/group-concat/Tests/groupconcat05.stable.out @@ -141,6 +141,42 @@ stdout of test 'groupconcat05` in direct % clob # type % 53 # length [ "another1testing1todo2lets3get2harder3even2more13even1" ] +#select listagg(a) from testmore; +% sys.%1 # table_name +% %1 # name +% varchar # type +% 23 # length +[ "1,1,1,2,3,2,3,2,1,3,2,1" ] +#select listagg(b) from testmore; +% sys.%1 # table_name +% %1 # name +% varchar # type +% 53 # length +[ "another,testing,todo,lets,get,harder,even,more,,even," ] +#select listagg(a, a) from testmore; +% sys.%1 # table_name +% %1 # name +% varchar # type +% 23 # length +[ "11111223322332211332211" ] +#select listagg(b, b) from testmore; +% sys.%1 # table_name +% %1 # name +% varchar # type +% 79 # length +[ "anothertestingtestingtodotodoletsletsgetgetharderharderevenevenmoremoreeveneven" ] +#select listagg(a, b) from testmore; +% sys.%1 # table_name +% %1 # name +% varchar # type +% 47 # length +[ "1testing1todo1lets2get3harder2even3more21even31" ] +#select listagg(b, a) from testmore; +% sys.%1 # table_name +% %1 # name +% varchar # type +% 53 # length +[ "another1testing1todo2lets3get2harder3even2more13even1" ] #rollback; # 12:57:06 > _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list