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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list