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

Reply via email to