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