MonetDB: Jul2021 - Assert bat capacity must be greater or equal ...
Changeset: ceeea5ff3286 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/ceeea5ff3286 Modified Files: gdk/gdk_batop.c Branch: Jul2021 Log Message: Assert bat capacity must be greater or equal than the count after inserting a string BAT diffs (11 lines): diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c --- a/gdk/gdk_batop.c +++ b/gdk/gdk_batop.c @@ -398,6 +398,7 @@ insert_string_bat(BAT *b, BAT *n, struct r++; } } + assert(b->batCapacity >= b->batCount); b->theap->dirty = true; /* maintain hash */ for (r = oldcnt, cnt = BATcount(b); b->thash && r < cnt; r++) { ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jul2021 - Make sure capacity is set.
Changeset: 65e54af926cf for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/65e54af926cf Modified Files: gdk/gdk_heap.c Branch: Jul2021 Log Message: Make sure capacity is set. diffs (12 lines): diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c --- a/gdk/gdk_heap.c +++ b/gdk/gdk_heap.c @@ -435,6 +435,8 @@ GDKupgradevarheap(BAT *b, var_t v, BUN c if (b->twidth == width) { if (newsize <= old->size) { /* nothing to do */ + if (cap > b->batCapacity) + BATsetcapacity(b, cap); return GDK_SUCCEED; } return BATextend(b, newsize >> shift); ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - adding some documentation for sqllogic multip...
Changeset: e73ba0cef16c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/e73ba0cef16c Modified Files: documentation/source/developers_handbook.rst Branch: default Log Message: adding some documentation for sqllogic multiple connections diffs (40 lines): diff --git a/documentation/source/developers_handbook.rst b/documentation/source/developers_handbook.rst --- a/documentation/source/developers_handbook.rst +++ b/documentation/source/developers_handbook.rst @@ -89,7 +89,35 @@ sqllogic protocol a bit further:: hash-threshold number halt -Alternatively ``.sql`` scripts can be converted to sqllogic tests (.test) with ``Mconvert.py``. +Consider the following single client connection example:: + +statement ok +create table foo(a int) + +statement ok +insert into foo values (1), (2), (3) + +query I rowsort +select sum(a) from foo + +6 + +, the same assertions could be made from multiple clients as follows:: + +statement ok +create table foo(a int) + +@connection(id=1, username=monetdb, password=monetdb) +statement ok +insert into foo values (1), (2), (3) + +@connection(id=2, username=monetdb, password=monetdb) +query I rowsort +select sum(a) from foo + +6 + +Alternatively existing ``.sql`` scripts can be converted to sqllogic tests (.test) with ``Mconvert.py``. For example:: $Mconvert.py --auto /Tests .sql ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jul2021 - Adding more test cases. The test is still right
Changeset: 6c1ea275668e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/6c1ea275668e Modified Files: sql/test/miscellaneous/Tests/transaction_isolation.SQL.py Branch: Jul2021 Log Message: Adding more test cases. The test is still right diffs (49 lines): diff --git a/sql/test/miscellaneous/Tests/transaction_isolation.SQL.py b/sql/test/miscellaneous/Tests/transaction_isolation.SQL.py --- a/sql/test/miscellaneous/Tests/transaction_isolation.SQL.py +++ b/sql/test/miscellaneous/Tests/transaction_isolation.SQL.py @@ -102,6 +102,45 @@ with SQLTestCase() as mdb1: mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(350,)]) mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(470,)]) +mdb1.execute("delete from integers where i between 131 and 140 or i < 91;").assertRowCount(80) # 121 - 130, 141 - 200, 121 - 130, 141 - 300, 121 - 130, 141 - 160 +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(270,)]) +mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(470,)]) +mdb1.execute("insert into integers (select value from generate_series(41,51,1));").assertRowCount(10) # 121 - 130, 141 - 200, 121 - 130, 141 - 300, 121 - 130, 141 - 160, 41 - 50 +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(280,)]) +mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(470,)]) +mdb1.execute("delete from integers where i > 99;").assertRowCount(270) # 41 - 50 +mdb1.execute('SELECT i FROM integers order by i;').assertDataResultMatch([(41,),(42,),(43,),(44,),(45,),(46,),(47,),(48,),(49,),(50,)]) +mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(470,)]) mdb1.execute('commit;').assertSucceeded() +mdb1.execute('SELECT i FROM integers order by i;').assertDataResultMatch([(41,),(42,),(43,),(44,),(45,),(46,),(47,),(48,),(49,),(50,)]) +mdb2.execute('SELECT i FROM integers order by i;').assertDataResultMatch([(41,),(42,),(43,),(44,),(45,),(46,),(47,),(48,),(49,),(50,)]) + +mdb1.execute('start transaction;').assertSucceeded() +mdb1.execute('TRUNCATE integers;').assertRowCount(10) +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(0,)]) +mdb2.execute('SELECT i FROM integers order by i;').assertDataResultMatch([(41,),(42,),(43,),(44,),(45,),(46,),(47,),(48,),(49,),(50,)]) +mdb1.execute("insert into integers (select value from generate_series(1,101,1));").assertRowCount(100) # 1 - 100 +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(100,)]) +mdb2.execute('SELECT i FROM integers order by i;').assertDataResultMatch([(41,),(42,),(43,),(44,),(45,),(46,),(47,),(48,),(49,),(50,)]) +mdb1.execute("insert into integers (select value from generate_series(1,31,1));").assertRowCount(30) # 1 - 100, 1 - 30 +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(130,)]) +mdb2.execute('SELECT i FROM integers order by i;').assertDataResultMatch([(41,),(42,),(43,),(44,),(45,),(46,),(47,),(48,),(49,),(50,)]) +mdb1.execute('DELETE FROM integers WHERE i between 11 and 20;').assertRowCount(20) # 1 - 10, 21 - 100, 1 - 10, 21 - 30 +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(110,)]) +mdb2.execute('SELECT i FROM integers order by i;').assertDataResultMatch([(41,),(42,),(43,),(44,),(45,),(46,),(47,),(48,),(49,),(50,)]) +mdb1.execute('DELETE FROM integers WHERE i between 1 and 10 or i between 91 and 100;').assertRowCount(30) # 21 - 90, 21 - 30 +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(80,)]) +mdb2.execute('SELECT i FROM integers order by i;').assertDataResultMatch([(41,),(42,),(43,),(44,),(45,),(46,),(47,),(48,),(49,),(50,)]) +mdb1.execute("insert into integers (select value from generate_series(1,11,1));").assertRowCount(10) # 21 - 90, 21 - 30, 1 - 10 +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(90,)]) +mdb2.execute('SELECT i FROM integers order by i;').assertDataResultMatch([(41,),(42,),(43,),(44,),(45,),(46,),(47,),(48,),(49,),(50,)]) +mdb1.execute("TRUNCATE integers;").assertRowCount(90) +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(0,)]) +mdb2.execute('SELECT i FROM integers order by i;').assertDataResultMatch([(41,),(42,),(43,),(44,),(45,),(46,),(47,),(48,),(49,),(50,)]) +mdb1.execute('commit;').assertSucceeded() + +mdb1.execute('SELECT i FROM integers;').assertDataResultMatch([]) +mdb2.execute('SELECT i FROM integers;').assertDataResultMatch([]) + mdb1.execute("drop table integers;") ___ checkin-list mailing list checkin-list@monetdb.org
MonetDB: default - fix connection decorator sqllogic
Changeset: 16d21fb46c01 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/16d21fb46c01 Modified Files: testing/sqllogictest.py Branch: default Log Message: fix connection decorator sqllogic diffs (23 lines): diff --git a/testing/sqllogictest.py b/testing/sqllogictest.py --- a/testing/sqllogictest.py +++ b/testing/sqllogictest.py @@ -571,8 +571,9 @@ class SQLLogic: '''parse strings like @connection(id=con1, ...) ''' res = dict() +s = s.strip() if not (s.startswith('@connection(') and s.endswith(')')): -self.raise_error('invalid connection string!') +self.raise_error(f'ERROR: invalid connection string {s}!') params = s[12:-1].split(',') for p in params: p = p.strip() @@ -610,7 +611,7 @@ class SQLLogic: conn = None # look for connection string if line.startswith('@connection'): -conn_params = parse_connection_string(line) +conn_params = self.parse_connection_string(line) conn = self.get_connection(conn_params.get('conn_id')) or self.add_connection(**conn_params) self.writeline(line) line = self.readline() ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jul2021 - Removed unused test. Concurrent `mclient` is...
Changeset: 88eebed58672 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/88eebed58672 Removed Files: sql/test/concurrent-stress.sh Branch: Jul2021 Log Message: Removed unused test. Concurrent `mclient` is already covered by other tests diffs (76 lines): diff --git a/sql/test/concurrent-stress.sh b/sql/test/concurrent-stress.sh deleted file mode 100755 --- a/sql/test/concurrent-stress.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env bash - -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# Copyright 1997 - July 2008 CWI, August 2008 - 2021 MonetDB B.V. - -# Run mclient with a variable number of concurrent connections for -# simple SELECT 1; queries. Disconnect after each query. Continue as -# long as the server can cope. -# This script intends to simulate a scenario as reported in bug #2700 - -do_usage() { - echo "usage: concurrent_stress.sh [database [host [port]]]" - exit 1 -} - -[[ -z $1 ]] && do_usage - -CONCURRENCY=$1 -shift -for v in MDATABASE:d MHOST:h MPORT:p ; do - [[ -z $1 ]] && break - eval ${v%:*}="-${v#*:}$1" - shift -done - -if ! type -P mclient > /dev/null ; then - echo "cannot find mclient in PATH!" > /dev/stderr - exit 1 -fi - -echo "invoking $CONCURRENCY runners using the command:" -echo " mclient $MDATABASE $MHOST $MPORT -ftab -s \"SELECT 1;\"" - -concurrent_runner() { - local num=$1 - local cnt=1 - local now=$SECONDS - local lcnt=0 - local elapse= - local t= - while mclient $MDATABASE $MHOST $MPORT -ftab -s "SELECT 1;" > /dev/null ; do - : $((cnt++)) - elapse=$((SECONDS - now)) - if [[ ${elapse} -ge 3 ]] ; then - t=$((cnt - lcnt)) - t=$((t * 100)) - t=$((t / elapse)) - echo "mclient $num executed query $cnt, current speed: ${t%??}.${t#${t%??}}q/s" - lcnt=${cnt} - now=$SECONDS - fi - done - echo "mclient $num terminated in query $cnt" -} - -FORKS= -for nr in $(seq 1 $CONCURRENCY) ; do - concurrent_runner $nr & - FORKS+=" $!" -done - -cleanup() { - kill $FORKS -} -trap cleanup TERM INT QUIT - -# wait for all children to end -wait $FORKS ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Oct2020 - Fix a bat leak.
Changeset: d944dfdea7b9 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/d944dfdea7b9 Modified Files: monetdb5/mal/mal_interpreter.c Branch: Oct2020 Log Message: Fix a bat leak. diffs (15 lines): 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 @@ -766,10 +766,7 @@ str runMALsequence(Client cntxt, MalBlkP } if (ret == MAL_SUCCEED && ii == pci->argc) { ret = runMALsequence(cntxt, pci->blk, 1, pci->blk->stop, nstk, stk, pci); - //garbageCollector(cntxt, pci->blk, nstk, 0); - for (ii = 0; ii < nstk->stktop; ii++) - if (ATOMextern(nstk->stk[ii].vtype)) - GDKfree(nstk->stk[ii].val.pval); + garbageCollector(cntxt, pci->blk, nstk, 0); arg = q->retc; for (ii = pci->retc; ii < pci->argc; ii++,arg++) { lhs = >stk[q->argv[arg]]; ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Oct2020 - Fix comparison.
Changeset: ace9edb47d1c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/ace9edb47d1c Modified Files: gdk/gdk_logger.c Branch: Oct2020 Log Message: Fix comparison. If we first skip freed bats with lid > save_id, we should then resubmit those same bats for the next try. diffs (12 lines): diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -3214,7 +3214,7 @@ bm_commit(logger *lg, lng save_id) BATloop(lg->freed, p, q) { lng lid = lids[p]; - if (lid < save_id && ( + if (lid > save_id && ( BUNappend(nfreed, bids+p, false) != GDK_SUCCEED || BUNappend(nfreed_lid, , false) != GDK_SUCCEED)) { logbat_destroy(n); ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Oct2020 - Fix up a comment.
Changeset: 9bbd66531873 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/9bbd66531873 Modified Files: gdk/gdk_bbp.c Branch: Oct2020 Log Message: Fix up a comment. diffs (12 lines): diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -3055,7 +3055,7 @@ do_backup(const char *srcdir, const char /* there is a situation where the move may fail, * namely if this heap was not supposed to be existing * before, i.e. after a BATmaterialize on a persistent -* bat as a workaround, do not complain about move +* bat; as a workaround, do not complain about move * failure if the source file is nonexistent */ if (mvret != GDK_SUCCEED && file_exists(h->farmid, srcdir, nme, ext)) { ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Oct2020 - Add some asserts.
Changeset: da186fecb9d2 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/da186fecb9d2 Modified Files: gdk/gdk_bbp.c gdk/gdk_select.c Branch: Oct2020 Log Message: Add some asserts. diffs (29 lines): diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -2403,7 +2403,12 @@ decref(bat i, bool logical, bool release if (lock) MT_lock_set((i)); if (releaseShare) { - --BBP_desc(i)->batSharecnt; + if (BBP_desc(i)->batSharecnt == 0) { + GDKerror("%s: %s does not have any shares.\n", func, BBPname(i)); + assert(0); + } else { + --BBP_desc(i)->batSharecnt; + } if (lock) MT_lock_unset((i)); return refs; diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c --- a/gdk/gdk_select.c +++ b/gdk/gdk_select.c @@ -36,6 +36,8 @@ virtualize(BAT *bn) (((bn->ttype == TYPE_void && !is_oid_nil(bn->tseqbase)) || bn->ttype == TYPE_oid) && bn->tkey && bn->tsorted)); + assert(BBP_refs(bn->batCacheid) == 1); + assert(BBP_lrefs(bn->batCacheid) == 0); /* since bn has unique and strictly ascending values, we can * easily check whether the column is dense */ if (bn && bn->ttype == TYPE_oid && ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jul2021 - use IS_VALID (not !IS_DELETED) for handling t...
Changeset: 789b96ab3237 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/789b96ab3237 Modified Files: sql/storage/bat/bat_storage.c Branch: Jul2021 Log Message: use IS_VALID (not !IS_DELETED) for handling the candidate bits the clear_table now limits segments used both for the total count and deleted count. diffs (89 lines): diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c --- a/sql/storage/bat/bat_storage.c +++ b/sql/storage/bat/bat_storage.c @@ -34,18 +34,30 @@ static int tc_gc_del( sql_store Store, s static int tr_merge_delta( sql_trans *tr, sql_delta *obat); +/* valid + * !deleted && VALID_4_READ(TS, tr)existing or newly created segment + * deleted && TS > tr->ts && OLDTS < tr->ts deleted after current transaction + */ + #define VALID_4_READ(TS,tr) \ (TS == tr->tid || (tr->parent && tr_version_of_parent(tr, TS)) || TS < tr->ts) +/* when changed, check if the old status is still valid */ +#define OLD_VALID_4_READ(TS,OLDTS,tr) \ + (OLDTS && TS != tr->tid && TS > tr->ts && OLDTS < tr->ts) + #define SEG_VALID_4_DELETE(seg,tr) \ (!seg->deleted && VALID_4_READ(seg->ts, tr)) +/* Delete (in current trans or by some other finised transaction, or re-used segment which used to be deleted */ #define SEG_IS_DELETED(seg,tr) \ - ((seg->deleted && VALID_4_READ(seg->ts, tr)) || \ -(!seg->deleted && seg->oldts && seg->ts != tr->tid && seg->ts > TRANSACTION_ID_BASE && seg->oldts < tr->ts)) - + ((seg->deleted && (VALID_4_READ(seg->ts, tr) || !OLD_VALID_4_READ(seg->ts, seg->oldts, tr))) || \ +(!seg->deleted && OLD_VALID_4_READ(seg->ts, seg->oldts, tr))) + +/* A segment is part of the current transaction is someway or is deleted by some other transaction but use to be valid */ #define SEG_IS_VALID(seg, tr) \ - (VALID_4_READ(seg->ts, tr) || (seg->deleted && seg->oldts && seg->ts > tr->ts && seg->oldts < tr->ts)) + ((!seg->deleted && VALID_4_READ(seg->ts, tr)) || \ +(seg->deleted && OLD_VALID_4_READ(seg->ts, seg->oldts, tr))) static void lock_table(sqlstore *store, sqlid id) @@ -129,7 +141,7 @@ split_segment(segments *segs, segment *o n->oldts = 0; if (o->ts == tr->tid) { - n->ts = 0; + n->ts = 1; n->deleted = true; } else { n->oldts = o->ts; @@ -499,6 +511,21 @@ count_inserts( segment *s, sql_trans *tr } static size_t +count_deletes_in_range( segment *s, sql_trans *tr, BUN start, BUN end) +{ + size_t cnt = 0; + + for(;s && s->end <= start; s = s->next) + ; + + for(;s && s->start < end; s = s->next) { + if (SEG_IS_DELETED(s, tr)) /* assume aligned s->end and end */ + cnt += s->end - s->start; + } + return cnt; +} + +static size_t count_deletes( segment *s, sql_trans *tr) { size_t cnt = 0; @@ -2322,7 +2349,9 @@ clear_table(sql_trans *tr, sql_table *t) sql_column *c = n->data; BUN sz = count_col(tr, c, 0); - sz -= count_del(tr, t, 0); + //sz -= count_del(tr, t, 0); + storage *d = tab_timestamp_storage(tr, t); + sz -= count_deletes_in_range(d->segs->h, tr, 0, sz); if ((clear_del(tr, t)) == BUN_NONE) return BUN_NONE; @@ -2988,7 +3017,7 @@ segments2cands(segment *s, sql_trans *tr continue; if (s->start >= end) break; - msk m = !(SEG_IS_DELETED(s, tr)); + msk m = (SEG_IS_VALID(s, tr)); size_t lnr = s->end-s->start; if (s->start < start) lnr -= (start - s->start); ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jul2021 - This count goes wrong. Client 2 sees uncommit...
Changeset: 7f63b61e5cd8 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/7f63b61e5cd8 Modified Files: sql/test/miscellaneous/Tests/transaction_isolation.SQL.py Branch: Jul2021 Log Message: This count goes wrong. Client 2 sees uncommitted changes of client 1 diffs (17 lines): diff --git a/sql/test/miscellaneous/Tests/transaction_isolation.SQL.py b/sql/test/miscellaneous/Tests/transaction_isolation.SQL.py --- a/sql/test/miscellaneous/Tests/transaction_isolation.SQL.py +++ b/sql/test/miscellaneous/Tests/transaction_isolation.SQL.py @@ -95,6 +95,13 @@ with SQLTestCase() as mdb1: mdb1.execute("delete from integers where i < 101;").assertRowCount(170) # 101 - 200, 101 - 300 mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(300,)]) mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(470,)]) +mdb1.execute("insert into integers (select value from generate_series(41,161,1));").assertRowCount(120) # 101 - 200, 101 - 300, 41 - 160 +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(420,)]) +mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(470,)]) +mdb1.execute("delete from integers where i between 91 and 120;").assertRowCount(70) # 121 - 200, 121 - 300, 41 - 90, 121 - 160 +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(350,)]) +mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(470,)]) + mdb1.execute('commit;').assertSucceeded() mdb1.execute("drop table integers;") ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jul2021 - small fix too the test
Changeset: 5219ad2daee2 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/5219ad2daee2 Modified Files: sql/test/miscellaneous/Tests/transaction_isolation.SQL.py Branch: Jul2021 Log Message: small fix too the test diffs (27 lines): diff --git a/sql/test/miscellaneous/Tests/transaction_isolation.SQL.py b/sql/test/miscellaneous/Tests/transaction_isolation.SQL.py --- a/sql/test/miscellaneous/Tests/transaction_isolation.SQL.py +++ b/sql/test/miscellaneous/Tests/transaction_isolation.SQL.py @@ -80,10 +80,10 @@ with SQLTestCase() as mdb1: mdb1.execute("insert into integers (select value from generate_series(1,201,1));").assertRowCount(200) # 1 - 20, 1 - 20, 1 - 200 mdb1.execute('start transaction;').assertSucceeded() -mdb1.execute("delete from integers where i < 21;").assertRowCount(60) # 1 - 180 +mdb1.execute("delete from integers where i < 21;").assertRowCount(60) # 21 - 200 mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(180,)]) mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(240,)]) -mdb1.execute("insert into integers (select value from generate_series(11,301,1));").assertRowCount(290) # 1 - 180, 11 - 300 +mdb1.execute("insert into integers (select value from generate_series(11,301,1));").assertRowCount(290) # 21 - 200, 11 - 300 mdb1.execute('commit;').assertSucceeded() mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(470,)]) @@ -92,8 +92,8 @@ with SQLTestCase() as mdb1: mdb1.execute('start transaction;').assertSucceeded() mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(470,)]) mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(470,)]) -mdb1.execute("delete from integers where i < 101;").assertRowCount(190) # 101 - 180, 101 - 300 -mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(280,)]) +mdb1.execute("delete from integers where i < 101;").assertRowCount(170) # 101 - 200, 101 - 300 +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(300,)]) mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(470,)]) mdb1.execute('commit;').assertSucceeded() ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - adding sqltest multiple connection example to...
Changeset: 930ea50bc9fc for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/930ea50bc9fc Modified Files: documentation/source/developers_handbook.rst Branch: default Log Message: adding sqltest multiple connection example to doc diffs (30 lines): diff --git a/documentation/source/developers_handbook.rst b/documentation/source/developers_handbook.rst --- a/documentation/source/developers_handbook.rst +++ b/documentation/source/developers_handbook.rst @@ -101,8 +101,8 @@ Python tests API We are using ``pymonetdb`` client in our testing infrastructure heavily. All .py tests needs to log errors in ``stderror`` -and exit abnormally if failure is present. To ease up writing testing scripts the ``SQLTestCase`` class from ``MonetDBtesting`` -module can be utilized. Following is an example of the ``SQLTestCase`` API:: +and exit abnormally if a failure is present. To ease up writing testing scripts the ``SQLTestCase`` class from ``MonetDBtesting`` +module can be utilized. Following is an example of the ``SQLTestCase`` API using single client:: from MonetDBtesting.sqltest import SQLTestCase @@ -117,4 +117,15 @@ module can be utilized. Following is an tc.execute('insert into foo values (888.42), (444.42);').assertSucceeded().assertRowCount(2) tc.execute('select * from foo;').assertSucceeded().assertDataResultMatch([(Decimal('888.42'),), (Decimal('444.42'),)]) +Similarly testing concurrent connections with multiple clients can be written as:: + +from MonetDBtesting.sqltest import SQLTestCase + +with SQLTestCase() as conn1: +with SQLTestCase() as conn2: +... +do something with conn1 +do something with conn2 + + For more examples check out tests in ``sql/test/Users/Tests``. ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jul2021 - Delete count mismatch
Changeset: 0359765d0bfa for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/0359765d0bfa Modified Files: sql/test/miscellaneous/Tests/transaction_isolation.SQL.py Branch: Jul2021 Log Message: Delete count mismatch diffs (55 lines): diff --git a/sql/test/miscellaneous/Tests/transaction_isolation.SQL.py b/sql/test/miscellaneous/Tests/transaction_isolation.SQL.py --- a/sql/test/miscellaneous/Tests/transaction_isolation.SQL.py +++ b/sql/test/miscellaneous/Tests/transaction_isolation.SQL.py @@ -50,4 +50,51 @@ with SQLTestCase() as mdb1: mdb1.execute('SELECT i FROM integers;').assertDataResultMatch([(4,),(7,)]) mdb2.execute('SELECT i FROM integers;').assertDataResultMatch([(4,),(7,)]) +mdb1.execute('TRUNCATE integers;').assertRowCount(2) +mdb1.execute("insert into integers (select value from generate_series(1,21,1));").assertRowCount(20) # 1 - 20 + +mdb1.execute('start transaction;').assertSucceeded() +mdb2.execute('start transaction;').assertSucceeded() +mdb1.execute("delete from integers where i % 5 <> 0;").assertRowCount(16) +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(4,)]) +mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(20,)]) +mdb1.execute("update integers set i = i + 1 where i % 2 = 0;").assertRowCount(2) +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(4,)]) +mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(20,)]) +mdb1.execute("insert into integers (select value from generate_series(1,11,1));").assertRowCount(10) +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(14,)]) +mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(20,)]) +mdb1.execute("delete from integers where i between 1 and 5;").assertRowCount(6) +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(8,)]) +mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(20,)]) +mdb1.execute('TRUNCATE integers;').assertRowCount(8) +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(0,)]) +mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(20,)]) +mdb1.execute('rollback;').assertSucceeded() +mdb2.execute('rollback;').assertSucceeded() + +mdb1.execute("insert into integers (select value from generate_series(1,21,1));").assertRowCount(20) # 1 - 20, 1 - 20 + +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(40,)]) +mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(40,)]) + +mdb1.execute("insert into integers (select value from generate_series(1,201,1));").assertRowCount(200) # 1 - 20, 1 - 20, 1 - 200 +mdb1.execute('start transaction;').assertSucceeded() +mdb1.execute("delete from integers where i < 21;").assertRowCount(60) # 1 - 180 +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(180,)]) +mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(240,)]) +mdb1.execute("insert into integers (select value from generate_series(11,301,1));").assertRowCount(290) # 1 - 180, 11 - 300 +mdb1.execute('commit;').assertSucceeded() + +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(470,)]) +mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(470,)]) + +mdb1.execute('start transaction;').assertSucceeded() +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(470,)]) +mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(470,)]) +mdb1.execute("delete from integers where i < 101;").assertRowCount(190) # 101 - 180, 101 - 300 +mdb1.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(280,)]) +mdb2.execute('SELECT count(*) FROM integers;').assertDataResultMatch([(470,)]) +mdb1.execute('commit;').assertSucceeded() + mdb1.execute("drop table integers;") ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Oct2020 - Typo.
Changeset: 5bddde10a5be for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/5bddde10a5be Modified Files: clients/odbc/ChangeLog.Oct2020 Branch: Oct2020 Log Message: Typo. diffs (10 lines): diff --git a/clients/odbc/ChangeLog.Oct2020 b/clients/odbc/ChangeLog.Oct2020 --- a/clients/odbc/ChangeLog.Oct2020 +++ b/clients/odbc/ChangeLog.Oct2020 @@ -1,3 +1,6 @@ # ChangeLog file for odbc # This file is updated with Maddlog +* Fri May 7 2021 Sjoerd Mullender +- A typo that made the SQLSpecialColumns function unusable was fixed. + ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: pushcands - Merged with default
Changeset: 2ea1d8f39502 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/2ea1d8f39502 Modified Files: clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 sql/backends/monet5/rel_bin.c sql/backends/monet5/sql.c sql/server/rel_optimizer.c Branch: pushcands Log Message: Merged with default diffs (truncated from 1482 to 300 lines): diff --git a/clients/Tests/MAL-signatures.stable.out b/clients/Tests/MAL-signatures.stable.out --- a/clients/Tests/MAL-signatures.stable.out +++ b/clients/Tests/MAL-signatures.stable.out @@ -7961,7 +7961,7 @@ stdout of test 'MAL-signatures` in direc [ "sql", "droporderindex", "unsafe pattern sql.droporderindex(X_0:str, X_1:str, X_2:str):void ", "sql_droporderindex;", "" ] [ "sql", "dump_cache", "pattern sql.dump_cache() (X_0:bat[:str], X_1:bat[:int]) ", "dump_cache;", "" ] [ "sql", "dump_opt_stats", "pattern sql.dump_opt_stats() (X_0:bat[:str], X_1:bat[:int]) ", "dump_opt_stats;", "" ] -[ "sql", "dump_trace", "pattern sql.dump_trace() (X_0:bat[:lng], X_1:bat[:str]) ", "dump_trace;", "" ] +[ "sql", "dump_trace", "pattern sql.dump_trace() (X_0:bat[:lng], X_1:bat[:str], X_2:bat[:str]) ", "dump_trace;", "" ] [ "sql", "emptybind","pattern sql.emptybind(X_0:int, X_1:str, X_2:str, X_3:str, X_4:int) (X_5:bat[:oid], X_6:bat[:any_1]) ", "mvc_bind_wrap;", "" ] [ "sql", "emptybind","pattern sql.emptybind(X_0:int, X_1:str, X_2:str, X_3:str, X_4:int):bat[:any_1] ", "mvc_bind_wrap;", "" ] [ "sql", "emptybind","pattern sql.emptybind(X_0:int, X_1:str, X_2:str, X_3:str, X_4:int, X_5:int, X_6:int) (X_7:bat[:oid], X_8:bat[:any_1]) ", "mvc_bind_wrap;", "" ] diff --git a/clients/Tests/MAL-signatures.stable.out.int128 b/clients/Tests/MAL-signatures.stable.out.int128 --- a/clients/Tests/MAL-signatures.stable.out.int128 +++ b/clients/Tests/MAL-signatures.stable.out.int128 @@ -10863,7 +10863,7 @@ stdout of test 'MAL-signatures` in direc [ "sql", "droporderindex", "unsafe pattern sql.droporderindex(X_0:str, X_1:str, X_2:str):void ", "sql_droporderindex;", "" ] [ "sql", "dump_cache", "pattern sql.dump_cache() (X_0:bat[:str], X_1:bat[:int]) ", "dump_cache;", "" ] [ "sql", "dump_opt_stats", "pattern sql.dump_opt_stats() (X_0:bat[:str], X_1:bat[:int]) ", "dump_opt_stats;", "" ] -[ "sql", "dump_trace", "pattern sql.dump_trace() (X_0:bat[:lng], X_1:bat[:str]) ", "dump_trace;", "" ] +[ "sql", "dump_trace", "pattern sql.dump_trace() (X_0:bat[:lng], X_1:bat[:str], X_2:bat[:str]) ", "dump_trace;", "" ] [ "sql", "emptybind","pattern sql.emptybind(X_0:int, X_1:str, X_2:str, X_3:str, X_4:int) (X_5:bat[:oid], X_6:bat[:any_1]) ", "mvc_bind_wrap;", "" ] [ "sql", "emptybind","pattern sql.emptybind(X_0:int, X_1:str, X_2:str, X_3:str, X_4:int):bat[:any_1] ", "mvc_bind_wrap;", "" ] [ "sql", "emptybind","pattern sql.emptybind(X_0:int, X_1:str, X_2:str, X_3:str, X_4:int, X_5:int, X_6:int) (X_7:bat[:oid], X_8:bat[:any_1]) ", "mvc_bind_wrap;", "" ] diff --git a/clients/odbc/driver/SQLSpecialColumns.c b/clients/odbc/driver/SQLSpecialColumns.c --- a/clients/odbc/driver/SQLSpecialColumns.c +++ b/clients/odbc/driver/SQLSpecialColumns.c @@ -221,7 +221,7 @@ MNDBSpecialColumns(ODBCStmt *stmt, "sys.tables t, " "sys.columns c, " "sys.keys k, " - "sys.objects kc" + "sys.objects kc " "where s.id = t.schema_id and " "t.id = c.table_id and " "t.id = k.table_id and " diff --git a/ctest/tools/monetdbe/CMakeLists.txt b/ctest/tools/monetdbe/CMakeLists.txt --- a/ctest/tools/monetdbe/CMakeLists.txt +++ b/ctest/tools/monetdbe/CMakeLists.txt @@ -85,7 +85,6 @@ target_link_libraries(example_proxy PRIVATE monetdb_config_header monetdbe) -add_test(run_example_proxy example_proxy) if(WITH_CMOCKA) add_executable(cmocka_test cmocka_test.c test_helper.c) diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c --- a/gdk/gdk_join.c +++ b/gdk/gdk_join.c @@ -4016,13 +4016,15 @@ BATjoin(BAT **r1p, BAT **r2p, BAT *l, BA if ((parent = VIEWtparent(l)) != 0) { BAT *b = BBPdescriptor(parent); if (l->hseqbase == b->hseqbase && - BATcount(l) == BATcount(b)) + BATcount(l) == BATcount(b) && + ATOMtype(l->ttype) == ATOMtype(b->ttype)) l = b; } if ((parent = VIEWtparent(r)) != 0) { BAT *b = BBPdescriptor(parent); if
MonetDB: pushcands - Preparing the merge
Changeset: 3c3f3713eb93 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/3c3f3713eb93 Added Files: sql/test/SQLancer/Tests/sqlancer16.test Removed Files: sql/test/SQLancer/Tests/sqlancer15.test Modified Files: sql/test/SQLancer/Tests/All Branch: pushcands Log Message: Preparing the merge diffs (11 lines): diff --git a/sql/test/SQLancer/Tests/All b/sql/test/SQLancer/Tests/All --- a/sql/test/SQLancer/Tests/All +++ b/sql/test/SQLancer/Tests/All @@ -13,3 +13,4 @@ sqlancer12 sqlancer13 sqlancer14 sqlancer15 +sqlancer16 diff --git a/sql/test/SQLancer/Tests/sqlancer15.test b/sql/test/SQLancer/Tests/sqlancer16.test rename from sql/test/SQLancer/Tests/sqlancer15.test rename to sql/test/SQLancer/Tests/sqlancer16.test ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - Merged again with Jul2021 (I messed it up I k...
Changeset: cf816a9ad544 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/cf816a9ad544 Branch: default Log Message: Merged again with Jul2021 (I messed it up I know) diffs (32 lines): diff --git a/clients/odbc/driver/SQLSpecialColumns.c b/clients/odbc/driver/SQLSpecialColumns.c --- a/clients/odbc/driver/SQLSpecialColumns.c +++ b/clients/odbc/driver/SQLSpecialColumns.c @@ -221,7 +221,7 @@ MNDBSpecialColumns(ODBCStmt *stmt, "sys.tables t, " "sys.columns c, " "sys.keys k, " - "sys.objects kc" + "sys.objects kc " "where s.id = t.schema_id and " "t.id = c.table_id and " "t.id = k.table_id and " diff --git a/sql/test/prepare/Tests/sqlancer_prepare.stable.out b/sql/test/prepare/Tests/sqlancer_prepare.stable.out --- a/sql/test/prepare/Tests/sqlancer_prepare.stable.out +++ b/sql/test/prepare/Tests/sqlancer_prepare.stable.out @@ -131,14 +131,14 @@ % .prepare,.prepare, .prepare, .prepare, .prepare, .prepare # table_name % type,digits, scale, schema, table, column # name % varchar, int,int,str,str,str # type -% 7, 2, 1, 0, 2, 2 # length +% 7, 2, 1, 0, 3, 3 # length [ "boolean", 1, 0, "", "%11", "%11" ] [ "decimal", 16, 6, NULL, NULL, NULL] #PREPARE SELECT "quarter"(date '2021-01-02') IN ("second"(TIME '01:00:00'), (select ? where true)); % .prepare,.prepare, .prepare, .prepare, .prepare, .prepare # table_name % type,digits, scale, schema, table, column # name % varchar, int,int,str,str,str # type -% 7, 2, 1, 0, 2, 2 # length +% 7, 2, 1, 0, 3, 3 # length [ "boolean", 1, 0, "", "%11", "%11" ] [ "decimal", 16, 6, NULL, NULL, NULL] ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jul2021 - Approved no-int128 output
Changeset: d9dee2cc2155 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/d9dee2cc2155 Modified Files: sql/test/prepare/Tests/sqlancer_prepare.stable.out Branch: Jul2021 Log Message: Approved no-int128 output diffs (20 lines): diff --git a/sql/test/prepare/Tests/sqlancer_prepare.stable.out b/sql/test/prepare/Tests/sqlancer_prepare.stable.out --- a/sql/test/prepare/Tests/sqlancer_prepare.stable.out +++ b/sql/test/prepare/Tests/sqlancer_prepare.stable.out @@ -131,14 +131,14 @@ % .prepare,.prepare, .prepare, .prepare, .prepare, .prepare # table_name % type,digits, scale, schema, table, column # name % varchar, int,int,str,str,str # type -% 7, 2, 1, 0, 2, 2 # length +% 7, 2, 1, 0, 3, 3 # length [ "boolean", 1, 0, "", "%11", "%11" ] [ "decimal", 16, 6, NULL, NULL, NULL] #PREPARE SELECT "quarter"(date '2021-01-02') IN ("second"(TIME '01:00:00'), (select ? where true)); % .prepare,.prepare, .prepare, .prepare, .prepare, .prepare # table_name % type,digits, scale, schema, table, column # name % varchar, int,int,str,str,str # type -% 7, 2, 1, 0, 2, 2 # length +% 7, 2, 1, 0, 3, 3 # length [ "boolean", 1, 0, "", "%11", "%11" ] [ "decimal", 16, 6, NULL, NULL, NULL] ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jul2021 - Merged with Oct2020
Changeset: 5c344f0668e5 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/5c344f0668e5 Branch: Jul2021 Log Message: Merged with Oct2020 diffs (12 lines): diff --git a/clients/odbc/driver/SQLSpecialColumns.c b/clients/odbc/driver/SQLSpecialColumns.c --- a/clients/odbc/driver/SQLSpecialColumns.c +++ b/clients/odbc/driver/SQLSpecialColumns.c @@ -221,7 +221,7 @@ MNDBSpecialColumns(ODBCStmt *stmt, "sys.tables t, " "sys.columns c, " "sys.keys k, " - "sys.objects kc" + "sys.objects kc " "where s.id = t.schema_id and " "t.id = c.table_id and " "t.id = k.table_id and " ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - Merged with Jul2021
Changeset: 1c21fb27d410 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/1c21fb27d410 Modified Files: gdk/gdk_join.c Branch: default Log Message: Merged with Jul2021 diffs (truncated from 973 to 300 lines): diff --git a/ctest/tools/monetdbe/CMakeLists.txt b/ctest/tools/monetdbe/CMakeLists.txt --- a/ctest/tools/monetdbe/CMakeLists.txt +++ b/ctest/tools/monetdbe/CMakeLists.txt @@ -85,7 +85,6 @@ target_link_libraries(example_proxy PRIVATE monetdb_config_header monetdbe) -add_test(run_example_proxy example_proxy) if(WITH_CMOCKA) add_executable(cmocka_test cmocka_test.c test_helper.c) diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c --- a/gdk/gdk_join.c +++ b/gdk/gdk_join.c @@ -4016,13 +4016,15 @@ BATjoin(BAT **r1p, BAT **r2p, BAT *l, BA if ((parent = VIEWtparent(l)) != 0) { BAT *b = BBPdescriptor(parent); if (l->hseqbase == b->hseqbase && - BATcount(l) == BATcount(b)) + BATcount(l) == BATcount(b) && + ATOMtype(l->ttype) == ATOMtype(b->ttype)) l = b; } if ((parent = VIEWtparent(r)) != 0) { BAT *b = BBPdescriptor(parent); if (r->hseqbase == b->hseqbase && - BATcount(r) == BATcount(b)) + BATcount(r) == BATcount(b) && + ATOMtype(r->ttype) == ATOMtype(b->ttype)) r = b; } diff --git a/gdk/gdk_project.c b/gdk/gdk_project.c --- a/gdk/gdk_project.c +++ b/gdk/gdk_project.c @@ -45,6 +45,7 @@ project1_##TYPE(BAT *restrict bn, BAT *r for (lo = 0, hi = BATcount(l); lo < hi; lo++) \ bt[lo] = r1t[lo]; \ } else {\ + assert(l->ttype);\ const oid *restrict ot = (const oid *) Tloc(l, 0); \ for (lo = 0, hi = BATcount(l); lo < hi; lo++) { \ oid o = ot[lo]; \ @@ -85,7 +86,8 @@ project_##TYPE(BAT *restrict bn, BAT *re oid r1seq, r1end; \ oid r2seq, r2end; \ \ - if ((!ci || ci->tpe == cand_dense) && l->tnonil && !r2) \ + if ((!ci || (ci->tpe == cand_dense && BATtdense(l))) && \ +l->tnonil && r1->ttype && !BATtdense(r1) && !r2) \ return project1_##TYPE(bn, l, r1); \ MT_thread_setalgorithm(__func__); \ r1t = (const TYPE *) Tloc(r1, 0); \ @@ -173,7 +175,7 @@ project_oid(BAT *restrict bn, BAT *restr const oid *restrict r2t = NULL; struct canditer r1ci = {0}, r2ci = {0}; - if ((!lci || lci->tpe == cand_dense) && r1->ttype && !BATtdense(r1) && !r2) { + if ((!lci || (lci->tpe == cand_dense && BATtdense(l))) && r1->ttype && !BATtdense(r1) && !r2) { if (sizeof(oid) == sizeof(lng)) return project1_lng(bn, l, r1); else diff --git a/monetdb5/optimizer/opt_mitosis.c b/monetdb5/optimizer/opt_mitosis.c --- a/monetdb5/optimizer/opt_mitosis.c +++ b/monetdb5/optimizer/opt_mitosis.c @@ -94,10 +94,13 @@ OPTmitosisImplementation(Client cntxt, M } /* locate the largest non-partitioned table */ - if (getModuleId(p) != sqlRef || (getFunctionId(p) != bindRef && getFunctionId(p) != bindidxRef)) + if (getModuleId(p) != sqlRef || + (getFunctionId(p) != bindRef && +getFunctionId(p) != bindidxRef && +getFunctionId(p) != tidRef)) continue; /* don't split insert BATs */ - if (getVarConstant(mb, getArg(p, 5)).val.ival == 1) + if (p->argc > 5 && getVarConstant(mb, getArg(p, 5)).val.ival == 1) continue; if (p->argc > 6) continue; /* already partitioned */ diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c --- a/sql/backends/monet5/rel_bin.c +++ b/sql/backends/monet5/rel_bin.c @@ -2778,11 +2778,11 @@ rel2bin_antijoin(backend *be, sql_rel *r assert(list_length(mexps) == 1); for( en = mexps->h; en; en = en->next ) { sql_exp *e = en->data; - stmt *ls = exp_bin(be, e->l, left, right, NULL, NULL, NULL, NULL, 0, 1, 0), *rs; + stmt *ls = exp_bin(be, e->l, left, right, NULL, NULL, NULL, NULL, 1, 0, 0), *rs; if (!ls) return NULL; - if (!(rs =