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