Changeset: 0f775583462c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/0f775583462c
Modified Files:
        sql/storage/store.c
        sql/test/BugTracker-2021/Tests/concurrent-add-column.Bug-7196.SQL.py
Branch: Jul2021
Log Message:

an insert on a just removed column (in a concurrent but finished transaction) 
should fail to commit.


diffs (35 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -5883,6 +5883,8 @@ sql_trans_drop_column(sql_trans *tr, sql
 
        if (!isNew(col) && (res = sql_trans_add_dependency_change(tr, 
col->t->base.id, ddl)))
                return res;
+       if (!isNew(col) && isGlobal(col->t) && !isGlobalTemp(col->t) && (res = 
sql_trans_add_dependency(tr, col->t->base.id, dml)))
+               return res;
        if ((res = sys_drop_column(tr, col, drop_action)))
                return res;
 
@@ -6520,6 +6522,10 @@ sql_trans_drop_idx(sql_trans *tr, sql_sc
                list_append(tr->dropped, local_id);
        }
 
+       if (!isNew(i) && (res = sql_trans_add_dependency_change(tr, 
i->t->base.id, ddl)))
+               return res;
+       if (!isNew(i) && isGlobal(i->t) && !isGlobalTemp(i->t) && (res = 
sql_trans_add_dependency(tr, i->t->base.id, dml)))
+               return res;
        if (!isTempTable(i->t) && (res = sys_drop_idx(tr, i, drop_action)))
                return res;
 
diff --git 
a/sql/test/BugTracker-2021/Tests/concurrent-add-column.Bug-7196.SQL.py 
b/sql/test/BugTracker-2021/Tests/concurrent-add-column.Bug-7196.SQL.py
--- a/sql/test/BugTracker-2021/Tests/concurrent-add-column.Bug-7196.SQL.py
+++ b/sql/test/BugTracker-2021/Tests/concurrent-add-column.Bug-7196.SQL.py
@@ -22,7 +22,7 @@ with SQLTestCase() as mdb1:
         mdb1.execute('alter table test drop column data;').assertSucceeded()
         mdb2.execute("insert into test values (3,4);").assertSucceeded()
         mdb1.execute('commit;').assertSucceeded()
-        mdb2.execute('commit;').assertSucceeded()
+        mdb2.execute('commit;').assertFailed(err_code="40000", 
err_message="COMMIT: transaction is aborted because of concurrency conflicts, 
will ROLLBACK instead")
 
         mdb1.execute('select * from test;').assertDataResultMatch([(1,),(3,)])
         mdb2.execute('select * from test;').assertDataResultMatch([(1,),(3,)])
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to