Changeset: 79c92bc589f6 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=79c92bc589f6 Modified Files: clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 clients/Tests/exports.stable.out gdk/gdk_hash.c monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out monetdb5/mal/mal_parser.c monetdb5/mal/mal_prelude.c monetdb5/modules/atoms/json.c monetdb5/modules/mal/tablet.c sql/backends/monet5/sql.c sql/backends/monet5/sql_result.c sql/backends/monet5/sql_result.h sql/common/sql_types.c sql/server/rel_updates.c sql/server/sql_parser.y sql/storage/store.c sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out sql/test/BugTracker-2015/Tests/readonly.Bug-3709.stable.out sql/test/emptydb/Tests/check.stable.out sql/test/emptydb/Tests/check.stable.out.32bit sql/test/emptydb/Tests/check.stable.out.int128 sql/test/sys-schema/Tests/systemfunctions.stable.out sql/test/sys-schema/Tests/systemfunctions.stable.out.int128 tools/monetdbe/monetdbe.c Branch: unlock Log Message:
Merge with default branch. diffs (truncated from 4587 to 300 lines): diff --git a/NT/mkodbcwxs.py b/NT/mkodbcwxs.py --- a/NT/mkodbcwxs.py +++ b/NT/mkodbcwxs.py @@ -41,7 +41,14 @@ def main(): arch = 'x86' libcrypto = '' vcpkg = r'C:\vcpkg\installed\x86-windows\{}' - vs = '2019' + with open('CMakeCache.txt') as cache: + for line in cache: + if line.startswith('CMAKE_GENERATOR_INSTANCE:INTERNAL='): + comdir = line.split('=', 1)[1].strip().replace('/', '\\') + break + else: + comdir = r'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community' + msvc = os.path.join(comdir, r'VC\Redist\MSVC') features = [] print(r'<?xml version="1.0"?>') print(r'<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">') @@ -57,7 +64,6 @@ def main(): print(r' <CustomAction Id="driverinstall" FileKey="odbcinstall" ExeCommand="/Install" Execute="deferred" Impersonate="no"/>') print(r' <CustomAction Id="driveruninstall" FileKey="odbcinstall" ExeCommand="/Uninstall" Execute="deferred" Impersonate="no"/>') print(r' <Directory Id="TARGETDIR" Name="SourceDir">') - msvc = r'C:\Program Files (x86)\Microsoft Visual Studio\{}\Community\VC\Redist\MSVC'.format(vs) d = sorted(os.listdir(msvc))[-1] msm = '_CRT_{}.msm'.format(arch) for f in sorted(os.listdir(os.path.join(msvc, d, 'MergeModules'))): diff --git a/NT/mksqlwxs.py b/NT/mksqlwxs.py --- a/NT/mksqlwxs.py +++ b/NT/mksqlwxs.py @@ -48,7 +48,14 @@ def main(): arch = 'x86' libcrypto = '' vcpkg = r'C:\vcpkg\installed\x86-windows\{}' - vs = '2019' + with open('CMakeCache.txt') as cache: + for line in cache: + if line.startswith('CMAKE_GENERATOR_INSTANCE:INTERNAL='): + comdir = line.split('=', 1)[1].strip().replace('/', '\\') + break + else: + comdir = r'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community' + msvc = os.path.join(comdir, r'VC\Redist\MSVC') features = [] extend = [] debug = [] @@ -102,7 +109,6 @@ def main(): print(r' <Property Id="ARPPRODUCTICON" Value="share\monetdb.ico"/>') print(r' <Media Id="1" Cabinet="monetdb.cab" EmbedCab="yes"/>') print(r' <Directory Id="TARGETDIR" Name="SourceDir">') - msvc = r'C:\Program Files (x86)\Microsoft Visual Studio\{}\Community\VC\Redist\MSVC'.format(vs) d = sorted(os.listdir(msvc))[-1] msm = '_CRT_{}.msm'.format(arch) for f in sorted(os.listdir(os.path.join(msvc, d, 'MergeModules'))): diff --git a/clients/Tests/MAL-signatures.stable.out b/clients/Tests/MAL-signatures.stable.out --- a/clients/Tests/MAL-signatures.stable.out +++ b/clients/Tests/MAL-signatures.stable.out @@ -8450,7 +8450,7 @@ stdout of test 'MAL-signatures` in direc [ "sql", "claim", "unsafe pattern sql.claim(X_1:int, X_2:str, X_3:str, X_4:lng):lng ", "mvc_claim_wrap;", "" ] [ "sql", "clear_table", "unsafe pattern sql.clear_table(X_1:str, X_2:str):lng ", "mvc_clear_table_wrap;", "" ] [ "sql", "commit", "unsafe pattern sql.commit():void ", "SQLcommit;", "" ] -[ "sql", "copy_from", "unsafe pattern sql.copy_from(X_1:ptr, X_2:str, X_3:str, X_4:str, X_5:str, X_6:str, X_7:lng, X_8:lng, X_9:int, X_10:str, X_11:int):bat[:any]... ", "mvc_import_table_wrap;", "" ] +[ "sql", "copy_from", "unsafe pattern sql.copy_from(X_1:ptr, X_2:str, X_3:str, X_4:str, X_5:str, X_6:str, X_7:lng, X_8:lng, X_9:int, X_10:str, X_11:int, X_12:int):bat[:any]... ", "mvc_import_table_wrap;", "" ] [ "sql", "copy_rejects", "pattern sql.copy_rejects() (X_0:bat[:lng], X_1:bat[:int], X_2:bat[:str], X_3:bat[:str]) ", "COPYrejects;", "" ] [ "sql", "copy_rejects_clear", "unsafe pattern sql.copy_rejects_clear():void ", "COPYrejects_clear;", "" ] [ "sql", "corr", "pattern sql.corr(X_1:bte, X_2:bte, X_3:lng, X_4:lng):dbl ", "SQLcorr;", "" ] diff --git a/clients/Tests/MAL-signatures.stable.out.int128 b/clients/Tests/MAL-signatures.stable.out.int128 --- a/clients/Tests/MAL-signatures.stable.out.int128 +++ b/clients/Tests/MAL-signatures.stable.out.int128 @@ -11400,7 +11400,7 @@ stdout of test 'MAL-signatures` in direc [ "sql", "claim", "unsafe pattern sql.claim(X_1:int, X_2:str, X_3:str, X_4:lng):lng ", "mvc_claim_wrap;", "" ] [ "sql", "clear_table", "unsafe pattern sql.clear_table(X_1:str, X_2:str):lng ", "mvc_clear_table_wrap;", "" ] [ "sql", "commit", "unsafe pattern sql.commit():void ", "SQLcommit;", "" ] -[ "sql", "copy_from", "unsafe pattern sql.copy_from(X_1:ptr, X_2:str, X_3:str, X_4:str, X_5:str, X_6:str, X_7:lng, X_8:lng, X_9:int, X_10:str, X_11:int):bat[:any]... ", "mvc_import_table_wrap;", "" ] +[ "sql", "copy_from", "unsafe pattern sql.copy_from(X_1:ptr, X_2:str, X_3:str, X_4:str, X_5:str, X_6:str, X_7:lng, X_8:lng, X_9:int, X_10:str, X_11:int, X_12:int):bat[:any]... ", "mvc_import_table_wrap;", "" ] [ "sql", "copy_rejects", "pattern sql.copy_rejects() (X_0:bat[:lng], X_1:bat[:int], X_2:bat[:str], X_3:bat[:str]) ", "COPYrejects;", "" ] [ "sql", "copy_rejects_clear", "unsafe pattern sql.copy_rejects_clear():void ", "COPYrejects_clear;", "" ] [ "sql", "corr", "pattern sql.corr(X_1:bte, X_2:bte, X_3:lng, X_4:lng):dbl ", "SQLcorr;", "" ] diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -1085,7 +1085,7 @@ str SERVERsetAlias(void *ret, int *mid, str SERVERstop(void *ret); str SERVERsuspend(void *ret); str SERVERtrace(void *ret, int *mid, int *flag); -BUN SQLload_file(Client cntxt, Tablet *as, bstream *b, stream *out, const char *csep, const char *rsep, char quote, lng skip, lng maxrow, int best, bool from_stdin, const char *tabnam); +BUN SQLload_file(Client cntxt, Tablet *as, bstream *b, stream *out, const char *csep, const char *rsep, char quote, lng skip, lng maxrow, int best, bool from_stdin, const char *tabnam, bool escape); str STRBytes(int *res, const str *arg1); str STRConcat(str *res, const str *val1, const str *val2); str STRFromWChr(str *res, const int *at); diff --git a/clients/mapiclient/Tests/msqldump--help.stable.err b/clients/mapiclient/Tests/msqldump--help.stable.err --- a/clients/mapiclient/Tests/msqldump--help.stable.err +++ b/clients/mapiclient/Tests/msqldump--help.stable.err @@ -21,6 +21,7 @@ Options are: -t table | --table=table dump a database table -D | --describe describe database -N | --inserts use INSERT INTO statements + -e | --noescape use NO ESCAPE -q | --quiet don't print welcome message -X | --Xdebug trace mapi network interaction -? | --help show this usage message diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c --- a/clients/mapiclient/dump.c +++ b/clients/mapiclient/dump.c @@ -122,17 +122,18 @@ dquoted_print(stream *f, const char *s, } static int -squoted_print(stream *f, const char *s, char quote) +squoted_print(stream *f, const char *s, char quote, bool noescape) { assert(quote == '\'' || quote == '"'); if (mnstr_printf(f, "%c", quote) < 0) return -1; while (*s) { - size_t n = strcspn(s, "\\'\"\177" - "\001\002\003\004\005\006\007" - "\010\011\012\013\014\015\016\017" - "\020\021\022\023\024\025\026\027" - "\030\031\032\033\034\035\036\037"); + size_t n = noescape ? strcspn(s, "'\"") : + strcspn(s, "\\'\"\177" + "\001\002\003\004\005\006\007" + "\010\011\012\013\014\015\016\017" + "\020\021\022\023\024\025\026\027" + "\030\031\032\033\034\035\036\037"); if (n > 0 && mnstr_write(f, s, 1, n) < 0) return -1; s += n; @@ -235,7 +236,7 @@ comment_on(stream *toConsole, const char } } if (mnstr_write(toConsole, " IS ", 1, 4) < 0 || - squoted_print(toConsole, remark, '\'') < 0 || + squoted_print(toConsole, remark, '\'', false) < 0 || mnstr_write(toConsole, ";\n", 1, 2) < 0) return -1; } @@ -1307,11 +1308,11 @@ describe_table(Mapi mid, const char *sch rt_hash = mapi_fetch_field(hdl, 1); } mnstr_printf(toConsole, " ON "); - squoted_print(toConsole, view, '\''); + squoted_print(toConsole, view, '\'', false); mnstr_printf(toConsole, " WITH USER "); - squoted_print(toConsole, rt_user, '\''); + squoted_print(toConsole, rt_user, '\'', false); mnstr_printf(toConsole, " ENCRYPTED PASSWORD "); - squoted_print(toConsole, rt_hash, '\''); + squoted_print(toConsole, rt_hash, '\'', false); mapi_close_handle(hdl); hdl = NULL; } else if (type == 3 && has_table_partitions(mid)) { /* A merge table might be partitioned */ @@ -1660,7 +1661,7 @@ describe_schema(Mapi mid, const char *sn static int dump_table_data(Mapi mid, const char *schema, const char *tname, stream *toConsole, - bool useInserts) + bool useInserts, bool noescape) { int cnt, i; int64_t rows; @@ -1743,9 +1744,9 @@ dump_table_data(Mapi mid, const char *sc if (!useInserts) { mnstr_printf(toConsole, "COPY %" PRId64 " RECORDS INTO ", rows); dquoted_print(toConsole, schema, "."); - dquoted_print(toConsole, tname, - " FROM stdin USING DELIMITERS " - "E'\\t',E'\\n','\"';\n"); + dquoted_print(toConsole, tname, NULL); + mnstr_printf(toConsole, " FROM stdin USING DELIMITERS " + "E'\\t',E'\\n','\"'%s;\n", noescape ? " NO ESCAPE" : ""); } string = malloc(sizeof(unsigned char) * cnt); if (string == NULL) @@ -1800,13 +1801,13 @@ dump_table_data(Mapi mid, const char *sc strcmp(tp, "url") == 0 || strcmp(tp, "uuid") == 0 || string[i]) - squoted_print(toConsole, s, '\''); + squoted_print(toConsole, s, '\'', false); else mnstr_printf(toConsole, "%s", s); } else if (string[i]) { /* write double-quoted string with certain characters escaped */ - squoted_print(toConsole, s, '"'); + squoted_print(toConsole, s, '"', noescape); } else mnstr_printf(toConsole, "%s", s); @@ -1862,13 +1863,14 @@ bailout: int dump_table(Mapi mid, const char *schema, const char *tname, stream *toConsole, - bool describe, bool foreign, bool useInserts, bool databaseDump) + bool describe, bool foreign, bool useInserts, bool databaseDump, + bool noescape) { int rc; rc = describe_table(mid, schema, tname, toConsole, foreign, databaseDump); if (rc == 0 && !describe) - rc = dump_table_data(mid, schema, tname, toConsole, useInserts); + rc = dump_table_data(mid, schema, tname, toConsole, useInserts, noescape); return rc; } @@ -2147,7 +2149,7 @@ dump_function(Mapi mid, stream *toConsol free(ascal); } mnstr_printf(toConsole, ") IS "); - squoted_print(toConsole, remark, '\''); + squoted_print(toConsole, remark, '\'', false); mnstr_printf(toConsole, ";\n"); free(remark); } @@ -2291,7 +2293,7 @@ bailout: } int -dump_database(Mapi mid, stream *toConsole, bool describe, bool useInserts) +dump_database(Mapi mid, stream *toConsole, bool describe, bool useInserts, bool noescape) { const char *start_trx = "START TRANSACTION"; const char *end = "ROLLBACK"; @@ -2636,9 +2638,9 @@ dump_database(Mapi mid, stream *toConsol mnstr_printf(toConsole, "CREATE USER "); dquoted_print(toConsole, uname, " "); mnstr_printf(toConsole, "WITH ENCRYPTED PASSWORD "); - squoted_print(toConsole, pwhash, '\''); + squoted_print(toConsole, pwhash, '\'', false); mnstr_printf(toConsole, " NAME "); - squoted_print(toConsole, fullname, '\''); + squoted_print(toConsole, fullname, '\'', false); mnstr_printf(toConsole, " SCHEMA "); dquoted_print(toConsole, describe ? sname : "sys", ";\n"); } @@ -2802,7 +2804,7 @@ dump_database(Mapi mid, stream *toConsol } if (type) { /* table */ int ptype = atoi(type), dont_describe = (ptype == 3 || ptype == 5); - rc = dump_table(mid, schema, name, toConsole, dont_describe || describe, describe, useInserts, true); + rc = dump_table(mid, schema, name, toConsole, dont_describe || describe, describe, useInserts, true, noescape); } else if (query) { /* view or trigger */ mnstr_printf(toConsole, "%s\n", query); @@ -2884,7 +2886,7 @@ dump_database(Mapi mid, stream *toConsol } else { mnstr_printf(toConsole, ", "); } - squoted_print(toConsole, nextv, '\''); + squoted_print(toConsole, nextv, '\'', false); i++; } first = false; @@ -2923,12 +2925,12 @@ dump_database(Mapi mid, stream *toConsol if (minv || maxv || !wnulls || (!minv && !maxv && wnulls && strcmp(wnulls, "false") == 0)) { mnstr_printf(toConsole, " FROM "); if (minv) - squoted_print(toConsole, minv, '\''); + squoted_print(toConsole, minv, '\'', false); else mnstr_printf(toConsole, "RANGE MINVALUE"); mnstr_printf(toConsole, " TO "); if (maxv) - squoted_print(toConsole, maxv, '\''); + squoted_print(toConsole, maxv, '\'', false); else mnstr_printf(toConsole, "RANGE MAXVALUE"); } diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c --- a/clients/mapiclient/mclient.c +++ b/clients/mapiclient/mclient.c @@ -2645,10 +2645,10 @@ doFile(Mapi mid, stream *fp, bool useins #endif if (*line) { mnstr_printf(toConsole, "START TRANSACTION;\n"); - dump_table(mid, NULL, line, toConsole, false, true, useinserts, false); + dump_table(mid, NULL, line, toConsole, false, true, useinserts, false, false); mnstr_printf(toConsole, "COMMIT;\n"); } else - dump_database(mid, toConsole, 0, useinserts); + dump_database(mid, toConsole, 0, useinserts, false); #ifdef HAVE_POPEN end_pager(saveFD); #endif @@ -3144,9 +3144,6 @@ usage(const char *prog, int xit) exit(xit); } -/* hardwired defaults, only used if monet environment cannot be found */ -#define defaultPort 50000 - static inline bool isfile(FILE *fp) { @@ -3536,7 +3533,7 @@ main(int argc, char **argv) mapi_cache_limit(mid, -1); if (dump) { _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list