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

Reply via email to