Changeset: e6d2db7496cc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/e6d2db7496cc
Modified Files:
        sql/storage/bat/bat_storage.c
        sql/storage/bat/bat_table.c
        sql/test/miscellaneous/Tests/All
Branch: iso
Log Message:

Merged with Jul2021


diffs (129 lines):

diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -1445,6 +1445,8 @@ bind_col_data(sql_trans *tr, sql_column 
                /* abort */
                if (update_conflict)
                        *update_conflict = true;
+               else
+                       return timestamp_delta(tr, ATOMIC_PTR_GET(&c->data));
                return NULL;
        }
        assert(!isTempTable(c->t));
@@ -1915,8 +1917,8 @@ bind_del_data(sql_trans *tr, sql_table *
 {
        storage *obat = ATOMIC_PTR_GET(&t->data);
 
-       if (isTempTable(t))
-               obat = temp_tab_timestamp_storage(tr, t);
+       if (isTempTable(t) && !(obat = temp_tab_timestamp_storage(tr, t)))
+               return NULL;
 
        if (obat->cs.ts == tr->tid)
                return obat;
@@ -2913,8 +2915,10 @@ clear_table(sql_trans *tr, sql_table *t)
        node *n = ol_first_node(t->columns);
        sql_column *c = n->data;
        BUN sz = count_col(tr, c, 0), clear_ok;
-
        storage *d = tab_timestamp_storage(tr, t);
+
+       if (!d)
+               return BUN_NONE;
        lock_table(tr->store, t->base.id);
        sz -= count_deletes_in_range(d->segs->h, tr, 0, sz);
        unlock_table(tr->store, t->base.id);
diff --git a/sql/storage/bat/bat_table.c b/sql/storage/bat/bat_table.c
--- a/sql/storage/bat/bat_table.c
+++ b/sql/storage/bat/bat_table.c
@@ -36,23 +36,32 @@ full_column(sql_trans *tr, sql_column *c
        BAT *b = store->storage_api.bind_col(tr, c, RDONLY);
        BAT *ui = store->storage_api.bind_col(tr, c, RD_UPD_ID);
 
+       if (!b || !ui) {
+               bat_destroy(b);
+               bat_destroy(ui);
+               return NULL;
+       }
        if (BATcount(ui)) {
-               BAT *uv = store->storage_api.bind_col(tr, c, RD_UPD_VAL);
-               if (ui && BATcount(ui)) {
-                       BAT *r = COLcopy(b, b->ttype, true, TRANSIENT);
+               BAT *uv = store->storage_api.bind_col(tr, c, RD_UPD_VAL), *r;
 
+               if (!uv) {
                        bat_destroy(b);
-                       b = r;
-               if (!b || !ui || !uv || BATreplace(b, ui, uv, true) != 
GDK_SUCCEED) {
-                               if (b) BBPunfix(b->batCacheid);
-                               if (ui) BBPunfix(ui->batCacheid);
-                               if (uv) BBPunfix(uv->batCacheid);
-                               return NULL;
-                       }
+                       bat_destroy(ui);
+                       return NULL;
                }
-               bat_destroy(ui);
+
+               r = COLcopy(b, b->ttype, true, TRANSIENT);
+               bat_destroy(b);
+               b = r;
+               if (!b || BATreplace(b, ui, uv, true) != GDK_SUCCEED) {
+                       bat_destroy(b);
+                       bat_destroy(ui);
+                       bat_destroy(uv);
+                       return NULL;
+               }
                bat_destroy(uv);
        }
+       bat_destroy(ui);
        return b;
 }
 
diff --git a/sql/test/miscellaneous/Tests/All b/sql/test/miscellaneous/Tests/All
--- a/sql/test/miscellaneous/Tests/All
+++ b/sql/test/miscellaneous/Tests/All
@@ -24,3 +24,4 @@ transaction_isolation2
 transaction_isolation3
 transaction_isolation4
 mergetable-deps-crash
+view-deps
diff --git a/sql/test/miscellaneous/Tests/view-deps.test 
b/sql/test/miscellaneous/Tests/view-deps.test
new file mode 100644
--- /dev/null
+++ b/sql/test/miscellaneous/Tests/view-deps.test
@@ -0,0 +1,34 @@
+@connection(id=1, username=monetdb, password=monetdb)
+statement ok
+create table fine(y int, z int);
+
+@connection(id=1)
+statement ok
+start transaction;
+
+@connection(id=2, username=monetdb, password=monetdb)
+statement ok
+start transaction;
+
+@connection(id=1)
+statement ok
+alter table fine drop column y;
+
+@connection(id=2)
+statement ok
+create view myv7(a,b) as select y, z from sys.fine;
+
+@connection(id=1)
+statement ok
+commit;
+
+@connection(id=2)
+statement ok
+commit;
+
+@connection(id=2)
+query I,I roworder
+select * from myv7;
+----
+
+statement error code 40000 message "COMMIT: transaction is aborted because of 
concurrency conflicts, will ROLLBACK instead"
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to