On суб, 2007-03-10 at 15:20 +0000, jamie wrote:
> On Sat, 2007-03-10 at 02:41 +0100, Marko Anastasov wrote:
> > Hi,
> >
> > Tonight I got a little bit into the code for the first time
> > and tried to add the Emails category results to
> > tracker_dbus_method_get_stats (), by merging the results of
> > tracker_exec_proc () for data and emails databases. I didn't
> > finish though, it's really late now so I'm just posting a
> > non-working patch hoping to hear some suggestion tomorrow.
> >
> > Is there anything special with these rows that make up the
> > char *** result of tracker_exec_proc () or they're just string
> > arrays?
> >
>
> nope - they are just null terminated array of array of strings.
>
> I guess I should add a tracker_concatenate_result function to
> tracker-utils.c that appends on result set onto another.
>
> If you have time today feel free to implement above and amend your
> patch.
Done - now the stats read the email db too.
I'm not sure about all other functions that need this merging;
I suppose tracker_get_metadata and tracker_dbus_method_get_services ?
Marko
Index: src/trackerd/tracker-utils.h
===================================================================
--- src/trackerd/tracker-utils.h (revision 537)
+++ src/trackerd/tracker-utils.h (working copy)
@@ -494,4 +494,6 @@
char* tracker_string_replace (const char *haystack, char *needle, char *replacement);
+char *** tracker_concatenate_result (char ***lhs, char ***rhs);
+
#endif
Index: src/trackerd/tracker-dbus-methods.c
===================================================================
--- src/trackerd/tracker-dbus-methods.c (revision 537)
+++ src/trackerd/tracker-dbus-methods.c (working copy)
@@ -23,6 +23,7 @@
#include "tracker-dbus-methods.h"
#include "tracker-metadata.h"
#include "tracker-rdf-query.h"
+#include "tracker-utils.h"
void
@@ -403,6 +404,8 @@
tracker_dbus_method_get_stats (DBusRec *rec)
{
DBConnection *db_con;
+ char ***res_data;
+ char ***res_emails;
char ***res;
g_return_if_fail (rec && rec->user_data);
@@ -411,12 +414,17 @@
tracker_log ("Executing GetStats Dbus Call");
- res = tracker_exec_proc (db_con, "GetStats", 0);
-
+ res_data = tracker_exec_proc (db_con, "GetStats", 0);
+ res_emails = tracker_exec_proc (db_con->emails, "GetStats", 0);
+
+ res = tracker_concatenate_result (res_data, res_emails);
+
+ tracker_db_free_result (res_data);
+ tracker_db_free_result (res_emails);
+
tracker_dbus_reply_with_query_result (rec, res);
tracker_db_free_result (res);
-
}
Index: src/trackerd/tracker-utils.c
===================================================================
--- src/trackerd/tracker-utils.c (revision 537)
+++ src/trackerd/tracker-utils.c (working copy)
@@ -30,6 +30,7 @@
#include <sys/resource.h>
#include <zlib.h>
#include <magic.h>
+#include "tracker-db-sqlite.h"
#include "tracker-dbus.h"
#include "tracker-utils.h"
#include "tracker-indexer.h"
@@ -3231,4 +3232,42 @@
}
+/* concatenate results from tracker_exec_proc () */
+char ***
+tracker_concatenate_result (char ***lhs, char ***rhs)
+{
+ char **res;
+ char **row, **new_row;
+ int res_length;
+ int i, j;
+ guint row_length;
+ g_return_val_if_fail (lhs && rhs, NULL);
+
+ res_length = tracker_get_row_count (lhs) + tracker_get_row_count (rhs);
+
+ res = g_new0 (char *, res_length+1);
+ res[res_length] = NULL;
+
+ i = 0;
+
+ for (j = 0; (row = tracker_db_get_row (lhs, j)); ++i, ++j) {
+ row_length = g_strv_length (row);
+
+ new_row = g_strdupv (row);
+ new_row[row_length] = NULL;
+
+ res[i] = (gpointer) new_row;
+ }
+
+ for (j = 0; (row = tracker_db_get_row (rhs, j)); ++i, ++j) {
+ row_length = g_strv_length (row);
+
+ new_row = g_strdupv (row);
+ new_row[row_length] = NULL;
+
+ res[i] = (gpointer) new_row;
+ }
+
+ return (char ***) res;
+}
_______________________________________________
tracker-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/tracker-list