Changeset: d735aefb5703 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d735aefb5703
Modified Files:
sql/storage/bat/bat_storage.c
Branch: directappend
Log Message:
Attempt to fix multi appending with storage_api.append_col
diffs (37 lines):
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -1878,7 +1878,7 @@ delta_append_bat(sql_trans *tr, sql_delt
}
static int
-delta_append_val(sql_trans *tr, sql_delta *bat, sqlid id, BUN offset, void *i,
BUN cnt)
+delta_append_val(sql_trans *tr, sql_delta *bat, sqlid id, BUN offset, BAT
*offsets, void *i, BUN cnt)
{
void *oi = i;
BAT *b;
@@ -1900,6 +1900,15 @@ delta_append_val(sql_trans *tr, sql_delt
unlock_column(tr->store, id);
return LOG_ERR;
}
+
+ if (offsets) {
+ oid *positions = Tloc(offsets, 0);
+ int ret = BUNreplacemulti(b, positions, i, cnt, true);
+ bat_destroy(b);
+ unlock_column(tr->store, id);
+ return ret == GDK_SUCCEED ? LOG_OK : LOG_ERR;
+ }
+
BUN bcnt = BATcount(b);
if (bcnt > offset){
size_t ccnt = ((offset+cnt) > bcnt)? (bcnt - offset):cnt;
@@ -1966,7 +1975,7 @@ append_col_execute(sql_trans *tr, sql_de
if (BATcount(bat))
ok = delta_append_bat(tr, delta, id, offset, offsets,
bat);
} else {
- ok = delta_append_val(tr, delta, id, offset, incoming_data,
cnt);
+ ok = delta_append_val(tr, delta, id, offset, offsets,
incoming_data, cnt);
}
return ok;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list