Add to_hex_string UDAF
[com/gs-lite.git] / include / hfta / groupby_operator.h
index e831bc0..2d2dc84 100644 (file)
@@ -47,7 +47,7 @@ public:
                group grp;
                if (!func.create_group(tup, (gs_sp_t)&grp)) {
                        if(func.disordered()){
-                               fprintf(stderr,"Out of order record in %s\n",op_name);
+                               // fprintf(stderr,"Out of order record in %s\n",op_name);
                                return 0;
                        }
                        if (func.flush_needed()){
@@ -64,7 +64,7 @@ public:
                        return 0;
                }
                if(func.disordered()){
-                       fprintf(stderr,"Out of order record in %s\n",op_name);
+                       // fprintf(stderr,"Out of order record in %s\n",op_name);
                        return 0;
                }
 
@@ -77,21 +77,21 @@ public:
                                flush_old(result);
                        }
                        if(n_patterns <= 1){
-                               aggregate aggr;
+                               char aggr_buffer[sizeof(aggregate)];
                                // create an aggregate in preallocated buffer
-                               func.create_aggregate(tup, (char*)&aggr);
+                               func.create_aggregate(tup, aggr_buffer);
                                // neeed operator= doing a deep copy
-                               group_table.insert(grp, aggr);
+                               group_table.insert(grp, (*(aggregate*)aggr_buffer));
                        }else{
                                int p;
 // TODO this code is wrong, must check if each pattern is in the group table.
                                for(p=0;p<n_patterns;++p){
                                        // need shallow copy constructor for groups
                                        group new_grp(grp, func.get_pattern(p));
-                                       aggregate aggr;
-                                       func.create_aggregate(tup, (char*)&aggr);
+                                       char aggr_buffer[sizeof(aggregate)];
+                                       func.create_aggregate(tup, aggr_buffer);
                                        // neeed operator= doing a deep copy
-                                       group_table.insert(new_grp, aggr);
+                                       group_table.insert(new_grp, (*(aggregate*)aggr_buffer));
                                }
                        }
                }