Changeset: ca951934183a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ca951934183a
Modified Files:
gdk/gdk_bbp.c
gdk/gdk_select.c
gdk/gdk_string.c
monetdb5/mal/mal_interpreter.c
sql/server/rel_rel.c
Branch: default
Log Message:
Merged with Jul2021
diffs (truncated from 415 to 300 lines):
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -2005,6 +2005,7 @@ BBPdir_last(int n, char *buf, size_t buf
}
if (fclose(nbbpf) == EOF) {
GDKsyserror("Closing BBP.dir file failed\n");
+ nbbpf = NULL; /* can't close again */
goto bailout;
}
@@ -2862,7 +2863,8 @@ decref(bat i, bool logical, bool release
if (b->tvheap)
b->tvheap->dirty = true;
}
- farmid = b->theap->farmid;
+ if (b->theap)
+ farmid = b->theap->farmid;
MT_lock_unset(&b->theaplock);
}
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -985,13 +985,14 @@ logger_create_types_file(logger *lg, con
&& fsync(fileno(fp)) < 0
#endif
)) {
+ GDKsyserror("flushing log file %s failed", filename);
+ fclose(fp);
MT_remove(filename);
- GDKerror("flushing log file %s failed", filename);
return GDK_FAIL;
}
if (fclose(fp) < 0) {
+ GDKsyserror("closing log file %s failed", filename);
MT_remove(filename);
- GDKerror("closing log file %s failed", filename);
return GDK_FAIL;
}
return GDK_SUCCEED;
@@ -1674,8 +1675,10 @@ bm_subcommit(logger *lg)
i = subcommit_list_add(i, n, sizes, ids->batCacheid,
BATcount(ids));
i = subcommit_list_add(i, n, sizes, vals->batCacheid,
BATcount(ids));
- r[rcnt++] = lg->seqs_id->batCacheid;
- r[rcnt++] = lg->seqs_val->batCacheid;
+ if (BBP_lrefs(lg->seqs_id->batCacheid) > 0)
+ r[rcnt++] = lg->seqs_id->batCacheid;
+ if (BBP_lrefs(lg->seqs_val->batCacheid) > 0)
+ r[rcnt++] = lg->seqs_val->batCacheid;
logbat_destroy(lg->seqs_id);
logbat_destroy(lg->seqs_val);
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -1950,6 +1950,8 @@ BATselect(BAT *b, BAT *s, const void *tl
bn = COLnew(0, TYPE_oid, estimate, TRANSIENT);
if (bn == NULL) {
+ if (havehash)
+ MT_rwlock_rdunlock(&b->thashlock);
bat_iterator_end(&bi);
return NULL;
}
diff --git a/gdk/gdk_string.c b/gdk/gdk_string.c
--- a/gdk/gdk_string.c
+++ b/gdk/gdk_string.c
@@ -758,6 +758,13 @@ concat_strings(BAT **bnp, ValPtr pt, BAT
assert((bnp == NULL) != (pt == NULL));
/* if pt not NULL, only a single group allowed */
assert(pt == NULL || ngrp == 1);
+
+ bi = bat_iterator(b);
+ if (sep)
+ bis = bat_iterator(sep);
+ else
+ separator_length = strlen(separator);
+
if (bnp) {
if ((bn = COLnew(min, TYPE_str, ngrp, TRANSIENT)) == NULL) {
rres = GDK_FAIL;
@@ -766,12 +773,6 @@ concat_strings(BAT **bnp, ValPtr pt, BAT
*bnp = bn;
}
- bi = bat_iterator(b);
- if (sep)
- bis = bat_iterator(sep);
- else
- separator_length = strlen(separator);
-
if (ngrp == 1) {
size_t offset = 0, single_length = 0;
bool empty = true;
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -845,7 +845,8 @@ str runMALsequence(Client cntxt, MalBlkP
lhs = &backup[i];
if (BATatoms[lhs->vtype].atomUnfix &&
(*BATatoms[lhs->vtype].atomUnfix)(VALget(lhs)) != GDK_SUCCEED) {
- ret = createException(MAL,
"mal.propertyCheck", GDK_EXCEPTION);
+ if (ret == MAL_SUCCEED)
+ ret = createException(MAL,
"mal.propertyCheck", GDK_EXCEPTION);
}
if (ATOMextern(lhs->vtype) &&
lhs->val.pval &&
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -932,7 +932,7 @@ read_exp_properties(mvc *sql, sql_exp *e
static sql_exp*
exp_read(mvc *sql, sql_rel *lrel, sql_rel *rrel, list *top_exps, char *r, int
*pos, int grp)
{
- int f = -1, not = 1, old, d=0, s=0, unique = 0, no_nils = 0, quote = 0,
zero_if_empty = 0;
+ int f = -1, old, d=0, s=0, unique = 0, no_nils = 0, quote = 0,
zero_if_empty = 0;
char *tname = NULL, *cname = NULL, *var_cname = NULL, *e, *b = r +
*pos, *st;
sql_exp *exp = NULL;
list *exps = NULL;
@@ -966,17 +966,19 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
cname = sa_strdup(sql->sa, cname);
*e = old;
skipWS(r, pos);
- if (top_exps) {
- exp = exps_bind_column2(top_exps, tname, cname, NULL);
- if (exp)
- exp = exp_alias_or_copy(sql, tname, cname,
lrel, exp);
- }
- if (!exp && lrel) {
- exp = rel_bind_column2(sql, lrel, tname, cname, 0);
- if (!exp && rrel)
- exp = rel_bind_column2(sql, rrel, tname, cname,
0);
- } else if (!exp) {
- exp = exp_column(sql->sa, tname, cname, NULL,
CARD_ATOM, 1, cname[0] == '%');
+ if (r[*pos] != '(') { /* if there's a function/aggregate call
next don't attempt to bind columns */
+ if (top_exps) {
+ exp = exps_bind_column2(top_exps, tname, cname,
NULL);
+ if (exp)
+ exp = exp_alias_or_copy(sql, tname,
cname, lrel, exp);
+ }
+ if (!exp && lrel) {
+ exp = rel_bind_column2(sql, lrel, tname, cname,
0);
+ if (!exp && rrel)
+ exp = rel_bind_column2(sql, rrel,
tname, cname, 0);
+ } else if (!exp) {
+ exp = exp_column(sql->sa, tname, cname, NULL,
CARD_ATOM, 1, cname[0] == '%');
+ }
}
break;
/* atom */
@@ -1222,10 +1224,25 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
}
}
}
- if (f)
+ if (f) {
exp = exp_op(sql->sa, list_empty(exps) ? NULL :
exps, f);
- else
+ if (is_compare_func(f)) { /* has to parse
any/all */
+ skipWS(r,pos);
+ /* [ ANY|ALL ] */
+ if (strncmp(r+*pos, "ANY",
strlen("ANY")) == 0) {
+ (*pos)+= (int) strlen("ANY");
+ skipWS(r, pos);
+ exp->flag = 1;
+ }
+ if (strncmp(r+*pos, "ALL",
strlen("ALL")) == 0) {
+ (*pos)+= (int) strlen("ALL");
+ skipWS(r, pos);
+ exp->flag = 2;
+ }
+ }
+ } else {
return sql_error(sql, ERR_NOTFOUND,
SQLSTATE(42000) "Function '%s%s%s %d' not found\n", tname ? tname : "", tname ?
"." : "", cname, nops);
+ }
}
}
@@ -1276,6 +1293,16 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
return NULL;
}
+ /* [ NOT NULL ] */
+ if (strncmp(r+*pos, "NOT NULL", strlen("NOT NULL")) == 0) {
+ (*pos)+= (int) strlen("NOT NULL");
+ skipWS(r, pos);
+ set_has_no_nil(exp);
+ }
+
+ if (!(exp = read_exp_properties(sql, exp, r, pos)))
+ return NULL;
+
if (r[*pos] == '!') {
(*pos)++;
skipWS(r, pos);
@@ -1287,70 +1314,6 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
set_semantics(exp);
}
- /* [ ANY|ALL ] */
- if (strncmp(r+*pos, "ANY", strlen("ANY")) == 0) {
- (*pos)+= (int) strlen("ANY");
- skipWS(r, pos);
- exp->flag = 1;
- }
- if (strncmp(r+*pos, "ALL", strlen("ALL")) == 0) {
- (*pos)+= (int) strlen("ALL");
- skipWS(r, pos);
- exp->flag = 2;
- }
- /* [ ASC ] */
- if (strncmp(r+*pos, "ASC", strlen("ASC")) == 0) {
- (*pos)+= (int) strlen("ASC");
- skipWS(r, pos);
- set_ascending(exp);
- }
- /* [ NULLS LAST ] */
- if (strncmp(r+*pos, "NULLS LAST", strlen("NULLS LAST")) == 0) {
- (*pos)+= (int) strlen("NULLS LAST");
- skipWS(r, pos);
- set_nulls_last(exp);
- }
- /* [ NOT ] NULL */
- if (strncmp(r+*pos, "NOT", strlen("NOT")) == 0) {
- (*pos)+= (int) strlen("NOT");
- skipWS(r, pos);
- not = 1;
- }
- if (strncmp(r+*pos, "NULL", strlen("NULL")) == 0) {
- (*pos)+= (int) strlen("NULL");
- skipWS(r, pos);
- if (not)
- set_has_no_nil(exp);
- }
-
- if (!(exp = read_exp_properties(sql, exp, r, pos)))
- return NULL;
- skipWS(r,pos);
-
- /* as alias */
- if (strncmp(r+*pos, "as", 2) == 0) {
- (*pos)+=2;
- skipWS(r, pos);
-
- tname = r+*pos+1;
- skipIdent(r, pos);
- convertIdent(tname);
- (*pos)++;
- if (r[*pos] != '.') {
- cname = tname;
- exp_setname(sql->sa, exp, NULL, cname);
- skipWS(r, pos);
- } else {
- (*pos)++;
- cname = r+*pos+1;
- skipIdent(r, pos);
- convertIdent(cname);
- (*pos)++;
- skipWS(r, pos);
- exp_setname(sql->sa, exp, tname, cname);
- }
- }
- skipWS(r, pos);
switch(r[*pos]) {
case 'a':
if (strncmp(r+*pos, "any =", strlen("any =")) == 0) {
@@ -1414,11 +1377,8 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
(*pos)++;
}
break;
- case ',':
- case ']':
- case ')':
default:
- return exp;
+ break;
}
if (f >= 0) {
skipWS(r,pos);
@@ -1426,7 +1386,10 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
list *exps = read_exps(sql, lrel, rrel, top_exps, r,
pos, '(', 0, 0);
if (!exps)
return NULL;
- return exp_in(sql->sa, exp, exps, f);
+ sql_exp *ne = exp_in(sql->sa, exp, exps, f);
+ if (is_anti(exp))
+ set_anti(ne);
+ exp = ne;
} else {
int sym = 0;
sql_exp *e = exp_read(sql, lrel, rrel, top_exps, r,
pos, 0);
@@ -1443,20 +1406,63 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
sym = 1;
}
if (e->type == e_cmp) {
- sql_exp *ne = exp_compare2(sql->sa, e->l, exp,
e->r, compare2range(swap_compare((comp_type)f), e->flag), sym);
- if (is_anti(exp))
- set_anti(ne);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list