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

Reply via email to