Changeset: 538f587f2c55 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=538f587f2c55 Added Files: sql/test/analytics/Tests/analytics19.sql sql/test/analytics/Tests/analytics19.stable.err sql/test/analytics/Tests/analytics19.stable.out Modified Files: clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 clients/Tests/exports.stable.out gdk/gdk_analytic.h gdk/gdk_analytic_func.c sql/backends/monet5/sql.c sql/backends/monet5/sql_rank.c sql/backends/monet5/sql_rank.h sql/common/sql_types.c sql/test/analytics/Tests/All sql/test/sys-schema/Tests/systemfunctions.stable.out.int128 Branch: oscar Log Message:
Implemented avg window function with the same output type as the input one (needed for decimals and intervals) diffs (truncated from 610 to 300 lines): diff --git a/clients/Tests/MAL-signatures.stable.out b/clients/Tests/MAL-signatures.stable.out --- a/clients/Tests/MAL-signatures.stable.out +++ b/clients/Tests/MAL-signatures.stable.out @@ -9701,6 +9701,10 @@ stdout of test 'MAL-signatures` in direc [ "batsql", "avg", "pattern batsql.avg(X_1:bat[:int], X_2:bat[:lng], X_3:bat[:lng]):bat[:dbl] ", "SQLavg;", "" ] [ "batsql", "avg", "pattern batsql.avg(X_1:bat[:lng], X_2:bat[:lng], X_3:bat[:lng]):bat[:dbl] ", "SQLavg;", "" ] [ "batsql", "avg", "pattern batsql.avg(X_1:bat[:sht], X_2:bat[:lng], X_3:bat[:lng]):bat[:dbl] ", "SQLavg;", "" ] +[ "batsql", "avg", "pattern batsql.avg(X_1:bat[:bte], X_2:bat[:lng], X_3:bat[:lng]):bat[:bte] ", "SQLavginteger;", "" ] +[ "batsql", "avg", "pattern batsql.avg(X_1:bat[:int], X_2:bat[:lng], X_3:bat[:lng]):bat[:int] ", "SQLavginteger;", "" ] +[ "batsql", "avg", "pattern batsql.avg(X_1:bat[:lng], X_2:bat[:lng], X_3:bat[:lng]):bat[:lng] ", "SQLavginteger;", "" ] +[ "batsql", "avg", "pattern batsql.avg(X_1:bat[:sht], X_2:bat[:lng], X_3:bat[:lng]):bat[:sht] ", "SQLavginteger;", "" ] [ "batsql", "corr", "pattern batsql.corr(X_1:bat[:bte], X_2:bat[:bte], X_3:bat[:lng], X_4:bat[:lng]):bat[:dbl] ", "SQLcorr;", "" ] [ "batsql", "corr", "pattern batsql.corr(X_1:bat[:bte], X_2:bte, X_3:bat[:lng], X_4:bat[:lng]):bat[:dbl] ", "SQLcorr;", "" ] [ "batsql", "corr", "pattern batsql.corr(X_1:bat[:dbl], X_2:bat[:dbl], X_3:bat[:lng], X_4:bat[:lng]):bat[:dbl] ", "SQLcorr;", "" ] @@ -12420,6 +12424,10 @@ stdout of test 'MAL-signatures` in direc [ "sql", "avg", "pattern sql.avg(X_1:int, X_2:lng, X_3:lng):dbl ", "SQLavg;", "" ] [ "sql", "avg", "pattern sql.avg(X_1:lng, X_2:lng, X_3:lng):dbl ", "SQLavg;", "" ] [ "sql", "avg", "pattern sql.avg(X_1:sht, X_2:lng, X_3:lng):dbl ", "SQLavg;", "" ] +[ "sql", "avg", "pattern sql.avg(X_1:bte, X_2:lng, X_3:lng):bte ", "SQLavginteger;", "" ] +[ "sql", "avg", "pattern sql.avg(X_1:int, X_2:lng, X_3:lng):int ", "SQLavginteger;", "" ] +[ "sql", "avg", "pattern sql.avg(X_1:lng, X_2:lng, X_3:lng):lng ", "SQLavginteger;", "" ] +[ "sql", "avg", "pattern sql.avg(X_1:sht, X_2:lng, X_3:lng):sht ", "SQLavginteger;", "" ] [ "sql", "bind", "pattern sql.bind(X_1:int, X_2:str, X_3:str, X_4:str, X_5:int):bat[:any_1] ", "mvc_bind_wrap;", "" ] [ "sql", "bind", "pattern sql.bind(X_1:int, X_2:str, X_3:str, X_4:str, X_5:int, X_6:int, X_7:int):bat[:any_1] ", "mvc_bind_wrap;", "" ] [ "sql", "bind", "pattern sql.bind(X_2:int, X_3:str, X_4:str, X_5:str, X_6:int) (X_0:bat[:oid], X_1:bat[:any_1]) ", "mvc_bind_wrap;", "" ] diff --git a/clients/Tests/MAL-signatures.stable.out.int128 b/clients/Tests/MAL-signatures.stable.out.int128 --- a/clients/Tests/MAL-signatures.stable.out.int128 +++ b/clients/Tests/MAL-signatures.stable.out.int128 @@ -13723,6 +13723,11 @@ stdout of test 'MAL-signatures` in direc [ "batsql", "avg", "pattern batsql.avg(X_1:bat[:int], X_2:bat[:lng], X_3:bat[:lng]):bat[:dbl] ", "SQLavg;", "" ] [ "batsql", "avg", "pattern batsql.avg(X_1:bat[:lng], X_2:bat[:lng], X_3:bat[:lng]):bat[:dbl] ", "SQLavg;", "" ] [ "batsql", "avg", "pattern batsql.avg(X_1:bat[:sht], X_2:bat[:lng], X_3:bat[:lng]):bat[:dbl] ", "SQLavg;", "" ] +[ "batsql", "avg", "pattern batsql.avg(X_1:bat[:bte], X_2:bat[:lng], X_3:bat[:lng]):bat[:bte] ", "SQLavginteger;", "" ] +[ "batsql", "avg", "pattern batsql.avg(X_1:bat[:hge], X_2:bat[:lng], X_3:bat[:lng]):bat[:hge] ", "SQLavginteger;", "" ] +[ "batsql", "avg", "pattern batsql.avg(X_1:bat[:int], X_2:bat[:lng], X_3:bat[:lng]):bat[:int] ", "SQLavginteger;", "" ] +[ "batsql", "avg", "pattern batsql.avg(X_1:bat[:lng], X_2:bat[:lng], X_3:bat[:lng]):bat[:lng] ", "SQLavginteger;", "" ] +[ "batsql", "avg", "pattern batsql.avg(X_1:bat[:sht], X_2:bat[:lng], X_3:bat[:lng]):bat[:sht] ", "SQLavginteger;", "" ] [ "batsql", "corr", "pattern batsql.corr(X_1:bat[:bte], X_2:bat[:bte], X_3:bat[:lng], X_4:bat[:lng]):bat[:dbl] ", "SQLcorr;", "" ] [ "batsql", "corr", "pattern batsql.corr(X_1:bat[:bte], X_2:bte, X_3:bat[:lng], X_4:bat[:lng]):bat[:dbl] ", "SQLcorr;", "" ] [ "batsql", "corr", "pattern batsql.corr(X_1:bat[:dbl], X_2:bat[:dbl], X_3:bat[:lng], X_4:bat[:lng]):bat[:dbl] ", "SQLcorr;", "" ] @@ -17137,6 +17142,11 @@ stdout of test 'MAL-signatures` in direc [ "sql", "avg", "pattern sql.avg(X_1:int, X_2:lng, X_3:lng):dbl ", "SQLavg;", "" ] [ "sql", "avg", "pattern sql.avg(X_1:lng, X_2:lng, X_3:lng):dbl ", "SQLavg;", "" ] [ "sql", "avg", "pattern sql.avg(X_1:sht, X_2:lng, X_3:lng):dbl ", "SQLavg;", "" ] +[ "sql", "avg", "pattern sql.avg(X_1:bte, X_2:lng, X_3:lng):bte ", "SQLavginteger;", "" ] +[ "sql", "avg", "pattern sql.avg(X_1:hge, X_2:lng, X_3:lng):hge ", "SQLavginteger;", "" ] +[ "sql", "avg", "pattern sql.avg(X_1:int, X_2:lng, X_3:lng):int ", "SQLavginteger;", "" ] +[ "sql", "avg", "pattern sql.avg(X_1:lng, X_2:lng, X_3:lng):lng ", "SQLavginteger;", "" ] +[ "sql", "avg", "pattern sql.avg(X_1:sht, X_2:lng, X_3:lng):sht ", "SQLavginteger;", "" ] [ "sql", "bind", "pattern sql.bind(X_1:int, X_2:str, X_3:str, X_4:str, X_5:int):bat[:any_1] ", "mvc_bind_wrap;", "" ] [ "sql", "bind", "pattern sql.bind(X_1:int, X_2:str, X_3:str, X_4:str, X_5:int, X_6:int, X_7:int):bat[:any_1] ", "mvc_bind_wrap;", "" ] [ "sql", "bind", "pattern sql.bind(X_2:int, X_3:str, X_4:str, X_5:str, X_6:int) (X_0:bat[:oid], X_1:bat[:any_1]) ", "mvc_bind_wrap;", "" ] diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -239,6 +239,7 @@ gdk_return GDKanalytical_str_group_conca gdk_return GDKanalytical_variance_pop(BAT *r, BAT *b, BAT *s, BAT *e, int tpe); gdk_return GDKanalytical_variance_samp(BAT *r, BAT *b, BAT *s, BAT *e, int tpe); gdk_return GDKanalyticalavg(BAT *r, BAT *b, BAT *s, BAT *e, int tpe); +gdk_return GDKanalyticalavginteger(BAT *r, BAT *b, BAT *s, BAT *e, int tpe); gdk_return GDKanalyticalcount(BAT *r, BAT *b, BAT *s, BAT *e, const bit *restrict ignore_nils, int tpe); gdk_return GDKanalyticaldiff(BAT *r, BAT *b, BAT *p, int tpe); gdk_return GDKanalyticalfirst(BAT *r, BAT *b, BAT *s, BAT *e, int tpe); diff --git a/gdk/gdk_analytic.h b/gdk/gdk_analytic.h --- a/gdk/gdk_analytic.h +++ b/gdk/gdk_analytic.h @@ -35,6 +35,7 @@ gdk_export gdk_return GDKanalyticalcount gdk_export gdk_return GDKanalyticalsum(BAT *r, BAT *b, BAT *s, BAT *e, int tp1, int tp2); gdk_export gdk_return GDKanalyticalprod(BAT *r, BAT *b, BAT *s, BAT *e, int tp1, int tp2); gdk_export gdk_return GDKanalyticalavg(BAT *r, BAT *b, BAT *s, BAT *e, int tpe); +gdk_export gdk_return GDKanalyticalavginteger(BAT *r, BAT *b, BAT *s, BAT *e, int tpe); gdk_export gdk_return GDKanalytical_stddev_samp(BAT *r, BAT *b, BAT *s, BAT *e, int tpe); gdk_export gdk_return GDKanalytical_stddev_pop(BAT *r, BAT *b, BAT *s, BAT *e, int tpe); diff --git a/gdk/gdk_analytic_func.c b/gdk/gdk_analytic_func.c --- a/gdk/gdk_analytic_func.c +++ b/gdk/gdk_analytic_func.c @@ -1665,7 +1665,97 @@ GDKanalyticalavg(BAT *r, BAT *b, BAT *s, ANALYTICAL_AVERAGE_CALC_FP(dbl); break; default: - GDKerror("average of type %s unsupported.\n", ATOMname(tpe)); + GDKerror("average of type %s to dbl unsupported.\n", ATOMname(tpe)); + return GDK_FAIL; + } + BATsetcount(r, cnt); + r->tnonil = !has_nils; + r->tnil = has_nils; + return GDK_SUCCEED; +} + +#ifdef TRUNCATE_NUMBERS +#define ANALYTICAL_AVERAGE_INT_CALC_FINALIZE(avg, rem, ncnt) \ + do { + if (rem > 0 && avg < 0) { \ + avg++; \ + rem -= ncnt; \ + } + } while(0) +#else +#define ANALYTICAL_AVERAGE_INT_CALC_FINALIZE(avg, rem, ncnt) \ + do { \ + if (rem > 0) { \ + if (avg < 0) { \ + if (2*rem > ncnt) { \ + avg++; \ + rem -= ncnt; \ + } \ + } else { \ + if (2*rem >= ncnt) { \ + avg++; \ + rem -= ncnt; \ + } \ + } \ + } \ + } while(0) +#endif + +#define ANALYTICAL_AVERAGE_INT_CALC(TPE) \ + do { \ + TPE *bp = (TPE*)Tloc(b, 0), *restrict rb = (TPE *) Tloc(r, 0), *bs, *be, v, avg = 0; \ + for (; i < cnt; i++) { \ + bs = bp + start[i]; \ + be = bp + end[i]; \ + for (; bs < be; bs++) { \ + v = *bs; \ + if (!is_##TPE##_nil(v)) \ + AVERAGE_ITER(TPE, v, avg, rem, ncnt); \ + } \ + if (ncnt == 0) { \ + has_nils = true; \ + rb[i] = TPE##_nil; \ + } else { \ + ANALYTICAL_AVERAGE_INT_CALC_FINALIZE(avg, rem, ncnt); \ + rb[i] = avg; \ + } \ + rem = 0; \ + ncnt = 0; \ + avg = 0; \ + } \ + } while (0) + +gdk_return +GDKanalyticalavginteger(BAT *r, BAT *b, BAT *s, BAT *e, int tpe) +{ + bool has_nils = false; + BUN i = 0, cnt = BATcount(b); + lng *restrict start, *restrict end, rem = 0, ncnt = 0; + + assert(s && e); + start = (lng *) Tloc(s, 0); + end = (lng *) Tloc(e, 0); + + switch (tpe) { + case TYPE_bte: + ANALYTICAL_AVERAGE_INT_CALC(bte); + break; + case TYPE_sht: + ANALYTICAL_AVERAGE_INT_CALC(sht); + break; + case TYPE_int: + ANALYTICAL_AVERAGE_INT_CALC(int); + break; + case TYPE_lng: + ANALYTICAL_AVERAGE_INT_CALC(lng); + break; +#ifdef HAVE_HGE + case TYPE_hge: + ANALYTICAL_AVERAGE_INT_CALC(hge); + break; +#endif + default: + GDKerror("average of type %s to %s unsupported.\n", ATOMname(tpe), ATOMname(tpe)); return GDK_FAIL; } BATsetcount(r, cnt); diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c --- a/sql/backends/monet5/sql.c +++ b/sql/backends/monet5/sql.c @@ -6212,6 +6212,8 @@ static mel_func sql_init_funcs[] = { pattern("batsql", "sum", SQLsum, false, "return the sum of groups", args(1,4, batarg("",dbl),batarg("b",dbl),batarg("s",lng),batarg("e",lng))), pattern("sql", "prod", SQLprod, false, "return the product of groups", args(1,4, arg("",dbl),arg("b",dbl),arg("s",lng),arg("e",lng))), pattern("batsql", "prod", SQLprod, false, "return the product of groups", args(1,4, batarg("",dbl),batarg("b",dbl),batarg("s",lng),batarg("e",lng))), + pattern("sql", "avg", SQLavginteger, false, "return the average of groups", args(1,4, arg("",bte),arg("b",bte),arg("s",lng),arg("e",lng))), + pattern("batsql", "avg", SQLavginteger, false, "return the average of groups", args(1,4, batarg("",bte),batarg("b",bte),batarg("s",lng),batarg("e",lng))), pattern("sql", "avg", SQLavg, false, "return the average of groups", args(1,4, arg("",dbl),arg("b",bte),arg("s",lng),arg("e",lng))), pattern("batsql", "avg", SQLavg, false, "return the average of groups", args(1,4, batarg("",dbl),batarg("b",bte),batarg("s",lng),batarg("e",lng))), pattern("sql", "stdev", SQLstddev_samp, false, "return the standard deviation sample of groups", args(1,4, arg("",dbl),arg("b",bte),arg("s",lng),arg("e",lng))), @@ -6234,6 +6236,8 @@ static mel_func sql_init_funcs[] = { pattern("batsql", "corr", SQLcorr, false, "return the correlation value of groups", args(1,5, batarg("",dbl),batarg("b",bte),arg("c",bte),batarg("s",lng),batarg("e",lng))), pattern("batsql", "corr", SQLcorr, false, "return the correlation value of groups", args(1,5, batarg("",dbl),arg("b",bte),batarg("c",bte),arg("s",lng),arg("e",lng))), pattern("batsql", "corr", SQLcorr, false, "return the correlation value of groups", args(1,5, batarg("",dbl),batarg("b",bte),batarg("c",bte),batarg("s",lng),batarg("e",lng))), + pattern("sql", "avg", SQLavginteger, false, "return the average of groups", args(1,4, arg("",sht),arg("b",sht),arg("s",lng),arg("e",lng))), + pattern("batsql", "avg", SQLavginteger, false, "return the average of groups", args(1,4, batarg("",sht),batarg("b",sht),batarg("s",lng),batarg("e",lng))), pattern("sql", "avg", SQLavg, false, "return the average of groups", args(1,4, arg("",dbl),arg("b",sht),arg("s",lng),arg("e",lng))), pattern("batsql", "avg", SQLavg, false, "return the average of groups", args(1,4, batarg("",dbl),batarg("b",sht),batarg("s",lng),batarg("e",lng))), pattern("sql", "stdev", SQLstddev_samp, false, "return the standard deviation sample of groups", args(1,4, arg("",dbl),arg("b",sht),arg("s",lng),arg("e",lng))), @@ -6256,6 +6260,8 @@ static mel_func sql_init_funcs[] = { pattern("batsql", "corr", SQLcorr, false, "return the correlation value of groups", args(1,5, batarg("",dbl),batarg("b",sht),arg("c",sht),batarg("s",lng),batarg("e",lng))), pattern("batsql", "corr", SQLcorr, false, "return the correlation value of groups", args(1,5, batarg("",dbl),arg("b",sht),batarg("c",sht),arg("s",lng),arg("e",lng))), pattern("batsql", "corr", SQLcorr, false, "return the correlation value of groups", args(1,5, batarg("",dbl),batarg("b",sht),batarg("c",sht),batarg("s",lng),batarg("e",lng))), + pattern("sql", "avg", SQLavginteger, false, "return the average of groups", args(1,4, arg("",int),arg("b",int),arg("s",lng),arg("e",lng))), + pattern("batsql", "avg", SQLavginteger, false, "return the average of groups", args(1,4, batarg("",int),batarg("b",int),batarg("s",lng),batarg("e",lng))), pattern("sql", "avg", SQLavg, false, "return the average of groups", args(1,4, arg("",dbl),arg("b",int),arg("s",lng),arg("e",lng))), pattern("batsql", "avg", SQLavg, false, "return the average of groups", args(1,4, batarg("",dbl),batarg("b",int),batarg("s",lng),batarg("e",lng))), pattern("sql", "stdev", SQLstddev_samp, false, "return the standard deviation sample of groups", args(1,4, arg("",dbl),arg("b",int),arg("s",lng),arg("e",lng))), @@ -6278,6 +6284,8 @@ static mel_func sql_init_funcs[] = { pattern("batsql", "corr", SQLcorr, false, "return the correlation value of groups", args(1,5, batarg("",dbl),batarg("b",int),arg("c",int),batarg("s",lng),batarg("e",lng))), pattern("batsql", "corr", SQLcorr, false, "return the correlation value of groups", args(1,5, batarg("",dbl),arg("b",int),batarg("c",int),arg("s",lng),arg("e",lng))), pattern("batsql", "corr", SQLcorr, false, "return the correlation value of groups", args(1,5, batarg("",dbl),batarg("b",int),batarg("c",int),batarg("s",lng),batarg("e",lng))), + pattern("sql", "avg", SQLavginteger, false, "return the average of groups", args(1,4, arg("",lng),arg("b",lng),arg("s",lng),arg("e",lng))), + pattern("batsql", "avg", SQLavginteger, false, "return the average of groups", args(1,4, batarg("",lng),batarg("b",lng),batarg("s",lng),batarg("e",lng))), pattern("sql", "avg", SQLavg, false, "return the average of groups", args(1,4, arg("",dbl),arg("b",lng),arg("s",lng),arg("e",lng))), pattern("batsql", "avg", SQLavg, false, "return the average of groups", args(1,4, batarg("",dbl),batarg("b",lng),batarg("s",lng),batarg("e",lng))), pattern("sql", "stdev", SQLstddev_samp, false, "return the standard deviation sample of groups", args(1,4, arg("",dbl),arg("b",lng),arg("s",lng),arg("e",lng))), @@ -6688,6 +6696,8 @@ static mel_func sql_init_funcs[] = { pattern("batsql", "sum", SQLsum, false, "return the sum of groups", args(1,4, batarg("",hge),batarg("b",hge),batarg("s",lng),batarg("e",lng))), pattern("sql", "prod", SQLprod, false, "return the product of groups", args(1,4, arg("",hge),arg("b",hge),arg("s",lng),arg("e",lng))), pattern("batsql", "prod", SQLprod, false, "return the product of groups", args(1,4, batarg("",hge),batarg("b",hge),batarg("s",lng),batarg("e",lng))), + pattern("sql", "avg", SQLavginteger, false, "return the average of groups", args(1,4, arg("",hge),arg("b",hge),arg("s",lng),arg("e",lng))), + pattern("batsql", "avg", SQLavginteger, false, "return the average of groups", args(1,4, batarg("",hge),batarg("b",hge),batarg("s",lng),batarg("e",lng))), pattern("sql", "avg", SQLavg, false, "return the average of groups", args(1,4, arg("",dbl),arg("b",hge),arg("s",lng),arg("e",lng))), pattern("batsql", "avg", SQLavg, false, "return the average of groups", args(1,4, batarg("",dbl),batarg("b",hge),batarg("s",lng),batarg("e",lng))), pattern("sql", "stdev", SQLstddev_samp, false, "return the standard deviation of groups", args(1,4, arg("",dbl),arg("b",hge),arg("s",lng),arg("e",lng))), diff --git a/sql/backends/monet5/sql_rank.c b/sql/backends/monet5/sql_rank.c --- a/sql/backends/monet5/sql_rank.c +++ b/sql/backends/monet5/sql_rank.c @@ -1587,7 +1587,52 @@ SQLavg(Client cntxt, MalBlkPtr mb, MalSt *res = *in; break; default: - throw(SQL, "sql.avg", SQLSTATE(42000) "sql.avg not available for %s", ATOMname(tpe)); + throw(SQL, "sql.avg", SQLSTATE(42000) "sql.avg not available for %s to dbl", ATOMname(tpe)); + } + } + return msg; +} + +str +SQLavginteger(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) +{ + BAT *r, *b, *s, *e; + str msg = SQLanalytics_args(&r, &b, &s, &e, cntxt, mb, stk, pci, 0, "sql.avg", SQLSTATE(42000) "avg(:any_1,:lng,:lng)"); + int tpe = getArgType(mb, pci, 1); + gdk_return gdk_res; + + if (msg) + return msg; + if (isaBatType(tpe)) + tpe = getBatType(tpe); + + if (b) { + bat *res = getArgReference_bat(stk, pci, 0); + + gdk_res = GDKanalyticalavginteger(r, b, s, e, tpe); + BBPunfix(b->batCacheid); + if (s) BBPunfix(s->batCacheid); + if (e) BBPunfix(e->batCacheid); + if (gdk_res == GDK_SUCCEED) + BBPkeepref(*res = r->batCacheid); + else + throw(SQL, "sql.avg", GDK_EXCEPTION); + } else { + ptr *res = getArgReference(stk, pci, 0); + ptr *in = getArgReference(stk, pci, 1); + + switch (tpe) { + case TYPE_bte: + case TYPE_sht: + case TYPE_int: + case TYPE_lng: +#ifdef HAVE_HGE + case TYPE_hge: +#endif + *res = *in; + break; + default: + throw(SQL, "sql.avg", SQLSTATE(42000) "sql.avg not available for %s to %s", ATOMname(tpe), ATOMname(tpe)); } } return msg; diff --git a/sql/backends/monet5/sql_rank.h b/sql/backends/monet5/sql_rank.h --- a/sql/backends/monet5/sql_rank.h +++ b/sql/backends/monet5/sql_rank.h @@ -34,6 +34,7 @@ sql5_export str SQLcount(Client cntxt, M sql5_export str SQLsum(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str SQLprod(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str SQLavg(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +sql5_export str SQLavginteger(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); /* statistical functions */ sql5_export str SQLstddev_samp(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); 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 @@ -1570,24 +1570,24 @@ sqltypeinit( sql_allocator *sa) sql_create_analytic(sa, "avg", "sql", "avg", SCALE_NONE, DBL, 1, HGE); #endif + sql_create_analytic(sa, "avg", "sql", "avg", SCALE_NONE, DBL, 1, FLT); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list