Changeset: 08348eefa521 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=08348eefa521 Added Files: buildtools/selinux/ChangeLog.Jun2020 sql/test/Users/Tests/createUserRollback.SQL.py sql/test/Users/Tests/createUserRollback.stable.err sql/test/Users/Tests/createUserRollback.stable.out Modified Files: clients/Tests/exports.stable.out gdk/gdk_atoms.h gdk/gdk_batop.c gdk/gdk_utils.h monetdb5/optimizer/opt_mergetable.c sql/backends/monet5/sql_statement.c sql/backends/monet5/sql_upgrades.c sql/server/rel_dump.c sql/server/rel_exp.c sql/server/rel_select.c sql/server/rel_updates.c sql/test/BugTracker-2012/Tests/currenttime.Bug-2781.SQL.py sql/test/BugTracker-2012/Tests/currenttime.Bug-2781.stable.out sql/test/Users/Tests/All sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.powerpc64.int128 sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64 sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64.int128 sql/test/emptydb-upgrade-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade/Tests/upgrade.stable.out sql/test/emptydb-upgrade/Tests/upgrade.stable.out.32bit sql/test/emptydb-upgrade/Tests/upgrade.stable.out.int128 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/miscellaneous/Tests/simple_selects.sql sql/test/miscellaneous/Tests/simple_selects.stable.out sql/test/sys-schema/Tests/systemfunctions.stable.out sql/test/sys-schema/Tests/systemfunctions.stable.out.int128 sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.32bit sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade/Tests/upgrade.stable.out sql/test/testdb-upgrade/Tests/upgrade.stable.out.32bit sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128 Branch: scoping Log Message:
Merged with default diffs (truncated from 1378 to 300 lines): diff --git a/buildtools/selinux/ChangeLog.Jun2020 b/buildtools/selinux/ChangeLog.Jun2020 new file mode 100644 --- /dev/null +++ b/buildtools/selinux/ChangeLog.Jun2020 @@ -0,0 +1,10 @@ +# ChangeLog file for selinux +# This file is updated with Maddlog + +* Wed May 6 2020 Sjoerd Mullender <sjo...@acm.org> +- There was a problem with the MonetDB SELinux support on Fedora 32. + That is fixed in this release. In order to do a proper upgrade of + the package if you have already installed MonetDB-selinux on Fedora + 32, you may need to uninstall (dnf remove) the old package and then + install the new. + 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 @@ -14,7 +14,7 @@ char *ATOMformat(int id, const void *val int ATOMindex(const char *nme); size_t ATOMlen(int id, const void *v); str ATOMname(int id); -void *ATOMnil(int id); +void *ATOMnil(int id) __attribute__((__malloc__)); int ATOMprint(int id, const void *val, stream *fd); gdk_return BATappend(BAT *b, BAT *n, BAT *s, bool force) __attribute__((__warn_unused_result__)); void BATassertProps(BAT *b); @@ -299,8 +299,8 @@ gdk_return GDKsetenv(const char *name, c void GDKsetmallocsuccesscount(lng count); void GDKsetverbose(int verbosity); ssize_t GDKstrFromStr(unsigned char *restrict dst, const unsigned char *restrict src, ssize_t len); -str GDKstrdup(const char *s) __attribute__((__warn_unused_result__)); -str GDKstrndup(const char *s, size_t n) __attribute__((__warn_unused_result__)); +str GDKstrdup(const char *s) __attribute__((__malloc__)) __attribute__((__warn_unused_result__)); +str GDKstrndup(const char *s, size_t n) __attribute__((__malloc__)) __attribute__((__warn_unused_result__)); gdk_return GDKtracer_fill_comp_info(BAT *id, BAT *component, BAT *log_level); gdk_return GDKtracer_flush_buffer(void); const char *GDKtracer_get_component_level(const char *comp); diff --git a/gdk/gdk_atoms.h b/gdk/gdk_atoms.h --- a/gdk/gdk_atoms.h +++ b/gdk/gdk_atoms.h @@ -68,7 +68,8 @@ gdk_export int ATOMindex(const char *nme gdk_export str ATOMname(int id); gdk_export size_t ATOMlen(int id, const void *v); -gdk_export void *ATOMnil(int id); +gdk_export void *ATOMnil(int id) + __attribute__((__malloc__)); gdk_export int ATOMprint(int id, const void *val, stream *fd); gdk_export char *ATOMformat(int id, const void *val); diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c --- a/gdk/gdk_batop.c +++ b/gdk/gdk_batop.c @@ -496,6 +496,8 @@ BATappend(BAT *b, BAT *n, BAT *s, bool f BUN r; PROPrec *prop, *nprop; oid hseq = n->hseqbase; + char buf[64]; + lng t0 = 0; if (b == NULL || n == NULL || (cnt = BATcount(n)) == 0) { return GDK_SUCCEED; @@ -503,6 +505,11 @@ BATappend(BAT *b, BAT *n, BAT *s, bool f assert(b->batCacheid > 0); assert(b->theap.parentid == 0); + TRC_DEBUG_IF(ALGO) { + t0 = GDKusec(); + snprintf(buf, sizeof(buf), ALGOBATFMT, ALGOBATPAR(b)); + } + ALIGNapp(b, force, GDK_FAIL); if (ATOMstorage(ATOMtype(b->ttype)) != ATOMstorage(ATOMtype(n->ttype))) { @@ -518,7 +525,7 @@ BATappend(BAT *b, BAT *n, BAT *s, bool f cnt = canditer_init(&ci, n, s); if (cnt == 0) { - return GDK_SUCCEED; + goto doreturn; } if (BUNlast(b) + cnt > BUN_MAX) { @@ -585,14 +592,14 @@ BATappend(BAT *b, BAT *n, BAT *s, bool f if (BATcount(b) == 0) BATtseqbase(b, n->tseqbase + ci.seq - hseq); BATsetcount(b, BATcount(b) + cnt); - return GDK_SUCCEED; + goto doreturn; } if ((BATcount(b) == 0 || is_oid_nil(b->tseqbase)) && n->ttype == TYPE_void && is_oid_nil(n->tseqbase)) { /* both b and n are void/nil */ BATtseqbase(b, oid_nil); BATsetcount(b, BATcount(b) + cnt); - return GDK_SUCCEED; + goto doreturn; } /* we need to materialize b; allocate enough capacity */ b->batCapacity = BATcount(b) + cnt; @@ -707,6 +714,13 @@ BATappend(BAT *b, BAT *n, BAT *s, bool f } if (b->thash) BATsetprop(b, GDK_NUNIQUE, TYPE_oid, &(oid){b->thash->nunique}); + + doreturn: + TRC_DEBUG(ALGO, "b=%s,n=" ALGOBATFMT ",s=" ALGOOPTBATFMT + " -> " ALGOBATFMT " (" LLFMT " usec)\n", + buf, ALGOBATPAR(n), ALGOOPTBATPAR(s), ALGOBATPAR(b), + GDKusec() - t0); + return GDK_SUCCEED; } diff --git a/gdk/gdk_utils.h b/gdk/gdk_utils.h --- a/gdk/gdk_utils.h +++ b/gdk/gdk_utils.h @@ -93,8 +93,10 @@ gdk_export void *GDKrealloc(void *pold, __attribute__((__warn_unused_result__)); gdk_export void GDKfree(void *blk); gdk_export str GDKstrdup(const char *s) + __attribute__((__malloc__)) __attribute__((__warn_unused_result__)); gdk_export str GDKstrndup(const char *s, size_t n) + __attribute__((__malloc__)) __attribute__((__warn_unused_result__)); gdk_export void MT_init(void); /* init the package. */ diff --git a/monetdb5/optimizer/opt_mergetable.c b/monetdb5/optimizer/opt_mergetable.c --- a/monetdb5/optimizer/opt_mergetable.c +++ b/monetdb5/optimizer/opt_mergetable.c @@ -1958,6 +1958,11 @@ OPTmergetableImplementation(Client cntxt TRC_INFO(MAL_OPTIMIZER, "Mergetable bailout semijoin ref\n"); bailout = 1; } + if (getModuleId(p) == algebraRef && + getFunctionId(p) == thetajoinRef ) { + TRC_INFO(MAL_OPTIMIZER, "Mergetable bailout thetajoin ref\n"); + bailout = 1; + } if (isSample(p)) { bailout = 1; } diff --git a/sql/backends/monet5/sql_statement.c b/sql/backends/monet5/sql_statement.c --- a/sql/backends/monet5/sql_statement.c +++ b/sql/backends/monet5/sql_statement.c @@ -1953,7 +1953,7 @@ stmt_join_cand(backend *be, stmt *op1, s return NULL; break; case cmp_notequal: - q = newStmt(mb, algebraRef, antijoinRef); + q = newStmt(mb, algebraRef, thetajoinRef); q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any)); q = pushArgument(mb, q, op1->nr); q = pushArgument(mb, q, op2->nr); @@ -1965,6 +1965,7 @@ stmt_join_cand(backend *be, stmt *op1, s q = pushNil(mb, q, TYPE_bat); else q = pushArgument(mb, q, rcand->nr); + q = pushInt(mb, q, JOIN_NE); q = pushBit(mb, q, FALSE); q = pushNil(mb, q, TYPE_lng); if (q == NULL) diff --git a/sql/backends/monet5/sql_upgrades.c b/sql/backends/monet5/sql_upgrades.c --- a/sql/backends/monet5/sql_upgrades.c +++ b/sql/backends/monet5/sql_upgrades.c @@ -2093,6 +2093,18 @@ sql_update_jun2020(Client c, mvc *sql, c * see also function load_func() in store.c */ pos += snprintf(buf + pos, bufsize - pos, "update sys.functions set language = language - 2 where language in (8, 9);\n"); + sql_subtype tp; + sql_find_subtype(&tp, "varchar", 0, 0); + sql_subfunc *f = sql_bind_func(sql->sa, sys, "listagg", &tp, &tp, F_AGGR); + pos += snprintf(buf + pos, bufsize - pos, + "insert into sys.args values" + " (%d, %d, 'arg_2', 'varchar', 0, 0, %d, 2);\n", + store_next_oid(), f->func->base.id, ARG_IN); + + pos += snprintf(buf + pos, bufsize - pos, + "update sys.args set name = name || '_' || cast(number as string) where name in ('arg', 'res') and func_id in (select id from sys.functions f where f.system);\n"); + pos += snprintf(buf + pos, bufsize - pos, + "insert into sys.dependencies values ((select id from sys.functions where name = 'ms_trunc' and schema_id = (select id from sys.schemas where name = 'sys')), (select id from sys.functions where name = 'ms_round' and schema_id = (select id from sys.schemas where name = 'sys')), (select dependency_type_id from sys.dependency_types where dependency_type_name = 'FUNCTION'));\n"); /* 12_url */ pos += snprintf(buf + pos, bufsize - pos, 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 @@ -789,7 +789,8 @@ read_prop( mvc *sql, sql_exp *exp, char return sql_error(sql, -1, SQLSTATE(42000) "Schema %s missing\n", sname); if (!find_prop(exp->p, PROP_JOINIDX)) { p = exp->p = prop_create(sql->sa, PROP_JOINIDX, exp->p); - p->value = mvc_bind_idx(sql, s, iname); + if (!(p->value = mvc_bind_idx(sql, s, iname))) + return sql_error(sql, -1, SQLSTATE(42000) "Index %s missing\n", iname); } r[*pos] = old; skipWS(r,pos); @@ -891,7 +892,7 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re 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, (strchr(cname,'%') != NULL)); + exp = exp_column(sql->sa, tname, cname, NULL, CARD_ATOM, 1, cname[0] == '%'); } break; /* atom */ diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c --- a/sql/server/rel_exp.c +++ b/sql/server/rel_exp.c @@ -281,6 +281,7 @@ exp_convert(sql_allocator *sa, sql_exp * sql_exp * exp_op( sql_allocator *sa, list *l, sql_subfunc *f ) { + sql_subtype *fres; sql_exp *e = exp_create(sa, e_func); if (e == NULL) return NULL; @@ -288,7 +289,14 @@ exp_op( sql_allocator *sa, list *l, sql_ if (!l || list_length(l) == 0) e->card = CARD_ATOM; /* unop returns a single atom */ e->l = l; - e->f = f; + e->f = f; + + fres = exp_subtype(e); + /* corner case if the output of the function is void, set the type to one of the inputs */ + if (!f->func->varres && list_length(l) > 0 && list_length(f->func->res) == 1 && fres && !subtype_cmp(fres, sql_bind_localtype("void"))) { + sql_subtype *t = exp_subtype(l->t->data); + f->res->h->data = sql_create_subtype(sa, t->type, t->digits, t->scale); + } return e; } diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -1929,9 +1929,7 @@ static sql_exp* int table_func = (ek.card == card_relation); sql_ftype type = (ek.card == card_loader)?F_LOADER:((ek.card == card_none)?F_PROC: ((ek.card == card_relation)?F_UNION:F_FUNC)); - sql_ftype filt = (type == F_FUNC)?F_FILT:type; - - (void)filt; + (void)nr_args; (void)obj_type; f = bind_func_(sql, s, fname, tl, type); diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c --- a/sql/server/rel_updates.c +++ b/sql/server/rel_updates.c @@ -317,7 +317,8 @@ rel_inserts(mvc *sql, sql_table *t, sql_ if (inserts[c->colnr]) return sql_error(sql, 02, SQLSTATE(42000) "%s: column '%s' specified more than once", action, c->base.name); - inserts[c->colnr] = rel_check_type(sql, &c->type, r, e, type_equal); + if (!(inserts[c->colnr] = rel_check_type(sql, &c->type, r, e, type_equal))) + return NULL; } } else { for (m = collist->h; m; m = m->next) { diff --git a/sql/test/BugTracker-2012/Tests/currenttime.Bug-2781.SQL.py b/sql/test/BugTracker-2012/Tests/currenttime.Bug-2781.SQL.py --- a/sql/test/BugTracker-2012/Tests/currenttime.Bug-2781.SQL.py +++ b/sql/test/BugTracker-2012/Tests/currenttime.Bug-2781.SQL.py @@ -14,16 +14,16 @@ def main(): with process.client('sql', user='monetdb', passwd='monetdb', stdin=process.PIPE, stdout=process.PIPE, stderr=process.PIPE) as clt: - currenttime = time.strftime('%H:%M:%S', time.localtime(time.time())) + currenttime = time.strftime('%F %T', time.localtime(time.time())) #SQL command for checking the localtime - sqlcommand = "select localtime() between (time '%s' - interval '20' second) and (time '%s' + interval '20' second);" % (currenttime, currenttime) + sqlcommand = "select localtimestamp() between (timestamp '%s' - interval '20' second) and (timestamp '%s' + interval '20' second);" % (currenttime, currenttime) out, err = clt.communicate(sqlcommand) sys.stdout.write(out) sys.stderr.write(err) with process.client('sql', user='monetdb', passwd='monetdb', stdin=process.PIPE, stdout=process.PIPE, stderr=process.PIPE) as clt: - out, err = clt.communicate('select localtime();') + out, err = clt.communicate('select localtimestamp();') sys.stdout.write('#Python says: %s; current time zone %d\n' % (currenttime, zone)) for line in out.split('\n'): if line: diff --git a/sql/test/BugTracker-2012/Tests/currenttime.Bug-2781.stable.out b/sql/test/BugTracker-2012/Tests/currenttime.Bug-2781.stable.out --- a/sql/test/BugTracker-2012/Tests/currenttime.Bug-2781.stable.out +++ b/sql/test/BugTracker-2012/Tests/currenttime.Bug-2781.stable.out @@ -42,7 +42,7 @@ stdout of test 'currenttime.Bug-2781` in # loading sql script: 80_udf.sql # loading sql script: 99_system.sql -#select localtime() between (time '16:48:21' - interval '20' second) and (time '16:48:21' + interval '20' second); +#select localtimestamp() between (timestamp '2020-05-06 10:22:12' - interval '20' second) and (timestamp '2020-05-06 10:22:12' + interval '20' second); % . # table_name % %1 # name % boolean # type diff --git a/sql/test/Users/Tests/All b/sql/test/Users/Tests/All --- a/sql/test/Users/Tests/All +++ b/sql/test/Users/Tests/All _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list