Changeset: aa2b8af6e5d6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=aa2b8af6e5d6
Modified Files:
        sql/storage/objectset.c
Branch: nospare-aris
Log Message:

Create tmp branch for ungoning unstable work.


diffs (159 lines):

diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -93,7 +93,7 @@ node_destroy(objectset *os, object_node 
 static object_node *
 os_remove_node(objectset *os, object_node *n)
 {
-       void *data = n->data;
+       assert(n);
        object_node *p = os->h;
 
        if (p != n)
@@ -112,14 +112,14 @@ os_remove_node(objectset *os, object_nod
        }
        if (n == os->t)
                os->t = p;
-       if (data) {
-               MT_lock_set(&os->ht_lock);
-               if (os->id_map && data)
-                       hash_delete(os->id_map, data);
-               if (os->name_map && data)
-                       hash_delete(os->name_map, data);
-               MT_lock_unset(&os->ht_lock);
-       }
+
+       MT_lock_set(&os->ht_lock);
+       if (os->id_map && n)
+               hash_delete(os->id_map, n);
+       if (os->name_map && n)
+               hash_delete(os->name_map, n);
+       MT_lock_unset(&os->ht_lock);
+
        os->cnt--;
        assert(os->cnt > 0 || os->h == NULL);
 
@@ -154,17 +154,17 @@ os_append_node(objectset *os, object_nod
        if (n->data) {
                MT_lock_set(&os->ht_lock);
                if (os->name_map) {
-                       int key = os->name_map->key(n->data);
+                       int key = os->name_map->key(n);
 
-                       if (hash_add(os->name_map, key, n->data) == NULL) {
+                       if (hash_add(os->name_map, key, n) == NULL) {
                                MT_lock_unset(&os->ht_lock);
                                return NULL;
                        }
                }
                if (os->id_map) {
-                       int key = os->id_map->key(n->data);
+                       int key = os->id_map->key(n);
 
-                       if (hash_add(os->id_map, key, n->data) == NULL) {
+                       if (hash_add(os->id_map, key, n) == NULL) {
                                MT_lock_unset(&os->ht_lock);
                                return NULL;
                        }
@@ -302,51 +302,27 @@ os_destroy(objectset *os, sql_store stor
 }
 
 static int
-ov_key(objectversion *ov)
-{
-       return base_key(ov->obj);
-}
-
-static object_node *
-os_find(objectset *os, void *key, fcmp cmp)
+os_name_key(object_node *n)
 {
-       object_node *n = NULL;
-
-       if (key) {
-               if (cmp) {
-                       for (n = os->h; n; n = n->next) {
-                               if (cmp(n->data, key) == 0) {
-                                       return n;
-                               }
-                       }
-               } else {
-                       for (n = os->h; n; n = n->next) {
-                               if (n->data == key)
-                                       return n;
-                       }
-               }
-       }
-       return NULL;
+       return hash_key(n->data->obj->name);
 }
 
 static object_node *
 find_name(objectset *os, const char *name)
 {
-       object_node *n;
-
        if (os) {
                MT_lock_set(&os->ht_lock);
                if ((!os->name_map || os->name_map->size*16 < os->cnt) && 
os->cnt > HASH_MIN_SIZE && os->sa) {
-                       os->name_map = hash_new(os->sa, os->cnt, 
(fkeyvalue)&ov_key);
+                       os->name_map = hash_new(os->sa, os->cnt, 
(fkeyvalue)&os_name_key);
                        if (os->name_map == NULL) {
                                MT_lock_unset(&os->ht_lock);
                                return NULL;
                        }
 
-                       for (n = os->h; n; n = n->next ) {
-                               int key = ov_key(n->data);
+                       for (object_node *n = os->h; n; n = n->next ) {
+                               int key = os_name_key(n);
 
-                               if (hash_add(os->name_map, key, n->data) == 
NULL) {
+                               if (hash_add(os->name_map, key, n) == NULL) {
                                        MT_lock_unset(&os->ht_lock);
                                        return NULL;
                                }
@@ -357,18 +333,19 @@ find_name(objectset *os, const char *nam
                        sql_hash_e *he = 
os->name_map->buckets[key&(os->name_map->size-1)];
 
                        for (; he; he = he->chain) {
-                               objectversion *ov = he->value;
+                               object_node *n = he->value;
 
-                               if (ov && ov->obj->name && 
strcmp(ov->obj->name, name) == 0) {
+                               if (n && n->data->obj->name && 
strcmp(n->data->obj->name, name) == 0) {
                                        MT_lock_unset(&os->ht_lock);
-                                       return os_find(os, ov, NULL);
+                                       return n;
                                }
                        }
                        MT_lock_unset(&os->ht_lock);
                        return NULL;
                }
                MT_lock_unset(&os->ht_lock);
-               for (n = os->h; n; n = n->next) {
+               // TODO: can we actually reach this point?
+               for (object_node *n = os->h; n; n = n->next) {
                        objectversion *ov = n->data;
 
                        /* check if names match */
@@ -396,16 +373,16 @@ static void
 os_update_data(objectset *os, object_node *n, void *data)
 {
        MT_lock_set(&os->ht_lock);
-
+       // TODO: who should free the old data.
        if (os->name_map) {
-               hash_delete(os->name_map, n->data);
+               hash_delete(os->name_map, n);
                n->data = data;
                int nkey = os->name_map->key(data);
                hash_add(os->name_map, nkey, data);
        }
 
        if (os->id_map) {
-               hash_delete(os->id_map, n->data);
+               hash_delete(os->id_map, n);
                n->data = data;
                int nkey = os->id_map->key(data);
                hash_add(os->id_map, nkey, data);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to