Changeset: 83c5a9f0b39c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=83c5a9f0b39c
Modified Files:
        monetdb5/mal/mal_client.c
        monetdb5/modules/mal/tablet.c
Branch: Apr2019
Log Message:

Fixing some errors when something goes wrong during COPY INTO.


diffs (80 lines):

diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -429,10 +429,10 @@ freeClient(Client c)
                c->glb = NULL;
        }
        if( c->error_row){
-               BBPrelease(c->error_row->batCacheid);
-               BBPrelease(c->error_fld->batCacheid);
-               BBPrelease(c->error_msg->batCacheid);
-               BBPrelease(c->error_input->batCacheid);
+               BBPunfix(c->error_row->batCacheid);
+               BBPunfix(c->error_fld->batCacheid);
+               BBPunfix(c->error_msg->batCacheid);
+               BBPunfix(c->error_input->batCacheid);
                c->error_row = c->error_fld = c->error_msg = c->error_input = 
NULL;
        }
        if( c->wlc)
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
@@ -864,7 +864,8 @@ SQLinsert_val(READERtask *task, int col,
                                        task->rowerror[idx]++;
                                        task->errorcnt++;
                                        task->besteffort = 0; /* no longer best 
effort */
-                                       if (BUNappend(task->cntxt->error_row, 
&row, false) != GDK_SUCCEED ||
+                                       if (task->cntxt->error_row == NULL ||
+                                               
BUNappend(task->cntxt->error_row, &row, false) != GDK_SUCCEED ||
                                                
BUNappend(task->cntxt->error_fld, &col, false) != GDK_SUCCEED ||
                                                
BUNappend(task->cntxt->error_msg, SQLSTATE(HY001) MAL_MALLOC_FAIL, false) != 
GDK_SUCCEED ||
                                                
BUNappend(task->cntxt->error_input, err, false) != GDK_SUCCEED) {
@@ -886,7 +887,8 @@ SQLinsert_val(READERtask *task, int col,
                                task->as->error = createException(MAL, 
"sql.copy_from", SQLSTATE(HY001) MAL_MALLOC_FAIL);
                        task->rowerror[idx]++;
                        task->errorcnt++;
-                       if (BUNappend(task->cntxt->error_row, &row, false) != 
GDK_SUCCEED ||
+                       if (task->cntxt->error_row == NULL ||
+                               BUNappend(task->cntxt->error_row, &row, false) 
!= GDK_SUCCEED ||
                                BUNappend(task->cntxt->error_fld, &col, false) 
!= GDK_SUCCEED ||
                                BUNappend(task->cntxt->error_msg, buf, false) 
!= GDK_SUCCEED ||
                                BUNappend(task->cntxt->error_input, err, false) 
!= GDK_SUCCEED) {
@@ -909,7 +911,8 @@ SQLinsert_val(READERtask *task, int col,
        if (task->rowerror) {
                lng row = BATcount(fmt->c);
                MT_lock_set(&errorlock);
-               if (BUNappend(task->cntxt->error_row, &row, false) != 
GDK_SUCCEED ||
+               if (task->cntxt->error_row == NULL ||
+                       BUNappend(task->cntxt->error_row, &row, false) != 
GDK_SUCCEED ||
                        BUNappend(task->cntxt->error_fld, &col, false) != 
GDK_SUCCEED ||
                        BUNappend(task->cntxt->error_msg, "insert failed", 
false) != GDK_SUCCEED ||
                        (err = SQLload_error(task, idx,task->as->nr_attrs)) == 
NULL ||
@@ -1577,11 +1580,7 @@ create_rejects_table(Client cntxt)
                                BBPunfix(cntxt->error_msg->batCacheid);
                        if (cntxt->error_input)
                                BBPunfix(cntxt->error_input->batCacheid);
-               } else {
-                       BBPkeepref(cntxt->error_row->batCacheid);
-                       BBPkeepref(cntxt->error_fld->batCacheid);
-                       BBPkeepref(cntxt->error_msg->batCacheid);
-                       BBPkeepref(cntxt->error_input->batCacheid);
+                       cntxt->error_row = cntxt->error_fld = cntxt->error_msg 
= cntxt->error_input = NULL;
                }
        }
        MT_lock_unset(&mal_contextLock);
@@ -1609,6 +1608,7 @@ SQLload_file(Client cntxt, Tablet *as, b
        task = (READERtask) {
                .cntxt = cntxt,
                .from_stdin = from_stdin,
+               .as = as,
        };
 
        /* create the reject tables */
@@ -1651,7 +1651,6 @@ SQLload_file(Client cntxt, Tablet *as, b
                goto bailout;
        }
 
-       task.as = as;
        task.skip = skip;
        task.quote = quote;
        task.csep = csep;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to