Changeset: 309c27f88d09 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/309c27f88d09
Added Files:
        sql/test/BugTracker-2021/Tests/python-aggregates-void-bat.Bug-7138.test
Removed Files:
        sql/test/BugTracker-2021/Tests/python-aggregates-void-bat.Bug-7138.sql
        
sql/test/BugTracker-2021/Tests/python-aggregates-void-bat.Bug-7138.stable.err
        
sql/test/BugTracker-2021/Tests/python-aggregates-void-bat.Bug-7138.stable.out
Modified Files:
        sql/backends/monet5/UDF/pyapi3/pyapi3.c
        sql/test/BugTracker-2021/Tests/All
Branch: Jul2021
Log Message:

Merged with Oct2020 and converted


diffs (157 lines):

diff --git a/sql/backends/monet5/UDF/pyapi3/pyapi3.c 
b/sql/backends/monet5/UDF/pyapi3/pyapi3.c
--- a/sql/backends/monet5/UDF/pyapi3/pyapi3.c
+++ b/sql/backends/monet5/UDF/pyapi3/pyapi3.c
@@ -122,11 +122,19 @@ PYAPI3PyAPIevalAggrMap(Client cntxt, Mal
                }                                                               
       \
                /*iterate over the elements of the current BAT*/                
       \
                temp_indices = GDKzalloc(sizeof(lng) * group_count);            
       \
-               for (element_it = 0; element_it < elements; element_it++) {     
       \
-                       /*group of current element*/                            
           \
-                       oid group = aggr_group_arr[element_it];                 
           \
-                       /*append current element to proper group*/              
           \
-                       ptr[group][i][temp_indices[group]++] = 
batcontent[element_it];     \
+               if (BATtvoid(aggr_group)) {                                     
       \
+                       for (element_it = 0; element_it < elements; 
element_it++) {        \
+                               /*append current element to proper group*/      
               \
+                               ptr[element_it][i][temp_indices[element_it]++] 
=               \
+                                       batcontent[element_it];                 
                   \
+                       }                                                       
           \
+               } else {                                                        
       \
+                       for (element_it = 0; element_it < elements; 
element_it++) {        \
+                               /*group of current element*/                    
               \
+                               oid group = aggr_group_arr[element_it];         
               \
+                               /*append current element to proper group*/      
               \
+                               ptr[group][i][temp_indices[group]++] = 
batcontent[element_it]; \
+                       }                                                       
           \
                }                                                               
       \
                GDKfree(temp_indices);                                          
       \
        }
@@ -736,9 +744,15 @@ static str PyAPIeval(Client cntxt, MalBl
                                goto aggrwrapup;
                        }
 
-                       aggr_group_arr = (oid *)aggr_group->theap->base + 
aggr_group->tbaseoff;
-                       for (element_it = 0; element_it < elements; 
element_it++) {
-                               group_counts[aggr_group_arr[element_it]]++;
+                       if (BATtvoid(aggr_group)) {
+                               for (element_it = 0; element_it < elements; 
element_it++) {
+                                       group_counts[element_it]++;
+                               }
+                       } else {
+                               aggr_group_arr = (oid *)aggr_group->theap->base 
+ aggr_group->tbaseoff;
+                               for (element_it = 0; element_it < elements; 
element_it++) {
+                                       
group_counts[aggr_group_arr[element_it]]++;
+                               }
                        }
 
                        // now perform the actual splitting of the data, first 
construct
@@ -807,13 +821,22 @@ static str PyAPIeval(Client cntxt, MalBl
                                                        // iterate over the 
elements of the current BAT
                                                        temp_indices =
                                                                
GDKzalloc(sizeof(PyObject *) * group_count);
-                                                       for (element_it = 0; 
element_it < elements;
-                                                                element_it++) {
-                                                               // group of 
current element
-                                                               oid group = 
aggr_group_arr[element_it];
-                                                               // append 
current element to proper group
-                                                               
ptr[group][i][temp_indices[group]++] =
-                                                                       
batcontent[element_it];
+                                                       if 
(BATtvoid(aggr_group)) {
+                                                               for (element_it 
= 0; element_it < elements;
+                                                                        
element_it++) {
+                                                                       // 
append current element to proper group
+                                                                       
ptr[element_it][i][temp_indices[element_it]++] = 
+                                                                               
batcontent[element_it];
+                                                               }
+                                                       } else {
+                                                               for (element_it 
= 0; element_it < elements;
+                                                                        
element_it++) {
+                                                                       // 
group of current element
+                                                                       oid 
group = aggr_group_arr[element_it];
+                                                                       // 
append current element to proper group
+                                                                       
ptr[group][i][temp_indices[group]++] =
+                                                                               
batcontent[element_it];
+                                                               }
                                                        }
                                                        GDKfree(temp_indices);
                                                        break;
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
@@ -14,3 +14,4 @@ batappend-undefined.Bug-7130
 WITH-alias-DELETE-1.deletes-wrong-tuples.Bug-7133
 WITH-alias-DELETE-2.deletes-too-many-tuples.Bug-7133
 merge-delete.Bug-7136
+HAVE_LIBPY3?python-aggregates-void-bat.Bug-7138
diff --git a/sql/test/BugTracker-2021/Tests/SingleServer 
b/sql/test/BugTracker-2021/Tests/SingleServer
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2021/Tests/SingleServer
@@ -0,0 +1,1 @@
+--set embedded_py=3
diff --git 
a/sql/test/BugTracker-2021/Tests/python-aggregates-void-bat.Bug-7138.test 
b/sql/test/BugTracker-2021/Tests/python-aggregates-void-bat.Bug-7138.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2021/Tests/python-aggregates-void-bat.Bug-7138.test
@@ -0,0 +1,61 @@
+statement ok
+START TRANSACTION
+
+statement ok
+create table integers (i int)
+
+statement ok rowcount 10
+insert into integers (select value from generate_series(1,11,1))
+
+statement ok
+CREATE FUNCTION python_sum(v int) returns int
+language P
+{
+    return numpy.sum(v)
+}
+
+statement ok
+CREATE FUNCTION python_sum2(v int) returns int
+language PYTHON_MAP
+{
+    return numpy.sum(v)
+}
+
+statement ok
+CREATE AGGREGATE python_sum3(v int) returns int
+language P
+{
+    return numpy.sum(v)
+}
+
+statement ok
+CREATE AGGREGATE python_sum4(v int) returns int
+language PYTHON_MAP
+{
+    return numpy.sum(v)
+}
+
+query I rowsort
+select python_sum(i) from integers where i = 1 group by i
+----
+1
+
+query I rowsort
+select python_sum2(i) from integers where i = 1 group by i
+----
+1
+
+query I rowsort
+select python_sum3(i) from integers where i = 1 group by i
+----
+1
+
+query I rowsort
+select python_sum4(i) from integers where i = 1 group by i
+----
+1
+
+statement ok
+ROLLBACK
+
+
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to