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