Changeset: 40f27b823978 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/40f27b823978
Modified Files:
sql/storage/bat/bat_storage.c
Branch: Jul2021
Log Message:
fixed leak with alter drop/col/idx and rollback
diffs (97 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
@@ -31,6 +31,8 @@ static int commit_create_del(sql_trans *
static int tc_gc_col( sql_store Store, sql_change *c, ulng oldest);
static int tc_gc_idx( sql_store Store, sql_change *c, ulng oldest);
static int tc_gc_del( sql_store Store, sql_change *c, ulng oldest);
+static int tc_gc_drop_col( sql_store Store, sql_change *c, ulng oldest);
+static int tc_gc_drop_idx( sql_store Store, sql_change *c, ulng oldest);
static int merge_delta( sql_delta *obat);
@@ -2691,7 +2693,7 @@ drop_col(sql_trans *tr, sql_column *c)
{
assert(!isNew(c) && !isTempTable(c->t));
sql_delta *d = ATOMIC_PTR_GET(&c->data);
- trans_add(tr, &c->base, d, &tc_gc_col, &commit_destroy_del,
&log_destroy_col);
+ trans_add(tr, &c->base, d, &tc_gc_drop_col, &commit_destroy_del,
&log_destroy_col);
return LOG_OK;
}
@@ -2700,7 +2702,7 @@ drop_idx(sql_trans *tr, sql_idx *i)
{
assert(!isNew(i) && !isTempTable(i->t));
sql_delta *d = ATOMIC_PTR_GET(&i->data);
- trans_add(tr, &i->base, d, &tc_gc_idx, &commit_destroy_del,
&log_destroy_idx);
+ trans_add(tr, &i->base, d, &tc_gc_drop_idx, &commit_destroy_del,
&log_destroy_idx);
return LOG_OK;
}
@@ -3370,9 +3372,8 @@ commit_update_del( sql_trans *tr, sql_ch
/* only rollback (content version) case for now */
static int
-tc_gc_col( sql_store Store, sql_change *change, ulng oldest)
+gc_col( sqlstore *store, sql_change *change, ulng oldest, bool cleanup)
{
- (void)Store;
sql_column *c = (sql_column*)change->obj;
if (!c) /* cleaned earlier */
@@ -3391,13 +3392,27 @@ tc_gc_col( sql_store Store, sql_change *
destroy_delta(d->next, true);
d->next = NULL;
}
+ if (cleanup)
+ column_destroy(store, c);
return 1;
}
static int
-tc_gc_idx( sql_store Store, sql_change *change, ulng oldest)
+tc_gc_col( sql_store Store, sql_change *change, ulng oldest)
{
- (void)Store;
+ return gc_col(Store, change, oldest, false);
+}
+
+/* only rollback (content version) case for now */
+static int
+tc_gc_drop_col( sql_store Store, sql_change *change, ulng oldest)
+{
+ return gc_col(Store, change, oldest, true);
+}
+
+static int
+gc_idx( sqlstore *store, sql_change *change, ulng oldest, bool cleanup)
+{
sql_idx *i = (sql_idx*)change->obj;
if (!i) /* cleaned earlier */
@@ -3416,10 +3431,25 @@ tc_gc_idx( sql_store Store, sql_change *
destroy_delta(d->next, true);
d->next = NULL;
}
+ if (cleanup)
+ idx_destroy(store, i);
return 1;
}
static int
+tc_gc_idx( sql_store Store, sql_change *change, ulng oldest)
+{
+ return gc_idx(Store, change, oldest, false);
+}
+
+static int
+tc_gc_drop_idx( sql_store Store, sql_change *change, ulng oldest)
+{
+ return gc_idx(Store, change, oldest, true);
+}
+
+
+static int
tc_gc_del( sql_store Store, sql_change *change, ulng oldest)
{
sqlstore *store = Store;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list