Changeset: 4575f798d414 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4575f798d414
Modified Files:
        sql/server/rel_rel.c
        
sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out
        sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/emptydb-previous-upgrade-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-previous-upgrade/Tests/upgrade.stable.out
        sql/test/emptydb-previous-upgrade/Tests/upgrade.stable.out.int128
        
sql/test/testdb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-previous-upgrade-chain/Tests/upgrade.stable.out
        sql/test/testdb-previous-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/testdb-previous-upgrade-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-previous-upgrade/Tests/upgrade.stable.out
        sql/test/testdb-previous-upgrade/Tests/upgrade.stable.out.int128
        testing/Mz.py.in
Branch: default
Log Message:

Merge with Jul2021 branch.


diffs (truncated from 506820 to 300 lines):

diff --git a/gdk/gdk_tracer.c b/gdk/gdk_tracer.c
--- a/gdk/gdk_tracer.c
+++ b/gdk/gdk_tracer.c
@@ -454,9 +454,6 @@ GDKtracer_log(const char *file, const ch
              const char *syserr,
              const char *fmt, ...)
 {
-       if ((adapter_t) ATOMIC_GET(&cur_adapter) == MBEDDED)
-               return;
-
        int bytes_written;
        char buffer[512];       /* should be plenty big enough for a message */
        va_list va;
@@ -501,7 +498,8 @@ GDKtracer_log(const char *file, const ch
        }
        va_end(va);
        if (bytes_written < 0) {
-               GDK_TRACER_EXCEPTION("Failed to write logs\n");
+               if ((adapter_t) ATOMIC_GET(&cur_adapter) != MBEDDED)
+                       GDK_TRACER_EXCEPTION("Failed to write logs\n");
                return;
        }
        char *p;
@@ -521,6 +519,10 @@ GDKtracer_log(const char *file, const ch
                }
        }
 
