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

Reply via email to