Changeset: eb845eae5345 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=eb845eae5345
Modified Files:
sql/storage/objectset.c
Branch: nospare
Log Message:
Add back pointer from objectversion to object_node.
diffs (136 lines):
diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -18,19 +18,22 @@
* keep hash/map of names -> objectversion
*/
+struct object_node;
+
typedef struct objectversion {
bool deleted;
ulng ts;
sql_base *obj;
struct objectversion *older;
struct objectversion *newer;
- struct objectset *os;
+ struct object_node *on;
} objectversion;
typedef struct object_node {
struct object_node* prev;
struct object_node* next;
objectversion* data;
+ struct objectset* os;
} object_node;
typedef struct objectset {
@@ -171,15 +174,16 @@ os_remove_node(objectset *os, object_nod
}
static object_node *
-node_create(sql_allocator *sa, void *data)
+node_create(sql_allocator *sa, objectversion *ov)
{
object_node *n = (sa)?SA_NEW(sa, object_node):MNEW(object_node);
if (n == NULL)
return NULL;
*n = (object_node) {
- .data = data,
+ .data = ov,
};
+ ov->on = n;
return n;
}
@@ -191,6 +195,7 @@ os_append_node(objectset *os, object_nod
} else {
os->h = n;
}
+ n->os = os;
n->prev = os->t; // aka the double linked list.
os->t = n;
os->cnt++;
@@ -218,16 +223,16 @@ os_append_node(objectset *os, object_nod
}
static objectset *
-os_append(objectset *os, void *data)
+os_append(objectset *os, objectversion *ov)
{
- object_node *n = node_create(os->sa, data);
+ object_node *n = node_create(os->sa, ov);
if (n == NULL)
return NULL;
return os_append_node(os, n);
}
-static object_node * find_name(objectset *os, const char *name);
+static object_node* find_name(objectset *os, const char *name);
static void
objectversion_destroy(sqlstore *store, objectversion *ov, ulng commit_ts, ulng
oldest)
@@ -248,20 +253,21 @@ objectversion_destroy(sqlstore *store, o
else if (newer && older)
newer->older = older;
- if (!newer && ov->os) {
+ objectset* os = ov->on->os;
+ if (!newer) {
object_node *on = NULL;
- if (ov->os->unique)
- on = find_name(ov->os, ov->obj->name);
+ if (os->unique)
+ on = find_name(os, ov->obj->name);
else
- on = find_id(ov->os, ov->obj->id);
+ on = find_id(os, ov->obj->id);
assert(on->data == ov);
if (on)
- os_remove_node(ov->os, on);
+ os_remove_node(os, on);
if (older)
- os_append(ov->os, older);
+ os_append(os, older);
}
- if (ov && ov->os && ov->os->destroy)
- ov->os->destroy(store, ov->obj);
+ if (ov && os && os->destroy)
+ os->destroy(store, ov->obj);
/* free ov */
}
@@ -483,7 +489,6 @@ os_add(objectset *os, struct sql_trans *
ov->ts = tr->tid;
ov->obj = b;
ov->older = ov->newer = NULL;
- ov->os = os;
object_node *n = NULL;
if (os->unique)
@@ -494,6 +499,7 @@ os_add(objectset *os, struct sql_trans *
if (n) {
objectversion *co = n->data;
objectversion *oo = get_valid_object(tr, co);
+ ov->on = oo->on;
if (co != oo) { /* conflict ? */
return -1;
}
@@ -525,7 +531,6 @@ os_del(objectset *os, struct sql_trans *
ov->ts = tr->tid;
ov->obj = b;
ov->older = ov->newer = NULL;
- ov->os = os;
object_node *n = NULL;
if (os->unique)
@@ -536,6 +541,7 @@ os_del(objectset *os, struct sql_trans *
if (n) {
objectversion *co = n->data;
objectversion *oo = get_valid_object(tr, co);
+ ov->on = oo->on;
if (co != oo) { /* conflict ? */
return -1;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list