Changeset: 247b9617369d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/247b9617369d
Modified Files:
        sql/storage/store.c
        sql/test/transactions/Tests/transaction_isolation4.SQL.py
        sql/test/transactions/Tests/transaction_isolation5.SQL.py
Branch: Jul2021
Log Message:

Don't be so restrictive on part sets. The dependencies cover duplicate 
additions to merge tables


diffs (84 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -1049,7 +1049,7 @@ load_schema(sql_trans *tr, res_table *rt
                s->keys = os_new(tr->sa, (destroy_fptr) &key_destroy, false, 
true, true, store);
                s->idxs = os_new(tr->sa, (destroy_fptr) &idx_destroy, false, 
true, true, store);
                s->triggers = os_new(tr->sa, (destroy_fptr) &trigger_destroy, 
false, true, true, store);
-               s->parts = os_new(tr->sa, (destroy_fptr) &part_destroy, false, 
false, false, store);
+               s->parts = os_new(tr->sa, (destroy_fptr) &part_destroy, false, 
false, true, store);
        }
 
        TRC_DEBUG(SQL_STORE, "Load schema: %s %d\n", s->base.name, s->base.id);
@@ -1668,7 +1668,7 @@ bootstrap_create_schema(sql_trans *tr, c
        s->keys = os_new(tr->sa, (destroy_fptr) &key_destroy, false, true, 
true, store);
        s->idxs = os_new(tr->sa, (destroy_fptr) &idx_destroy, false, true, 
true, store);
        s->triggers = os_new(tr->sa, (destroy_fptr) &trigger_destroy, false, 
true, true, store);
-       s->parts = os_new(tr->sa, (destroy_fptr) &part_destroy, false, false, 
false, store);
+       s->parts = os_new(tr->sa, (destroy_fptr) &part_destroy, false, false, 
true, store);
        if (os_add(tr->cat->schemas, tr, s->base.name, &s->base)) {
                return NULL;
        }
@@ -3538,7 +3538,7 @@ schema_dup(sql_trans *tr, sql_schema *s,
        ns->keys = os_new(tr->sa, (destroy_fptr) &key_destroy, isTempSchema(s), 
true, true, store);
        ns->idxs = os_new(tr->sa, (destroy_fptr) &idx_destroy, isTempSchema(s), 
true, true, store);
        ns->triggers = os_new(tr->sa, (destroy_fptr) &trigger_destroy, 
isTempSchema(s), true, true, store);
-       ns->parts = os_new(tr->sa, (destroy_fptr) &part_destroy, 
isTempSchema(s), false, false, store);
+       ns->parts = os_new(tr->sa, (destroy_fptr) &part_destroy, 
isTempSchema(s), false, true, store);
 
        /* table_dup will dup keys, idxs, triggers and parts */
        struct os_iter oi;
@@ -4784,7 +4784,7 @@ sql_trans_create_schema(sql_trans *tr, c
        s->keys = os_new(tr->sa, (destroy_fptr) &key_destroy, isTempSchema(s), 
true, true, store);
        s->idxs = os_new(tr->sa, (destroy_fptr) &idx_destroy, isTempSchema(s), 
true, true, store);
        s->triggers = os_new(tr->sa, (destroy_fptr) &trigger_destroy, 
isTempSchema(s), true, true, store);
-       s->parts = os_new(tr->sa, (destroy_fptr) &part_destroy, 
isTempSchema(s), false, false, store);
+       s->parts = os_new(tr->sa, (destroy_fptr) &part_destroy, 
isTempSchema(s), false, true, store);
        s->store = tr->store;
 
        if (store->table_api.table_insert(tr, sysschema, &s->base.id, 
&s->base.name, &s->auth_id, &s->owner, &s->system)) {
diff --git a/sql/test/transactions/Tests/transaction_isolation4.SQL.py 
b/sql/test/transactions/Tests/transaction_isolation4.SQL.py
--- a/sql/test/transactions/Tests/transaction_isolation4.SQL.py
+++ b/sql/test/transactions/Tests/transaction_isolation4.SQL.py
@@ -132,9 +132,9 @@ with SQLTestCase() as mdb1:
         mdb1.execute('start transaction;').assertSucceeded()
         mdb2.execute('start transaction;').assertSucceeded()
         mdb1.execute("ALTER TABLE parent9 ADD TABLE 
parent10;").assertSucceeded()
-        mdb2.execute("ALTER TABLE parent10 ADD TABLE 
parent9;").assertFailed(err_code="42000", err_message="ALTER TABLE: transaction 
conflict detected")
+        mdb2.execute("ALTER TABLE parent10 ADD TABLE 
parent9;").assertSucceeded()
         mdb1.execute('commit;').assertSucceeded()
-        mdb2.execute('rollback;').assertSucceeded()
+        mdb2.execute('commit;').assertFailed(err_code="40000", 
err_message="COMMIT: transaction is aborted because of concurrency conflicts, 
will ROLLBACK instead")
 
         mdb1.execute('start transaction;').assertSucceeded()
         mdb1.execute('drop table myt;').assertSucceeded()
diff --git a/sql/test/transactions/Tests/transaction_isolation5.SQL.py 
b/sql/test/transactions/Tests/transaction_isolation5.SQL.py
--- a/sql/test/transactions/Tests/transaction_isolation5.SQL.py
+++ b/sql/test/transactions/Tests/transaction_isolation5.SQL.py
@@ -17,3 +17,26 @@ with SQLTestCase() as mdb1:
     mdb1.execute('SET SCHEMA ups2;').assertSucceeded()
     mdb1.execute('RELEASE SAVEPOINT mys2;').assertSucceeded()
     mdb1.execute('rollback;').assertFailed()
+
+with SQLTestCase() as mdb1:
+    with SQLTestCase() as mdb2:
+        mdb1.connect(username="monetdb", password="monetdb")
+        mdb2.connect(username="monetdb", password="monetdb")
+
+        mdb1.execute('create table child1(a int);').assertSucceeded()
+        mdb1.execute('create table child2(a int);').assertSucceeded()
+        mdb1.execute('create table child3(a int);').assertSucceeded()
+
+        mdb1.execute('start transaction;').assertSucceeded()
+        mdb2.execute('start transaction;').assertSucceeded()
+        mdb1.execute('create merge table parent1(a int);').assertSucceeded()
+        mdb1.execute('alter table parent1 add table child1;').assertSucceeded()
+        mdb2.execute("insert into child1 values (1);").assertSucceeded()
+        mdb1.execute('commit;').assertSucceeded()
+        mdb2.execute('commit;').assertSucceeded()
+
+        mdb1.execute('start transaction;').assertSucceeded()
+        mdb1.execute('alter table parent1 drop table 
child1;').assertSucceeded()
+        mdb1.execute('drop table parent1;').assertSucceeded()
+        mdb1.execute('drop table child1;').assertSucceeded()
+        mdb1.execute('commit;').assertSucceeded()
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to