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