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