[couchdb-glib] Add API for compacting databases



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]