+       /* don't write to file on embedded case, but set the GDK error buffer */
+       if ((adapter_t) ATOMIC_GET(&cur_adapter) == MBEDDED)
+               return;
+
        if (level <= M_WARNING) {
                fprintf(stderr, "#%s%s%s: %s: %s%s%s%s\n",
                        add_ts ? ts : "",
diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -898,13 +898,12 @@ rel_table_func(sql_allocator *sa, sql_re
 static void
 exps_has_nil(list *exps)
 {
-       node *m;
+       if (!list_empty(exps))
+               for (node *m = exps->h; m; m = m->next) {
+                       sql_exp *e = m->data;
 
-       for (m = exps->h; m; m = m->next) {
-               sql_exp *e = m->data;
-
-               set_has_nil(e);
-       }
+                       set_has_nil(e);
+               }
 }
 
 list *
@@ -926,14 +925,13 @@ list *
        case op_left:
        case op_right:
        case op_full:
-               exps = _rel_projections(sql, rel->l, tname, settname, intern, 
basecol);
+               lexps = _rel_projections(sql, rel->l, tname, settname, intern, 
basecol);
                if (rel->op == op_full || rel->op == op_right)
-                       exps_has_nil(exps);
+                       exps_has_nil(lexps);
                rexps = _rel_projections(sql, rel->r, tname, settname, intern, 
basecol);
                if (rel->op == op_full || rel->op == op_left)
                        exps_has_nil(rexps);
-               exps = list_merge( exps, rexps, (fdup)NULL);
-               return exps;
+               return list_merge(lexps, rexps, (fdup)NULL);
        case op_groupby:
                if (list_empty(rel->exps) && rel->r) {
                        list *r = rel->r;
@@ -986,23 +984,25 @@ list *
                        }
                        return exps;
                }
+               /* I only expect set relations to hit here */
+               assert(is_set(rel->op));
                lexps = _rel_projections(sql, rel->l, tname, settname, intern, 
basecol);
                rexps = _rel_projections(sql, rel->r, tname, settname, intern, 
basecol);
-               exps = sa_list(sql->sa);
-               if (lexps && rexps && exps) {
+               if (lexps && rexps) {
                        int label = 0;
 
                        if (!settname)
                                label = ++sql->label;
-                       for (node *en = lexps->h, *ren = rexps->h; en && ren; 
en = en->next, ren = ren->next) {
+                       assert(list_length(lexps) == list_length(rexps));
+                       for (node *en = lexps->h; en; en = en->next) {
                                sql_exp *e = en->data;
+
                                e->card = rel->card;
                                if (!settname) /* noname use alias */
                                        exp_setrelname(sql->sa, e, label);
-                               append(exps, e);
                        }
                }
-               return exps;
+               return lexps;
        case op_ddl:
        case op_semi:
        case op_anti:
diff --git a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/All 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/All
new file mode 100644
--- /dev/null
+++ b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/All
@@ -0,0 +1,3 @@
+HAVE_HGE&HAVE_FITS&HAVE_GEOM&HAVE_NETCDF&HAVE_SHP&PREVHGECHAINRELEMPTY&!NOWAL?upgrade
+RELEASERUN?package
+KNOWNFAIL?check
diff --git a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/check.SQL.py.src 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/check.SQL.py.src
new file mode 100644
--- /dev/null
+++ b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/check.SQL.py.src
@@ -0,0 +1,1 @@
+$RELSRCDIR/../../emptydb/Tests/check.SQL.py
diff --git a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/check.reqtests 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/check.reqtests
new file mode 100644
--- /dev/null
+++ b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/check.reqtests
@@ -0,0 +1,1 @@
+upgrade
diff --git 
a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/check.stable.out.int128.src 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/check.stable.out.int128.src
new file mode 100644
--- /dev/null
+++ 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/check.stable.out.int128.src
@@ -0,0 +1,1 @@
+$RELSRCDIR/../../emptydb/Tests/check.stable.out.int128
diff --git a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/check.timeout 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/check.timeout
new file mode 100644
--- /dev/null
+++ b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/check.timeout
@@ -0,0 +1,1 @@
+2
diff --git a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/package.py 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/package.py
new file mode 100644
--- /dev/null
+++ b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/package.py
@@ -0,0 +1,49 @@
+import os, sys, zipfile
+
+dbfarm = os.environ['GDK_DBFARM']
+db = os.path.join(dbfarm, os.environ['TSTDB'])
+archive = os.path.join(dbfarm, 'prevhgechainrelempty.zip')
+rev = os.getenv('REVISION')
+
+if not os.path.exists(db):
+    print('database directory %s does not exist' % db, file=sys.stderr)
+    sys.exit(1)
+
+try:
+    f = open(os.path.join(db, 'bat', 'BACKUP', 'SUBCOMMIT', 'BBP.dir'), 'r')
+except IOError:
+    try:
+        f = open(os.path.join(db, 'bat', 'BACKUP', 'BBP.dir'), 'r')
+    except IOError:
+        f = open(os.path.join(db, 'bat', 'BBP.dir'), 'r')
+hdr = f.readline()
+ptroid = f.readline()
+ptr, oid, hge = ptroid.split()
+f.close()
+
+z = zipfile.ZipFile(archive)
+comment = z.comment
+z.close()
+
+try:
+    # try to create compressed zip file
+    z = zipfile.ZipFile(os.path.join(dbfarm, 'newhgechainrelempty.zip'), 'w',
+                        zipfile.ZIP_DEFLATED)
+except RuntimeError:
+    # if that fails, create uncompressed zip file
+    z = zipfile.ZipFile(os.path.join(dbfarm, 'newhgechainrelempty.zip'), 'w')
+
+if rev:
+    revcomment = ' (hg id %s)' % rev
+else:
+    revcomment = ''
+if hge == '16' and b'largest integer size 16' not in comment:
+    revcomment = ' with largest integer size 16' + revcomment
+z.comment = comment + ('Chained on host %s%s.\n' % (os.getenv('HOSTNAME', 
'unknown'), revcomment)).encode('utf-8')
+
+for root, dirs, files in os.walk(db):
+    for f in files:
+        ff = os.path.join(root, f)
+        z.write(ff, ff[len(db) + len(os.sep):].replace(os.sep, '/'))
+
+z.close()
diff --git a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/package.reqtests 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/package.reqtests
new file mode 100644
--- /dev/null
+++ b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/package.reqtests
@@ -0,0 +1,1 @@
+upgrade
diff --git a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.py 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.py
new file mode 100644
--- /dev/null
+++ b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.py
@@ -0,0 +1,81 @@
+#!/usr/bin/env python3
+
+# When called in the test environment, this is called with exactly one
+# argument: the name of the test.
+# When called without argument, we dump the server output so that it
+# can be saved to be tested against.
+try:
+    from MonetDBtesting import process
+except ImportError:
+    import process
+
+import sys, os, zipfile, platform
+
+xit = 0
+
+# find zipped database
+dbfarm = os.environ['GDK_DBFARM']
+db = os.path.join(dbfarm, os.environ['TSTDB'])
+archive = os.path.join(dbfarm, 'prevhgechainrelempty.zip')
+if not os.path.exists(archive):
+    print('file "{}" not found'.format(archive), file=sys.stderr)
+    sys.exit(1)
+
+# unpackage database
+with zipfile.ZipFile(archive) as z:
+    z.extractall(path=db)
+
+# start server and dump database
+with process.server(mapiport='0',
+                    stdin=process.PIPE,
+                    stdout=process.PIPE,
+                    stderr=process.PIPE) as srv:
+    with process.client(lang='sqldump',
+                        stdin=process.PIPE,
+                        stdout=process.PIPE,
+                        stderr=process.PIPE,
+                        server=srv) as clt:
+        cltout, clterr = clt.communicate()
+    srvout, srverr = srv.communicate()
+
+srvout = [line for line in srvout.splitlines(keepends=True) if not 
line.startswith('#')]
+cltout = [line for line in cltout.splitlines(keepends=False) if not 
line.startswith('--')]
+
+# check server output (upgrade commands) and check dump (empty)
+if len(sys.argv) == 2 and sys.argv[1] == 'upgrade':
+    bits = os.getenv('TST_BITS')
+    if bits:
+        bits = ['.' + bits, '']
+    else:
+        bits = ['']
+    arch = platform.machine()
+    arch = ['.' + arch, '']
+    hge = os.getenv('HAVE_HGE')
+    if hge:
+        hge = ['.int128', '']
+    else:
+        hge = ['']
+    found = False
+    for b in bits:
+        for a in arch:
+            for h in hge:
+                f = 'upgrade.stable.out{}{}{}'.format(b, a, h)
+                found = os.path.exists(f)
+                if found:
+                    break
+            if found:
+                break
+        if found:
+            break
+    stable = open(f).readlines()
+    import difflib
+    for line in difflib.unified_diff(stable, srvout, fromfile='test', 
tofile=f):
+        sys.stderr.write(line)
+        xit = 1
+    if len(cltout) != 2 or cltout[0] != 'START TRANSACTION;' or cltout[1] != 
'COMMIT;':
+        sys.stderr.write('\n'.join(cltout))
+        xit = 1
+else:
+    sys.stdout.writelines(srvout)
+
+sys.exit(xit)
diff --git 
a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
new file mode 100644
--- /dev/null
+++ 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
@@ -0,0 +1,5752 @@
+Running database upgrade commands:
+set schema "sys";
+delete from sys.dependencies where id < 2000;
+delete from sys.types where id < 2000;
+insert into sys.types values (1, 'void', 'any', 0, 0, 0, 0, 2000);
+insert into sys.types values (2, 'bat', 'table', 0, 0, 0, 1, 2000);
+insert into sys.types values (3, 'ptr', 'ptr', 0, 0, 0, 1, 2000);
+insert into sys.types values (4, 'bit', 'boolean', 1, 0, 2, 2, 2000);
+insert into sys.types values (5, 'str', 'clob', 0, 0, 0, 4, 2000);
+insert into sys.types values (6, 'str', 'varchar', 0, 0, 0, 4, 2000);
+insert into sys.types values (7, 'str', 'char', 0, 0, 0, 3, 2000);
+insert into sys.types values (8, 'oid', 'oid', 63, 0, 2, 6, 2000);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to