Changeset: d80ba61b8b4e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/d80ba61b8b4e Added Files: sql/test/BugTracker-2021/Tests/aggregates-tables.Bug-7142.test sql/test/BugTracker-2021/Tests/count-distinct.Bug-7141.test Removed Files: sql/test/BugTracker-2021/Tests/aggregates-tables.Bug-7142.sql sql/test/BugTracker-2021/Tests/aggregates-tables.Bug-7142.stable.err sql/test/BugTracker-2021/Tests/aggregates-tables.Bug-7142.stable.out sql/test/BugTracker-2021/Tests/count-distinct.Bug-7141.sql sql/test/BugTracker-2021/Tests/count-distinct.Bug-7141.stable.err sql/test/BugTracker-2021/Tests/count-distinct.Bug-7141.stable.out Modified Files: sql/server/rel_optimizer.c sql/server/rel_psm.c sql/test/BugTracker-2021/Tests/All Branch: Jul2021 Log Message:
Merged with Oct2020 and converted tests diffs (131 lines): diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c --- a/sql/server/rel_psm.c +++ b/sql/server/rel_psm.c @@ -818,11 +818,15 @@ rel_create_func(sql_query *query, dlist int instantiate = (sql->emode == m_instantiate); int deps = (sql->emode == m_deps); int create = (!instantiate && !deps); - bit vararg = FALSE; + bit vararg = FALSE, union_err = 0; char *F = NULL, *fn = NULL, is_func; - if (res && res->token == SQL_TABLE) - type = F_UNION; + if (res && res->token == SQL_TABLE) { + if (type == F_FUNC) + type = F_UNION; + else + union_err = 1; + } FUNC_TYPE_STR(type, F, fn) @@ -832,7 +836,9 @@ rel_create_func(sql_query *query, dlist if (create && store_readonly(sql->session->tr->store)) return sql_error(sql, 06, SQLSTATE(42000) "Schema statements cannot be executed on a readonly database."); - if (res && type == F_PROC) + if (union_err) + return sql_error(sql, 02, SQLSTATE(42000) "CREATE %s: %ss cannot return tables", F, fn); + else if (res && type == F_PROC) return sql_error(sql, 02, SQLSTATE(42000) "CREATE %s: procedures cannot have return parameters", F); else if (res && (type == F_FILT || type == F_LOADER)) return sql_error(sql, 02, SQLSTATE(42000) "CREATE %s: %s functions don't have to specify a return type", F, fn); diff --git a/sql/test/BugTracker-2021/Tests/All b/sql/test/BugTracker-2021/Tests/All --- a/sql/test/BugTracker-2021/Tests/All +++ b/sql/test/BugTracker-2021/Tests/All @@ -15,3 +15,5 @@ WITH-alias-DELETE-1.deletes-wrong-tuples WITH-alias-DELETE-2.deletes-too-many-tuples.Bug-7133 merge-delete.Bug-7136 HAVE_LIBPY3?python-aggregates-void-bat.Bug-7138 +count-distinct.Bug-7141 +HAVE_LIBPY3?aggregates-tables.Bug-7142 diff --git a/sql/test/BugTracker-2021/Tests/aggregates-tables.Bug-7142.test b/sql/test/BugTracker-2021/Tests/aggregates-tables.Bug-7142.test new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2021/Tests/aggregates-tables.Bug-7142.test @@ -0,0 +1,34 @@ +statement ok +START TRANSACTION + +statement error 42000!CREATE AGGREGATE: aggregates cannot return tables +CREATE AGGREGATE linear_least_squares(xg DOUBLE, yg DOUBLE) +RETURNS TABLE (a DOUBLE, b DOUBLE) +LANGUAGE PYTHON { + import numpy as np + # Define an inner function to do the work + def perform_least_squares(x, y): + mx = np.average(x) + my = np.average(y) + N = len(x) + a = (np.dot(x,y) - mx*my)/(np.dot(x,x) - N*mx*mx) + b = (my*np.dot(x,x) - mx*(np.dot(x,y)))/(np.dot(x,x) - N*mx*mx) + return [a, b] + ab = {"a": list(), "b": list()} + try: + groups = np.unique(aggr_group) + for i in range(groups): + a,b = perform_least_squares(xg[aggr_group==groups[i]], yg[aggr_group==groups[i]]) + ab["a"].append(a) + ab["b"].append(b) + except NameError: + a,b = perform_least_squares(xg, yg) + ab["a"].append(a) + ab["b"].append(b) + return ab +} + +statement ok +ROLLBACK + + diff --git a/sql/test/BugTracker-2021/Tests/count-distinct.Bug-7141.test b/sql/test/BugTracker-2021/Tests/count-distinct.Bug-7141.test new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2021/Tests/count-distinct.Bug-7141.test @@ -0,0 +1,45 @@ +statement ok +START TRANSACTION + +statement ok +create table test ("id" int, "version" int) + +statement ok rowcount 9 +insert into test values(1,1),(1,1),(1,2),(1,2),(2,1),(2,2),(2,2),(3,4),(3,4) + +query I rowsort +SELECT COUNT(distinct "version") FROM test GROUP BY "id", "version" +---- +1 +1 +1 +1 +1 + +query III rowsort +SELECT "id", "version", COUNT(distinct "version") FROM test GROUP BY "id", "version" +---- +1 +1 +1 +1 +2 +1 +2 +1 +1 +2 +2 +1 +3 +4 +1 + +query III rowsort +SELECT "id", "version", COUNT(distinct "version") FROM test GROUP BY "id", "version" HAVING COUNT(distinct "version") > 1 +---- + +statement ok +ROLLBACK + + _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list