Changeset: 06c10a6c6aa5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/06c10a6c6aa5
Added Files:
        sql/test/BugTracker-2024/Tests/7525-cudf-aggr-var-input.test
Modified Files:
        sql/backends/monet5/UDF/capi/capi.c
        sql/test/BugTracker-2022/Tests/All
        sql/test/BugTracker-2024/Tests/All
        sql/test/BugTracker-2024/Tests/SingleServer
Branch: Aug2024
Log Message:

fixes for bug #7525, ie properly initialize input variables for vararg 
aggregates


diffs (83 lines):

diff --git a/sql/backends/monet5/UDF/capi/capi.c 
b/sql/backends/monet5/UDF/capi/capi.c
--- a/sql/backends/monet5/UDF/capi/capi.c
+++ b/sql/backends/monet5/UDF/capi/capi.c
@@ -571,15 +571,16 @@ static str CUDFeval(Client cntxt, MalBlk
        }
        // the first unknown argument is the group, we don't really care for the
        // rest.
-       for (i = pci->retc + ARG_OFFSET; i < (size_t)pci->argc && !seengrp; 
i++) {
+       for (i = pci->retc + ARG_OFFSET; i < (size_t)pci->argc; i++) {
                if (args[i] == NULL) {
-                       if (!seengrp && grouped) {
+                       if (grouped && (i+2) == (size_t)pci->argc) {
                                args[i] = GDKstrdup("aggr_group");
                                if (!args[i]) {
                                        msg = createException(MAL, "cudf.eval", 
MAL_MALLOC_FAIL);
                                        goto wrapup;
                                }
-                               seengrp = i; /* Don't be interested in the 
extents BAT */
+                               seengrp = i++; /* Don't be interested in the 
extents BAT */
+                               break;
                        } else {
                                snprintf(argbuf, sizeof(argbuf), "arg%zu", i - 
pci->retc - 1);
                                args[i] = GDKstrdup(argbuf);
diff --git a/sql/test/BugTracker-2022/Tests/All 
b/sql/test/BugTracker-2022/Tests/All
--- a/sql/test/BugTracker-2022/Tests/All
+++ b/sql/test/BugTracker-2022/Tests/All
@@ -9,7 +9,7 @@ pkey-restart.Bug-7263
 delete-update.Bug-7267
 having-clauses.Bug-7278
 dump-table-data.Bug-7282
-NOT_WIN32?cudf-grouped-aggr.Bug-7285
+HAVE_CUDF?cudf-grouped-aggr.Bug-7285
 create_func_with_case_and_in
 single_row_in_rel_order_by_column.Bug-7306
 push-aggr-down-removes-distinct-on-union-all.Bug-7318
diff --git a/sql/test/BugTracker-2024/Tests/7525-cudf-aggr-var-input.test 
b/sql/test/BugTracker-2024/Tests/7525-cudf-aggr-var-input.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2024/Tests/7525-cudf-aggr-var-input.test
@@ -0,0 +1,26 @@
+statement ok
+CREATE OR REPLACE AGGREGATE jit_sum(*) RETURNS BIGINT LANGUAGE C
+  {
+       // initialize one aggregate per group
+       result->initialize(result, aggr_group.count);
+       // zero initialize the sums
+       memset(result->data, 0, result->count * sizeof(result->null_value));
+       // gather the sums for each of the groups
+       for(size_t i = 0; i < arg2.count; i++) {
+       result->data[aggr_group.data[i]] += input.data[i];
+       }
+  };
+
+statement ok
+CREATE TABLE grouped_ints(value INTEGER, groupnr INTEGER);
+
+statement ok
+INSERT INTO grouped_ints VALUES (1, 0), (2, 1), (3, 0), (4, 1), (5, 0);
+
+query i, i
+SELECT groupnr, jit_sum(value) FROM grouped_ints GROUP BY groupnr;
+----
+0
+9
+1
+6
diff --git a/sql/test/BugTracker-2024/Tests/All 
b/sql/test/BugTracker-2024/Tests/All
--- a/sql/test/BugTracker-2024/Tests/All
+++ b/sql/test/BugTracker-2024/Tests/All
@@ -60,6 +60,7 @@ 7512-concurrent-globaltmp-instantiate-cr
 7513-uri-authority-parse-issue
 7514-wrong-window-function
 7524-right-outer-join
+HAVE_CUDF?7525-cudf-aggr-var-input
 7528-jarowinkler-null
 7534-is-distinct-from
 7535-create-view-groupby-func
diff --git a/sql/test/BugTracker-2024/Tests/SingleServer 
b/sql/test/BugTracker-2024/Tests/SingleServer
--- a/sql/test/BugTracker-2024/Tests/SingleServer
+++ b/sql/test/BugTracker-2024/Tests/SingleServer
@@ -0,0 +1,2 @@
+--set embedded_c=true
+--set capi_cc='cc -std=c99'
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to