Changeset: e060255db6cd for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e060255db6cd
Modified Files:
README.rst
clients/Tests/exports.stable.out
clients/examples/php/CMakeLists.txt
clients/mapiclient/mclient.c
clients/mapiclient/msqldump.c
clients/mapilib/mapi.c
clients/odbc/CMakeLists.txt
common/CMakeLists.txt
ctest/CMakeLists.txt
ctest/cmake/test_detect_legacy_var.c.in
ctest/cmake/test_package_detect.c.in
debian/libmonetdb20.install
documentation/source/intro.rst
geom/sql/CMakeLists.txt
monetdb5/CMakeLists.txt
monetdb5/modules/mal/mal_mapi.c
monetdb5/modules/mal/tablet.c
sql/CMakeLists.txt
sql/backends/monet5/sql.c
sql/backends/monet5/sql_result.c
sql/server/rel_updates.c
tools/CMakeLists.txt
tools/merovingian/daemon/client.c
tools/merovingian/daemon/controlrunner.c
tools/merovingian/daemon/proxy.c
Branch: makelibstreamgreatagain
Log Message:
Merge with default branch.
diffs (truncated from 4254 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
@@ -8419,7 +8419,7 @@ stdout of test 'MAL-signatures` in direc
[ "sql", "bind_idxbat", "pattern sql.bind_idxbat(X_2:int, X_3:str,
X_4:str, X_5:str, X_6:int, X_7:int, X_8:int) (X_0:bat[:oid], X_1:bat[:any_1])
", "mvc_bind_idxbat_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:int,
X_11:str, X_12: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:int,
X_11:str, X_12:int, X_13: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
@@ -11362,7 +11362,7 @@ stdout of test 'MAL-signatures` in direc
[ "sql", "bind_idxbat", "pattern sql.bind_idxbat(X_2:int, X_3:str,
X_4:str, X_5:str, X_6:int, X_7:int, X_8:int) (X_0:bat[:oid], X_1:bat[:any_1])
", "mvc_bind_idxbat_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:int,
X_11:str, X_12: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:int,
X_11:str, X_12:int, X_13: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
@@ -1083,7 +1083,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)
{
@@ -3546,7 +3543,7 @@ main(int argc, char **argv)
mapi_cache_limit(mid, -1);
if (dump) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list