Changeset: c407221194c6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c407221194c6
Modified Files:
sql/common/sql_list.c
sql/include/sql_catalog.h
sql/include/sql_list.h
sql/server/sql_partition.c
sql/storage/bat/bat_storage.c
sql/storage/objectset.c
sql/storage/store.c
Branch: nospare
Log Message:
add more cleanup code
diffs (truncated from 682 to 300 lines):
diff --git a/sql/common/sql_list.c b/sql/common/sql_list.c
--- a/sql/common/sql_list.c
+++ b/sql/common/sql_list.c
@@ -774,21 +774,6 @@ list_flaten(list *l)
}
void
-list_update_data(list *l, node *n, void *data)
-{
- MT_lock_set(&l->ht_lock);
- if (l->ht) {
- hash_delete(l->ht, n->data);
- n->data = data;
- int nkey = l->ht->key(data);
- hash_add(l->ht, nkey, data);
- } else {
- n->data = data;
- }
- MT_lock_unset(&l->ht_lock);
-}
-
-void
list_hash_delete(list *l, void *data, fcmp cmp)
{
if (l && data) {
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -543,7 +543,6 @@ typedef struct sql_idx {
struct list *columns; /* list of sql_kc */
struct sql_table *t;
struct sql_key *key; /* key */
- struct sql_idx *po; /* the outer transactions idx */
void *data;
} sql_idx;
@@ -614,7 +613,6 @@ typedef struct sql_column {
char *max;
struct sql_table *t;
- struct sql_column *po; /* the outer transactions column */
void *data;
} sql_column;
@@ -699,7 +697,6 @@ typedef struct sql_table {
void *data;
struct sql_schema *s;
- struct sql_table *po; /* the outer transactions table */
union {
struct sql_column *pcol; /* If it is partitioned on a column */
diff --git a/sql/include/sql_list.h b/sql/include/sql_list.h
--- a/sql/include/sql_list.h
+++ b/sql/include/sql_list.h
@@ -103,6 +103,5 @@ extern list *list_flaten(list *l);
extern void list_hash_delete(list *l, void *data, fcmp cmp);
extern void* list_hash_add(list *l, void *data, fcmp cmp);
extern void list_hash_clear(list *l);
-extern void list_update_data(list *l, node *n, void *data);
#endif /* LIST_H */
diff --git a/sql/server/sql_partition.c b/sql/server/sql_partition.c
--- a/sql/server/sql_partition.c
+++ b/sql/server/sql_partition.c
@@ -318,8 +318,6 @@ initialize_sql_parts(mvc *sql, sql_table
find_partition_type(&found, mt);
localtype = found.type->localtype;
- if (isPartitionedByExpressionTable(mt)) /* Propagate type to outer
transaction table */
- mt->po->part.pexp->type = mt->part.pexp->type;
if (localtype != TYPE_str && mt->members.set && cs_size(&mt->members)) {
list *new = sa_list(tr->sa), *old = sa_list(tr->sa);
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
@@ -1296,9 +1296,6 @@ sorted_col(sql_trans *tr, sql_column *co
assert(tr->active);
if (!isTable(col->t) || !col->t->s)
return 0;
- /* fallback to central bat */
- if (tr && tr->parent && !col->data && col->po)
- col = col->po;
if (col && col->data) {
BAT *b = bind_col(tr, col, QUICK);
@@ -1317,9 +1314,6 @@ unique_col(sql_trans *tr, sql_column *co
assert(tr->active);
if (!isTable(col->t) || !col->t->s)
return 0;
- /* fallback to central bat */
- if (tr && tr->parent && !col->data && col->po)
- col = col->po;
if (col && col->data) {
BAT *b = bind_col(tr, col, QUICK);
@@ -1338,9 +1332,6 @@ double_elim_col(sql_trans *tr, sql_colum
assert(tr->active);
if (!isTable(col->t) || !col->t->s)
return 0;
- /* fallback to central bat */
- if (tr && tr->parent && !col->data && col->po)
- col = col->po;
if (col && col->data) {
BAT *b = bind_col(tr, col, QUICK);
diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -137,14 +137,15 @@ hash_delete(sql_hash *h, void *data)
}
static void
-node_destroy(objectset *os, object_node *n)
+node_destroy(objectset *os, sqlstore *store, object_node *n)
{
if (!os->sa)
_DELETE(n);
+ (void)store; /* todo destroy obj */
}
static object_node *
-os_remove_name_based_chain(objectset *os, object_node *n)
+os_remove_name_based_chain(objectset *os, sqlstore *store, object_node *n)
{
assert(n);
object_node *p = os->name_based_h;
@@ -171,12 +172,12 @@ os_remove_name_based_chain(objectset *os
hash_delete(os->name_map, n);
MT_lock_unset(&os->ht_lock);
- node_destroy(os, n);
+ node_destroy(os, store, n);
return p;
}
static object_node *
-os_remove_id_based_chain(objectset *os, object_node *n)
+os_remove_id_based_chain(objectset *os, sqlstore *store, object_node *n)
{
assert(n);
object_node *p = os->id_based_h;
@@ -203,7 +204,7 @@ os_remove_id_based_chain(objectset *os,
hash_delete(os->id_map, n);
MT_lock_unset(&os->ht_lock);
- node_destroy(os, n);
+ node_destroy(os, store, n);
return p;
}
@@ -329,7 +330,7 @@ objectversion_destroy(sqlstore *store, o
on = find_id(os, ov->obj->id);
assert(on->data == ov);
if (on)
- os_remove_name_based_chain(os, on);
+ os_remove_name_based_chain(os, store, on);
if (name_based_older)
os_append_name(os, name_based_older);
}
@@ -338,11 +339,11 @@ objectversion_destroy(sqlstore *store, o
/* free ov */
}
-static void os_rollback_id_based_terminal_decendant(objectversion *ov);
-static void os_rollback_name_based_terminal_decendant(objectversion *ov);
+static void os_rollback_id_based_terminal_decendant(objectversion *ov,
sqlstore *store);
+static void os_rollback_name_based_terminal_decendant(objectversion *ov,
sqlstore *store);
static void
-os_rollback_os_id_based_cascading(objectversion *ov) {
+os_rollback_os_id_based_cascading(objectversion *ov, sqlstore *store) {
assert(ov->rollbacked & id_based_rollbacked);
if (ov->id_based_older) {
@@ -353,21 +354,21 @@ os_rollback_os_id_based_cascading(object
// END ATOMIC()
}
else {
-
os_rollback_name_based_terminal_decendant(ov->name_based_chain->data);
+
os_rollback_name_based_terminal_decendant(ov->name_based_chain->data, store);
// id based cascaded rollback along the parents
ov->id_based_older->rollbacked |= id_based_rollbacked;
- os_rollback_os_id_based_cascading(ov->id_based_older);
+ os_rollback_os_id_based_cascading(ov->id_based_older,
store);
}
}
else {
// this is a terminal node. i.e. this objectversion does not
have id based committed history
- os_remove_id_based_chain(ov->id_based_chain->os,
ov->id_based_chain);
+ os_remove_id_based_chain(ov->id_based_chain->os, store,
ov->id_based_chain);
}
}
static void
-os_rollback_os_name_based_cascading(objectversion *ov) {
+os_rollback_os_name_based_cascading(objectversion *ov, sqlstore *store) {
assert(ov->rollbacked & name_based_rollbacked);
if (ov->name_based_older) {
@@ -378,48 +379,48 @@ os_rollback_os_name_based_cascading(obje
// END ATOMIC()
}
else {
-
os_rollback_id_based_terminal_decendant(ov->id_based_chain->data);
+
os_rollback_id_based_terminal_decendant(ov->id_based_chain->data, store);
// name based cascaded rollback along the parents
ov->name_based_older->rollbacked |=
name_based_rollbacked;
-
os_rollback_os_name_based_cascading(ov->name_based_older);
+
os_rollback_os_name_based_cascading(ov->name_based_older, store);
}
}
else {
// this is a terminal node. i.e. this objectversion does not
have name based committed history
- os_remove_name_based_chain(ov->name_based_chain->os,
ov->name_based_chain);
+ os_remove_name_based_chain(ov->name_based_chain->os, store,
ov->name_based_chain);
}
}
static void
-os_rollback_name_based_terminal_decendant(objectversion *ov) {
+os_rollback_name_based_terminal_decendant(objectversion *ov, sqlstore *store) {
if (ov->rollbacked & name_based_rollbacked) {
return;
}
ov->rollbacked |= name_based_rollbacked;
- os_rollback_id_based_terminal_decendant(ov->id_based_chain->data);
- os_rollback_os_name_based_cascading(ov);
+ os_rollback_id_based_terminal_decendant(ov->id_based_chain->data,
store);
+ os_rollback_os_name_based_cascading(ov, store);
}
static void
-os_rollback_id_based_terminal_decendant(objectversion *ov) {
+os_rollback_id_based_terminal_decendant(objectversion *ov, sqlstore *store) {
if (ov->rollbacked & id_based_rollbacked) {
return;
}
ov->rollbacked |= id_based_rollbacked;
- os_rollback_name_based_terminal_decendant(ov->name_based_chain->data);
- os_rollback_os_id_based_cascading(ov);
+ os_rollback_name_based_terminal_decendant(ov->name_based_chain->data,
store);
+ os_rollback_os_id_based_cascading(ov, store);
}
static int
-os_rollback(objectversion *ov)
+os_rollback(objectversion *ov, sqlstore *store)
{
- os_rollback_name_based_terminal_decendant(ov->name_based_chain->data);
+ os_rollback_name_based_terminal_decendant(ov->name_based_chain->data,
store);
// TODO: label objectversion with a latest timestamp of tid.
@@ -478,7 +479,7 @@ tc_commit_objectversion(sql_trans *tr, s
(void)oldest;
}
else {
- os_rollback(ov);
+ os_rollback(ov, tr->store);
}
return LOG_OK;
@@ -528,7 +529,7 @@ os_destroy(objectset *os, sql_store stor
object_node *t = n;
n = t->next;
- node_destroy(os, t);
+ node_destroy(os, store, t);
}
}
@@ -745,7 +746,7 @@ os_add_id_based(objectset *os, struct sq
// TODO: can fail i.e. returns NULL
os_append_id(os, ov);
-
+
return 0;
}
}
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -78,17 +78,21 @@ instore(sqlid id, sqlid maxid)
static void
key_destroy(sqlstore *store, sql_key *k)
{
- (void)store;
+ assert(k->base.refcnt > 0);
+ if (--(k->base.refcnt) > 0)
+ return;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list