[couchdb-glib] Add API for compacting databases
- From: Rodrigo Moya <rodrigo src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [couchdb-glib] Add API for compacting databases
- Date: Tue, 9 Feb 2010 16:38:35 +0000 (UTC)
commit 9f156bd9046a07a866aa7c41964e788d44bc6947
Author: Rodrigo Moya <rodrigo gnome-db org>
Date: Tue Feb 9 16:30:04 2010 +0100
Add API for compacting databases
couchdb-glib/couchdb-session.c | 41 +++++++++++++++++++++++++++++++++++++++-
couchdb-glib/couchdb-session.h | 1 +
2 files changed, 41 insertions(+), 1 deletions(-)
---
diff --git a/couchdb-glib/couchdb-session.c b/couchdb-glib/couchdb-session.c
index 9dfcd85..aac65e1 100644
--- a/couchdb-glib/couchdb-session.c
+++ b/couchdb-glib/couchdb-session.c
@@ -365,8 +365,8 @@ couchdb_session_delete_database (CouchdbSession *couchdb, const char *dbname, GE
result = json_object_get_boolean_member (
json_node_get_object (root_node), "ok");
}
- g_object_unref (G_OBJECT (parser));
+ g_object_unref (G_OBJECT (parser));
g_free (url);
if (result) {
@@ -380,6 +380,45 @@ couchdb_session_delete_database (CouchdbSession *couchdb, const char *dbname, GE
return result;
}
+/**
+ * couchdb_session_compact_database:
+ * @couchdb: A #CouchdbSession object
+ * @dbname: Name of the database to be compacted
+ * @error: Placeholder for error information
+ *
+ * Compact the given database, which means removing outdated document
+ * revisions and deleted documents.
+ *
+ * Return value: TRUE if successful, FALSE otherwise.
+ */
+gboolean
+couchdb_session_compact_database (CouchdbSession *couchdb, const char *dbname, GError **error)
+{
+ char *url;
+ JsonParser *output;
+ gboolean result = FALSE;
+
+ g_return_val_if_fail (COUCHDB_IS_SESSION (couchdb), FALSE);
+ g_return_val_if_fail (dbname != NULL, FALSE);
+
+ url = g_strdup_printf ("%s/%s/_compact", couchdb_session_get_uri (couchdb), dbname);
+ output = json_parser_new ();
+
+ if (couchdb_session_send_message (couchdb, SOUP_METHOD_POST, url, NULL, output, error)) {
+ JsonNode *root_node;
+
+ root_node = json_parser_get_root (output);
+ if (json_node_get_node_type (root_node) == JSON_NODE_OBJECT)
+ result = json_object_get_boolean_member (
+ json_node_get_object (root_node), "ok");
+ }
+
+ g_object_unref (G_OBJECT (output));
+ g_free (url);
+
+ return result;
+}
+
void
couchdb_session_free_database_list (GSList *dblist)
{
diff --git a/couchdb-glib/couchdb-session.h b/couchdb-glib/couchdb-session.h
index 5cc4b42..e393818 100644
--- a/couchdb-glib/couchdb-session.h
+++ b/couchdb-glib/couchdb-session.h
@@ -73,6 +73,7 @@ CouchdbDatabaseInfo *couchdb_session_get_database_info (CouchdbSession *couchdb,
gboolean couchdb_session_create_database (CouchdbSession *couchdb, const char *dbname, GError **error);
gboolean couchdb_session_delete_database (CouchdbSession *couchdb, const char *dbname, GError **error);
+gboolean couchdb_session_compact_database (CouchdbSession *couchdb, const char *dbname, GError **error);
void couchdb_session_listen_for_changes (CouchdbSession *couchdb, const char *dbname);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]