Changeset: fc4c03b6735b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/fc4c03b6735b
Modified Files:
sql/storage/bat/bat_storage.c
Branch: Jan2022
Log Message:
Flag conflict situations if so, small cleanup
diffs (111 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
@@ -1873,19 +1873,24 @@ bind_col_data(sql_trans *tr, sql_column
return NULL;
}
assert(!isTempTable(c->t));
- obat = timestamp_delta(tr, ATOMIC_PTR_GET(&c->data));
+ if (!(obat = timestamp_delta(tr, ATOMIC_PTR_GET(&c->data))))
+ return NULL;
sql_delta* bat = ZNEW(sql_delta);
- if(!bat)
+ if (!bat)
return NULL;
bat->cs.refcnt = 1;
- if(dup_cs(tr, &obat->cs, &bat->cs, c->type.type->localtype,
isTempTable(c->t)) != LOG_OK)
+ if (dup_cs(tr, &obat->cs, &bat->cs, c->type.type->localtype,
isTempTable(c->t)) != LOG_OK) {
+ destroy_delta(bat, false);
return NULL;
+ }
bat->cs.ts = tr->tid;
/* only one writer else abort */
bat->next = obat;
if (!ATOMIC_PTR_CAS(&c->data, (void**)&bat->next, bat)) {
bat->next = NULL;
destroy_delta(bat, false);
+ if (update_conflict)
+ *update_conflict = true;
return NULL;
}
return bat;
@@ -1954,19 +1959,24 @@ bind_idx_data(sql_trans *tr, sql_idx *i,
return NULL;
}
assert(!isTempTable(i->t));
- obat = timestamp_delta(tr, ATOMIC_PTR_GET(&i->data));
+ if (!(obat = timestamp_delta(tr, ATOMIC_PTR_GET(&i->data))))
+ return NULL;
sql_delta* bat = ZNEW(sql_delta);
- if(!bat)
+ if (!bat)
return NULL;
bat->cs.refcnt = 1;
- if(dup_cs(tr, &obat->cs, &bat->cs,
(oid_index(i->type))?TYPE_oid:TYPE_lng, isTempTable(i->t)) != LOG_OK)
+ if (dup_cs(tr, &obat->cs, &bat->cs,
(oid_index(i->type))?TYPE_oid:TYPE_lng, isTempTable(i->t)) != LOG_OK) {
+ destroy_delta(bat, false);
return NULL;
+ }
bat->cs.ts = tr->tid;
/* only one writer else abort */
bat->next = obat;
if (!ATOMIC_PTR_CAS(&i->data, (void**)&bat->next, bat)) {
bat->next = NULL;
destroy_delta(bat, false);
+ if (update_conflict)
+ *update_conflict = true;
return NULL;
}
return bat;
@@ -2474,18 +2484,24 @@ bind_del_data(sql_trans *tr, sql_table *
}
assert(!isTempTable(t));
- obat = timestamp_storage(tr, ATOMIC_PTR_GET(&t->data));
+ if (!(obat = timestamp_storage(tr, ATOMIC_PTR_GET(&t->data))))
+ return NULL;
storage *bat = ZNEW(storage);
- if(!bat)
+ if (!bat)
return NULL;
bat->cs.refcnt = 1;
- dup_storage(tr, obat, bat, clear || isTempTable(t) /* for clear and
temp create empty storage */);
+ if (dup_storage(tr, obat, bat, clear || isTempTable(t) /* for clear and
temp create empty storage */) != LOG_OK) {
+ destroy_storage(bat);
+ return NULL;
+ }
bat->cs.ts = tr->tid;
/* only one writer else abort */
bat->next = obat;
if (!ATOMIC_PTR_CAS(&t->data, (void**)&bat->next, bat)) {
bat->next = NULL;
destroy_storage(bat);
+ if (clear)
+ *clear = true;
return NULL;
}
return bat;
@@ -2772,9 +2788,9 @@ create_col(sql_trans *tr, sql_column *c)
if (!bat) {
new = 1;
bat = ZNEW(sql_delta);
+ if (!bat)
+ return LOG_ERR;
ATOMIC_PTR_SET(&c->data, bat);
- if(!bat)
- return LOG_ERR;
bat->cs.refcnt = 1;
}
@@ -2910,9 +2926,9 @@ create_idx(sql_trans *tr, sql_idx *ni)
if (!bat) {
new = 1;
bat = ZNEW(sql_delta);
+ if (!bat)
+ return LOG_ERR;
ATOMIC_PTR_SET(&ni->data, bat);
- if(!bat)
- return LOG_ERR;
bat->cs.refcnt = 1;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list