Changeset: c9f7d765b989 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c9f7d765b989
Modified Files:
ctest/tools/monetdbe/example_append.c
tools/monetdbe/monetdbe.c
Branch: Oct2020
Log Message:
Merge append-optimization branch into Oct2020.
diffs (77 lines):
diff --git a/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c
--- a/tools/monetdbe/monetdbe.c
+++ b/tools/monetdbe/monetdbe.c
@@ -1100,6 +1100,7 @@ GENERATE_BASE_HEADERS(monetdbe_data_time
char*
monetdbe_append(monetdbe_database dbhdl, const char* schema, const char*
table, monetdbe_column **input /*bat *batids*/, size_t column_count)
{
+
monetdbe_database_internal *mdbe = (monetdbe_database_internal*)dbhdl;
mvc *m = NULL;
sql_schema *s = NULL;
@@ -1143,6 +1144,7 @@ monetdbe_append(monetdbe_database dbhdl,
} else {
s = cur_schema(m);
}
+
if (!(t = mvc_bind_table(m, s, table))) {
mdbe->msg = createException(SQL, "monetdbe.monetdbe_append",
"Table missing %s.%s", schema, table);
goto cleanup;
@@ -1162,7 +1164,6 @@ monetdbe_append(monetdbe_database dbhdl,
int mtype = monetdbe_type(input[i]->type);
const void* nil = (mtype>=0)?ATOMnilptr(mtype):NULL;
char *v = input[i]->data;
- int w = 1;
if (mtype < 0) {
mdbe->msg = createException(SQL,
"monetdbe.monetdbe_append", "Cannot find type for column %zu", i);
@@ -1175,13 +1176,43 @@ monetdbe_append(monetdbe_database dbhdl,
TYPE_lng
#endif
) {
- w = ATOMsize(mtype);
- for (size_t j=0; j<cnt; j++, v+=w){
- if (store_funcs.append_col(m->session->tr, c,
v, mtype) != 0) {
- mdbe->msg = createException(SQL,
"monetdbe.monetdbe_append", "Cannot append values");
- goto cleanup;
- }
+ //-------------------------------------
+ BAT *bn = NULL;
+
+ if ((bn = COLnew(0, mtype, 0, TRANSIENT)) == NULL) {
+ BBPreclaim(bn);
+ mdbe->msg = createException(SQL,
"monetdbe.monetdbe_append", "Cannot create append column");
+ goto cleanup;
}
+
+ //save prev heap pointer
+ char *prev_base;
+ size_t prev_size;
+ prev_base = bn->theap.base;
+ prev_size = bn->theap.size;
+
+ //BAT heap base to input[i]->data
+ bn->theap.base = input[i]->data;
+ bn->theap.size = tailsize(bn, cnt);
+
+ //BATsetdims(bn); called in COLnew
+ BATsetcapacity(bn, cnt);
+ BATsetcount(bn, cnt);
+
+ //set default flags
+ BATsettrivprop(bn);
+
+ if (store_funcs.append_col(m->session->tr, c, bn,
TYPE_bat) != 0) {
+ mdbe->msg = createException(SQL,
"monetdbe.monetdbe_append", "Cannot append BAT");
+ goto cleanup;
+
+ }
+
+ bn->theap.base = prev_base;
+ bn->theap.size = prev_size;
+ BBPreclaim(bn);
+
+
} else if (mtype == TYPE_str) {
char **d = (char**)v;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list