Changeset: a7c5d7216d0f for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/a7c5d7216d0f Added Files: sql/test/BugTracker-2022/Tests/All sql/test/BugTracker-2022/Tests/SingleServer sql/test/BugTracker-2022/Tests/transaction-conflict.Bug-7228.test Modified Files: sql/storage/store.c Branch: Jul2021 Log Message:
Fix for bug #7228 Check for conflict on dependency changes only if dependencies committed after the transaction started diffs (91 lines): diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -3749,7 +3749,8 @@ transaction_check_dependencies_and_remov for (; he && ok == LOG_OK; he = he->chain) { sql_dependency_change *schange = (sql_dependency_change*) he->value; - if (lchange->objid == schange->objid && lchange->type == schange->type) + /* conflict only if transactions overlap */ + if (schange->ts >= tr->ts && lchange->objid == schange->objid && lchange->type == schange->type) ok = LOG_CONFLICT; } } @@ -3763,7 +3764,8 @@ transaction_check_dependencies_and_remov for (; he && ok == LOG_OK; he = he->chain) { sql_dependency_change *schange = (sql_dependency_change*) he->value; - if (lchange->objid == schange->objid && lchange->type == schange->type) + /* conflict only if transactions overlap */ + if (schange->ts >= tr->ts && lchange->objid == schange->objid && lchange->type == schange->type) ok = LOG_CONFLICT; } } diff --git a/sql/test/BugTracker-2022/Tests/All b/sql/test/BugTracker-2022/Tests/All new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2022/Tests/All @@ -0,0 +1,1 @@ +transaction-conflict.Bug-7228 diff --git a/sql/test/BugTracker-2022/Tests/SingleServer b/sql/test/BugTracker-2022/Tests/SingleServer new file mode 100644 diff --git a/sql/test/BugTracker-2022/Tests/transaction-conflict.Bug-7228.test b/sql/test/BugTracker-2022/Tests/transaction-conflict.Bug-7228.test new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2022/Tests/transaction-conflict.Bug-7228.test @@ -0,0 +1,55 @@ +@connection(id=1, username=monetdb, password=monetdb) +statement ok +START TRANSACTION + +@connection(id=2, username=monetdb, password=monetdb) +statement ok +START TRANSACTION + +@connection(id=2) +statement ok +CREATE TABLE a(s string, i int, b1 bigint) + +@connection(id=2) +statement ok +COMMIT + +@connection(id=2) +statement ok +START TRANSACTION + +@connection(id=2) +statement ok +ALTER TABLE a ADD UNIQUE (s, b1) + +@connection(id=2) +statement ok +COMMIT + +@connection(id=2) +statement ok +START TRANSACTION + +@connection(id=2) +statement ok +CREATE TABLE b(i int) + +@connection(id=2) +statement ok +UPDATE a SET i = 1 + +@connection(id=2) +statement ok +DROP TABLE b + +@connection(id=2) +statement ok +COMMIT + +@connection(id=2) +statement ok +DROP TABLE a + +@connection(id=1) +statement ok +ROLLBACK _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list