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

Reply via email to