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