Changeset: 5d7c7e32a7aa for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5d7c7e32a7aa Added Files: sql/test/BugTracker-2019/Tests/cast-interval.Bug-6793.sql sql/test/BugTracker-2019/Tests/cast-interval.Bug-6793.stable.err sql/test/BugTracker-2019/Tests/cast-interval.Bug-6793.stable.out sql/test/BugTracker-2019/Tests/could-not-allocate-space.Bug-6795.sql sql/test/BugTracker-2019/Tests/could-not-allocate-space.Bug-6795.stable.err sql/test/BugTracker-2019/Tests/could-not-allocate-space.Bug-6795.stable.out sql/test/BugTracker-2019/Tests/python-aggregate-no-groups.Bug-6726.sql sql/test/BugTracker-2019/Tests/python-aggregate-no-groups.Bug-6726.stable.err sql/test/BugTracker-2019/Tests/python-aggregate-no-groups.Bug-6726.stable.out sql/test/scanner/Tests/mserver_with_raw_strings.options5 sql/test/scanner/Tests/mserver_with_raw_strings.sql sql/test/scanner/Tests/mserver_with_raw_strings.stable.err sql/test/scanner/Tests/mserver_with_raw_strings.stable.out sql/test/scanner/Tests/mserver_without_raw_strings.options5 sql/test/scanner/Tests/mserver_without_raw_strings.sql sql/test/scanner/Tests/mserver_without_raw_strings.stable.err sql/test/scanner/Tests/mserver_without_raw_strings.stable.out Modified Files: ChangeLog NT/monetdb_config.h.in NT/rules.msc buildtools/doc/windowsbuild.rst clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 clients/Tests/exports.stable.out clients/mapiclient/dump.c clients/mapiclient/msqldump.c common/options/monet_options.c configure.ag debian/monetdb5-server.install gdk/ChangeLog gdk/gdk.h gdk/gdk_align.c gdk/gdk_bat.c gdk/gdk_batop.c gdk/gdk_logger.c gdk/gdk_posix.c monetdb5/ChangeLog monetdb5/extras/rapi/rapi.c monetdb5/modules/kernel/bat5.c monetdb5/modules/kernel/bat5.h monetdb5/modules/kernel/bat5.mal monetdb5/modules/mal/Tests/inspect05.malC monetdb5/modules/mal/Tests/inspect05.stable.out monetdb5/modules/mal/Tests/inspect05.stable.out.int128 monetdb5/modules/mal/querylog.c monetdb5/modules/mal/wlc.h monetdb5/optimizer/opt_evaluate.c monetdb5/optimizer/opt_pipes.c sql/backends/monet5/Tests/pyapi05.stable.out sql/backends/monet5/Tests/rapi05.stable.out sql/backends/monet5/UDF/pyapi/conversion.c sql/backends/monet5/UDF/pyapi/convert_loops.h sql/backends/monet5/UDF/pyapi/pyapi.c sql/backends/monet5/UDF/pyapi/pyloader.c sql/backends/monet5/UDF/pyapi/pytypes.c sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_05.stable.out sql/backends/monet5/rel_bin.c sql/backends/monet5/sql.c sql/backends/monet5/sql_rank.c sql/backends/monet5/sql_result.c sql/backends/monet5/sql_scenario.c sql/backends/monet5/sql_statement.c sql/backends/monet5/sql_upgrades.c sql/include/sql_catalog.h sql/include/sql_relation.h sql/rel.txt sql/server/rel_dump.c sql/server/rel_exp.c sql/server/rel_exp.h sql/server/rel_optimizer.c sql/server/rel_planner.c sql/server/rel_propagate.c sql/server/rel_psm.c sql/server/rel_rel.c sql/server/rel_rel.h sql/server/rel_select.c sql/server/rel_sequence.c sql/server/rel_unnest.c sql/server/rel_unnest.h sql/server/rel_updates.c sql/server/sql_atom.c sql/server/sql_atom.h sql/server/sql_partition.c sql/server/sql_scan.c sql/server/sql_semantic.c sql/storage/bat/bat_logger.c sql/storage/bat/bat_storage.c sql/storage/bat/bat_table.c sql/test/BugDay_2005-12-19_2.9.3/Tests/cast_bigint_to_int.SF-1211903.stable.out sql/test/BugTracker-2008/Tests/decimal_cast_in_view.SF-2075223.stable.out sql/test/BugTracker-2013/Tests/cannot_use_columns_after_groupby.Bug-3340.sql sql/test/BugTracker-2013/Tests/cannot_use_columns_after_groupby.Bug-3340.stable.err sql/test/BugTracker-2013/Tests/cannot_use_columns_after_groupby.Bug-3340.stable.out sql/test/BugTracker-2013/Tests/numeric-column-alias.Bug-3279.stable.out sql/test/BugTracker-2014/Tests/missing_alias.Bug-3626.stable.out sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out sql/test/BugTracker-2015/Tests/string-to-inet.Bug-3666.stable.out sql/test/BugTracker-2016/Tests/convert-function-test-hge.Bug-3460.stable.out.int128 sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.out sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.out.int128 sql/test/BugTracker-2016/Tests/memory-consumption-query-PLAN-25joins.Bug-3972.stable.out sql/test/BugTracker-2017/Tests/groupby_assertion.Bug-6338.stable.err sql/test/BugTracker-2017/Tests/sqlsmith.Bug-6219.stable.out sql/test/BugTracker-2017/Tests/sqlsmith01.stable.out sql/test/BugTracker-2018/Tests/convert-key.Bug-6648.stable.out sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.stable.out sql/test/BugTracker-2018/Tests/sqlitelogictest-groupby-coalesce-error-message.Bug-6608.stable.err sql/test/BugTracker-2019/Tests/All sql/test/BugTracker-2019/Tests/prepare-types.Bug-6724.stable.out sql/test/BugTracker/Tests/convert_dec2varchar.SF-1774312.stable.out sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out sql/test/Tests/keys.stable.out sql/test/Tests/window_functions.stable.out sql/test/analytics/Tests/analytics00.stable.out sql/test/analytics/Tests/analytics01.stable.out sql/test/bugs/Tests/cast_varchar2int-bug-sf-964165.stable.out sql/test/emptydb/Tests/check.SQL.py 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/mergetables/Tests/mergeinit.stable.err sql/test/mergetables/Tests/sqlsmith-exists.sql sql/test/mergetables/Tests/sqlsmith-exists.stable.out sql/test/miscellaneous/Tests/groupby_expressions.stable.err sql/test/pg_regress/Tests/date.stable.out sql/test/pg_regress/Tests/int8.stable.out sql/test/pg_regress/Tests/int8.stable.out.int128 sql/test/scanner/Tests/All sql/test/subquery/Tests/subquery.sql sql/test/subquery/Tests/subquery.stable.err sql/test/subquery/Tests/subquery.stable.out sql/test/subquery/Tests/subquery3.sql sql/test/subquery/Tests/subquery3.stable.err sql/test/subquery/Tests/subquery3.stable.out sql/test/sys-schema/Tests/bam_tables_checks.stable.out sql/test/sys-schema/Tests/check_MaxStrLength_violations.stable.out tools/merovingian/client/monetdb.1 tools/merovingian/daemon/forkmserver.c tools/merovingian/utils/properties.c tools/mserver/mserver5.1.in tools/mserver/mserver5.c Branch: json Log Message:
Merge branch 'local_master' into local_json diffs (truncated from 23286 to 300 lines): diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,11 @@ # ChangeLog file for devel # This file is updated with Maddlog +* Fri Dec 6 2019 Panagiotis Koutsourakis <[email protected]> +- Added mserver5 option (--set raw_strings=true|false) and monetdb + database property (raw_strings=yes|no) to control interpretation + of strings. + * Fri Nov 29 2019 Panagiotis Koutsourakis <[email protected]> - Added support for raw strings using the syntax r'' or R''. This means that C-like escapes will remain uninterpreted within those strings. For diff --git a/NT/monetdb_config.h.in b/NT/monetdb_config.h.in --- a/NT/monetdb_config.h.in +++ b/NT/monetdb_config.h.in @@ -394,9 +394,6 @@ /* Define if semtimedop exists */ /* #undef HAVE_SEMTIMEDOP */ -/* Define to 1 if you have the `setenv' function. */ -/* #undef HAVE_SETENV */ - /* Define to 1 if you have the `setsid' function. */ /* #undef HAVE_SETSID */ diff --git a/NT/rules.msc b/NT/rules.msc --- a/NT/rules.msc +++ b/NT/rules.msc @@ -139,14 +139,19 @@ bzip2_CFLAGS = -DHAVE_LIBBZ2 "-I$(LIBBZI !IFNDEF LIBXML2 LIBXML2 = C:\libxml2-2.6.30.win$(bits) !ENDIF -libxml2_CFLAGS = -DHAVE_LIBXML "-I$(LIBXML2)\include" $(zlib_CFLAGS) $(ICONV_CFLAGS) +# by default libxml2 include files get installed in ...\include\libxml2\libxml +# but this has sometimes been moved to ...\include\libxml +libxml2_CFLAGS = -DHAVE_LIBXML "-I$(LIBXML2)\include\libxml2" "-I$(LIBXML2)\include" $(zlib_CFLAGS) $(ICONV_CFLAGS) libxml2_LIBS = "$(LIBXML2)\lib\libxml2.lib" $(zlib_LIBS) $(ICONV_LIBS) !ENDIF !IFNDEF LIBGEOS LIBGEOS = C:\geos-3.0.win$(bits) !ENDIF -GEOS_LIBS = $(LIBGEOS)\lib\geos_c_i.lib +!IFNDEF GEOSFILE +GEOSFILE = geos_c +!ENDIF +GEOS_LIBS = $(LIBGEOS)\lib\$(GEOSFILE).lib GEOS_INCS = -I$(LIBGEOS)\include !IFDEF HAVE_LIBR diff --git a/buildtools/doc/windowsbuild.rst b/buildtools/doc/windowsbuild.rst --- a/buildtools/doc/windowsbuild.rst +++ b/buildtools/doc/windowsbuild.rst @@ -243,6 +243,8 @@ PCRE (Perl Compatible Regular Expression The PCRE__ library is used to extend the string matching capabilities of MonetDB. The PCRE library is required for the monetdb5 component. +.. _pcre_cmake: + Download the source from http://www.pcre.org/. In order to build the library, you will need a program called ``cmake`` which you can download from http://www.cmake.org/ or by using Chocolatey_. Follow @@ -255,14 +257,14 @@ Configure button. This pops up a dialog chose Visual Studio 14 2015. You need to configure some PCRE build options. I chose to do build -shared libs, to match newlines with the ``ANYCRLF`` option, and to do -have UTF-8 support and support for Unicode properties. When you're -satisfied with the options, click on Generate. Then in the build -folder you've chosen, open the PCRE.sln file with Visual Studio, and -build and install. Make sure you set the Solution Configuration to -Release if you want to build a releasable version of the MonetDB -suite. By default the library will be installed in ``C:\Program -Files\PCRE``. +shared libs, to match newlines with the ``ANYCRLF`` and +``PCRE_SUPPORT_JIT`` options, and to do have UTF-8 support and support +for Unicode properties. When you're satisfied with the options, click +on Generate. Then in the build folder you've chosen, open the +PCRE.sln file with Visual Studio, and build and install. Make sure +you set the Solution Configuration to Release if you want to build a +releasable version of the MonetDB suite. By default the library will +be installed in ``C:\Program Files\PCRE``. For Windows64, select the correct compiler (``Visual Studio 14 2015 Win64``) and proceed normally. When building the 32 bit version on @@ -304,15 +306,15 @@ required for the clients component when server. Download the source from http://www.openssl.org/. We used the latest -stable version (1.1.0g). Follow the instructions in the file +stable version (1.1.1d). Follow the instructions in the file ``NOTES.WIN``. .. The actual commands used were:: - perl Configure VC-WIN32 no-asm --prefix=C:\Libraries\openssl-1.1.0g.win32 + perl Configure VC-WIN32 no-asm --prefix=C:\Libraries\openssl-1.1.1d.win32 --openssldir=SSL nmake nmake install and:: - perl Configure VC-WIN64A no-asm --prefix=C:\Libraries\openssl-1.1.0g.win64 + perl Configure VC-WIN64A no-asm --prefix=C:\Libraries\openssl-1.1.1d.win64 --openssldir=SSL nmake nmake install @@ -346,7 +348,7 @@ the correct locations for the iconv and nmake /f Makefile.msvc install We needed to edit the file ``win32\Makefile.msvc`` and change -``iconv.lib`` to ``iconv.dll.lib``. +``iconv.lib`` to ``iconv.dll.lib`` and ``zlib.lib`` to ``zdll.lib``. __ http://xmlsoft.org/ @@ -361,39 +363,22 @@ so to get the software, you will have to yourself. Get the source tar ball from http://trac.osgeo.org/geos/#Download and -extract somewhere. You can follow the instructions in e.g. `Building -on Windows with NMake`__. - -We needed to make a few changes to the file ``nmake.opt``. We needed -to add a blurb for the version of ``nmake`` that we were using. Look -at the version number of ``nmake /P`` and adapt the closest match. - -For newer versions of Visual Studio, we also needed to add a line:: - - #include <algorithm> +extract somewhere. -to the files:: - - src\algorithm\LineIntersector.cpp - src\geom\LineSegment.cpp - src\io\WKTWriter.cpp - src\operation\buffer\OffsetCurveSetBuilder.cpp - -.. The actual commands were:: - autogen.bat - nmake /f makefile.vc - -.. On Windows64, add ``WIN64=YES`` to the nmake command line. +We are now using the 3.8.0 version which uses CMake (see PCRE +above__). For older releases, look in a previous versions of this +file. In order to get a version number in the DLL that is produced, we added -a file ``version.rc`` in the ``src`` folder. The contents of the -file are:: +a file ``version.rc`` in the ``src`` folder and added a reference to +the sources for the ``geos`` subproject. The contents of the file +are:: #include <Windows.h> LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US VS_VERSION_INFO VERSIONINFO - FILEVERSION 3,6,2,0 // change as appropriate - PRODUCTVERSION 3,6,2,0 // change as appropriate + FILEVERSION 3,8,0,0 // change as appropriate + PRODUCTVERSION 3,8,0,0 // change as appropriate FILEFLAGSMASK 0x3fL FILEFLAGS 0 FILEOS VOS_NT_WINDOWS32 @@ -405,26 +390,8 @@ file are:: END END -To use it, we also added ``version.res`` at the end of the definition -of the ``OBJ`` macro and to the list of dependencies of and the -command for ``$(CDLLNAME)`` in ``src\Makefile.vc``. - -After this, install the library somewhere, e.g. in -``C:\Libraries\geos-3.6.2.win32``:: - - mkdir C:\Libraries\geos-3.6.2.win32 - mkdir C:\Libraries\geos-3.6.2.win32\lib - mkdir C:\Libraries\geos-3.6.2.win32\bin - mkdir C:\Libraries\geos-3.6.2.win32\include - mkdir C:\Libraries\geos-3.6.2.win32\include\geos - copy src\geos_c_i.lib C:\Libraries\geos-3.6.2.win32\lib - copy src\geos_c.dll C:\Libraries\geos-3.6.2.win32\bin - copy include C:\Libraries\geos-3.6.2.win32\include - copy include\geos C:\Libraries\geos-3.6.2.win32\include\geos - copy capi\geos_c.h C:\Libraries\geos-3.6.2.win32\include - __ http://geos.refractions.net/ -__ http://trac.osgeo.org/geos/wiki/BuildingOnWindowsWithNMake +__ pcre_cmake_ Optional Packages ================= @@ -493,27 +460,28 @@ the following extra Cygwin packages in o Command Prompt and PATH contains the directory where cl.exe can be found; for 64 bit use --host=x86_64-w64-mingw32 and adapt LIB, PATH and prefix):: - INCLUDE='C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE;'\ - 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE;'\ - 'C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\ucrt;'\ - 'C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um;'\ - 'C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\shared;'\ - 'C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\um;'\ - 'C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\winrt;' - LIB='C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB;'\ - 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\LIB;'\ - 'C:\Program Files (x86)\Windows Kits\10\lib\10.0.14393.0\ucrt\x86;'\ - 'C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x86;'\ - 'C:\Program Files (x86)\Windows Kits\10\lib\10.0.14393.0\um\x86;' - PATH="/cygdrive/c/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin:$PATH" + vs='C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105' + INCLUDE="${vs}"'\ATLMFC\include;'"${vs}"'\include;' \ + 'C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um;' \ + 'C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt;' \ + 'C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\shared;' \ + 'C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\um;' \ + 'C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\winrt;' \ + 'C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\cppwinrt' + LIB="${vs}"'\ATLMFC\lib\x64;'"${vs}"'\lib\x64;' \ + 'C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x64;' \ + 'C:\Program Files (x86)\Windows Kits\10\lib\10.0.17763.0\ucrt\x64;' \ + 'C:\Program Files (x86)\Windows Kits\10\lib\10.0.17763.0\um\x64;' + PATH=$(cygpath "${vs}")/bin/Hostx64/x64:$PATH + prefix=/cygdrive/c/Libraries/iconv-1.16.win64-vs2019 export INCLUDE LIB PATH win32_target=_WIN32_WINNT_WIN7 prefix=/cygdrive/c/Libraries/iconv-1.15.win32-vs2015 PATH="$prefix/bin:$PATH" - ./configure --host=i686-w64-mingw32 --prefix=$prefix \ + ./configure --host=i686-w64-mingw32 --prefix="$prefix" \ CC="$PWD/build-aux/compile cl -nologo" \ + CXX="$PWD/build-aux/compile cl -nologo" \ CFLAGS="-MD" \ - CXX="$PWD/build-aux/compile cl -nologo" \ CXXFLAGS="-MD" \ CPPFLAGS="-D_WIN32_WINNT=$win32_target -I$prefix/include" \ LDFLAGS="-L$prefix/lib" \ 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 @@ -681,7 +681,6 @@ stdout of test 'MAL-signatures` in direc [ "bat", "setColumn", "command bat.setColumn(b:bat[:any_1], t:str):void ", "BKCsetColumn;", "Give a logical name to the tail column of a BAT." ] [ "bat", "setHash", "command bat.setHash(b:bat[:any_1]):bit ", "BKCsetHash;", "Create a hash structure on the column" ] [ "bat", "setImprints", "command bat.setImprints(b:bat[:any_1]):bit ", "BKCsetImprints;", "Create an imprints structure on the column" ] -[ "bat", "setKey", "command bat.setKey(b:bat[:any_1], mode:bit):bat[:any_1] ", "BKCsetkey;", "Sets the 'key' property of the tail column to 'mode'. In 'key' mode,\n the kernel will silently block insertions that cause a duplicate\n entry in the head column." ] [ "bat", "setName", "command bat.setName(b:bat[:any_1], s:str):void ", "BKCsetName;", "Give a logical name to a BAT. " ] [ "bat", "setPersistent", "command bat.setPersistent(b:bat[:any_1]):void ", "BKCsetPersistent;", "Make the BAT persistent." ] [ "bat", "setTransient", "command bat.setTransient(b:bat[:any_1]):void ", "BKCsetTransient;", "Make the BAT transient. Returns \n\tboolean which indicates if the\nBAT administration has indeed changed." ] 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 @@ -787,7 +787,6 @@ stdout of test 'MAL-signatures` in direc [ "bat", "setColumn", "command bat.setColumn(b:bat[:any_1], t:str):void ", "BKCsetColumn;", "Give a logical name to the tail column of a BAT." ] [ "bat", "setHash", "command bat.setHash(b:bat[:any_1]):bit ", "BKCsetHash;", "Create a hash structure on the column" ] [ "bat", "setImprints", "command bat.setImprints(b:bat[:any_1]):bit ", "BKCsetImprints;", "Create an imprints structure on the column" ] -[ "bat", "setKey", "command bat.setKey(b:bat[:any_1], mode:bit):bat[:any_1] ", "BKCsetkey;", "Sets the 'key' property of the tail column to 'mode'. In 'key' mode,\n the kernel will silently block insertions that cause a duplicate\n entry in the head column." ] [ "bat", "setName", "command bat.setName(b:bat[:any_1], s:str):void ", "BKCsetName;", "Give a logical name to a BAT. " ] [ "bat", "setPersistent", "command bat.setPersistent(b:bat[:any_1]):void ", "BKCsetPersistent;", "Make the BAT persistent." ] [ "bat", "setTransient", "command bat.setTransient(b:bat[:any_1]):void ", "BKCsetTransient;", "Make the BAT transient. Returns \n\tboolean which indicates if the\nBAT administration has indeed changed." ] 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 @@ -484,7 +484,6 @@ size_t strLen(const char *s); int strNil(const char *s); const char str_nil[2]; gdk_return void_inplace(BAT *b, oid id, const void *val, bool force) __attribute__((__warn_unused_result__)); -gdk_return void_replace_bat(BAT *b, BAT *p, BAT *u, bool force) __attribute__((__warn_unused_result__)); int win_mkdir(const char *, const int mode); int win_rename(const char *, const char *); int win_rmdir(const char *); @@ -857,7 +856,6 @@ str BKCsetImprints(bit *ret, const bat * str BKCsetName(void *r, const bat *bid, const char *const *s); str BKCsetPersistent(void *r, const bat *bid); str BKCsetTransient(void *r, const bat *bid); -str BKCsetkey(bat *res, const bat *bid, const bit *param); str BKCshrinkBAT(bat *ret, const bat *bid, const bat *did); str BLOBblob_blob(blob **d, blob **s); str BLOBblob_fromstr(blob **b, const char **d); diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c --- a/clients/mapiclient/dump.c +++ b/clients/mapiclient/dump.c @@ -128,7 +128,17 @@ squoted_print(stream *f, const char *s, 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"); + if (n > 0 && mnstr_write(f, s, 1, n) < 0) + return -1; + s += n; switch (*s) { + case '\0': + continue; case '\\': if (mnstr_write(f, "\\\\", 1, 2) < 0) return -1; @@ -148,13 +158,8 @@ squoted_print(stream *f, const char *s, _______________________________________________ checkin-list mailing list [email protected] https://www.monetdb.org/mailman/listinfo/checkin-list
