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

Reply via email to