Changeset: 5e22614e48d7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5e22614e48d7
Modified Files:
clients/mapiclient/dotmonetdb.c
clients/mapiclient/mclient.c
common/utils/msabaoth.c
gdk/gdk_aggr.c
gdk/gdk_bbp.c
gdk/gdk_logger.c
gdk/gdk_string.c
gdk/gdk_time.c
gdk/gdk_tracer.c
gdk/gdk_utils.c
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_upgrades.c
sql/server/rel_prop.c
sql/server/rel_select.c
sql/server/rel_unnest.c
sql/server/rel_unnest.h
sql/test/subquery/Tests/subquery4.sql
sql/test/subquery/Tests/subquery4.stable.err
sql/test/subquery/Tests/subquery4.stable.out
sql/test/subquery/Tests/subquery5.sql
sql/test/subquery/Tests/subquery5.stable.err
sql/test/subquery/Tests/subquery5.stable.out
tools/merovingian/daemon/controlrunner.c
tools/merovingian/daemon/forkmserver.c
tools/merovingian/daemon/merovingian.c
Branch: default
Log Message:
Merged with Jun2020
diffs (truncated from 1245 to 300 lines):
diff --git a/clients/mapiclient/dotmonetdb.c b/clients/mapiclient/dotmonetdb.c
--- a/clients/mapiclient/dotmonetdb.c
+++ b/clients/mapiclient/dotmonetdb.c
@@ -17,6 +17,8 @@ parse_dotmonetdb(DotMonetdb *dotfile)
FILE *config = NULL;
char buf[FILENAME_MAX];
+ if (dotfile == NULL)
+ return;
if ((cfile = getenv("DOTMONETDBFILE")) == NULL) {
/* no environment variable: use a default */
if ((config = fopen(".monetdb", "r")) == NULL) {
@@ -46,9 +48,7 @@ parse_dotmonetdb(DotMonetdb *dotfile)
cfile = strdup(cfile);
}
- if (dotfile) {
- *dotfile = (DotMonetdb) {0};
- }
+ *dotfile = (DotMonetdb) {0};
if (config) {
int line = 0;
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -3252,7 +3252,6 @@ main(int argc, char **argv)
}
/* parse config file first, command line options override */
- // parse_dotmonetdb(&user, &passwd, &dbname, &language, &save_history,
&output, &pagewidth);
parse_dotmonetdb(&dotfile);
user = dotfile.user;
passwd = dotfile.passwd;
diff --git a/common/utils/msabaoth.c b/common/utils/msabaoth.c
--- a/common/utils/msabaoth.c
+++ b/common/utils/msabaoth.c
@@ -750,6 +750,11 @@ msab_getStatus(sabdb** ret, char *dbname
sabdb *sdb;
sdb = *ret = NULL;
+ if (dbname && strpbrk(dbname, "/\\") != NULL) {
+ snprintf(data, sizeof(data),
+ "database name contains disallowed
characters");
+ return strdup(data);
+ }
/* scan the parent for directories */
if ((p = getFarmPath(pathbuf, sizeof(pathbuf), NULL)) != NULL)
return(p);
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -3759,7 +3759,7 @@ BATgroupcorrelation(BAT *b1, BAT *b2, BA
(BATcount(e) == BATcount(b1) && (e->hseqbase == b1->hseqbase ||
e->hseqbase == b2->hseqbase))) &&
(BATtdense(g) || (g->tkey && g->tnonil))) {
dbl v = dbl_nil;
- return BATconstant(ngrp == 0 ? 0 : min, TYPE_dbl, &v, ngrp,
TRANSIENT);
+ return BATconstant(min, TYPE_dbl, &v, ngrp, TRANSIENT);
}
delta1 = GDKmalloc(ngrp * sizeof(dbl));
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -491,8 +491,9 @@ fixdateheap(BAT *b, const char *anme)
TRC_CRITICAL(GDK, "GDKfilepath failed\n");
return GDK_FAIL;
}
- /* coverity[null_returns] */
- *strrchr(srcdir, DIR_SEP) = 0;
+ char *s;
+ if ((s = strrchr(srcdir, DIR_SEP)) != NULL)
+ *s = 0;
if ((bnme = strrchr(nme, DIR_SEP)) != NULL)
bnme++;
@@ -943,6 +944,7 @@ BBPreadEntries(FILE *fp, unsigned bbpver
if ((s = strchr(headname, '~')) != NULL && s == headname) {
int len = snprintf(logical, sizeof(logical), "tmp_%o",
(unsigned) bid);
if (len == -1 || len >= (int) sizeof(logical)) {
+ BATdestroy(bn);
TRC_CRITICAL(GDK, "BBP logical filename
directory is too large\n");
return GDK_FAIL;
}
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -3062,8 +3062,7 @@ log_sequence_(logger *lg, int seq, lng v
if (log_write_format(lg, &l) != GDK_SUCCEED ||
!mnstr_writeLng(lg->log, val) ||
(flush && mnstr_flush(lg->log)) ||
- (flush && !(GDKdebug & NOSYNCMASK) && mnstr_fsync(lg->log)) ||
- pre_allocate(lg) != GDK_SUCCEED) {
+ (flush && !(GDKdebug & NOSYNCMASK) && mnstr_fsync(lg->log))) {
fprintf(stderr, "!ERROR: log_sequence_: write failed\n");
return GDK_FAIL;
}
diff --git a/gdk/gdk_string.c b/gdk/gdk_string.c
--- a/gdk/gdk_string.c
+++ b/gdk/gdk_string.c
@@ -788,9 +788,9 @@ strWrite(const char *a, stream *s, size_
static gdk_return
concat_strings(BAT **bnp, ValPtr pt, BAT *b, oid seqb,
- BUN ngrp, struct canditer *restrict ci, BUN ncand,
- const oid *restrict gids, oid min, oid max, bool
skip_nils,
- BAT *sep, const char *restrict separator, BUN
*has_nils)
+ BUN ngrp, struct canditer *restrict ci, BUN ncand,
+ const oid *restrict gids, oid min, oid max, bool skip_nils,
+ BAT *sep, const char *restrict separator, BUN *has_nils)
{
oid gid;
BUN i, p, nils = 0;
@@ -839,6 +839,7 @@ concat_strings(BAT **bnp, ValPtr pt, BAT
}
}
} else { /* sep case */
+ assert(sep != NULL);
for (i = 0; i < ncand; i++) {
p = canditer_next(ci) - seqb;
s = BUNtvar(bi, p);
@@ -887,6 +888,7 @@ concat_strings(BAT **bnp, ValPtr pt, BAT
empty = false;
}
} else { /* sep case */
+ assert(sep != NULL);
for (i = 0; i < ncand; i++) {
p = canditer_next(ci) - seqb;
s = BUNtvar(bi, p);
@@ -941,7 +943,7 @@ concat_strings(BAT **bnp, ValPtr pt, BAT
* are empty), set to NULL */
for (i = 0; i < ngrp; i++)
astrings[i] = (char *) str_nil;
-
+
if (separator) {
for (p = 0; p < ncand; p++) {
i = canditer_next(ci) - seqb;
@@ -961,6 +963,7 @@ concat_strings(BAT **bnp, ValPtr pt, BAT
}
}
} else { /* sep case */
+ assert(sep != NULL);
for (p = 0; p < ncand; p++) {
i = canditer_next(ci) - seqb;
if (gids[i] >= min && gids[i] <= max) {
@@ -1001,6 +1004,7 @@ concat_strings(BAT **bnp, ValPtr pt, BAT
astrings[i] = NULL;
}
} else { /* sep case */
+ assert(sep != NULL);
for (i = 0; i < ngrp; i++) {
if (astrings[i] == NULL) {
if ((astrings[i] = GDKmalloc(lengths[i]
+ 1 - lastseplength[i])) == NULL) {
@@ -1036,6 +1040,7 @@ concat_strings(BAT **bnp, ValPtr pt, BAT
}
}
} else { /* sep case */
+ assert(sep != NULL);
for (p = 0; p < ncand; p++) {
i = canditer_next(ci) - seqb;
if (gids[i] >= min && gids[i] <= max) {
@@ -1073,7 +1078,7 @@ concat_strings(BAT **bnp, ValPtr pt, BAT
}
}
-finish:
+ finish:
if (has_nils)
*has_nils = nils;
GDKfree(lengths);
@@ -1092,8 +1097,8 @@ finish:
}
gdk_return
-BATstr_group_concat(ValPtr res, BAT *b, BAT *s, BAT *sep, bool skip_nils,
- bool abort_on_error, bool nil_if_empty,
const char *restrict separator)
+BATstr_group_concat(ValPtr res, BAT *b, BAT *s, BAT *sep, bool skip_nils,
+ bool abort_on_error, bool nil_if_empty, const char
*restrict separator)
{
BUN ncand;
struct canditer ci;
@@ -1116,13 +1121,13 @@ BATstr_group_concat(ValPtr res, BAT *b,
return GDK_SUCCEED;
}
- return concat_strings(NULL, res, b, b->hseqbase, 1, &ci, ncand, NULL,
0, 0,
- skip_nils, sep, separator,
NULL);
+ return concat_strings(NULL, res, b, b->hseqbase, 1, &ci, ncand, NULL,
0, 0,
+ skip_nils, sep, separator, NULL);
}
BAT *
BATgroupstr_group_concat(BAT *b, BAT *g, BAT *e, BAT *s, BAT *sep, bool
skip_nils,
- bool abort_on_error, const
char *restrict separator)
+ bool abort_on_error, const char *restrict separator)
{
BAT *bn = NULL;
oid min, max;
@@ -1163,8 +1168,8 @@ BATgroupstr_group_concat(BAT *b, BAT *g,
}
res = concat_strings(&bn, NULL, b, b->hseqbase, ngrp, &ci, ncand,
- (const oid *) Tloc(g, 0), min,
max, skip_nils, sep,
- separator, &nils);
+ (const oid *) Tloc(g, 0), min, max, skip_nils, sep,
+ separator, &nils);
if (res != GDK_SUCCEED)
return NULL;
@@ -1218,6 +1223,7 @@ GDKanalytical_str_group_concat(BAT *r, B
empty = false;
}
} else { /* sep case */
+ assert(sep != NULL);
sl = BUNtvar(bis, (BUN) j);
if (!strNil(sb)) {
@@ -1257,6 +1263,7 @@ GDKanalytical_str_group_concat(BAT *r, B
offset += next_length;
empty = false;
} else { /* sep case */
+ assert(sep != NULL);
sl = BUNtvar(bis, (BUN) j);
if (strNil(sb))
@@ -1284,7 +1291,7 @@ GDKanalytical_str_group_concat(BAT *r, B
r->tnonil = true;
r->tnil = false;
return GDK_SUCCEED;
- allocation_error:
+ allocation_error:
GDKfree(single_str);
GDKerror("malloc failure\n");
return GDK_FAIL;
diff --git a/gdk/gdk_time.c b/gdk/gdk_time.c
--- a/gdk/gdk_time.c
+++ b/gdk/gdk_time.c
@@ -609,6 +609,24 @@ date_fromstr(const char *buf, size_t *le
return parse_date(buf, *d, external);
}
+static ssize_t
+do_date_tostr(char *buf, size_t len, const date *val, bool external)
+{
+ assert(len >= 15);
+ if (is_date_nil(*val)) {
+ if (external) {
+ strcpy(buf, "nil");
+ return 3;
+ }
+ strcpy(buf, str_nil);
+ return 1;
+ }
+ return (ssize_t) snprintf(buf, len, "%d-%02d-%02d",
+ date_extract_year(*val),
+ date_extract_month(*val),
+ date_extract_day(*val));
+}
+
ssize_t
date_tostr(str *buf, size_t *len, const date *val, bool external)
{
@@ -620,18 +638,7 @@ date_tostr(str *buf, size_t *len, const
return -1;
*len = 15;
}
- if (is_date_nil(*val)) {
- if (external) {
- strcpy(*buf, "nil");
- return 3;
- }
- strcpy(*buf, str_nil);
- return 1;
- }
- return (ssize_t) snprintf(*buf, *len, "%d-%02d-%02d",
- date_extract_year(*val),
- date_extract_month(*val),
- date_extract_day(*val));
+ return do_date_tostr(*buf, *len, val, external);
}
static ssize_t
@@ -765,26 +772,23 @@ daytime_tz_fromstr(const char *buf, size
return (ssize_t) (s - buf);
}
-ssize_t
-daytime_precision_tostr(str *buf, size_t *len, const daytime dt,
- int precision, bool external)
+static ssize_t
+do_daytime_precision_tostr(char *buf, size_t len, const daytime dt,
+ int precision, bool external)
{
int hour, min, sec, usec;
if (precision < 0)
precision = 0;
- if (*len < 10 + (size_t) precision || *buf == NULL) {
- GDKfree(*buf);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list