Changeset: 714f9f704147 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=714f9f704147
Modified Files:
        monetdb5/modules/mal/tablet.c
        sql/backends/monet5/sql_result.c
        
sql/test/BugDay_2005-11-09_2.9.3/Tests/hang_on_copy_into.SF-1100504.stable.err
        
sql/test/BugTracker-2010/Tests/incomplete-utf8-sequence.Bug-2575.stable.err
        
sql/test/BugTracker-2015/Tests/backslash_predecing_separator.Bug-3775.stable.err
        sql/test/copy/Tests/columns.stable.err
        sql/test/copy/Tests/incorrect_columns.stable.out
Branch: Apr2019
Log Message:

Add line number to error messages in COPY INTO.


diffs (168 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
@@ -663,34 +663,33 @@ typedef struct {
 static void
 tablet_error(READERtask *task, lng row, int col, const char *msg, const char 
*fcn)
 {
+       MT_lock_set(&errorlock);
        if (task->cntxt->error_row != NULL) {
-               MT_lock_set(&errorlock);
                if (BUNappend(task->cntxt->error_row, &row, false) != 
GDK_SUCCEED ||
                        BUNappend(task->cntxt->error_fld, &col, false) != 
GDK_SUCCEED ||
                        BUNappend(task->cntxt->error_msg, msg, false) != 
GDK_SUCCEED ||
                        BUNappend(task->cntxt->error_input, fcn, false) != 
GDK_SUCCEED)
                        task->besteffort = 0;
-               if (task->as->error == NULL && (msg == NULL || (task->as->error 
= GDKstrdup(msg)) == NULL)) {
-                       task->as->error = createException(MAL, "sql.copy_from", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                       task->besteffort = 0;
-               }
                if (!is_lng_nil(row) && task->rowerror)
                        task->rowerror[row]++;
+       }
+       if (task->as->error == NULL) {
+               if (msg == NULL)
+                       task->besteffort = 0;
+               else if (!is_lng_nil(row)) {
+                       if (!is_int_nil(col))
+                               task->as->error = createException(MAL, 
"sql.copy_from", "line " LLFMT ": column %d: %s", row + 1, col + 1, msg);
+                       else
+                               task->as->error = createException(MAL, 
"sql.copy_from", "line " LLFMT ": %s", row + 1, msg);
+               } else
+                       task->as->error = createException(MAL, "sql.copy_from", 
"%s", msg);
+       }
 #ifdef _DEBUG_TABLET_
-               mnstr_printf(GDKout, "#tablet_error: " LLFMT ",%d:%s:%s\n",
-                                        row, col, msg, fcn);
+       mnstr_printf(GDKout, "#tablet_error: " LLFMT ",%d:%s:%s\n",
+                                row, col, msg, fcn);
 #endif
-               task->errorcnt++;
-               MT_lock_unset(&errorlock);
-       } else {
-               MT_lock_set(&errorlock);
-               if (task->as->error == NULL && (msg == NULL || (task->as->error 
= GDKstrdup(msg)) == NULL)) {
-                       task->as->error = createException(MAL, "sql.copy_from", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                       task->besteffort = 0;
-               }
-               task->errorcnt++;
-               MT_lock_unset(&errorlock);
-       }
+       task->errorcnt++;
+       MT_lock_unset(&errorlock);
 }
 
 /*
@@ -883,7 +882,6 @@ SQLinsert_val(READERtask *task, int col,
                                         row, fmt->name ? fmt->name : "", 
fmt->type,
                                         s ? " in '" : "", s ? s : "", s ? "'" 
: "");
                        GDKfree(s);
-                       buf[sizeof(buf)-1]=0;
                        if (task->as->error == NULL && (task->as->error = 
GDKstrdup(buf)) == NULL)
                                task->as->error = createException(MAL, 
"sql.copy_from", SQLSTATE(HY001) MAL_MALLOC_FAIL);
                        task->rowerror[idx]++;
@@ -1025,8 +1023,7 @@ SQLload_parse_line(READERtask *task, int
                        /* not enough fields */
                        if (i < as->nr_attrs - 1) {
                                errline = SQLload_error(task, idx, i+1);
-                               snprintf(errmsg, BUFSIZ, "Column value "BUNFMT" 
missing", i+1);
-                               tablet_error(task, idx, (int) i, errmsg, 
errline);
+                               tablet_error(task, idx, (int) i, "Column value 
missing", errline);
                                GDKfree(errline);
                                error = true;
                          errors1:
@@ -1065,8 +1062,7 @@ SQLload_parse_line(READERtask *task, int
                        /* not enough fields */
                        if (i < as->nr_attrs - 1) {
                                errline = SQLload_error(task, idx,i+1);
-                               snprintf(errmsg, BUFSIZ, "Column value "BUNFMT" 
missing",i+1);
-                               tablet_error(task, idx, (int) i, errmsg, 
errline);
+                               tablet_error(task, idx, (int) i, "Column value 
missing", errline);
                                GDKfree(errline);
                                error = true;
                                /* we save all errors detected */
@@ -1273,7 +1269,7 @@ SQLproducer(void *p)
        size_t rseplen = strlen(rsep), partial = 0;
        char quote = task->quote;
        dfa_t rdfa;
-       lng rowno = 1;
+       lng rowno = 0;
 
        MT_sema_down(&task->producer);
        if (task->id < 0) {
diff --git a/sql/backends/monet5/sql_result.c b/sql/backends/monet5/sql_result.c
--- a/sql/backends/monet5/sql_result.c
+++ b/sql/backends/monet5/sql_result.c
@@ -1034,7 +1034,7 @@ mvc_import_table(Client cntxt, BAT ***ba
                        }
                }
                if (as.error) {
-                       if( !best) sql_error(m, 500, "%s", as.error);
+                       if( !best) sql_error(m, 500, "%s", 
getExceptionMessage(as.error));
                        freeException(as.error);
                        as.error = NULL;
                }
diff --git 
a/sql/test/BugDay_2005-11-09_2.9.3/Tests/hang_on_copy_into.SF-1100504.stable.err
 
b/sql/test/BugDay_2005-11-09_2.9.3/Tests/hang_on_copy_into.SF-1100504.stable.err
--- 
a/sql/test/BugDay_2005-11-09_2.9.3/Tests/hang_on_copy_into.SF-1100504.stable.err
+++ 
b/sql/test/BugDay_2005-11-09_2.9.3/Tests/hang_on_copy_into.SF-1100504.stable.err
@@ -88,7 +88,7 @@ QUERY = COPY 1 RECORDS INTO "news" FROM 
         allemaal nogal lang duurt, maar in principe is het nog
         maar een uurtje of 6 werk om het goed te krijgen. Zoals
         je kan zien heb ik bij de voicemails al wat leuke
-ERROR = !Failed to import table 'news', incomplete record at end of file
+ERROR = !Failed to import table 'news', line 1: incomplete record at end of 
file
 CODE  = 42000
 
 # 23:26:36 >  
diff --git 
a/sql/test/BugTracker-2010/Tests/incomplete-utf8-sequence.Bug-2575.stable.err 
b/sql/test/BugTracker-2010/Tests/incomplete-utf8-sequence.Bug-2575.stable.err
--- 
a/sql/test/BugTracker-2010/Tests/incomplete-utf8-sequence.Bug-2575.stable.err
+++ 
b/sql/test/BugTracker-2010/Tests/incomplete-utf8-sequence.Bug-2575.stable.err
@@ -71,7 +71,7 @@ MAPI  = (monetdb) /var/tmp/mtest-10958/.
 QUERY = copy 2 records into tbl_bug2575 from stdin using delimiters 
E'\t',E'\n','';
         10001160000    29      .v.
         10001690001    0       coÃ
-ERROR = !Failed to import table 'tbl_bug2575', input not properly encoded UTF-8
+ERROR = !Failed to import table 'tbl_bug2575', line 2: input not properly 
encoded UTF-8
 CODE  = 42000
 MAPI  = (monetdb) /var/tmp/mtest-9014/.s.monetdb.38503
 QUERY = copy 2 records into tbl_bug2575 from stdin using delimiters 
E'\t',E'\n','';
diff --git 
a/sql/test/BugTracker-2015/Tests/backslash_predecing_separator.Bug-3775.stable.err
 
b/sql/test/BugTracker-2015/Tests/backslash_predecing_separator.Bug-3775.stable.err
--- 
a/sql/test/BugTracker-2015/Tests/backslash_predecing_separator.Bug-3775.stable.err
+++ 
b/sql/test/BugTracker-2015/Tests/backslash_predecing_separator.Bug-3775.stable.err
@@ -33,7 +33,7 @@ stderr of test 'backslash_predecing_sepa
 MAPI  = (monetdb) /var/tmp/mtest-10958/.s.monetdb.35734
 QUERY = COPY 1 RECORDS INTO whatgoodisadatabaseifyoucannotimport FROM STDIN 
USING DELIMITERS ' ', E'\n', '';
         asdf\ 42
-ERROR = !Failed to import table 'whatgoodisadatabaseifyoucannotimport', Column 
value 1 missing
+ERROR = !Failed to import table 'whatgoodisadatabaseifyoucannotimport', line 
1: column 1: Column value missing
 CODE  = 42000
 MAPI  = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685
 QUERY = SELECT * FROM whatgoodisadatabaseifyoucannotimport;
diff --git a/sql/test/copy/Tests/columns.stable.err 
b/sql/test/copy/Tests/columns.stable.err
--- a/sql/test/copy/Tests/columns.stable.err
+++ b/sql/test/copy/Tests/columns.stable.err
@@ -31,7 +31,7 @@ stderr of test 'columns` in directory 's
 MAPI  = (monetdb) /var/tmp/mtest-10958/.s.monetdb.35734
 QUERY = copy 3 records into tbl (i, d) from stdin delimiters ',',E'\n';
         1,2.0
-ERROR = !Failed to import table 'tbl', Column value 2 missing
+ERROR = !Failed to import table 'tbl', line 1: column 2: Column value missing
 CODE  = 42000
 MAPI  = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685
 QUERY = 2,2.1
diff --git a/sql/test/copy/Tests/incorrect_columns.stable.out 
b/sql/test/copy/Tests/incorrect_columns.stable.out
--- a/sql/test/copy/Tests/incorrect_columns.stable.out
+++ b/sql/test/copy/Tests/incorrect_columns.stable.out
@@ -87,9 +87,9 @@ Ready.
 % .L1, .L1,    .L1,    .L1 # table_name
 % rowid,       fldid,  message,        input # name
 % bigint,      int,    clob,   clob # type
-% 1,   1,      22,     11 # length
-[ 0,   0,      "Column value 1 missing",       "2\n"   ]
-[ 0,   0,      "Column value 1 missing",       "no tag\n"      ]
+% 1,   1,      20,     11 # length
+[ 0,   0,      "Column value missing", "2\n"   ]
+[ 0,   0,      "Column value missing", "no tag\n"      ]
 [ 0,   2,      "Leftover data 'xyz'",  "3,too much\n"  ]
 #drop table t_columns;
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to