Changeset: 46955260b7c2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=46955260b7c2
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        monetdb5/modules/atoms/mtime.c
        sql/server/rel_select.c
        sql/server/rel_unnest.c
        sql/test/miscellaneous/Tests/simple_selects.stable.out
Branch: typing
Log Message:

Merged with Oct2020


diffs (truncated from 4347 to 300 lines):

diff --git a/README.rst b/README.rst
--- a/README.rst
+++ b/README.rst
@@ -1,15 +1,28 @@
 The MonetDB Database System
 ===========================
 
-The MonetDB database is developed by the CWI database research group
-(see https://www.monetdb.org/).
+The MonetDB database was originally developed by the `CWI`__ `database
+research group`__ (see https://www.monetdb.org/).  Development has now
+shifted to the spin-off company `MonetDB Solutions`__.
 
-Via the MonetDB project we have brought the MonetDB system in open source,
-where it is accessible at https://www.monetdb.org/Downloads/
+Via the MonetDB project we have brought the MonetDB system in open
+source, where it is accessible at https://www.monetdb.org/Downloads/.
+Even though development happens mostly in a company, the MonetDB
+database system will remain open source.
 
 The MonetDB database system is a high-performance database kernel for
-query-intensive applications. The MonetDB source can be found at our `Mercurial
-server`__. There is also a `github mirror`__ that is updated once a day.
+query-intensive applications. The MonetDB source can be found at our
+`Mercurial server`__. There is also a `github mirror`__ that is updated
+once a day.
+
+.. _CWI: https://www.cwi.nl/
+__ CWI_
+
+.. _DA: https://www.cwi.nl/research/groups/database-architectures
+__ DA_
+
+.. _solutions: https://www.monetdbsolutions.com
+__ solutions_
 
 .. _MonetDB: https://dev.monetdb.org/hg/MonetDB/
 __ MonetDB_
@@ -17,12 +30,19 @@ server`__. There is also a `github mirro
 .. _github: https://github.com/MonetDB/MonetDB
 __ github_
 
-If you got a source distribution, please compile and install MonetDB first,
-following the instructions in the file `HowToStart.rst`__ (for Unix)
-or `buildtools/doc/windowsbuild.rst`__ (for Windows).
+If you got a source distribution, please compile and install MonetDB
+first, following the instructions in the file `build.rst`__.
+
+__ documentation/source/build.rst
 
-__ HowToStart.rst
-__ buildtools/doc/windowsbuild.rst
+Bugs
+====
+
+We of course hope there aren't any, but if you do find one, you can
+report bugs in our `bugzilla`__ instance.
+
+.. _bugzilla: https://bugs.monetdb.org
+__ bugzilla_
 
 Copyright Notice
 ================
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
@@ -66,9 +66,9 @@ stdout of test 'MAL-signatures` in direc
 % clob,        clob,   clob,   clob,   clob # type
 % 12,  28,     313,    42,     0 # length
 [ "aggr",      "all",  "command aggr.all(X_1:bat[:any_1]):any_1 ",     
"SQLall;",      ""      ]
-[ "aggr",      "allnotequal",  "command aggr.allnotequal(X_1:bat[:any_1], 
X_2:bat[:any_1]):bit ",      "SQLallnotequal;",      ""      ]
+[ "aggr",      "allnotequal",  "pattern aggr.allnotequal(X_1:bat[:any_1], 
X_2:bat[:any_1]):bit ",      "SQLallnotequal;",      ""      ]
 [ "aggr",      "anyequal",     "pattern aggr.anyequal(X_1:any_1, 
X_2:any_1):bit ",     "CMDvarEQ;",    ""      ]
-[ "aggr",      "anyequal",     "command aggr.anyequal(X_1:bat[:any_1], 
X_2:bat[:any_1]):bit ", "SQLanyequal;", ""      ]
+[ "aggr",      "anyequal",     "pattern aggr.anyequal(X_1:bat[:any_1], 
X_2:bat[:any_1]):bit ", "SQLanyequal;", ""      ]
 [ "aggr",      "avg",  "command aggr.avg(X_1:bat[:bte], X_2:bat[:oid], 
X_3:bat[:any_1]):bat[:dbl] ",   "AGGRavg13_dbl;",       ""      ]
 [ "aggr",      "avg",  "command aggr.avg(X_1:bat[:dbl], X_2:bat[:oid], 
X_3:bat[:any_1]):bat[:dbl] ",   "AGGRavg13_dbl;",       ""      ]
 [ "aggr",      "avg",  "command aggr.avg(X_1:bat[:flt], X_2:bat[:oid], 
X_3:bat[:any_1]):bat[:dbl] ",   "AGGRavg13_dbl;",       ""      ]
@@ -751,6 +751,8 @@ stdout of test 'MAL-signatures` in direc
 [ "bat",       "setPersistent",        "command 
bat.setPersistent(X_1:bat[:any_1]):void ",     "BKCsetPersistent;",    ""      ]
 [ "bat",       "setTransient", "command bat.setTransient(X_1:bat[:any_1]):void 
",      "BKCsetTransient;",     ""      ]
 [ "bat",       "single",       "pattern bat.single(X_1:any_1):bat[:any_1] ",   
"CMDBATsingle;",        ""      ]
+[ "bataggr",   "allnotequal",  "pattern bataggr.allnotequal(X_1:bat[:any_1], 
X_2:bat[:any_1]):bit ",   "SQLallnotequal;",      ""      ]
+[ "bataggr",   "anyequal",     "pattern bataggr.anyequal(X_1:bat[:any_1], 
X_2:bat[:any_1]):bat[:bit] ",        "SQLanyequal;", ""      ]
 [ "bataggr",   "exist",        "pattern bataggr.exist(X_1:any_1):bat[:bit] ",  
"SQLexist;",    ""      ]
 [ "bataggr",   "exist",        "pattern 
bataggr.exist(X_1:bat[:any_1]):bat[:bit] ",    "SQLexist;",    ""      ]
 [ "bataggr",   "exist",        "pattern bataggr.exist(X_1:bat[:any_1]):bit ",  
"SQLexist;",    ""      ]
@@ -5890,6 +5892,7 @@ stdout of test 'MAL-signatures` in direc
 [ "batstr",    "nbytes",       "command batstr.nbytes(X_1:bat[:str]):bat[:int] 
",      "STRbatBytes;", ""      ]
 [ "batstr",    "r_search",     "command batstr.r_search(X_1:bat[:str], 
X_2:bat[:str]):bat[:int] ",     "STRbatRstrSearch;",    ""      ]
 [ "batstr",    "r_search",     "command batstr.r_search(X_1:bat[:str], 
X_2:str):bat[:int] ",   "STRbatRstrSearchcst;", ""      ]
+[ "batstr",    "repeat",       "command batstr.repeat(X_1:bat[:str], 
X_2:int):bat[:str] ",     "STRbatrepeat;",        ""      ]
 [ "batstr",    "rpad", "command batstr.rpad(X_1:bat[:str], X_2:bat[:int], 
X_3:bat[:str]):bat[:str] ",  "STRbatRpad2_bat_bat;", ""      ]
 [ "batstr",    "rpad", "command batstr.rpad(X_1:bat[:str], X_2:bat[:int], 
X_3:str):bat[:str] ",        "STRbatRpad2_bat_const;",       ""      ]
 [ "batstr",    "rpad", "command batstr.rpad(X_1:bat[:str], X_2:int, 
X_3:bat[:str]):bat[:str] ",        "STRbatRpad2_const_bat;",       ""      ]
@@ -5905,6 +5908,8 @@ stdout of test 'MAL-signatures` in direc
 [ "batstr",    "startsWith",   "command batstr.startsWith(X_1:bat[:str], 
X_2:str):bat[:bit] ", "STRbatPrefixcst;",     ""      ]
 [ "batstr",    "string",       "command batstr.string(X_1:bat[:str], 
X_2:bat[:int]):bat[:str] ",       "STRbatTail;",  ""      ]
 [ "batstr",    "string",       "command batstr.string(X_1:bat[:str], 
X_2:int):bat[:str] ",     "STRbatTailcst;",       ""      ]
+[ "batstr",    "stringleft",   "command batstr.stringleft(X_1:bat[:str], 
X_2:int):bat[:str] ", "STRbatprefix;",        ""      ]
+[ "batstr",    "stringright",  "command batstr.stringright(X_1:bat[:str], 
X_2:int):bat[:str] ",        "STRbatsuffix;",        ""      ]
 [ "batstr",    "substitute",   "command batstr.substitute(X_1:bat[:str], 
X_2:str, X_3:str, X_4:bit):bat[:str] ",       "STRbatSubstitutecst;", ""      ]
 [ "batstr",    "substring",    "command batstr.substring(X_1:bat[:str], 
X_2:bat[:int], X_3:bat[:int]):bat[:str] ",     "STRbatsubstring;",     ""      ]
 [ "batstr",    "substring",    "command batstr.substring(X_1:bat[:str], 
X_2:int, X_3:int):bat[:str] ", "STRbatsubstringcst;",  ""      ]
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
@@ -70,9 +70,9 @@ stdout of test 'MAL-signatures` in direc
 % clob,        clob,   clob,   clob,   clob # type
 % 12,  28,     313,    42,     0 # length
 [ "aggr",      "all",  "command aggr.all(X_1:bat[:any_1]):any_1 ",     
"SQLall;",      ""      ]
-[ "aggr",      "allnotequal",  "command aggr.allnotequal(X_1:bat[:any_1], 
X_2:bat[:any_1]):bit ",      "SQLallnotequal;",      ""      ]
+[ "aggr",      "allnotequal",  "pattern aggr.allnotequal(X_1:bat[:any_1], 
X_2:bat[:any_1]):bit ",      "SQLallnotequal;",      ""      ]
 [ "aggr",      "anyequal",     "pattern aggr.anyequal(X_1:any_1, 
X_2:any_1):bit ",     "CMDvarEQ;",    ""      ]
-[ "aggr",      "anyequal",     "command aggr.anyequal(X_1:bat[:any_1], 
X_2:bat[:any_1]):bit ", "SQLanyequal;", ""      ]
+[ "aggr",      "anyequal",     "pattern aggr.anyequal(X_1:bat[:any_1], 
X_2:bat[:any_1]):bit ", "SQLanyequal;", ""      ]
 [ "aggr",      "avg",  "command aggr.avg(X_1:bat[:bte], X_2:bat[:oid], 
X_3:bat[:any_1]):bat[:dbl] ",   "AGGRavg13_dbl;",       ""      ]
 [ "aggr",      "avg",  "command aggr.avg(X_1:bat[:dbl], X_2:bat[:oid], 
X_3:bat[:any_1]):bat[:dbl] ",   "AGGRavg13_dbl;",       ""      ]
 [ "aggr",      "avg",  "command aggr.avg(X_1:bat[:flt], X_2:bat[:oid], 
X_3:bat[:any_1]):bat[:dbl] ",   "AGGRavg13_dbl;",       ""      ]
@@ -866,6 +866,8 @@ stdout of test 'MAL-signatures` in direc
 [ "bat",       "setPersistent",        "command 
bat.setPersistent(X_1:bat[:any_1]):void ",     "BKCsetPersistent;",    ""      ]
 [ "bat",       "setTransient", "command bat.setTransient(X_1:bat[:any_1]):void 
",      "BKCsetTransient;",     ""      ]
 [ "bat",       "single",       "pattern bat.single(X_1:any_1):bat[:any_1] ",   
"CMDBATsingle;",        ""      ]
+[ "bataggr",   "allnotequal",  "pattern bataggr.allnotequal(X_1:bat[:any_1], 
X_2:bat[:any_1]):bit ",   "SQLallnotequal;",      ""      ]
+[ "bataggr",   "anyequal",     "pattern bataggr.anyequal(X_1:bat[:any_1], 
X_2:bat[:any_1]):bat[:bit] ",        "SQLanyequal;", ""      ]
 [ "bataggr",   "exist",        "pattern bataggr.exist(X_1:any_1):bat[:bit] ",  
"SQLexist;",    ""      ]
 [ "bataggr",   "exist",        "pattern 
bataggr.exist(X_1:bat[:any_1]):bat[:bit] ",    "SQLexist;",    ""      ]
 [ "bataggr",   "exist",        "pattern bataggr.exist(X_1:bat[:any_1]):bit ",  
"SQLexist;",    ""      ]
@@ -8166,6 +8168,7 @@ stdout of test 'MAL-signatures` in direc
 [ "batstr",    "nbytes",       "command batstr.nbytes(X_1:bat[:str]):bat[:int] 
",      "STRbatBytes;", ""      ]
 [ "batstr",    "r_search",     "command batstr.r_search(X_1:bat[:str], 
X_2:bat[:str]):bat[:int] ",     "STRbatRstrSearch;",    ""      ]
 [ "batstr",    "r_search",     "command batstr.r_search(X_1:bat[:str], 
X_2:str):bat[:int] ",   "STRbatRstrSearchcst;", ""      ]
+[ "batstr",    "repeat",       "command batstr.repeat(X_1:bat[:str], 
X_2:int):bat[:str] ",     "STRbatrepeat;",        ""      ]
 [ "batstr",    "rpad", "command batstr.rpad(X_1:bat[:str], X_2:bat[:int], 
X_3:bat[:str]):bat[:str] ",  "STRbatRpad2_bat_bat;", ""      ]
 [ "batstr",    "rpad", "command batstr.rpad(X_1:bat[:str], X_2:bat[:int], 
X_3:str):bat[:str] ",        "STRbatRpad2_bat_const;",       ""      ]
 [ "batstr",    "rpad", "command batstr.rpad(X_1:bat[:str], X_2:int, 
X_3:bat[:str]):bat[:str] ",        "STRbatRpad2_const_bat;",       ""      ]
@@ -8181,6 +8184,8 @@ stdout of test 'MAL-signatures` in direc
 [ "batstr",    "startsWith",   "command batstr.startsWith(X_1:bat[:str], 
X_2:str):bat[:bit] ", "STRbatPrefixcst;",     ""      ]
 [ "batstr",    "string",       "command batstr.string(X_1:bat[:str], 
X_2:bat[:int]):bat[:str] ",       "STRbatTail;",  ""      ]
 [ "batstr",    "string",       "command batstr.string(X_1:bat[:str], 
X_2:int):bat[:str] ",     "STRbatTailcst;",       ""      ]
+[ "batstr",    "stringleft",   "command batstr.stringleft(X_1:bat[:str], 
X_2:int):bat[:str] ", "STRbatprefix;",        ""      ]
+[ "batstr",    "stringright",  "command batstr.stringright(X_1:bat[:str], 
X_2:int):bat[:str] ",        "STRbatsuffix;",        ""      ]
 [ "batstr",    "substitute",   "command batstr.substitute(X_1:bat[:str], 
X_2:str, X_3:str, X_4:bit):bat[:str] ",       "STRbatSubstitutecst;", ""      ]
 [ "batstr",    "substring",    "command batstr.substring(X_1:bat[:str], 
X_2:bat[:int], X_3:bat[:int]):bat[:str] ",     "STRbatsubstring;",     ""      ]
 [ "batstr",    "substring",    "command batstr.substring(X_1:bat[:str], 
X_2:int, X_3:int):bat[:str] ", "STRbatsubstringcst;",  ""      ]
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -77,7 +77,7 @@ static char *encoding;
 static bool errseen = false;
 static bool allow_remote = false;
 
-#define setPrompt() sprintf(promptbuf, "%.*s>", (int) sizeof(promptbuf) - 2, 
language)
+#define setPrompt() snprintf(promptbuf, sizeof(promptbuf), "%.*s>", (int) 
sizeof(promptbuf) - 2, language)
 #define debugMode() (strncmp(promptbuf, "mdb", 3) == 0)
 
 /* the internal result set formatters */
@@ -335,7 +335,7 @@ fetch_line(MapiHdl hdl)
                if (strncmp(reply, "mdb>#EOD", 8) == 0)
                        setPrompt();
                else
-                       sprintf(promptbuf, "mdb>");
+                       snprintf(promptbuf, sizeof(promptbuf), "mdb>");
        }
        return reply;
 }
@@ -1352,7 +1352,7 @@ SQLdebugRendering(MapiHdl hdl)
        char *reply;
        int cnt = 0;
 
-       sprintf(promptbuf, "mdb>");
+       snprintf(promptbuf, sizeof(promptbuf), "mdb>");
        while ((reply = fetch_line(hdl))) {
                cnt++;
                mnstr_printf(toConsole, "%s\n", reply);
diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c
--- a/clients/mapilib/mapi.c
+++ b/clients/mapilib/mapi.c
@@ -3403,55 +3403,55 @@ mapi_param_store(MapiHdl hdl)
                        switch (hdl->params[i].intype) {
                        case MAPI_TINY:
                                checkSpace(5);
-                               sprintf(hdl->query + k, "%hhd", *(signed char 
*) src);
+                               snprintf(hdl->query + k, lim - k, "%hhd", 
*(signed char *) src);
                                break;
                        case MAPI_UTINY:
                                checkSpace(5);
-                               sprintf(hdl->query + k, "%hhu", *(unsigned char 
*) src);
+                               snprintf(hdl->query + k, lim - k, "%hhu", 
*(unsigned char *) src);
                                break;
                        case MAPI_SHORT:
                                checkSpace(10);
-                               sprintf(hdl->query + k, "%hd", *(short *) src);
+                               snprintf(hdl->query + k, lim - k, "%hd", 
*(short *) src);
                                break;
                        case MAPI_USHORT:
                                checkSpace(10);
-                               sprintf(hdl->query + k, "%hu", *(unsigned short 
*) src);
+                               snprintf(hdl->query + k, lim - k, "%hu", 
*(unsigned short *) src);
                                break;
                        case MAPI_INT:
                                checkSpace(20);
-                               sprintf(hdl->query + k, "%d", *(int *) src);
+                               snprintf(hdl->query + k, lim - k, "%d", *(int 
*) src);
                                break;
                        case MAPI_UINT:
                                checkSpace(20);
-                               sprintf(hdl->query + k, "%u", *(unsigned int *) 
src);
+                               snprintf(hdl->query + k, lim - k, "%u", 
*(unsigned int *) src);
                                break;
                        case MAPI_LONG:
                                checkSpace(20);
-                               sprintf(hdl->query + k, "%ld", *(long *) src);
+                               snprintf(hdl->query + k, lim - k, "%ld", *(long 
*) src);
                                break;
                        case MAPI_ULONG:
                                checkSpace(20);
-                               sprintf(hdl->query + k, "%lu", *(unsigned long 
*) src);
+                               snprintf(hdl->query + k, lim - k, "%lu", 
*(unsigned long *) src);
                                break;
                        case MAPI_LONGLONG:
                                checkSpace(30);
-                               sprintf(hdl->query + k, "%"PRId64, *(int64_t *) 
src);
+                               snprintf(hdl->query + k, lim - k, "%"PRId64, 
*(int64_t *) src);
                                break;
                        case MAPI_ULONGLONG:
                                checkSpace(30);
-                               sprintf(hdl->query + k, "%"PRIu64, *(uint64_t 
*) src);
+                               snprintf(hdl->query + k, lim - k, "%"PRIu64, 
*(uint64_t *) src);
                                break;
                        case MAPI_FLOAT:
                                checkSpace(30);
-                               sprintf(hdl->query + k, "%.9g", *(float *) src);
+                               snprintf(hdl->query + k, lim - k, "%.9g", 
*(float *) src);
                                break;
                        case MAPI_DOUBLE:
                                checkSpace(30);
-                               sprintf(hdl->query + k, "%.17g", *(double *) 
src);
+                               snprintf(hdl->query + k, lim - k, "%.17g", 
*(double *) src);
                                break;
                        case MAPI_DATE:
                                checkSpace(50);
-                               sprintf(hdl->query + k,
+                               snprintf(hdl->query + k, lim - k,
                                        "DATE '%04hd-%02hu-%02hu'",
                                        ((MapiDate *) src)->year,
                                        ((MapiDate *) src)->month,
@@ -3459,7 +3459,7 @@ mapi_param_store(MapiHdl hdl)
                                break;
                        case MAPI_TIME:
                                checkSpace(60);
-                               sprintf(hdl->query + k,
+                               snprintf(hdl->query + k, lim - k,
                                        "TIME '%02hu:%02hu:%02hu'",
                                        ((MapiTime *) src)->hour,
                                        ((MapiTime *) src)->minute,
@@ -3467,7 +3467,7 @@ mapi_param_store(MapiHdl hdl)
                                break;
                        case MAPI_DATETIME:
                                checkSpace(110);
-                               sprintf(hdl->query + k,
+                               snprintf(hdl->query + k, lim - k,
                                        "TIMESTAMP '%04hd-%02hu-%02hu 
%02hu:%02hu:%02hu.%09u'",
                                        ((MapiDateTime *) src)->year,
                                        ((MapiDateTime *) src)->month,
@@ -3493,7 +3493,7 @@ mapi_param_store(MapiHdl hdl)
                                        }
                                        hdl->query = q;
                                }
-                               sprintf(hdl->query + k, "'%s'", val);
+                               snprintf(hdl->query + k, lim - k, "'%s'", val);
                                free(val);
                                break;
                        case MAPI_VARCHAR:
@@ -3510,11 +3510,11 @@ mapi_param_store(MapiHdl hdl)
                                        }
                                        hdl->query = q;
                                }
-                               sprintf(hdl->query + k, "'%s'", val);
+                               snprintf(hdl->query + k, lim - k, "'%s'", val);
                                free(val);
                                break;
                        default:
-                               strcpy(hdl->query + k, src);
+                               strcpy_len(hdl->query + k, src, lim - k);
                                break;
                        }
                }
diff --git a/clients/odbc/driver/ODBCUtil.c b/clients/odbc/driver/ODBCUtil.c
--- a/clients/odbc/driver/ODBCUtil.c
+++ b/clients/odbc/driver/ODBCUtil.c
@@ -942,12 +942,13 @@ ODBCTranslateSQL(ODBCDbc *dbc, const SQL
                        }
                        n = (int) (q - nquery);
                        pr = (int) (p - q);
-                       q = malloc(length - pr + strlen(buf) + 1);
+                       length += strlen(buf) + 1 - pr;
+                       q = malloc(length);
                        if (q == NULL) {
                                free(nquery);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to