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