tracker r2725 - in trunk: . src/libtracker-data
- From: mottela svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r2725 - in trunk: . src/libtracker-data
- Date: Wed, 17 Dec 2008 15:54:13 +0000 (UTC)
Author: mottela
Date: Wed Dec 17 15:54:13 2008
New Revision: 2725
URL: http://svn.gnome.org/viewvc/tracker?rev=2725&view=rev
Log:
Fixed joining for count and sum fields. Added * as a count field which maps to unique rows
Modified:
trunk/ChangeLog
trunk/src/libtracker-data/tracker-data-search.c
Modified: trunk/src/libtracker-data/tracker-data-search.c
==============================================================================
--- trunk/src/libtracker-data/tracker-data-search.c (original)
+++ trunk/src/libtracker-data/tracker-data-search.c Wed Dec 17 15:54:13 2008
@@ -696,17 +696,21 @@
tracker_field_data_set_is_condition (field_data, TRUE);
}
+ if (is_select) {
+ tracker_field_data_set_is_select (field_data, TRUE);
+ }
+
break;
}
}
if (!field_exists) {
field_data = tracker_data_schema_get_metadata_field (iface,
- service,
- field_name,
- g_slist_length (*fields),
- is_select,
- is_condition);
+ service,
+ field_name,
+ g_slist_length (*fields),
+ is_select,
+ is_condition);
if (field_data) {
*fields = g_slist_prepend (*fields, field_data);
}
@@ -763,7 +767,7 @@
for (i = 0; i < g_strv_length (fields); i++) {
TrackerFieldData *fd;
- fd = tracker_metadata_add_metadata_field (iface, service_type, &field_list, fields[i], FALSE, TRUE);
+ fd = tracker_metadata_add_metadata_field (iface, service_type, &field_list, fields[i], TRUE, FALSE);
if (!fd) {
g_string_free (sql_select, TRUE);
@@ -887,7 +891,7 @@
for (i = 0; i < g_strv_length (fields); i++) {
TrackerFieldData *fd;
- fd = tracker_metadata_add_metadata_field (iface, service_type, &field_list, fields[i], FALSE, TRUE);
+ fd = tracker_metadata_add_metadata_field (iface, service_type, &field_list, fields[i], TRUE, FALSE);
if (!fd) {
g_string_free (sql_select, TRUE);
@@ -919,22 +923,26 @@
if (count_field && !(tracker_is_empty_string (count_field))) {
TrackerFieldData *fd;
- fd = tracker_metadata_add_metadata_field (iface, service_type, &field_list, count_field, FALSE, TRUE);
-
- if (!fd) {
- g_string_free (sql_select, TRUE);
- g_string_free (sql_from, TRUE);
- g_string_free (sql_where, TRUE);
- g_string_free (sql_order, TRUE);
- g_string_free (sql_group, TRUE);
+ if (strcmp (count_field, "*")) {
+ fd = tracker_metadata_add_metadata_field (iface, service_type, &field_list, count_field, TRUE, FALSE);
- g_set_error (error, TRACKER_DBUS_ERROR, 0,
- "Invalid or non-existant metadata type '%s' specified",
- count_field);
- return NULL;
+ if (!fd) {
+ g_string_free (sql_select, TRUE);
+ g_string_free (sql_from, TRUE);
+ g_string_free (sql_where, TRUE);
+ g_string_free (sql_order, TRUE);
+ g_string_free (sql_group, TRUE);
+
+ g_set_error (error, TRACKER_DBUS_ERROR, 0,
+ "Invalid or non-existant metadata type '%s' specified",
+ count_field);
+ return NULL;
+ }
+
+ g_string_append_printf (sql_select, ", COUNT (DISTINCT %s)", tracker_field_data_get_select_field (fd));
+ } else {
+ g_string_append_printf (sql_select, ", COUNT (DISTINCT S.ID)");
}
-
- g_string_append_printf (sql_select, ", COUNT (DISTINCT %s)", tracker_field_data_get_select_field (fd));
}
tracker_rdf_filter_to_sql (iface, query_condition, service_type,
@@ -1043,7 +1051,7 @@
for (i = 0; i < g_strv_length (fields); i++) {
TrackerFieldData *fd;
- fd = tracker_metadata_add_metadata_field (iface, service_type, &field_list, fields[i], FALSE, TRUE);
+ fd = tracker_metadata_add_metadata_field (iface, service_type, &field_list, fields[i], TRUE, FALSE);
if (!fd) {
g_string_free (sql_select, TRUE);
@@ -1075,29 +1083,33 @@
if (count_field && !(tracker_is_empty_string (count_field))) {
TrackerFieldData *fd;
- fd = tracker_metadata_add_metadata_field (iface, service_type, &field_list, count_field, FALSE, TRUE);
-
- if (!fd) {
- g_string_free (sql_select, TRUE);
- g_string_free (sql_from, TRUE);
- g_string_free (sql_where, TRUE);
- g_string_free (sql_order, TRUE);
- g_string_free (sql_group, TRUE);
-
- g_set_error (error, TRACKER_DBUS_ERROR, 0,
- "Invalid or non-existant metadata type '%s' specified",
- count_field);
- return NULL;
+ if (strcmp (count_field, "*")) {
+ fd = tracker_metadata_add_metadata_field (iface, service_type, &field_list, count_field, TRUE, FALSE);
+
+ if (!fd) {
+ g_string_free (sql_select, TRUE);
+ g_string_free (sql_from, TRUE);
+ g_string_free (sql_where, TRUE);
+ g_string_free (sql_order, TRUE);
+ g_string_free (sql_group, TRUE);
+
+ g_set_error (error, TRACKER_DBUS_ERROR, 0,
+ "Invalid or non-existant metadata type '%s' specified",
+ count_field);
+ return NULL;
+ }
+
+ g_string_append_printf (sql_select, ", COUNT (DISTINCT %s)", tracker_field_data_get_select_field (fd));
+ } else {
+ g_string_append_printf (sql_select, ", COUNT (DISTINCT S.ID)");
}
-
- g_string_append_printf (sql_select, ", COUNT (DISTINCT %s)", tracker_field_data_get_select_field (fd));
}
if (sum_field && !(tracker_is_empty_string (sum_field))) {
TrackerFieldData *fd;
TrackerFieldType data_type;
- fd = tracker_metadata_add_metadata_field (iface, service_type, &field_list, sum_field, FALSE, TRUE);
+ fd = tracker_metadata_add_metadata_field (iface, service_type, &field_list, sum_field, TRUE, FALSE);
if (!fd) {
g_string_free (sql_select, TRUE);
@@ -1222,7 +1234,7 @@
sql_from = g_string_new ("\nFROM Services AS S ");
sql_where = g_string_new ("\nWHERE ");
- fd = tracker_metadata_add_metadata_field (iface, service_type, &fields, field, FALSE, TRUE);
+ fd = tracker_metadata_add_metadata_field (iface, service_type, &fields, field, TRUE, FALSE);
if (!fd) {
g_string_free (sql_select, TRUE);
@@ -1331,21 +1343,25 @@
sql_from = g_string_new ("\nFROM Services AS S ");
sql_where = g_string_new ("\nWHERE ");
- fd = tracker_metadata_add_metadata_field (iface, service_type, &fields, field, FALSE, TRUE);
-
- if (!fd) {
- g_string_free (sql_select, TRUE);
- g_string_free (sql_from, TRUE);
- g_string_free (sql_where, TRUE);
+ if (strcmp (field, "*")) {
+ fd = tracker_metadata_add_metadata_field (iface, service_type, &fields, field, TRUE, FALSE);
+
+ if (!fd) {
+ g_string_free (sql_select, TRUE);
+ g_string_free (sql_from, TRUE);
+ g_string_free (sql_where, TRUE);
+
+ g_set_error (error, TRACKER_DBUS_ERROR, 0,
+ "Invalid or non-existant metadata type '%s' specified",
+ field);
+ return 0;
+ }
- g_set_error (error, TRACKER_DBUS_ERROR, 0,
- "Invalid or non-existant metadata type '%s' specified",
- field);
- return 0;
+ g_string_append_printf (sql_select, "COUNT (DISTINCT %s)", tracker_field_data_get_select_field (fd));
+ } else {
+ g_string_append_printf (sql_select, "COUNT (DISTINCT S.ID)");
}
- g_string_append_printf (sql_select, "COUNT (DISTINCT %s)", tracker_field_data_get_select_field (fd));
-
tracker_rdf_filter_to_sql (iface, query_condition, service_type,
&fields, &rdf_from, &rdf_where, &actual_error);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]