Changeset: 86f0e4522080 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=86f0e4522080
Modified Files:
        monetdb5/modules/atoms/nested_table.c
        monetdb5/modules/atoms/nested_table.mal
        sql/storage/bat/bat_utils.c
Branch: graph0
Log Message:

WIP


diffs (91 lines):

diff --git a/monetdb5/modules/atoms/nested_table.c 
b/monetdb5/modules/atoms/nested_table.c
--- a/monetdb5/modules/atoms/nested_table.c
+++ b/monetdb5/modules/atoms/nested_table.c
@@ -26,11 +26,18 @@
 // prototypes
 mal_export str NESTEDTABLEnest1_oid(bat*, const bat*, const bat*);
 mal_export str NESTEDTABLEunnest101_oid(bat*, bat*, const bat*);
+mal_export void NESTEDTABLEheap(Heap*, size_t);
 mal_export str NESTEDTABLEprelude(void*);
 
 // index in the BATatoms table
 int TYPE_nested_table;
 
+// only needed for its side effect: it asks the gdk initialise the vheap 
storage
+void NESTEDTABLEheap(Heap *heap, size_t capacity){
+       (void) capacity;
+       heap->base = heap->base -1; // fool the gdk -> ATOMheap
+}
+
 // initializer
 str NESTEDTABLEprelude(void* ret) {
        atomDesc* descriptor = NULL;
@@ -38,7 +45,6 @@ str NESTEDTABLEprelude(void* ret) {
        (void) ret;
        TYPE_nested_table = ATOMindex("nestedtable");
        descriptor = BATatoms + TYPE_nested_table;
-       descriptor->size = descriptor->align = sizeof(var_t);
        descriptor->linear = FALSE;
        return MAL_SUCCEED;
 }
@@ -98,14 +104,14 @@ mal_export str NESTEDTABLEnest1_oid(bat*
     memset(output->tvheap->base, 0, output->tvheap->size);
 
     // insert the actual values into the vheap
-    group_mapping_values = (oid*) group_mapping->tvheap->base;
+    group_mapping_values = (oid*) group_mapping->theap.base;
     output_content = (oid*) output->T.vheap->base;
     for(size_t i = 0, sz = BATcount(group_mapping); i < sz; i++){
        oid count = output_offsets[ group_mapping_values[i] ];
        oid pos = ++output_content[count];
        output_content[pos] = i;
     }
-    group_mapping->tvheap->free = sum * sizeof(oid);
+    output->tvheap->free = sum * sizeof(oid);
 
 success:
        BBPunfix(group_mapping->batCacheid);
@@ -151,6 +157,7 @@ mal_export str NESTEDTABLEunnest101_oid(
        na_offsets = (var_t*) nested_attribute->T.heap.base;
        assert(nested_attribute->T.vheap != NULL);
        na_values = (oid*) nested_attribute->T.vheap->base;
+       assert(na_values != NULL && ((lng) na_values) != -1);
        for(oid i = 0; i < na_count; i++){
                var_t offset = na_offsets[i];
                oid* __restrict base = na_values + offset;
diff --git a/monetdb5/modules/atoms/nested_table.mal 
b/monetdb5/modules/atoms/nested_table.mal
--- a/monetdb5/modules/atoms/nested_table.mal
+++ b/monetdb5/modules/atoms/nested_table.mal
@@ -8,6 +8,7 @@ module nestedtable;
 
 atom nestedtable : oid;
 
+command heap()    address NESTEDTABLEheap;
 command prelude() address NESTEDTABLEprelude;
 
 command nest1(group_mapping :bat[:oid], histogram :bat[:lng]) 
:bat[:nestedtable]
diff --git a/sql/storage/bat/bat_utils.c b/sql/storage/bat/bat_utils.c
--- a/sql/storage/bat/bat_utils.c
+++ b/sql/storage/bat/bat_utils.c
@@ -164,6 +164,8 @@ ebat_copy(log_bid b, oid ibase, int temp
        return r;
 }
 
+extern int TYPE_nested_table;
+
 void
 bat_utils_init(void)
 {
@@ -175,7 +177,11 @@ bat_utils_init(void)
                    && (have_hge || t != TYPE_hge)
 #endif
                ) {
-                       ebats[t] = bat_new(t, 0, TRANSIENT);
+                       if(t == TYPE_nested_table){
+                               ebats[t] = bat_new(t, 0, TRANSIENT);
+                       } else {
+                               ebats[t] = bat_new(t, 0, TRANSIENT);
+                       }
                        bat_set_access(ebats[t], BAT_READ);
                }
        }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to