Changeset: 006e3f978a22 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/006e3f978a22
Modified Files:
        monetdb5/modules/mal/tablet.c
Branch: Dec2023
Log Message:

Make a copy of the rejects table.


diffs (45 lines):

diff --git a/monetdb5/modules/mal/tablet.c b/monetdb5/modules/mal/tablet.c
--- a/monetdb5/modules/mal/tablet.c
+++ b/monetdb5/modules/mal/tablet.c
@@ -1922,8 +1922,7 @@ SQLload_file(Client cntxt, Tablet *as, b
        return BUN_NONE;
 }
 
-/* return the latest reject table, to be on the safe side we should
- * actually create copies within a critical section. Ignored for now. */
+/* return the latest reject table */
 str
 COPYrejects(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
@@ -1935,10 +1934,27 @@ COPYrejects(Client cntxt, MalBlkPtr mb, 
        create_rejects_table(cntxt);
        if (cntxt->error_row == NULL)
                throw(MAL, "sql.rejects", "No reject table available");
-       BBPretain(*row = cntxt->error_row->batCacheid);
-       BBPretain(*fld = cntxt->error_fld->batCacheid);
-       BBPretain(*msg = cntxt->error_msg->batCacheid);
-       BBPretain(*inp = cntxt->error_input->batCacheid);
+       MT_lock_set(&errorlock);
+       BAT *bn1 = COLcopy(cntxt->error_row, cntxt->error_row->ttype, true, 
TRANSIENT);
+       BAT *bn2 = COLcopy(cntxt->error_fld, cntxt->error_fld->ttype, true, 
TRANSIENT);
+       BAT *bn3 = COLcopy(cntxt->error_msg, cntxt->error_msg->ttype, true, 
TRANSIENT);
+       BAT *bn4 = COLcopy(cntxt->error_input, cntxt->error_input->ttype, true, 
TRANSIENT);
+       MT_lock_unset(&errorlock);
+       if (bn1 == NULL || bn2 == NULL || bn3 == NULL || bn4 == NULL) {
+               BBPreclaim(bn1);
+               BBPreclaim(bn2);
+               BBPreclaim(bn3);
+               BBPreclaim(bn4);
+               throw(MAL, "sql.rejects", GDK_EXCEPTION);
+       }
+       *row = bn1->batCacheid;
+       *fld = bn2->batCacheid;
+       *msg = bn3->batCacheid;
+       *inp = bn4->batCacheid;
+       BBPkeepref(bn1);
+       BBPkeepref(bn2);
+       BBPkeepref(bn3);
+       BBPkeepref(bn4);
        (void) mb;
        return MAL_SUCCEED;
 }
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to