Changeset: 97b81d42ba82 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=97b81d42ba82
Modified Files:
        sql/storage/bat/bat_storage.c
        sql/storage/objectset.c
        sql/storage/sql_catalog.c
        sql/storage/sql_storage.h
Branch: nospare
Log Message:

also handle savepoints in the objectset


diffs (73 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
@@ -60,15 +60,6 @@ make_cookie(sql_trans *tr, sql_delta *de
 
 static int tr_merge_delta( sql_trans *tr, sql_delta *obat);
 
-static int
-tr_version_of_parent(sql_trans *tr, ulng ts)
-{
-       for( tr = tr->parent; tr; tr = tr->parent)
-               if (tr->tid == ts)
-                       return 1;
-       return 0;
-}
-
 static sql_delta *
 temp_dup_delta(ulng tid, int type)
 {
diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -277,6 +277,7 @@ tc_gc_objectversion(sql_store Store, sql
        objectversion *ov = (objectversion*)change->data;
 
        if (ov->deleted || !commit_ts) {
+               /* TODO handle savepoints */
                if (ov->ts < oldest || (ov->ts == commit_ts && commit_ts == 
oldest) || !commit_ts) {
                        int ok = LOG_OK;
                        objectversion_destroy(Store, ov, commit_ts, oldest);
@@ -445,11 +446,12 @@ find_name(objectset *os, const char *nam
        return NULL;
 }
 
+
 static objectversion*
 get_valid_object(sql_trans *tr, objectversion *ov)
 {
        while(ov) {
-               if (ov->ts == tr->tid || ov->ts < tr->ts)
+               if (ov->ts == tr->tid || (tr->parent && 
tr_version_of_parent(tr, ov->ts)) || ov->ts < tr->ts)
                        return ov;
                else
                        ov = ov->older;
diff --git a/sql/storage/sql_catalog.c b/sql/storage/sql_catalog.c
--- a/sql/storage/sql_catalog.c
+++ b/sql/storage/sql_catalog.c
@@ -81,6 +81,15 @@ trans_add(sql_trans *tr, sql_base *b, vo
        tr->changes = sa_list_append(tr->sa, tr->changes, change);
 }
 
+int
+tr_version_of_parent(sql_trans *tr, ulng ts)
+{
+       for( tr = tr->parent; tr; tr = tr->parent)
+               if (tr->tid == ts)
+                       return 1;
+       return 0;
+}
+
 static void *
 _cs_find_name(changeset * cs, const char *name)
 {
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -491,5 +491,6 @@ typedef struct sql_change {
 } sql_change;
 
 extern void trans_add(sql_trans *tr, sql_base *b, void *data, tc_cleanup_fptr 
cleanup, tc_log_fptr log);
+extern int tr_version_of_parent(sql_trans *tr, ulng ts);
 
 #endif /*SQL_STORAGE_H */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to