[tracker/tracker-0.6] Check whether we are returning multivalued fields and group by ID only if we are.
- From: Mikael Ottela <mottela src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker/tracker-0.6] Check whether we are returning multivalued fields and group by ID only if we are.
- Date: Mon, 17 Aug 2009 10:51:56 +0000 (UTC)
commit 286e520276e6b80f32c40fc4a24a87d3c9fdd96f
Author: Mikael Ottela <mikael ottela ixonos com>
Date: Wed Aug 12 20:33:08 2009 +0300
Check whether we are returning multivalued fields and group by ID only if we are.
src/libtracker-data/tracker-rdf-query.c | 14 +++++++++++++-
1 files changed, 13 insertions(+), 1 deletions(-)
---
diff --git a/src/libtracker-data/tracker-rdf-query.c b/src/libtracker-data/tracker-rdf-query.c
index 1d1cfe3..45b7420 100644
--- a/src/libtracker-data/tracker-rdf-query.c
+++ b/src/libtracker-data/tracker-rdf-query.c
@@ -170,6 +170,7 @@ typedef struct {
GString *sql_group;
GString *sql_order;
gchar *service;
+ gboolean multivalued_select;
} ParserData;
static void start_element_handler (GMarkupParseContext *context,
@@ -393,6 +394,7 @@ add_metadata_field (ParserData *data,
if (!tracker_field_data_get_is_select (field_data)) {
tracker_field_data_set_is_select (field_data, TRUE);
if(tracker_field_data_get_multiple_values(field_data)) {
+ data->multivalued_select = TRUE;
g_string_append_printf (data->sql_select, ", GROUP_CONCAT (%s)",
tracker_field_data_get_select_field (field_data));
} else {
@@ -421,6 +423,7 @@ add_metadata_field (ParserData *data,
data->fields = g_slist_prepend (data->fields, field_data);
if (is_select) {
if(tracker_field_data_get_multiple_values(field_data)) {
+ data->multivalued_select = TRUE;
g_string_append_printf (data->sql_select, ", GROUP_CONCAT (%s)",
tracker_field_data_get_select_field (field_data));
} else {
@@ -1231,6 +1234,9 @@ tracker_rdf_query_to_sql (TrackerDBInterface *iface,
data.iface = iface;
data.statement_count = 0;
data.service = (gchar*) service;
+
+ data.multivalued_select = FALSE;
+
data.sql_select = get_select_header (service);
if (field_count > 0) {
@@ -1339,7 +1345,7 @@ tracker_rdf_query_to_sql (TrackerDBInterface *iface,
g_string_append_printf (data.sql_where, "AND ");
}
- data.sql_group = g_string_new (" GROUP BY S.ID ");
+ data.sql_group = g_string_new ("");
if (limit < 1) {
limit = 1024;
@@ -1493,6 +1499,10 @@ tracker_rdf_query_to_sql (TrackerDBInterface *iface,
}
}
+ if (data.multivalued_select) {
+ g_string_append_printf (data.sql_group, " GROUP BY S.ID ");
+ }
+
result = g_strconcat (data.sql_select->str,
" ",
data.sql_from->str,
@@ -1559,6 +1569,8 @@ tracker_rdf_filter_to_sql (TrackerDBInterface *iface,
data.statement_count = 0;
data.service = (gchar *) service;
+ data.multivalued_select = FALSE;
+
data.sql_from = g_string_new ("");
data.sql_where = g_string_new ("");
append_where_header (data.sql_where, service);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]