Changeset: 1c94812f26f6 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1c94812f26f6 Added Files: sql/test/BugTracker-2015/Tests/acidity2-fail.Bug-3635.SQL.py Modified Files: sql/storage/bat/bat_storage.c sql/storage/store.c sql/test/BugTracker-2015/Tests/All Branch: Oct2014 Log Message:
make sure we reset the cleared flag also on failed transactions (fixes Bug 3635 part 2) diffs (99 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 @@ -1407,7 +1407,10 @@ empty_col(sql_column *c) assert(c->data && c->base.allocated && bat->bid == 0); bat->bid = bat->ibid; bat->ibid = e_bat(type); - bat->ibase = BATcount(BBPquickdesc(bat->bid, 0)); + bat->ibase = 0; + bat->cnt = BATcount(BBPquickdesc(bat->bid, 0)); + bat->ucnt = 0; + if (bat->bid == bat->ibid) bat->bid = copyBat(bat->ibid, type, 0); @@ -1439,7 +1442,10 @@ empty_idx(sql_idx *i) assert(i->data && i->base.allocated && bat->bid == 0); bat->bid = bat->ibid; bat->ibid = e_bat(type); - bat->ibase = BATcount(BBPquickdesc(bat->bid, 0)); + bat->ibase = 0; + bat->cnt = BATcount(BBPquickdesc(bat->bid, 0)); + bat->ucnt = 0; + if (bat->bid == bat->ibid) bat->bid = copyBat(bat->ibid, type, 0); diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -3066,6 +3066,7 @@ reset_table(sql_trans *tr, sql_table *ft store_funcs.destroy_del(NULL, ft); ft->base.wtime = ft->base.rtime = 0; + ft->cleared = 0; ok = reset_changeset( tr, &ft->columns, &pft->columns, &ft->base, (resetf) &reset_column, (dupfunc) &column_dup); if (ok == LOG_OK) ok = reset_changeset( tr, &ft->tables, &pft->tables, &ft->base, (resetf) NULL, (dupfunc) &table_find); diff --git a/sql/test/BugTracker-2015/Tests/All b/sql/test/BugTracker-2015/Tests/All --- a/sql/test/BugTracker-2015/Tests/All +++ b/sql/test/BugTracker-2015/Tests/All @@ -3,3 +3,4 @@ sharp-alias.Bug-3467 name_conflict.Bug-3650 prepare_unop_crash.Bug-3653 and_or_in.Bug-3655 +acidity2-fail.Bug-3635 diff --git a/sql/test/BugTracker-2015/Tests/acidity2-fail.Bug-3635.SQL.py b/sql/test/BugTracker-2015/Tests/acidity2-fail.Bug-3635.SQL.py new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2015/Tests/acidity2-fail.Bug-3635.SQL.py @@ -0,0 +1,48 @@ +try: + from MonetDBtesting import process +except ImportError: + import process + +import sys, time, monetdb.sql, os + +def connect(autocommit): + return monetdb.sql.connect(database = os.getenv('TSTDB'), + hostname = '127.0.0.1', + port = int(os.getenv('MAPIPORT')), + username = 'monetdb', + password = 'monetdb', + autocommit = autocommit) + +def query(conn, sql): + cur = conn.cursor() + cur.execute(sql) + r = cur.fetchall() + cur.close() + return r + +def run(conn, sql): + print sql + r = conn.execute(sql) + +# boring setup and schema creation stuff: +c1 = connect(True) +run(c1, 'create table foo (a int)') +run(c1, 'insert into foo values (1),(2),(3)') +run(c1, 'create view bar as select * from foo') + +c2 = connect(True) +run(c1, 'start transaction') +run(c1, 'delete from foo') +run(c1, 'drop view bar') +run(c1, 'create view bar as select * from foo') +run(c2, 'create table baz (a int);drop table baz') +try: + run(c1, 'commit') + print "shouldn't get here" +except monetdb.exceptions.OperationalError: + print "commit failed" + pass + +run(c1, 'insert into foo values (4),(5),(6)') # SIGABRT here +run(c1, 'drop view bar') +run(c1, 'drop table foo') _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list