Changeset: 626f4ede2f20 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=626f4ede2f20 Added Files: sql/jdbc/tests/Tests/JdbcClient_create_tables.sql sql/jdbc/tests/Tests/JdbcClient_drop_tables.sql sql/jdbc/tests/Tests/JdbcClient_inserts_selects.sql Removed Files: sql/jdbc/tests/JdbcClient_create_tables.sql sql/jdbc/tests/JdbcClient_inserts_selects.sql Modified Files: gdk/gdk_system.c monetdb5/modules/mal/tablet.c sql/backends/monet5/sql_result.c sql/jdbc/tests/Tests/Test_JdbcClient.SQL.bat sql/jdbc/tests/Tests/Test_JdbcClient.SQL.sh sql/jdbc/tests/Tests/Test_JdbcClient.stable.out 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: default Log Message:
Merge with Apr2019 branch. diffs (truncated from 520 to 300 lines): diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c --- a/gdk/gdk_system.c +++ b/gdk/gdk_system.c @@ -880,5 +880,41 @@ MT_check_nr_cores(void) ncpus = 16; #endif + /* get the number of allocated cpus from the cgroup settings */ + FILE *f = fopen("/sys/fs/cgroup/cpuset/cpuset.cpus", "r"); + if (f != NULL) { + char buf[512]; + char *p = fgets(buf, 512, f); + fclose(f); + if (p != NULL) { + /* syntax is: ranges of CPU numbers separated + * by comma; a range is either a single CPU + * id, or two IDs separated by a minus; any + * deviation causes the file to be ignored */ + int ncpu = 0; + for (;;) { + char *q; + unsigned fst = strtoul(p, &q, 10); + if (q == p) + return ncpus; + ncpu++; + if (*q == '-') { + p = q + 1; + unsigned lst = strtoul(p, &q, 10); + if (q == p || lst <= fst) + return ncpus; + ncpu += lst - fst; + } + if (*q == '\n') + break; + if (*q != ',') + return ncpus; + p = q + 1; + } + if (ncpu < ncpus) + return ncpu; + } + } + return ncpus; } 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 @@ -1017,7 +1017,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/jdbc/tests/JdbcClient_create_tables.sql b/sql/jdbc/tests/Tests/JdbcClient_create_tables.sql rename from sql/jdbc/tests/JdbcClient_create_tables.sql rename to sql/jdbc/tests/Tests/JdbcClient_create_tables.sql --- a/sql/jdbc/tests/JdbcClient_create_tables.sql +++ b/sql/jdbc/tests/Tests/JdbcClient_create_tables.sql @@ -46,7 +46,7 @@ CREATE INDEX "triples_subject_predicate_ CREATE View subject_stats as SELECT "subject", CAST(COUNT(*) AS BIGINT) AS counts, MIN("subject") AS min_value, MAX("subject") AS max_value FROM "triples" GROUP BY "subject" ORDER BY "subject"; CREATE View predicate_stats as SELECT "predicate", CAST(COUNT(*) AS BIGINT) AS counts, MIN("predicate") AS min_value, MAX("predicate") AS max_value FROM "triples" GROUP BY "predicate" ORDER BY "predicate"; -CREATE View object_stats as SELECT "object", CAST(COUNT(*) AS BIGINT) AS counts, MIN("object") AS min_value, MAX("object") AS max_value FROM "triples" GROUP BY "object" ORDER BY "object"; +CREATE OR REPLACE View object_stats as SELECT "object", CAST(COUNT(*) AS BIGINT) AS counts, MIN("object") AS min_value, MAX("object") AS max_value FROM "triples" GROUP BY "object" ORDER BY "object"; CREATE MERGE TABLE mt (id int primary key, nm varchar(123) NOT NULL); @@ -54,4 +54,6 @@ CREATE REMOTE TABLE remt (id int prima CREATE REPLICA TABLE replt (id int primary key, nm varchar(123) NOT NULL); CREATE STREAM TABLE strt (id int primary key, nm varchar(123) NOT NULL); +CREATE GLOBAL TEMP TABLE gtmpt (id int primary key, nm varchar(123) NOT NULL) ON COMMIT PRESERVE ROWS; + COMMIT; diff --git a/sql/jdbc/tests/Tests/JdbcClient_drop_tables.sql b/sql/jdbc/tests/Tests/JdbcClient_drop_tables.sql new file mode 100644 --- /dev/null +++ b/sql/jdbc/tests/Tests/JdbcClient_drop_tables.sql @@ -0,0 +1,28 @@ +DROP View subject_stats; +DROP View predicate_stats; +DROP View object_stats; + +DROP INDEX allnewtriples_subject_idx; +DROP INDEX allnewtriples_predicate_idx; +DROP INDEX allnewtriples_object_idx; + +DROP TABLE allnewtriples CASCADE; + +DROP TABLE "foreign" CASCADE; + +DROP INDEX "triples_object_idx"; +DROP INDEX "triples_predicate_idx"; +DROP INDEX "triples_predicate_object_idx"; +DROP INDEX "triples_subject_idx"; +DROP INDEX "triples_subject_object_idx"; +DROP INDEX "triples_subject_predicate_idx"; + +DROP TABLE "triples" CASCADE; + +DROP TABLE mt; +DROP TABLE remt; +DROP TABLE replt; +DROP TABLE strt; + +DROP TABLE gtmpt; + diff --git a/sql/jdbc/tests/JdbcClient_inserts_selects.sql b/sql/jdbc/tests/Tests/JdbcClient_inserts_selects.sql rename from sql/jdbc/tests/JdbcClient_inserts_selects.sql rename to sql/jdbc/tests/Tests/JdbcClient_inserts_selects.sql diff --git a/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.bat b/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.bat --- a/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.bat +++ b/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.bat @@ -6,10 +6,11 @@ echo password=monetdb>> .monetdb prompt # $t $g echo on -java nl.cwi.monetdb.client.JdbcClient -h %HOST% -p %MAPIPORT% -d "%TSTDB%" -f "%TSTSRCBASE%\%TSTDIR%\JdbcClient_create_tables.sql" +java nl.cwi.monetdb.client.JdbcClient -h %HOST% -p %MAPIPORT% -d "%TSTDB%" --help -java nl.cwi.monetdb.client.JdbcClient -h %HOST% -p %MAPIPORT% -d "%TSTDB%" -f "%TSTSRCBASE%\%TSTDIR%\JdbcClient_inserts_selects.sql" - +java nl.cwi.monetdb.client.JdbcClient -h %HOST% -p %MAPIPORT% -d "%TSTDB%" -f "%TSTSRCBASE%\%TSTDIR%\Tests\JdbcClient_create_tables.sql" +java nl.cwi.monetdb.client.JdbcClient -h %HOST% -p %MAPIPORT% -d "%TSTDB%" -f "%TSTSRCBASE%\%TSTDIR%\Tests\JdbcClient_inserts_selects.sql" java nl.cwi.monetdb.client.JdbcClient -h %HOST% -p %MAPIPORT% -d "%TSTDB%" -D +java nl.cwi.monetdb.client.JdbcClient -h %HOST% -p %MAPIPORT% -d "%TSTDB%" -f "%TSTSRCBASE%\%TSTDIR%\Tests\JdbcClient_drop_tables.sql" @del .monetdb diff --git a/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.sh b/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.sh --- a/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.sh +++ b/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.sh @@ -5,10 +5,11 @@ user=monetdb password=monetdb EOF -Mlog -x "java nl.cwi.monetdb.client.JdbcClient -h $HOST -p $MAPIPORT -d $TSTDB -f $TSTSRCBASE/$TSTDIR/JdbcClient_create_tables.sql" +Mlog -x "java nl.cwi.monetdb.client.JdbcClient -h $HOST -p $MAPIPORT -d $TSTDB --help" -Mlog -x "java nl.cwi.monetdb.client.JdbcClient -h $HOST -p $MAPIPORT -d $TSTDB -f $TSTSRCBASE/$TSTDIR/JdbcClient_inserts_selects.sql" - +Mlog -x "java nl.cwi.monetdb.client.JdbcClient -h $HOST -p $MAPIPORT -d $TSTDB -f $TSTSRCBASE/$TSTDIR/Tests/JdbcClient_create_tables.sql" +Mlog -x "java nl.cwi.monetdb.client.JdbcClient -h $HOST -p $MAPIPORT -d $TSTDB -f $TSTSRCBASE/$TSTDIR/Tests/JdbcClient_inserts_selects.sql" Mlog -x "java nl.cwi.monetdb.client.JdbcClient -h $HOST -p $MAPIPORT -d $TSTDB -D" +Mlog -x "java nl.cwi.monetdb.client.JdbcClient -h $HOST -p $MAPIPORT -d $TSTDB -f $TSTSRCBASE/$TSTDIR/Tests/JdbcClient_drop_tables.sql" rm -f .monetdb diff --git a/sql/jdbc/tests/Tests/Test_JdbcClient.stable.out b/sql/jdbc/tests/Tests/Test_JdbcClient.stable.out --- a/sql/jdbc/tests/Tests/Test_JdbcClient.stable.out +++ b/sql/jdbc/tests/Tests/Test_JdbcClient.stable.out @@ -1,26 +1,86 @@ stdout of test 'Test_JdbcClient` in directory 'sql/jdbc/tests` itself: -# 20:01:23 > -# 20:01:23 > Mtimeout -timeout 180 Mserver "--config=/ufs/fabian/scratch/monetdb/current/program-x86_64/etc/MonetDB.conf" --debug=10 --set "monet_mod_path=/ufs/fabian/scratch/monetdb/current/program-x86_64/lib/MonetDB:/ufs/fabian/scratch/monetdb/current/program-x86_64/lib/bin" --set "gdk_dbfarm=/ufs/fabian/scratch/monetdb/current/program-x86_64/var/MonetDB/dbfarm" --set "sql_logdir=/ufs/fabian/scratch/monetdb/current/program-x86_64/var/MonetDB/log" --set mapi_port=34230 --set sql_port=47764 --set xquery_port=59693 --set monet_prompt= --trace "--dbname=mTests_src_jdbc_tests" --dbinit="module(sql_server); sql_server_start();" ; echo ; echo Over.. -# 20:01:23 > +# 18:15:39 > +# 18:15:39 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=31817" "--set" "mapi_usock=/var/tmp/mtest-15181/.s.monetdb.31817" "--set" "monet_prompt=" "--forcemito" "--dbpath=/export/scratch1/dinther/INSTALL/var/MonetDB/mTests_sql_jdbc_tests" "--set" "embedded_c=true" +# 18:15:39 > -# Monet Database Server V4.9.3 -# Copyright (c) 1993-2005, CWI. All rights reserved. -# Compiled for x86_64-redhat-linux-gnu/64bit with 64bit OIDs; dynamically linked. -# Visit http://monetdb.cwi.nl/ for further information. +# MonetDB 5 server v11.33.12 (hg id: d8c48170bbe6+) +# This is an unreleased version +# Serving database 'mTests_sql_jdbc_tests', using 4 threads +# Compiled for x86_64-unknown-linux-gnu/64bit with 128bit integers +# Found 31.305 GiB available main-memory. +# Copyright (c) 1993 - July 2008 CWI. +# Copyright (c) August 2008 - 2019 MonetDB B.V., all rights reserved +# Visit https://www.monetdb.org/ for further information +# Listening for connection requests on mapi:monetdb://catskill.da.cwi.nl:31817/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-15181/.s.monetdb.31817 +# MonetDB/GIS module loaded +# SQL catalog created, loading sql scripts once +# MonetDB/SQL module loaded + + +# 18:15:40 > +# 18:15:40 > "./Test_JdbcClient.SQL.sh" "Test_JdbcClient" +# 18:15:40 > +# 18:15:40 > +# 18:15:40 > java nl.cwi.monetdb.client.JdbcClient -h catskill -p 31817 -d mTests_sql_jdbc_tests --help +# 18:15:40 > +Usage java -jar jdbcclient.jar + [-h host[:port]] [-p port] [-f file] [-u user] + [-l language] [-d database] [-e] [-D [table]] + [-X<opt>] +or using long option equivalents --host --port --file --user --language +--dump --echo --database. +Arguments may be written directly after the option like -p50000. + +If no host and port are given, localhost and 50000 are assumed. +An .monetdb file may exist in the user's home directory. This file can contain +preferences to use each time JdbcClient is started. Options given on the +command line override the preferences file. The .monetdb file syntax is +<option>=<value> where option is one of the options host, port, file, mode +debug, or password. Note that the last one is perilous and therefore not +available as command line option. +If no input file is given using the -f flag, an interactive session is _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list