Changeset: 6aaea4bc569c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6aaea4bc569c
Modified Files:
        sql/storage/store.c
        sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py
Branch: iso
Log Message:

More crude protection for merge tables and changing schemas


diffs (36 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -4607,6 +4607,8 @@ sql_trans_add_table(sql_trans *tr, sql_t
        int res = 0;
        sql_table *dup = NULL;
 
+       if (os_has_changes(mt->s->parts, tr)) /* for inserts disallow 
concurrent transactions */
+               return -2;
        /* merge table depends on part table */
        if ((res = sql_trans_create_dependency(tr, pt->base.id, mt->base.id, 
TABLE_DEPENDENCY)))
                return res;
@@ -4933,6 +4935,8 @@ sql_trans_set_table_schema(sql_trans *tr
        oid rid;
        int res = 0;
 
+       if (os_has_changes(os->parts, tr)) /* because of merge tables disallow 
if there are changes there */
+               return -2;
        rid = store->table_api.column_find_row(tr, find_sql_column(systable, 
"id"), &t->base.id, NULL);
        assert(!is_oid_nil(rid));
        if ((res = store->table_api.column_update_value(tr, 
find_sql_column(systable, "schema_id"), rid, &(ns->base.id))))
diff --git a/sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py 
b/sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py
--- a/sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py
+++ b/sql/test/miscellaneous/Tests/transaction_isolation3.SQL.py
@@ -26,9 +26,9 @@ with SQLTestCase() as mdb1:
         mdb1.execute('start transaction;').assertSucceeded()
         mdb2.execute('start transaction;').assertSucceeded()
         mdb1.execute("ALTER TABLE parent1 ADD TABLE child1 AS PARTITION FROM 
'1' TO '2';").assertSucceeded() # these merge tables are very difficult, maybe 
allow only 1 transaction on the system?
-        mdb2.execute("alter table child1 set schema ups;").assertSucceeded()
+        mdb2.execute("alter table child1 set schema 
ups;").assertFailed(err_code="42000", err_message="ALTER TABLE: transaction 
conflict detected")
         mdb1.execute('commit;').assertSucceeded()
-        mdb2.execute('commit;').assertFailed(err_code="40000", 
err_message="COMMIT: transaction is aborted because of concurrency conflicts, 
will ROLLBACK instead")
+        mdb2.execute('rollback;').assertSucceeded()
 
         mdb1.execute('create merge table parent2(a int) PARTITION BY RANGE ON 
(a);').assertSucceeded()
         mdb1.execute('create table child2(c int);').assertSucceeded()
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to