summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharlie Brej <cbrej@cs.man.ac.uk>2010-08-07 23:41:39 +0100
committerCharlie Brej <cbrej@cs.man.ac.uk>2010-08-07 23:41:39 +0100
commitdec206347a1b8fbf45cb47de61befe700b5cef91 (patch)
treee7b20ed01207319766e8969659d5c7aaa756e73a
parent8d3a8327e8547b522ad944126279bae96a8366d5 (diff)
Add optional caching on fork backends
-rw-r--r--src/libtidbit/tidbit-database-fork.c10
-rw-r--r--src/libtidbit/tidbit-database-fork.h1
-rw-r--r--src/libtidbit/tidbit.h2
3 files changed, 9 insertions, 4 deletions
diff --git a/src/libtidbit/tidbit-database-fork.c b/src/libtidbit/tidbit-database-fork.c
index 4c68184..b56366b 100644
--- a/src/libtidbit/tidbit-database-fork.c
+++ b/src/libtidbit/tidbit-database-fork.c
@@ -38,14 +38,14 @@ static TidbitDatabaseFunctions backend_functions = {
};
-PtrTidbitDatabase tidbit_database_fork_new (PtrTidbitDatabase sub_a, PtrTidbitDatabase sub_b)
+PtrTidbitDatabase tidbit_database_fork_new (PtrTidbitDatabase sub_a, PtrTidbitDatabase sub_b, int caching)
{
PtrTidbitDatabaseFork backend = g_new(TidbitDatabaseFork, 1);
backend->sub_a = sub_a;
tidbit_database_ref (backend->sub_a);
backend->sub_b = sub_b;
tidbit_database_ref (backend->sub_b);
-
+ backend->caching = caching;
PtrTidbitDatabase database = tidbit_database_new(backend, &backend_functions);
return database;
}
@@ -69,8 +69,12 @@ static PtrTidbitRecord tidbit_database_fork_fetch (PtrTidbitDatabase database, P
{
PtrTidbitDatabaseFork backend = GET_FORK_BACKEND(database);
PtrTidbitRecord record = tidbit_database_fetch_record (backend->sub_a, guid);
- if (!record)
+ if (!record) {
record = tidbit_database_fetch_record (backend->sub_b, guid);
+ if (record && backend->caching){
+ tidbit_database_insert_record (database, record);
+ }
+ }
return record;
}
diff --git a/src/libtidbit/tidbit-database-fork.h b/src/libtidbit/tidbit-database-fork.h
index 55ed9c3..474602f 100644
--- a/src/libtidbit/tidbit-database-fork.h
+++ b/src/libtidbit/tidbit-database-fork.h
@@ -23,6 +23,7 @@
typedef struct TidbitDatabaseFork{
PtrTidbitDatabase sub_a;
PtrTidbitDatabase sub_b;
+ int caching;
}TidbitDatabaseFork, *PtrTidbitDatabaseFork;
diff --git a/src/libtidbit/tidbit.h b/src/libtidbit/tidbit.h
index d58810c..5f2f2f0 100644
--- a/src/libtidbit/tidbit.h
+++ b/src/libtidbit/tidbit.h
@@ -62,7 +62,7 @@ PtrTidbitGuidSet tidbit_database_query (PtrTidbitDatabase database, PtrTidbitQue
PtrTidbitDatabase tidbit_database_dbus_new (void);
PtrTidbitDatabase tidbit_database_mem_new (void);
PtrTidbitDatabase tidbit_database_http_new (void);
-PtrTidbitDatabase tidbit_database_fork_new (PtrTidbitDatabase sub_a, PtrTidbitDatabase sub_b);
+PtrTidbitDatabase tidbit_database_fork_new (PtrTidbitDatabase sub_a, PtrTidbitDatabase sub_b, int caching);
PtrTidbitQuery tidbit_query_new (char* table_name);
void tidbit_query_ref (PtrTidbitQuery query);