summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2009-04-08 09:42:27 +0200
committerJürg Billeter <j@bitron.ch>2009-04-16 10:49:08 +0200
commitebc9620ed3c01717407fc1743c83e16bdb0f37d5 (patch)
tree19b1e7556d83dec4dad332b71608d1052072c7fb
parent05e5ea653de88d833e0c5216e974d3ddcfb900b0 (diff)
downloadtracker-ebc9620ed3c01717407fc1743c83e16bdb0f37d5.tar.gz
Drop RDF query support
The XML-based RDF query support will be replaced by SPARQL.
-rw-r--r--Makefile.am5
-rw-r--r--data/dbus/tracker-metadata.xml70
-rw-r--r--data/dbus/tracker-search.xml54
-rw-r--r--docs/manpages/Makefile.am2
-rw-r--r--docs/manpages/tracker-query.136
-rw-r--r--docs/manpages/tracker-unique.155
-rw-r--r--po/POTFILES.in2
-rw-r--r--rdf-query-examples/80s-music.rdf15
-rw-r--r--rdf-query-examples/90s-music.rdf15
-rw-r--r--rdf-query-examples/all-documents.rdf8
-rw-r--r--rdf-query-examples/big-documents.rdf15
-rw-r--r--rdf-query-examples/wallpapers.rdf16
-rw-r--r--src/libtracker-data/Makefile.am2
-rw-r--r--src/libtracker-data/tracker-data-search.c606
-rw-r--r--src/libtracker-data/tracker-data-search.h46
-rw-r--r--src/libtracker-data/tracker-rdf-query.c1693
-rw-r--r--src/libtracker-data/tracker-rdf-query.h62
-rw-r--r--src/libtracker/tracker.c227
-rw-r--r--src/libtracker/tracker.h16
-rw-r--r--src/tracker-utils/Makefile.am8
-rw-r--r--src/tracker-utils/tracker-query.c281
-rw-r--r--src/tracker-utils/tracker-unique.c244
-rw-r--r--src/trackerd/tracker-metadata.c337
-rw-r--r--src/trackerd/tracker-metadata.h54
-rw-r--r--src/trackerd/tracker-search.c333
-rw-r--r--src/trackerd/tracker-search.h28
26 files changed, 0 insertions, 4230 deletions
diff --git a/Makefile.am b/Makefile.am
index 62412b574..d56107d81 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -21,11 +21,6 @@ gen-ChangeLog:
EXTRA_DIST = \
ChangeLog.pre-0-6-93 \
gitlog-to-changelog \
- rdf-query-examples/80s-music.rdf \
- rdf-query-examples/90s-music.rdf \
- rdf-query-examples/all-documents.rdf \
- rdf-query-examples/big-documents.rdf \
- rdf-query-examples/wallpapers.rdf \
intltool-extract.in \
intltool-merge.in \
intltool-update.in
diff --git a/data/dbus/tracker-metadata.xml b/data/dbus/tracker-metadata.xml
index 7a8da82dc..5afb489db 100644
--- a/data/dbus/tracker-metadata.xml
+++ b/data/dbus/tracker-metadata.xml
@@ -74,75 +74,5 @@
<arg type="as" name="result" direction="out" />
</method>
- <!-- returns an array of all unique values of given metadata types. Optionally a rdf query can be
- used to filter the results. The results are sorted based on the metadata fields either in
- ascending or descending order.
- -->
- <method name="GetUniqueValues">
- <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
- <arg type="s" name="service" direction="in" />
- <arg type="as" name="meta_types" direction="in" />
- <arg type="s" name="query" direction="in" />
- <arg type="b" name="descending" direction="in" />
- <arg type="i" name="offset" direction="in" />
- <arg type="i" name="max_hits" direction="in" />
- <arg type="aas" name="result" direction="out" />
- </method>
-
- <method name="GetSum">
- <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
- <arg type="s" name="service" direction="in" />
- <arg type="s" name="field" direction="in" />
- <arg type="s" name="query" direction="in" />
- <arg type="i" name="result" direction="out" />
- </method>
-
- <method name="GetCount">
- <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
- <arg type="s" name="service" direction="in" />
- <arg type="s" name="field" direction="in" />
- <arg type="s" name="query" direction="in" />
- <arg type="i" name="result" direction="out" />
- </method>
-
- <method name="GetUniqueValuesWithCount">
- <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
- <arg type="s" name="service" direction="in" />
- <arg type="as" name="meta_types" direction="in" />
- <arg type="s" name="query" direction="in" />
- <arg type="s" name="count_field" direction="in" />
- <arg type="b" name="descending" direction="in" />
- <arg type="i" name="offset" direction="in" />
- <arg type="i" name="max_hits" direction="in" />
- <arg type="aas" name="result" direction="out" />
- </method>
-
- <method name="GetUniqueValuesWithCountAndSum">
- <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
- <arg type="s" name="service" direction="in" />
- <arg type="as" name="meta_types" direction="in" />
- <arg type="s" name="query" direction="in" />
- <arg type="s" name="count_field" direction="in" />
- <arg type="s" name="sum_field" direction="in" />
- <arg type="b" name="descending" direction="in" />
- <arg type="i" name="offset" direction="in" />
- <arg type="i" name="max_hits" direction="in" />
- <arg type="aas" name="result" direction="out" />
- </method>
-
- <method name="GetUniqueValuesWithConcatCountAndSum">
- <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
- <arg type="s" name="service" direction="in" />
- <arg type="as" name="meta_types" direction="in" />
- <arg type="s" name="query" direction="in" />
- <arg type="s" name="concat_field" direction="in" />
- <arg type="s" name="count_field" direction="in" />
- <arg type="s" name="sum_field" direction="in" />
- <arg type="b" name="descending" direction="in" />
- <arg type="i" name="offset" direction="in" />
- <arg type="i" name="max_hits" direction="in" />
- <arg type="aas" name="result" direction="out" />
- </method>
-
</interface>
</node>
diff --git a/data/dbus/tracker-search.xml b/data/dbus/tracker-search.xml
index 1cb1b9648..e0d73f8ec 100644
--- a/data/dbus/tracker-search.xml
+++ b/data/dbus/tracker-search.xml
@@ -58,60 +58,6 @@
<arg type="s" name="result" direction="out" />
</method>
- <!-- searches a specific metadata field (field parameter) for a
- search term (search_text). The result is an array of uri/id's.
- -->
- <method name="Metadata">
- <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
- <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
- <arg type="s" name="service" direction="in" />
- <arg type="s" name="field" direction="in" />
- <arg type="s" name="search_text" direction="in" />
- <arg type="i" name="offset" direction="in" />
- <arg type="i" name="max_hits" direction="in" />
- <arg type="as" name="result" direction="out" />
- </method>
-
- <!-- Searches specified service for matching entities.
- - The service parameter specifies the service which the query
- will be performed on.
- - The fields parameter specifies an array of aditional metadata
- fields to return in addition to the id field (which is
- returned as the "key" in the resultant dict/hashtable) and
- the service category. This can be null.
- - The optional search_text paramter specifies the text to
- search for in a full text search of all indexed fields.
- - The optional keyword search, a single keyword may be used
- here to filter the results.
- - The optional query_condition parameter specifies an
- xml-based rdf query condition which is used to filter out the
- results.
- - The Offset parameter sets the start row of the returned
- result set (useful for paging/cursors). A value of 0 should
- be passed to get rows from the beginning.
- - The max_hits parameter limits the size of the result set.
- - The sort_by_service parameter optionally sorts results by
- their service category (if FALSE no service sorting is done).
- - The result is a array of stringarrays in format [uri,
- service, field1, field2...] where field1 is the first
- specified field in the fields paramter and so on.
- -->
- <method name="Query">
- <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
- <arg type="i" name="live_query_id" direction="in" />
- <arg type="s" name="service" direction="in" />
- <arg type="as" name="fields" direction="in" />
- <arg type="s" name="search_text" direction="in" />
- <arg type="as" name="keywords" direction="in" />
- <arg type="s" name="query_condition" direction="in" />
- <arg type="b" name="sort_by_service" direction="in" />
- <arg type="as" name="sort_fields" direction="in" />
- <arg type="b" name="sort_descending" direction="in" />
- <arg type="i" name="offset" direction="in" />
- <arg type="i" name="max_hits" direction="in" />
- <arg type="aas" name="result" direction="out" />
- </method>
-
<!-- Suggests an alternate spelling based on the word index. -->
<method name="Suggest">
<annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
diff --git a/docs/manpages/Makefile.am b/docs/manpages/Makefile.am
index 32eafb6c9..305195cec 100644
--- a/docs/manpages/Makefile.am
+++ b/docs/manpages/Makefile.am
@@ -16,7 +16,6 @@ man_MANS = \
tracker-extract.1 \
tracker-files.1 \
tracker-meta-folder.1 \
- tracker-query.1 \
tracker-search.1 \
tracker-stats.1 \
trackerd.1 \
@@ -26,7 +25,6 @@ man_MANS = \
tracker.cfg.5 \
tracker-services.1 \
tracker-info.1 \
- tracker-unique.1 \
$(tst) \
$(ta) \
$(tp)
diff --git a/docs/manpages/tracker-query.1 b/docs/manpages/tracker-query.1
deleted file mode 100644
index b44ac709a..000000000
--- a/docs/manpages/tracker-query.1
+++ /dev/null
@@ -1,36 +0,0 @@
-.TH tracker-query 1 "July 2007" GNU "User Commands"
-
-.SH NAME
-tracker-query \- command line tool to query tracker database
-
-.SH SYNOPSIS
-.B tracker-query
-.I [OPTIONS] query-file.rdf [MetaDataFields...]
-
-.SH DESCRIPTION
-.B tracker-query
-Exectutes an RDF query and prints the result. Additionally the behavior
-can be customized using below described options.
-
-.SH OPTIONS
-.TP
-\-?, --help
-Show a brief help message.
-
-.TP
-\-s, --service=ServiceName
-Search for files from a specific service. ServiceName has to be one of
-trackers services. For mor information on services, see
-.BR tracker-services (1).
-
-.TP
-\-t, --search-term=SerchTerm
-Adds a full text search filter to the query.
-
-.TP
-\-k, --keyword=Keyword
-Adds a keyword filter to the query.
-
-.SH SEE ALSO
-.BR trackerd (1),
-.BR tracker-services (1).
diff --git a/docs/manpages/tracker-unique.1 b/docs/manpages/tracker-unique.1
deleted file mode 100644
index 27c1c4b56..000000000
--- a/docs/manpages/tracker-unique.1
+++ /dev/null
@@ -1,55 +0,0 @@
-.TH tracker-unique 1 "Oct 2008" GNU "User Commands"
-
-.SH NAME
-tracker-unique \- command line tool to ask for unique values of a
-property in tracker.
-
-.SH SYNOPSIS
-\fBtracker-unique\fR
-[OPTIONS]
--p \fIRDFFILE\fR \fIFIELD\fR [FIELD...]
-
-.SH DESCRIPTION
-.B tracker-unique
-gets all the unique values of \fIFIELD\fR
-after running the RDF query in \fIRDFFILE\fR.
-
-.PP
-More than one field can be used, and then it will return the
-unique values of the combination.
-
-.SH OPTIONS
-.TP
-.B \-?, \-\-help
-Show summary of options.
-.TP
-.B \-p, \-\-path=RDFFILE
-A file containing a RDF query. (See
-documentation for description of the format).
-.TP
-.B FIELD
-A valid property in tracker. For more information on tracker
-properties, see
-.BR tracker-services (1)
-.TP
-.B \-s, \-\-service=SERVICE
-Limit the query to the specified service type. For more information on
-tracker services, see
-.BR tracker-services (1)
-.TP
-.B \-c, \-\-count=FIELD
-Count different values of \fIFIELD\fR in the result of the query.
-.TP
-.B \-u, \-\-sum=FIELD
-Add all values of \fIFIELD\fR in the result of the query.
-.TP
-.B \-o, \-\-desc
-Sort to descending order
-
-
-.SH SEE ALSO
-.BR trackerd (1),
-.BR tracker-services (1).
-
-.SH AUTHOR
-tracker-unique was written by Mikael Ottela <mikael.ottela@ixonos.com>.
diff --git a/po/POTFILES.in b/po/POTFILES.in
index abbdb37c4..afe2c4bcf 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -29,11 +29,9 @@ src/tracker-utils/tracker-files.c
src/tracker-utils/tracker-info.c
src/tracker-utils/tracker-meta-folder.c
src/tracker-utils/tracker-processes.c
-src/tracker-utils/tracker-query.c
src/tracker-utils/tracker-search.c
src/tracker-utils/tracker-services.c
src/tracker-utils/tracker-stats.c
src/tracker-utils/tracker-status.c
src/tracker-utils/tracker-tag.c
-src/tracker-utils/tracker-unique.c
src/trackerd/tracker-main.c
diff --git a/rdf-query-examples/80s-music.rdf b/rdf-query-examples/80s-music.rdf
deleted file mode 100644
index 7040c2335..000000000
--- a/rdf-query-examples/80s-music.rdf
+++ /dev/null
@@ -1,15 +0,0 @@
-<rdfq:Condition>
- <rdfq:and>
-
- <rdfq:greaterThan>
- <rdfq:Property name="Audio:ReleaseDate" />
- <rdf:Integer>1979</rdf:Integer>
- </rdfq:greaterThan>
-
- <rdfq:lessThan>
- <rdfq:Property name="Audio:ReleaseDate" />
- <rdf:Integer>1990</rdf:Integer>
- </rdfq:lessThan>
-
- </rdfq:and>
-</rdfq:Condition>
diff --git a/rdf-query-examples/90s-music.rdf b/rdf-query-examples/90s-music.rdf
deleted file mode 100644
index d49fc7bb4..000000000
--- a/rdf-query-examples/90s-music.rdf
+++ /dev/null
@@ -1,15 +0,0 @@
-<rdfq:Condition>
- <rdfq:and>
-
- <rdfq:greaterThan>
- <rdfq:Property name="Audio:ReleaseDate" />
- <rdf:Integer>1989</rdf:Integer>
- </rdfq:greaterThan>
-
- <rdfq:lessThan>
- <rdfq:Property name="Audio:ReleaseDate" />
- <rdf:Integer>2000</rdf:Integer>
- </rdfq:lessThan>
-
- </rdfq:and>
-</rdfq:Condition>
diff --git a/rdf-query-examples/all-documents.rdf b/rdf-query-examples/all-documents.rdf
deleted file mode 100644
index f58b980ec..000000000
--- a/rdf-query-examples/all-documents.rdf
+++ /dev/null
@@ -1,8 +0,0 @@
-<rdfq:Condition>
-
- <rdfq:inSet>
- <rdfq:Property name="File:Mime" />
- <rdf:String>application/msword,application/pdf,application/vnd.ms-excel,application/vnd.oasis.opendocument.text,application/vnd.sun.xml.writer</rdf:String>
- </rdfq:inSet>
-
-</rdfq:Condition>
diff --git a/rdf-query-examples/big-documents.rdf b/rdf-query-examples/big-documents.rdf
deleted file mode 100644
index e003a63e2..000000000
--- a/rdf-query-examples/big-documents.rdf
+++ /dev/null
@@ -1,15 +0,0 @@
-<rdfq:Condition>
- <rdfq:and>
-
- <rdfq:inSet>
- <rdfq:Property name="File:Mime" />
- <rdf:String>application/msword,application/pdf,application/vnd.ms-excel,application/vnd.oasis.opendocument.text,application/vnd.sun.xml.writer</rdf:String>
- </rdfq:inSet>
-
- <rdfq:greaterThan>
- <rdfq:Property name="Doc:PageCount" />
- <rdf:Integer>10</rdf:Integer>
- </rdfq:greaterThan>
-
- </rdfq:and>
-</rdfq:Condition>
diff --git a/rdf-query-examples/wallpapers.rdf b/rdf-query-examples/wallpapers.rdf
deleted file mode 100644
index 7596e117a..000000000
--- a/rdf-query-examples/wallpapers.rdf
+++ /dev/null
@@ -1,16 +0,0 @@
-<rdfq:Condition>
- <rdfq:and>
-
- <rdfq:greaterThan>
- <rdfq:Property name="Image:Width" />
- <rdf:Integer>1023</rdf:Integer>
- </rdfq:greaterThan>
-
- <rdfq:greaterThan>
- <rdfq:Property name="Image:Height" />
- <rdf:Integer>767</rdf:Integer>
- </rdfq:greaterThan>
-
-
- </rdfq:and>
-</rdfq:Condition>
diff --git a/src/libtracker-data/Makefile.am b/src/libtracker-data/Makefile.am
index 8dbc06f61..fa7a6e3de 100644
--- a/src/libtracker-data/Makefile.am
+++ b/src/libtracker-data/Makefile.am
@@ -24,7 +24,6 @@ libtracker_data_la_SOURCES = \
tracker-data-update.c \
tracker-field-data.c \
tracker-query-tree.c \
- tracker-rdf-query.c \
tracker-turtle.c
noinst_HEADERS = \
@@ -37,7 +36,6 @@ noinst_HEADERS = \
tracker-data-update.h \
tracker-field-data.h \
tracker-query-tree.h \
- tracker-rdf-query.h \
tracker-turtle.h
libtracker_data_la_LDFLAGS = \
diff --git a/src/libtracker-data/tracker-data-search.c b/src/libtracker-data/tracker-data-search.c
index 1c2b0bae3..1a9fd5b4e 100644
--- a/src/libtracker-data/tracker-data-search.c
+++ b/src/libtracker-data/tracker-data-search.c
@@ -40,7 +40,6 @@
#include "tracker-data-schema.h"
#include "tracker-data-search.h"
#include "tracker-query-tree.h"
-#include "tracker-rdf-query.h"
#define DEFAULT_METADATA_MAX_HITS 1024
@@ -619,611 +618,6 @@ tracker_data_search_keywords_get_list (TrackerDBInterface *iface,
}
-static gint
-metadata_sanity_check_max_hits (gint max_hits)
-{
- if (max_hits < 1) {
- return DEFAULT_METADATA_MAX_HITS;
- }
-
- return max_hits;
-}
-
-static gboolean
-is_data_type_numeric (TrackerFieldType type)
-{
- return
- type == TRACKER_FIELD_TYPE_INTEGER ||
- type == TRACKER_FIELD_TYPE_DOUBLE;
-}
-
-static gboolean
-is_data_type_text (TrackerFieldType type)
-{
- return
- type == TRACKER_FIELD_TYPE_STRING ||
- type == TRACKER_FIELD_TYPE_INDEX;
-}
-
-static TrackerFieldData *
-tracker_metadata_add_metadata_field (TrackerDBInterface *iface,
- const gchar *service,
- GSList **fields,
- const gchar *field_name,
- gboolean is_select,
- gboolean is_condition,
- gboolean is_order)
-{
- TrackerFieldData *field_data;
- gboolean field_exists;
- GSList *l;
-
- field_exists = FALSE;
- field_data = NULL;
-
- /* Check if field is already in list */
- for (l = *fields; l; l = l->next) {
- const gchar *this_field_name;
-
- this_field_name = tracker_field_data_get_field_name (l->data);
- if (!this_field_name) {
- continue;
- }
-
- if (strcasecmp (this_field_name, field_name) == 0) {
- field_data = l->data;
- field_exists = TRUE;
-
- if (is_condition) {
- tracker_field_data_set_is_condition (field_data, TRUE);
- }
-
- if (is_select) {
- tracker_field_data_set_is_select (field_data, TRUE);
- }
-
- if (is_order) {
- tracker_field_data_set_is_order (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);
- if (field_data) {
- *fields = g_slist_prepend (*fields, field_data);
- }
-
- if (is_order) {
- tracker_field_data_set_is_order (field_data, TRUE);
- }
- }
-
- return field_data;
-}
-
-TrackerDBResultSet *
-tracker_data_search_get_unique_values (const gchar *service_type,
- gchar **fields,
- const gchar *query_condition,
- gboolean order_desc,
- gint offset,
- gint max_hits,
- GError **error)
-{
- return tracker_data_search_get_unique_values_with_concat_count_and_sum (service_type,
- fields,
- query_condition,
- NULL,
- NULL,
- NULL,
- order_desc,
- offset,
- max_hits,
- error);
-}
-
-TrackerDBResultSet *
-tracker_data_search_get_unique_values_with_count (const gchar *service_type,
- gchar **fields,
- const gchar *query_condition,
- const gchar *count_field,
- gboolean order_desc,
- gint offset,
- gint max_hits,
- GError **error)
-{
- return tracker_data_search_get_unique_values_with_concat_count_and_sum (service_type,
- fields,
- query_condition,
- NULL,
- count_field,
- NULL,
- order_desc,
- offset,
- max_hits,
- error);
-}
-
-TrackerDBResultSet *
-tracker_data_search_get_unique_values_with_count_and_sum (const gchar *service_type,
- gchar **fields,
- const gchar *query_condition,
- const gchar *count_field,
- const gchar *sum_field,
- gboolean order_desc,
- gint offset,
- gint max_hits,
- GError **error)
-{
- return tracker_data_search_get_unique_values_with_concat_count_and_sum (service_type,
- fields,
- query_condition,
- NULL,
- count_field,
- sum_field,
- order_desc,
- offset,
- max_hits,
- error);
-}
-
-TrackerDBResultSet *
-tracker_data_search_get_unique_values_with_concat_count_and_sum (const gchar *service_type,
- gchar **fields,
- const gchar *query_condition,
- const gchar *concat_field,
- const gchar *count_field,
- const gchar *sum_field,
- gboolean order_desc,
- gint offset,
- gint max_hits,
- GError **error)
-{
- TrackerDBInterface *iface;
- TrackerDBResultSet *result_set = NULL;
-
- GSList *field_list = NULL;
- gchar *str_offset, *str_limit;
-
- GString *sql_select;
- GString *sql_from;
- GString *sql_where;
- GString *sql_order;
- GString *sql_group;
- gchar *sql;
-
- gchar *rdf_where;
- gchar *rdf_from;
- GError *actual_error = NULL;
-
- guint i;
-
- g_return_val_if_fail (service_type != NULL, NULL);
- g_return_val_if_fail (fields != NULL, NULL);
- g_return_val_if_fail (query_condition != NULL, NULL);
-
- if (!tracker_ontology_service_is_valid (service_type)) {
- g_set_error (error, TRACKER_DBUS_ERROR, 0,
- "Service_Type '%s' is invalid or has not been implemented yet",
- service_type);
- return NULL;
- }
-
- iface = tracker_db_manager_get_db_interface_by_service (service_type);
-
- sql_select = g_string_new ("SELECT DISTINCT ");
- sql_from = g_string_new ("\nFROM Services AS S ");
- sql_where = g_string_new ("\nWHERE ");
- sql_order = g_string_new ("");
- sql_group = g_string_new ("\nGROUP BY ");
-
-
- for (i = 0; i < g_strv_length (fields); i++) {
- TrackerFieldData *fd;
-
- fd = tracker_metadata_add_metadata_field (iface, service_type, &field_list, fields[i], TRUE, 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",
- fields[i]);
- return NULL;
- }
-
- if (i) {
- g_string_append_printf (sql_select, ",");
- g_string_append_printf (sql_group, ",");
- }
-
- g_string_append_printf (sql_select, "%s", tracker_field_data_get_select_field (fd));
- if (order_desc) {
- if (i) {
- g_string_append_printf (sql_order, ",");
- }
- g_string_append_printf (sql_order, "\nORDER BY %s DESC ",
- tracker_field_data_get_order_field (fd));
- }
- g_string_append_printf (sql_group, "%s", tracker_field_data_get_order_field (fd));
-
- }
-
- if (concat_field && !(tracker_is_empty_string (concat_field))) {
- TrackerFieldData *fd;
- TrackerFieldType data_type;
-
- fd = tracker_metadata_add_metadata_field (iface, service_type, &field_list, concat_field, TRUE, FALSE, 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",
- sum_field);
- return NULL;
- }
-
- data_type = tracker_field_data_get_data_type (fd);
-
- if (!is_data_type_text (data_type)) {
- 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,
- "Cannot concatenate '%s': this metadata type is not text",
- sum_field);
- return NULL;
- }
-
- g_string_append_printf (sql_select, ", GROUP_CONCAT (DISTINCT %s)", tracker_field_data_get_select_field (fd));
- }
-
- if (count_field && !(tracker_is_empty_string (count_field))) {
- TrackerFieldData *fd;
-
- if (strcmp (count_field, "*")) {
- fd = tracker_metadata_add_metadata_field (iface, service_type, &field_list, count_field,
- TRUE, FALSE, 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)");
- }
- }
-
- 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, TRUE, FALSE, 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",
- sum_field);
- return NULL;
- }
-
- data_type = tracker_field_data_get_data_type (fd);
-
- if (!is_data_type_numeric (data_type)) {
- 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,
- "Cannot sum '%s': this metadata type is not numeric",
- sum_field);
- return NULL;
- }
-
- g_string_append_printf (sql_select, ", SUM (%s)", tracker_field_data_get_select_field (fd));
- }
-
- tracker_rdf_filter_to_sql (iface, query_condition, service_type,
- &field_list, &rdf_from, &rdf_where, &actual_error);
-
- if (actual_error) {
- 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_propagate_error (error, actual_error);
-
- return NULL;
- }
-
- g_string_append_printf (sql_from, " %s ", rdf_from);
- g_string_append_printf (sql_where, " %s ", rdf_where);
-
- g_free (rdf_from);
- g_free (rdf_where);
-
- str_offset = tracker_gint_to_string (offset);
- str_limit = tracker_gint_to_string (metadata_sanity_check_max_hits (max_hits));
-
- g_string_append_printf (sql_order, " LIMIT %s,%s", str_offset, str_limit);
-
- sql = g_strconcat (sql_select->str, " ",
- sql_from->str, " ",
- sql_where->str, " ",
- sql_group->str, " ",
- sql_order->str, NULL);
-
- g_free (str_offset);
- g_free (str_limit);
-
- 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_slist_foreach (field_list, (GFunc) g_object_unref, NULL);
- g_slist_free (field_list);
-
- g_message ("Unique values query executed:\n%s", sql);
-
- result_set = tracker_db_interface_execute_query (iface, NULL, "%s", sql);
-
- g_free (sql);
-
- return result_set;
-}
-
-gint
-tracker_data_search_get_sum (const gchar *service_type,
- const gchar *field,
- const gchar *query_condition,
- GError **error)
-{
- TrackerDBInterface *iface;
- TrackerDBResultSet *result_set = NULL;
-
- gint sum;
- GSList *fields = NULL;
- TrackerFieldData *fd = NULL;
- TrackerFieldType data_type;
- GString *sql_select;
- GString *sql_from;
- GString *sql_where;
- gchar *sql;
-
- char *rdf_where;
- char *rdf_from;
- GError *actual_error = NULL;
-
- g_return_val_if_fail (service_type != NULL, 0);
- g_return_val_if_fail (field != NULL, 0);
- g_return_val_if_fail (query_condition != NULL, 0);
-
- if (!tracker_ontology_service_is_valid (service_type)) {
- g_set_error (error, TRACKER_DBUS_ERROR, 0,
- "Service_Type '%s' is invalid or has not been implemented yet",
- service_type);
- return 0;
- }
-
- iface = tracker_db_manager_get_db_interface_by_service (service_type);
-
- sql_select = g_string_new ("SELECT ");
- 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, TRUE, FALSE, 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;
- }
-
- data_type = tracker_field_data_get_data_type (fd);
- if (!is_data_type_numeric (data_type)) {
- 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,
- "Cannot sum '%s': this metadata type is not numeric",
- field);
- return 0;
- }
-
- g_string_append_printf (sql_select, "SUM (%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);
-
- if (actual_error) {
-
- g_string_free (sql_select, TRUE);
- g_string_free (sql_from, TRUE);
- g_string_free (sql_where, TRUE);
-
- g_propagate_error (error, actual_error);
- return 0;
- }
-
- g_string_append_printf (sql_from, " %s ", rdf_from);
- g_string_append_printf (sql_where, " %s ", rdf_where);
-
- g_free (rdf_from);
- g_free (rdf_where);
-
- sql = g_strconcat (sql_select->str, " ", sql_from->str, " ", sql_where->str, NULL);
-
- g_string_free (sql_select, TRUE);
- g_string_free (sql_from, TRUE);
- g_string_free (sql_where, TRUE);
-
- g_slist_foreach (fields, (GFunc) g_object_unref, NULL);
- g_slist_free (fields);
-
- g_debug ("Sum query executed:\n%s", sql);
-
- result_set = tracker_db_interface_execute_query (iface, NULL, "%s", sql);
-
- g_free (sql);
-
- tracker_db_result_set_get (result_set, 0, &sum, -1);
-
- if (result_set) {
- g_object_unref (result_set);
- }
-
- return sum;
-}
-
-
-gint
-tracker_data_search_get_count (const gchar *service_type,
- const gchar *field,
- const gchar *query_condition,
- GError **error)
-{
- TrackerDBInterface *iface;
- TrackerDBResultSet *result_set = NULL;
- gint count;
- GSList *fields = NULL;
- TrackerFieldData *fd;
-
- GString *sql_select;
- GString *sql_from;
- GString *sql_where;
- gchar *sql;
-
- char *rdf_where;
- char *rdf_from;
- GError *actual_error = NULL;
-
- g_return_val_if_fail (service_type != NULL, 0);
- g_return_val_if_fail (field != NULL, 0);
- g_return_val_if_fail (query_condition != NULL, 0);
-
- if (!tracker_ontology_service_is_valid (service_type)) {
- g_set_error (error, TRACKER_DBUS_ERROR, 0,
- "Service_Type '%s' is invalid or has not been implemented yet",
- service_type);
- return 0;
- }
-
- iface = tracker_db_manager_get_db_interface_by_service (service_type);
-
- sql_select = g_string_new ("SELECT ");
- sql_from = g_string_new ("\nFROM Services AS S ");
- sql_where = g_string_new ("\nWHERE ");
-
- if (strcmp (field, "*")) {
- fd = tracker_metadata_add_metadata_field (iface, service_type, &fields, field, TRUE, FALSE, 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_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)");
- }
-
- tracker_rdf_filter_to_sql (iface, query_condition, service_type,
- &fields, &rdf_from, &rdf_where, &actual_error);
-
- if (actual_error) {
-
- g_string_free (sql_select, TRUE);
- g_string_free (sql_from, TRUE);
- g_string_free (sql_where, TRUE);
-
- g_propagate_error (error, actual_error);
- return 0;
- }
-
- g_string_append_printf (sql_from, " %s ", rdf_from);
- g_string_append_printf (sql_where, " %s ", rdf_where);
-
- g_free (rdf_from);
- g_free (rdf_where);
-
- sql = g_strconcat (sql_select->str, " ", sql_from->str, " ", sql_where->str, NULL);
-
- g_string_free (sql_select, TRUE);
- g_string_free (sql_from, TRUE);
- g_string_free (sql_where, TRUE);
-
- g_slist_foreach (fields, (GFunc) g_object_unref, NULL);
- g_slist_free (fields);
-
- g_message ("Count query executed:\n%s", sql);
-
- result_set = tracker_db_interface_execute_query (iface, NULL, "%s", sql);
-
- g_free (sql);
-
- tracker_db_result_set_get (result_set, 0, &count, -1);
-
- if (result_set) {
- g_object_unref (result_set);
- }
-
- return count;
-}
-
TrackerDBResultSet *
tracker_data_search_metadata_in_path (const gchar *path,
gchar **fields,
diff --git a/src/libtracker-data/tracker-data-search.h b/src/libtracker-data/tracker-data-search.h
index 50dcca2c2..3c128070f 100644
--- a/src/libtracker-data/tracker-data-search.h
+++ b/src/libtracker-data/tracker-data-search.h
@@ -75,52 +75,6 @@ TrackerDBResultSet *tracker_data_search_files_get_by_mime (TrackerDBInterface
TrackerDBResultSet *tracker_data_search_keywords_get_list (TrackerDBInterface *iface,
const gchar *service);
-TrackerDBResultSet *tracker_data_search_get_unique_values (const gchar *service_type,
- gchar **fields,
- const gchar *query_condition,
- gboolean order_desc,
- gint offset,
- gint max_hits,
- GError **error);
-gint tracker_data_search_get_sum (const gchar *service_type,
- const gchar *field,
- const gchar *query_condition,
- GError **error);
-gint tracker_data_search_get_count (const gchar *service_type,
- const gchar *field,
- const gchar *query_condition,
- GError **error);
-
-TrackerDBResultSet *tracker_data_search_get_unique_values_with_count (const gchar *service_type,
- gchar **fields,
- const gchar *query_condition,
- const gchar *count,
- gboolean order_desc,
- gint offset,
- gint max_hits,
- GError **error);
-
-TrackerDBResultSet *tracker_data_search_get_unique_values_with_count_and_sum (const gchar *service_type,
- gchar **fields,
- const gchar *query_condition,
- const gchar *count,
- const gchar *sum,
- gboolean order_desc,
- gint offset,
- gint max_hits,
- GError **error);
-
-TrackerDBResultSet *tracker_data_search_get_unique_values_with_concat_count_and_sum (const gchar *service_type,
- gchar **fields,
- const gchar *query_condition,
- const gchar *concat_field,
- const gchar *count,
- const gchar *sum,
- gboolean order_desc,
- gint offset,
- gint max_hits,
- GError **error);
-
TrackerDBResultSet *tracker_data_search_metadata_in_path (const gchar *path,
gchar **fields,
GError **error);
diff --git a/src/libtracker-data/tracker-rdf-query.c b/src/libtracker-data/tracker-rdf-query.c
deleted file mode 100644
index 49474e2e3..000000000
--- a/src/libtracker-data/tracker-rdf-query.c
+++ /dev/null
@@ -1,1693 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* Tracker - indexer and metadata database engine
- * Copyright (C) 2006, Mr Jamie McCracken (jamiemcc@gnome.org)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <string.h>
-#include <glib.h>
-
-#include <libtracker-common/tracker-log.h>
-#include <libtracker-common/tracker-ontology.h>
-#include <libtracker-common/tracker-type-utils.h>
-#include <libtracker-common/tracker-utils.h>
-
-#include "tracker-data-manager.h"
-#include "tracker-data-schema.h"
-#include "tracker-field-data.h"
-#include "tracker-rdf-query.h"
-
-/* RDF Query Condition
- * <rdfq:Condition>
- * <rdfq:and>
- * <rdfq:greaterThan>
- * <rdfq:Property name="File:Size" />
- * <rdf:Integer>1000000</rdf:Integer>
- * </rdfq:greaterThan>
- * <rdfq:equals>
- * <rdfq:Property name="File:Path" />
- * <rdf:String>/home/jamie</rdf:String>
- * </rdfq:equals>
- * </rdfq:and>
- * </rdfq:Condition>
- */
-
-/* Main elements */
-#define ELEMENT_RDF_CONDITION "rdfq:Condition"
-#define ELEMENT_RDF_PROPERTY "rdfq:Property"
-
-/* Operators */
-#define ELEMENT_RDF_AND "rdfq:and"
-#define ELEMENT_RDF_OR "rdfq:or"
-#define ELEMENT_RDF_NOT "rdfq:not"
-#define ELEMENT_RDF_EQUALS "rdfq:equals"
-#define ELEMENT_RDF_GREATER_THAN "rdfq:greaterThan"
-#define ELEMENT_RDF_GREATER_OR_EQUAL "rdfq:greaterOrEqual"
-#define ELEMENT_RDF_LESS_THAN "rdfq:lessThan"
-#define ELEMENT_RDF_LESS_OR_EQUAL "rdfq:lessOrEqual"
-
-/* Extension operators - "contains" does a substring or full text
- * match, "in_Set" does string in list match
- */
-#define ELEMENT_RDF_CONTAINS "rdfq:contains"
-#define ELEMENT_RDF_REGEX "rdfq:regex"
-#define ELEMENT_RDF_STARTS_WITH "rdfq:startsWith"
-#define ELEMENT_RDF_IN_SET "rdfq:inSet"
-
-/* Types */
-#define ELEMENT_RDF_INTEGER "rdf:Integer"
-#define ELEMENT_RDF_DATE "rdf:Date" /* Format can
- * be iso 8601
- * with
- * optional
- * timezone
- * "yyyy-mm-ddThh:mm:ss"
- * or
- * "yyyy-mm-ddThh:mm:ss+hh:mm"
- * - most
- * other
- * formats are
- * supported
- * too
- */
-#define ELEMENT_RDF_STRING "rdf:String"
-#define ELEMENT_RDF_FLOAT "rdf:Float"
-
-#define ELEMENT_IS(name) (strcmp (element_name, (name)) == 0)
-
-enum {
- NO_ERROR,
- PARSE_ERROR,
-};
-
-typedef enum {
- STATE_START,
- STATE_CONDITION,
- STATE_END_CONDITION,
- STATE_PROPERTY,
- STATE_AND,
- STATE_END_AND,
- STATE_OR,
- STATE_END_OR,
- STATE_NOT,
- STATE_END_NOT,
- STATE_EQUALS,
- STATE_END_EQUALS,
- STATE_GREATER_THAN,
- STATE_END_GREATER_THAN,
- STATE_GREATER_OR_EQUAL,
- STATE_END_GREATER_OR_EQUAL,
- STATE_LESS_THAN,
- STATE_END_LESS_THAN,
- STATE_LESS_OR_EQUAL,
- STATE_END_LESS_OR_EQUAL,
- STATE_CONTAINS,
- STATE_END_CONTAINS,
- STATE_REGEX,
- STATE_END_REGEX,
- STATE_STARTS_WITH,
- STATE_END_STARTS_WITH,
- STATE_IN_SET,
- STATE_END_IN_SET,
- STATE_INTEGER,
- STATE_END_INTEGER,
- STATE_STRING,
- STATE_END_STRING,
- STATE_FLOAT,
- STATE_END_FLOAT,
- STATE_DATE,
- STATE_END_DATE
-} ParseState;
-
-typedef enum {
- OP_NONE,
- OP_EQUALS,
- OP_GREATER,
- OP_GREATER_EQUAL,
- OP_LESS,
- OP_LESS_EQUAL,
- OP_CONTAINS,
- OP_REGEX,
- OP_SET,
- OP_STARTS
-} Operators;
-
-typedef enum {
- LOP_NONE,
- LOP_AND,
- LOP_OR
-} LogicOperators;
-
-typedef struct {
- GMarkupParseContext *context;
- GMarkupParser *parser;
- GSList *stack;
- GSList *fields;
- gboolean query_okay;
- gint statement_count;
- LogicOperators current_logic_operator;
- Operators current_operator;
- gchar *current_field;
- gchar *current_value;
- TrackerDBInterface *iface;
- GString *sql_select;
- GString *sql_from;
- GString *sql_where;
- GString *sql_group;
- GString *sql_order;
- gchar *service;
-} ParserData;
-
-static void start_element_handler (GMarkupParseContext *context,
- const gchar *element_name,
- const gchar **attribute_names,
- const gchar **attribute_values,
- gpointer user_data,
- GError **error);
-static void end_element_handler (GMarkupParseContext *context,
- const gchar *element_name,
- gpointer user_data,
- GError **error);
-static void text_handler (GMarkupParseContext *context,
- const gchar *text,
- gsize text_len,
- gpointer user_data,
- GError **error);
-static void error_handler (GMarkupParseContext *context,
- GError *error,
- gpointer user_data);
-
-static gboolean
-is_operator (ParseState state)
-{
- return
- state == STATE_EQUALS ||
- state == STATE_GREATER_THAN ||
- state == STATE_LESS_THAN ||
- state == STATE_CONTAINS ||
- state == STATE_IN_SET ||
- state == STATE_LESS_OR_EQUAL ||
- state == STATE_GREATER_OR_EQUAL ||
- state == STATE_STARTS_WITH ||
- state == STATE_REGEX;
-}
-
-static gboolean
-is_end_operator (ParseState state)
-{
- return
- state == STATE_END_EQUALS ||
- state == STATE_END_GREATER_THAN ||
- state == STATE_END_LESS_THAN ||
- state == STATE_END_CONTAINS ||
- state == STATE_END_IN_SET ||
- state == STATE_END_LESS_OR_EQUAL ||
- state == STATE_END_GREATER_OR_EQUAL ||
- state == STATE_END_STARTS_WITH ||
- state == STATE_REGEX;
-}
-
-static gboolean
-is_logic (ParseState state)
-{
- return
- state == STATE_AND ||
- state == STATE_OR ||
- state == STATE_NOT;
-}
-
-static gboolean
-is_end_logic (ParseState state)
-{
- return
- state == STATE_END_AND ||
- state == STATE_END_NOT ||
- state == STATE_END_OR;
-}
-
-static void
-set_error (GError **err,
- GMarkupParseContext *context,
- gint error_code,
- const gchar *format,
- ...)
-{
- gint line, ch;
- va_list args;
- gchar *str;
-
- g_markup_parse_context_get_position (context, &line, &ch);
-
- va_start (args, format);
- str = g_strdup_vprintf (format, args);
- va_end (args);
-
- g_set_error (err,
- tracker_rdf_error_quark (),
- error_code,
- "Line %d character %d: %s",
- line, ch, str);
-
- g_free (str);
-}
-
-static gboolean
-set_error_on_fail (gboolean condition,
- GMarkupParseContext *context,
- const gchar *msg,
- GError **err)
-{
- if (!condition) {
- set_error (err, context, 1, msg);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static const gchar *
-get_attribute_value (const gchar *name,
- const gchar **names,
- const gchar **values)
-{
- gint i;
-
- i = 0;
-
- while (names[i]) {
- if (strcmp (name, names[i]) == 0) {
- return values[i];
- }
- i++;
- }
-
- return NULL;
-}
-
-static const gchar *
-get_attribute_value_required (GMarkupParseContext *context,
- const gchar *tag,
- const gchar *name,
- const gchar **names,
- const gchar **values,
- GError **error)
-{
- const gchar *value;
-
- value = get_attribute_value (name, names, values);
-
- if (!value) {
- set_error (error,
- context,
- PARSE_ERROR,
- "%s must have \"%s\" attribute",
- tag, name);
- }
-
- return value;
-}
-
-static void
-push_stack (ParserData *data, ParseState state)
-{
- data->stack = g_slist_prepend (data->stack, GINT_TO_POINTER (state));
-}
-
-static void
-pop_stack (ParserData *data)
-{
- g_return_if_fail (data->stack != NULL);
-
- data->stack = g_slist_remove (data->stack, data->stack->data);
-}
-
-static ParseState
-peek_state (ParserData *data)
-{
- g_return_val_if_fail (data->stack != NULL, STATE_START);
-
- return GPOINTER_TO_INT (data->stack->data);
-}
-
-static void
-pop_stack_until (ParserData *data, ParseState state)
-{
- while (data->stack != NULL) {
-
- if (state == peek_state (data)) {
- pop_stack (data);
- break;
- }
-
- pop_stack (data);
- }
-}
-
-static TrackerFieldData *
-add_metadata_field (ParserData *data,
- const gchar *field_name,
- gboolean is_select,
- gboolean is_condition,
- gboolean is_order)
-{
- TrackerFieldData *field_data;
- gboolean field_exists;
- GSList *l;
-
- field_exists = FALSE;
- field_data = NULL;
-
- /* Check if field is already in list */
- for (l = data->fields; l; l = l->next) {
- const gchar *this_field_name;
-
- this_field_name = tracker_field_data_get_field_name (l->data);
-
- if (!this_field_name) {
- continue;
- }
-
- if (strcasecmp (this_field_name, field_name) == 0) {
- field_data = l->data;
- field_exists = TRUE;
-
- if (is_condition) {
- tracker_field_data_set_is_condition (field_data, TRUE);
- }
-
- if (is_select) {
- 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)) {
- g_string_append_printf (data->sql_select, ", GROUP_CONCAT (%s)",
- tracker_field_data_get_select_field (field_data));
- } else {
- g_string_append_printf (data->sql_select, ", %s",
- tracker_field_data_get_select_field (field_data));
- }
- }
- }
-
- if (is_order) {
- tracker_field_data_set_is_order (field_data, TRUE);
- }
-
- break;
- }
- }
-
- if (!field_exists) {
- field_data = tracker_data_schema_get_metadata_field (data->iface,
- data->service,
- field_name,
- g_slist_length (data->fields),
- is_select,
- is_condition);
- if (field_data) {
- data->fields = g_slist_prepend (data->fields, field_data);
- if (is_select) {
- if(tracker_field_data_get_multiple_values(field_data)) {
- g_string_append_printf (data->sql_select, ", GROUP_CONCAT (%s)",
- tracker_field_data_get_select_field (field_data));
- } else {
- g_string_append_printf (data->sql_select, ", %s",
- tracker_field_data_get_select_field (field_data));
- }
- }
-
- if (is_order) {
- tracker_field_data_set_is_order (field_data, TRUE);
- }
- }
- }
-
- return field_data;
-}
-
-static void
-start_element_handler (GMarkupParseContext *context,
- const gchar *element_name,
- const gchar **attribute_names,
- const gchar **attribute_values,
- gpointer user_data,
- GError **error)
-{
- ParserData *data;
- ParseState state;
-
- data = user_data;
- state = peek_state (data);
-
- if (ELEMENT_IS (ELEMENT_RDF_CONDITION)) {
- if (set_error_on_fail (state == STATE_START,
- context,
- "Condition element not expected here",
- error)) {
- return;
- }
-
- push_stack (data, STATE_CONDITION);
-
- } else if (ELEMENT_IS (ELEMENT_RDF_PROPERTY)) {
- const char *name;
-
- if (set_error_on_fail (is_operator (state),
- context,
- "Property element not expected here",
- error)) {
- return;
- }
-
- name = get_attribute_value_required (context,
- "<rdfq:Property>", "name",
- attribute_names, attribute_values,
- error);
-
- if (!name) {
- return;
- } else {
- if (data->current_operator == OP_NONE) {
- set_error (error,
- context,
- PARSE_ERROR,
- "no operator found for Property \"%s\"",
- name);
- return;
- }
-
- data->current_field = g_strdup (name);
-
- push_stack (data, STATE_PROPERTY);
- }
- } else if (ELEMENT_IS (ELEMENT_RDF_AND)) {
- if (set_error_on_fail (state == STATE_CONDITION ||
- is_logic (state) ||
- is_end_logic (state) ||
- is_end_operator (state),
- context,
- "AND element not expected here",
- error)) {
- return;
- }
-
- if (data->statement_count >= 1) {
- if (data->current_logic_operator == LOP_AND) {
- data->sql_where = g_string_append (data->sql_where,
- " AND ");
- } else {
- if (data->current_logic_operator == LOP_OR) {
- data->sql_where = g_string_append (data->sql_where,
- " OR ");
- }
- }
- }
-
- data->statement_count = 0;
- data->sql_where = g_string_append (data->sql_where, " ( ");
- data->current_logic_operator = LOP_AND;
- push_stack (data, STATE_AND);
- } else if (ELEMENT_IS (ELEMENT_RDF_OR)) {
- if (set_error_on_fail (state == STATE_CONDITION ||
- is_logic (state) ||
- is_end_logic (state) ||
- is_end_operator (state),
- context,
- "OR element not expected here",
- error)) {
- return;
- }
-
- if (data->statement_count >= 1) {
- if (data->current_logic_operator == LOP_AND) {
- data->sql_where = g_string_append (data->sql_where,
- " AND ");
- } else {
- if (data->current_logic_operator == LOP_OR) {
- data->sql_where = g_string_append (data->sql_where,
- " OR ");
- }
- }
- }
-
- data->statement_count = 0;
- data->sql_where = g_string_append (data->sql_where, " ( ");
- data->current_logic_operator = LOP_OR;
- push_stack (data, STATE_OR);
-
- } else if (ELEMENT_IS (ELEMENT_RDF_NOT)) {
- if (set_error_on_fail (state == STATE_CONDITION ||
- is_logic (state) ||
- is_end_logic (state) ||
- is_end_operator (state),
- context,
- "NOT element not expected here",
- error)) {
- return;
- }
-
- if (data->statement_count >= 1) {
- if (data->current_logic_operator == LOP_AND) {
- data->sql_where = g_string_append (data->sql_where,
- " AND ");
- } else {
- if (data->current_logic_operator == LOP_OR) {
- data->sql_where = g_string_append (data->sql_where,
- " OR ");
- }
- }
- }
-
- data->statement_count = 0;
- data->sql_where = g_string_append (data->sql_where, " NOT ( ");
- push_stack (data, STATE_NOT);
-
- } else if (ELEMENT_IS (ELEMENT_RDF_EQUALS)) {
- if (set_error_on_fail (state == STATE_CONDITION ||
- is_logic (state) ||
- ((data->current_logic_operator == LOP_AND ||
- data->current_logic_operator == LOP_OR) &&
- is_end_operator (state)),
- context,
- "EQUALS element not expected here",
- error)) {
- return;
- }
-
- data->current_operator = OP_EQUALS;
- push_stack (data, STATE_EQUALS);
-
- } else if (ELEMENT_IS (ELEMENT_RDF_GREATER_THAN)) {
-
- if (set_error_on_fail (state == STATE_CONDITION ||
- is_logic (state) ||
- ((data->current_logic_operator == LOP_AND ||
- data->current_logic_operator == LOP_OR) &&
- is_end_operator (state)),
- context,
- "GREATERTHAN element not expected here",
- error)) {
- return;
- }
-
- data->current_operator = OP_GREATER;
- push_stack (data, STATE_GREATER_THAN);
- } else if (ELEMENT_IS (ELEMENT_RDF_GREATER_OR_EQUAL)) {
- if (set_error_on_fail (state == STATE_CONDITION ||
- is_logic (state) ||
- ((data->current_logic_operator == LOP_AND ||
- data->current_logic_operator == LOP_OR) &&
- is_end_operator (state)),
- context,
- "GREATEROREQUAL element not expected here",
- error)) {
- return;
- }
-
- data->current_operator = OP_GREATER_EQUAL;
- push_stack (data, STATE_GREATER_OR_EQUAL);
- } else if (ELEMENT_IS (ELEMENT_RDF_LESS_THAN )) {
- if (set_error_on_fail (state == STATE_CONDITION ||
- is_logic (state) ||
- ((data->current_logic_operator == LOP_AND ||
- data->current_logic_operator == LOP_OR) &&
- is_end_operator (state)),
- context,
- "LESSTHAN element not expected here",
- error)) {
- return;
- }
-
- data->current_operator = OP_LESS;
- push_stack (data, STATE_LESS_THAN);
- } else if (ELEMENT_IS (ELEMENT_RDF_LESS_OR_EQUAL)) {
- if (set_error_on_fail (state == STATE_CONDITION ||
- is_logic (state) ||
- ((data->current_logic_operator == LOP_AND ||
- data->current_logic_operator == LOP_OR) &&
- is_end_operator (state)),
- context,
- "LESSOREQUAL element not expected here",
- error)) {
- return;
- }
-
- data->current_operator = OP_LESS_EQUAL;
- push_stack (data, STATE_LESS_OR_EQUAL);
- } else if (ELEMENT_IS (ELEMENT_RDF_CONTAINS)) {
- if (set_error_on_fail (state == STATE_CONDITION ||
- is_logic (state) ||
- ((data->current_logic_operator == LOP_AND ||
- data->current_logic_operator == LOP_OR) &&
- is_end_operator (state)),
- context,
- "CONTAINS element not expected here",
- error)) {
- return;
- }
-
- data->current_operator = OP_CONTAINS;
- push_stack (data, STATE_CONTAINS);
- } else if (ELEMENT_IS (ELEMENT_RDF_REGEX)) {
- if (set_error_on_fail (state == STATE_CONDITION ||
- is_logic (state) ||
- ((data->current_logic_operator == LOP_AND ||
- data->current_logic_operator == LOP_OR) &&
- is_end_operator (state)),
- context,
- "REGEX element not expected here",
- error)) {
- return;
- }
-
- data->current_operator = OP_REGEX;
- push_stack (data, STATE_REGEX);
- } else if (ELEMENT_IS (ELEMENT_RDF_STARTS_WITH)) {
- if (set_error_on_fail (state == STATE_CONDITION ||
- is_logic (state) ||
- ((data->current_logic_operator == LOP_AND ||
- data->current_logic_operator == LOP_OR) &&
- is_end_operator (state)),
- context,
- "STARTSWITH element not expected here",
- error)) {
- return;
- }
-
- data->current_operator = OP_STARTS;
- push_stack (data, STATE_STARTS_WITH);
- } else if (ELEMENT_IS (ELEMENT_RDF_IN_SET)) {
- if (set_error_on_fail (state == STATE_CONDITION ||
- is_logic (state) ||
- ((data->current_logic_operator == LOP_AND ||
- data->current_logic_operator == LOP_OR) &&
- is_end_operator (state)),
- context,
- "IN SET element not expected here",
- error)) {
- return;
- }
-
- data->current_operator = OP_SET;
- push_stack (data, STATE_IN_SET);
- } else if (ELEMENT_IS (ELEMENT_RDF_INTEGER)) {
- if (set_error_on_fail (state == STATE_PROPERTY,
- context,
- "INTEGER element not expected here",
- error)) {
- return;
- }
-
- push_stack (data, STATE_INTEGER);
- } else if (ELEMENT_IS (ELEMENT_RDF_DATE)) {
- if (set_error_on_fail (state == STATE_PROPERTY,
- context,
- "DATE element not expected here",
- error)) {
- return;
- }
-
- push_stack (data, STATE_DATE);
- } else if (ELEMENT_IS (ELEMENT_RDF_STRING)) {
- if (set_error_on_fail (state == STATE_PROPERTY,
- context,
- "STRING element not expected here",
- error)) {
- return;
- }
-
- push_stack (data, STATE_STRING);
- } else if (ELEMENT_IS (ELEMENT_RDF_FLOAT)) {
- if (set_error_on_fail (state == STATE_PROPERTY,
- context,
- "FLOAT element not expected here",
- error)) {
- return;
- }
-
- push_stack (data, STATE_FLOAT);
- }
-}
-
-static gchar *
-get_value (const gchar *value, gboolean quote)
-{
- gchar *escaped;
- gchar *ret;
-
- escaped = tracker_escape_string(value);
- if (quote) {
- ret = g_strconcat (" '", escaped, "' ", NULL);
- } else {
- ret = g_strdup (escaped);
- }
-
- g_free (escaped);
-
- return ret;
-}
-
-static gboolean
-build_sql (ParserData *data)
-{
- TrackerFieldData *field_data;
- ParseState state;
- gchar *avalue, *value, *sub;
- const gchar *where_field;
- GString *str;
- gchar **s;
-
- g_return_val_if_fail (data->current_field &&
- data->current_operator != OP_NONE &&
- data->current_value,
- FALSE);
-
- str = g_string_new ("");
-
- data->statement_count++;
-
- state = peek_state (data);
-
- avalue = get_value (data->current_value, (state != STATE_END_DATE &&
- state != STATE_END_INTEGER &&
- state != STATE_END_FLOAT));
-
- field_data = add_metadata_field (data, data->current_field, FALSE, TRUE, FALSE);
-
- if (!field_data) {
- g_free (avalue);
- g_free (data->current_field);
- g_free (data->current_value);
- data->current_field = NULL;
- data->current_value = NULL;
- return FALSE;
- }
-
- if (tracker_field_data_get_data_type (field_data) == TRACKER_FIELD_TYPE_DATE) {
- gchar *bvalue;
- gint cvalue;
-
- bvalue = tracker_date_format (avalue);
- cvalue = tracker_string_to_date (bvalue);
- value = tracker_gint_to_string (cvalue);
- g_free (bvalue);
- } else {
- value = g_strdup (avalue);
- }
-
- g_free (avalue);
-
- if (data->statement_count > 1) {
- if (data->current_logic_operator == LOP_AND) {
- data->sql_where = g_string_append (data->sql_where, "\n AND ");
- } else {
- if (data->current_logic_operator == LOP_OR) {
- data->sql_where = g_string_append (data->sql_where, "\n OR ");
- }
- }
- }
-
- where_field = tracker_field_data_get_where_field (field_data);
-
- switch (data->current_operator) {
- case OP_EQUALS:
- sub = strchr (data->current_value, '*');
- if (sub) {
- g_string_append_printf (str, " (%s glob '%s') ",
- where_field,
- data->current_value);
- } else {
- if ( !strlen(value) || (strcmp(value, " '' ") == 0) ) {
- tracker_field_data_set_needs_null (field_data, TRUE);
- g_string_append_printf (str, " ((%s = '') OR %s IS NULL) ",
- where_field,
- where_field);
- } else {
- g_string_append_printf (str, " (%s = %s) ",
- where_field,
- value);
- }
- }
- break;
-
- case OP_GREATER:
- g_string_append_printf (str, " (%s > %s) ",
- where_field,
- value);
- break;
-
- case OP_GREATER_EQUAL:
- g_string_append_printf (str, " (%s >= %s) ",
- where_field,
- value);
- break;
-
- case OP_LESS:
- g_string_append_printf (str, " (%s < %s) ",
- where_field,
- value);
- break;
-
- case OP_LESS_EQUAL:
- g_string_append_printf (str, " (%s <= %s) ",
- where_field,
- value);
- break;
-
- case OP_CONTAINS:
- sub = strchr (data->current_value, '*');
-
- if (sub) {
- g_string_append_printf (str, " (%s like '%%%%%s%%%%') ",
- where_field,
- data->current_value);
- } else {
- g_string_append_printf (str, " (%s like '%%%%%s%%%%') ",
- where_field,
- data->current_value);
- }
- break;
-
- case OP_STARTS:
- sub = strchr (data->current_value, '*');
-
- if (sub) {
- g_string_append_printf (str, " (%s like '%s') ",
- where_field,
- data->current_value);
- } else {
- g_string_append_printf (str, " (%s like '%s%%%%') ",
- where_field,
- data->current_value);
- }
- break;
-
- case OP_REGEX:
- g_string_append_printf (str, " (%s REGEXP '%s') ",
- where_field,
- data->current_value);
- break;
-
- case OP_SET:
- s = g_strsplit (data->current_value, ",", 0);
-
- if (s && s[0]) {
- gchar **p;
-
- g_string_append_printf (str, " (%s in ('%s'",
- where_field,
- s[0]);
-
- for (p = s + 1; *p; p++) {
- g_string_append_printf (str, ",'%s'", *p);
- }
-
- g_string_append_printf (str, ") ) " );
- }
- break;
-
- default:
- case OP_NONE:
- break;
- }
-
- data->sql_where = g_string_append (data->sql_where, str->str);
-
- g_string_free (str, TRUE);
-
- g_free (data->current_field);
- data->current_field = NULL;
-
- g_free (data->current_value);
- data->current_value = NULL;
-
- g_free (value);
-
- return TRUE;
-}
-
-static void
-end_element_handler (GMarkupParseContext *context,
- const gchar *element_name,
- gpointer user_data,
- GError **error)
-{
- ParserData *data;
-
- data = user_data;
-
- if (ELEMENT_IS (ELEMENT_RDF_CONDITION)) {
-
- push_stack (data, STATE_END_CONDITION);
- data->query_okay = TRUE;
-
- } else if (ELEMENT_IS (ELEMENT_RDF_AND)) {
-
- data->sql_where = g_string_append (data->sql_where, " ) ");
-
- pop_stack_until (data, STATE_AND);
-
- if (peek_state (data) != STATE_AND) {
- if (peek_state (data) == STATE_OR) {
- data->current_logic_operator = LOP_OR;
- } else {
- data->current_logic_operator = LOP_NONE;
- }
- }
-
- } else if (ELEMENT_IS (ELEMENT_RDF_OR)) {
-
- data->sql_where = g_string_append (data->sql_where, " ) ");
-
- pop_stack_until (data, STATE_OR);
-
- if (peek_state (data) != STATE_OR) {
- if (peek_state (data) == STATE_AND) {
- data->current_logic_operator = LOP_AND;
- } else {
- data->current_logic_operator = LOP_NONE;
- }
- }
-
- } else if (ELEMENT_IS (ELEMENT_RDF_NOT)) {
-
- data->sql_where = g_string_append (data->sql_where, " ) ");
- pop_stack_until (data, STATE_NOT);
-
-
- } else if (ELEMENT_IS (ELEMENT_RDF_EQUALS)) {
-
- if (!build_sql (data)) {
- set_error (error, context, 1, "parse error");
- return;
- }
- push_stack (data, STATE_END_EQUALS);
-
- } else if (ELEMENT_IS (ELEMENT_RDF_GREATER_THAN)) {
-
- if (!build_sql (data)) {
- set_error (error, context, 1, "parse error");
- return;
- }
-
- push_stack (data, STATE_END_GREATER_THAN);
-
- } else if (ELEMENT_IS (ELEMENT_RDF_GREATER_OR_EQUAL)) {
-
- if (!build_sql (data)) {
- set_error (error, context, 1, "parse error");
- return;
- }
-
- push_stack (data, STATE_END_GREATER_OR_EQUAL);
-
- } else if (ELEMENT_IS (ELEMENT_RDF_LESS_THAN )) {
-
- if (!build_sql (data)) {
- set_error (error, context, 1, "parse error");
- return;
- }
-
- push_stack (data, STATE_END_LESS_THAN );
-
- } else if (ELEMENT_IS (ELEMENT_RDF_LESS_OR_EQUAL )) {
-
- if (!build_sql (data)) {
- set_error (error, context, 1, "parse error");
- return;
- }
-
- push_stack (data, STATE_END_LESS_OR_EQUAL );
-
-
- } else if (ELEMENT_IS (ELEMENT_RDF_CONTAINS)) {
-
- if (!build_sql (data)) {
- set_error (error, context, 1, "parse error");
- return;
- }
-
- push_stack (data, STATE_END_CONTAINS);
-
- } else if (ELEMENT_IS (ELEMENT_RDF_REGEX)) {
-
- if (!build_sql (data)) {
- set_error (error, context, 1, "parse error");
- return;
- }
-
- push_stack (data, STATE_END_REGEX);
-
- } else if (ELEMENT_IS (ELEMENT_RDF_STARTS_WITH)) {
-
- if (!build_sql (data)) {
- set_error (error, context, 1, "parse error");
- return;
- }
-
- push_stack (data, STATE_END_STARTS_WITH);
-
- } else if (ELEMENT_IS (ELEMENT_RDF_IN_SET)) {
-
- if (!build_sql (data)) {
- set_error (error, context, 1, "parse error");
- return;
- }
-
- push_stack (data, STATE_END_IN_SET);
-
-
- } else if (ELEMENT_IS (ELEMENT_RDF_INTEGER)) {
-
- push_stack (data, STATE_END_INTEGER);
-
-
- } else if (ELEMENT_IS (ELEMENT_RDF_DATE)) {
-
- push_stack (data, STATE_END_DATE);
-
-
- } else if (ELEMENT_IS (ELEMENT_RDF_STRING)) {
-
- push_stack (data, STATE_END_STRING);
-
- } else if (ELEMENT_IS (ELEMENT_RDF_FLOAT)) {
-
- push_stack (data, STATE_END_FLOAT);
- }
-}
-
-static void
-text_handler (GMarkupParseContext *context,
- const gchar *text,
- gsize text_len,
- gpointer user_data,
- GError **error)
-{
- ParserData *data;
- ParseState state;
-
- data = user_data;
- state = peek_state (data);
-
- switch (state) {
-
- case STATE_INTEGER:
- case STATE_STRING:
- case STATE_DATE:
- case STATE_FLOAT:
-
- data->current_value = g_strstrip (g_strndup (text, text_len));
- break;
- default:
- break;
- }
-}
-
-static void
-error_handler (GMarkupParseContext *context,
- GError *error,
- gpointer user_data)
-{
- g_message ("in rdf query parse: %s", error->message);
-}
-
-static GString *
-get_select_header (const char *service)
-{
- GString *result;
- int type;
-
- result = g_string_new ("");
- type = tracker_ontology_get_service_id_by_name (service);
-
- switch (type) {
-
- case 0:
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- case 8:
- g_string_append_printf (result, " Select DISTINCT (S.Path || '%s' || S.Name) as uri, GetServiceName(S.ServiceTypeID) as stype ", G_DIR_SEPARATOR_S);
- break;
-
- default :
- g_string_append_printf (result, " Select DISTINCT (S.Path || '%s' || S.Name) as uri, GetServiceName(S.ServiceTypeID) as stype ", G_DIR_SEPARATOR_S);
- break;
- }
-
- return result;
-
-}
-
-static void
-append_where_header (GString *string, const char *service)
-{
- int type;
-
- type = tracker_ontology_get_service_id_by_name (service);
-
- /* Sqlite is currently unable to perform any ORDER or GROUP BY on split index, so we try not to split
- unless necessary on ServiceType FIXME remove when not needed anymore (ie. fixed in sqlite) */
-
- switch (type) {
- case 2:
- /* FILES */
- case 12:
- /* EMAILS */
- g_string_append_printf (string, " (S.ServiceTypeID in (select TypeId from ServiceTypes where TypeName = '%s' or Parent = '%s')) ", service, service);
- break;
- default:
- g_string_append_printf (string, " (S.ServiceTypeID=%d) ", type);
- }
-
- /* only search for enabled items */
- g_string_append_printf (string, "AND (S.Enabled = 1) ");
-
- /* only search for items on enabled volumes */
- g_string_append_printf (string, "AND (S.AuxilaryID = 0 OR S.AuxilaryID IN (SELECT VolumeID FROM Volumes WHERE Enabled = 1)) ");
-}
-
-GQuark
-tracker_rdf_error_quark (void)
-{
- return g_quark_from_static_string (TRACKER_RDF_ERROR_DOMAIN);
-}
-
-gchar *
-tracker_rdf_query_to_sql (TrackerDBInterface *iface,
- const gchar *query,
- const gchar *service,
- const gchar **fields,
- gint field_count,
- const gchar *search_text,
- const gchar **keywords,
- gint keyword_count,
- gboolean sort_by_service,
- const gchar **sort_fields,
- gint sort_field_count,
- gboolean sort_desc,
- gint offset,
- gint limit,
- GError **error)
-{
- ParserData data;
- gchar *result;
- const gchar *table_name;
- gboolean do_search = FALSE;
-
- g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
- g_return_val_if_fail (query != NULL, NULL);
- g_return_val_if_fail (service != NULL, NULL);
- g_return_val_if_fail (fields != NULL, NULL);
- g_return_val_if_fail (search_text != NULL, NULL);
- g_return_val_if_fail (keywords != NULL, NULL);
-
- memset (&data, 0, sizeof (data));
- data.iface = iface;
- data.statement_count = 0;
- data.service = (gchar*) service;
- data.sql_select = get_select_header (service);
-
- if (field_count > 0) {
- gint i;
-
- for (i = 0; i < field_count; i++) {
- TrackerFieldData *field_data;
-
- field_data = add_metadata_field (&data, fields[i], TRUE, FALSE, FALSE);
-
- if (!field_data) {
- g_set_error (error,
- tracker_rdf_error_quark (),
- PARSE_ERROR,
- "RDF Query failed, field:'%s' not found",
- fields[i]);
-
- g_slist_foreach (data.fields,
- (GFunc) g_object_unref,
- NULL);
- g_slist_free (data.fields);
- g_string_free (data.sql_select, TRUE);
-
- return NULL;
- }
- }
- }
-
- table_name = "Services";
-
- data.sql_from = g_string_new ("");
-
- if (!tracker_is_empty_string (search_text)) {
- do_search = TRUE;
- g_string_append_printf (data.sql_from,
- "\n FROM %s AS S INNER JOIN SearchResults1 M ON S.ID = M.SID ",
- table_name);
- } else {
- g_string_append_printf (data.sql_from,
- "\n FROM %s AS S ",
- table_name);
- }
-
- data.sql_where = g_string_new ("\nWHERE ");
-
- append_where_header(data.sql_where, service);
-
- if (keyword_count > 0) {
- guint keyword;
- GHashTable *table = NULL;
- GHashTableIter iter;
- GList *list = NULL;
- gchar *key;
-
- table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
-
- for (keyword = 0; keyword < (guint) keyword_count; keyword++) {
- gchar *full;
- gchar *sep;
- gchar *value;
-
- full = g_strdup (keywords[keyword]);
-
- sep = strchr (full, '=');
- if (sep) {
- sep[0]= '\0';
- key = full;
- value = sep+1;
-
- } else {
- key = g_strdup ("DC:Keywords");
- value = g_strdup (keywords[keyword]);
- }
-
- list = g_hash_table_lookup (table, key);
- list = g_list_prepend (list, tracker_escape_string(value));
- g_hash_table_insert (table, g_strdup (key), list);
-
- g_free (full);
- }
-
- g_hash_table_iter_init (&iter, table);
- while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &list)) {
-
- GList *l = NULL;
- gchar *keyword_metadata;
-
- keyword_metadata = tracker_data_schema_metadata_field_get_related_names (iface, key);
-
- for (l = list; l; l = l->next) {
- g_string_append_printf (data.sql_where,
- " AND (S.ID IN (SELECT ServiceID FROM ServiceKeywordMetaData WHERE MetaDataID in (%s) AND MetadataValue = '%s')) ",
- keyword_metadata,
- (gchar*) l->data);
- }
-
- g_list_foreach(list, (GFunc)g_free, NULL);
- g_list_free (list);
- g_free (keyword_metadata);
-
- }
- g_hash_table_destroy (table);
- }
-
- if (strlen (query) >= 10) {
- g_string_append_printf (data.sql_where, "AND ");
- }
-
- data.sql_group = g_string_new (" GROUP BY S.ID ");
-
- if (limit < 1) {
- limit = 1024;
- }
-
- data.sql_order = g_string_new ("");
-
- if (sort_by_service) {
- if (do_search) {
- g_string_append_printf (data.sql_order,"M.Score desc, S.ServiceTypeID, uri ");
- } else {
- g_string_append_printf (data.sql_order,"S.ServiceTypeID, uri ");
- }
- } else {
- if (do_search) {
- g_string_append_printf (data.sql_order,"M.Score desc ");
- } else {
- /* Nothing */
- }
-
- }
-
- if (sort_field_count > 0) {
- gint i;
-
- for (i = 0; i < sort_field_count; i++) {
- TrackerFieldData *field_data;
-
- field_data = add_metadata_field (&data, sort_fields[i], FALSE, FALSE, TRUE);
-
- if (!field_data) {
- g_set_error (error,
- tracker_rdf_error_quark (),
- PARSE_ERROR,
- "RDF Query failed, sort field:'%s' not found",
- sort_fields[i]);
- g_slist_foreach (data.fields,
- (GFunc) g_object_unref,
- NULL);
- g_slist_free (data.fields);
- g_string_free (data.sql_select, TRUE);
- g_string_free (data.sql_where, TRUE);
- g_string_free (data.sql_group, TRUE);
- g_string_free (data.sql_order, TRUE);
-
- return NULL;
- }
-
- if (i) {
- g_string_append_printf (data.sql_order, ", ");
- }
-
- g_string_append_printf (data.sql_order, "%s %s",
- tracker_field_data_get_order_field (field_data),
- sort_desc ? "DESC" : "ASC");
- }
- }
-
- if (!tracker_is_empty_string (data.sql_order->str)) {
- g_string_prepend (data.sql_order, "\n ORDER BY ");
- }
-
- g_string_append_printf (data.sql_order, " LIMIT ");
-
- g_string_append_printf (data.sql_order, "%d,%d ", offset, limit);
-
- data.parser = g_new0 (GMarkupParser, 1);
- data.parser->start_element = start_element_handler;
- data.parser->text = text_handler;
- data.parser->end_element = end_element_handler;
- data.parser->error = error_handler;
-
- data.current_operator = OP_NONE;
- data.current_logic_operator = LOP_NONE;
- data.query_okay = FALSE;
-
- data.context = g_markup_parse_context_new (data.parser, 0, &data, NULL);
-
- push_stack (&data, STATE_START);
-
- if (!g_markup_parse_context_parse (data.context, query, -1, error)) {
- result = NULL;
-
- g_string_free (data.sql_select, TRUE);
- g_string_free (data.sql_from, TRUE);
- g_string_free (data.sql_where, TRUE);
- g_string_free (data.sql_group, TRUE);
- g_string_free (data.sql_order, TRUE);
- } else {
- GSList *l;
-
- for (l = data.fields; l; l = l->next) {
- if (!tracker_field_data_get_is_condition (l->data)) {
- if (tracker_field_data_get_is_select (l->data) &&
- tracker_field_data_get_needs_join (l->data)) {
- g_string_append_printf (data.sql_from,
- "\n LEFT OUTER JOIN %s %s ON (S.ID = %s.ServiceID and %s.MetaDataID = %s) ",
- tracker_field_data_get_table_name (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_id_field (l->data));
- } else if (tracker_field_data_get_is_order (l->data) &&
- tracker_field_data_get_needs_collate (l->data)) {
- g_string_append_printf (data.sql_from,
- "\n LEFT OUTER JOIN %s %s ON (S.ID = %s.ServiceID and %s.MetaDataID = %s) ",
- tracker_field_data_get_table_name (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_id_field (l->data));
- }
- } else {
- gchar *related_metadata;
-
- related_metadata = tracker_data_schema_metadata_field_get_related_names (iface,
- tracker_field_data_get_field_name (l->data));
- if (tracker_field_data_get_needs_null (l->data)) {
- g_string_append_printf (data.sql_from,
- "\n LEFT OUTER JOIN %s %s ON (S.ID = %s.ServiceID and %s.MetaDataID in (%s)) ",
- tracker_field_data_get_table_name (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_alias (l->data),
- related_metadata);
- } else {
- g_string_append_printf (data.sql_from,
- "\n INNER JOIN %s %s ON (S.ID = %s.ServiceID and %s.MetaDataID in (%s)) ",
- tracker_field_data_get_table_name (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_alias (l->data),
- related_metadata);
- }
- g_free (related_metadata);
- }
- }
-
- result = g_strconcat (data.sql_select->str,
- " ",
- data.sql_from->str,
- " ",
- data.sql_where->str,
- " ",
- data.sql_group->str,
- " ",
- data.sql_order->str,
- NULL);
-
- g_string_free (data.sql_select, TRUE);
- g_string_free (data.sql_from, TRUE);
- g_string_free (data.sql_where, TRUE);
- g_string_free (data.sql_group, TRUE);
- g_string_free (data.sql_order, TRUE);
- }
-
- g_slist_foreach (data.fields, (GFunc) g_object_unref, NULL);
- g_slist_free (data.fields);
-
- g_slist_free (data.stack);
- g_markup_parse_context_free (data.context);
-
- if (data.current_field) {
- g_free (data.current_field);
- }
-
- if (data.current_value) {
- g_free (data.current_value);
- }
-
- g_free (data.parser);
-
- return result;
-}
-
-
-/*
- * The following function turns an rdf query into a filter that can be used for example
- * for getting unique values of a field with a certain query.
- * FIXME It is not pretty. The calling function needs to define Services S that is joined in this method.
- */
-
-void
-tracker_rdf_filter_to_sql (TrackerDBInterface *iface,
- const char *query,
- const char *service,
- GSList **fields,
- char **from,
- char **where,
- GError **error)
-{
- ParserData data;
-
- g_return_if_fail (TRACKER_IS_DB_INTERFACE (iface));
- g_return_if_fail (service != NULL);
- g_return_if_fail (from != NULL);
- g_return_if_fail (where != NULL);
-
- memset (&data, 0, sizeof (data));
- data.iface = iface;
- data.statement_count = 0;
- data.service = (char *) service;
-
- data.sql_from = g_string_new ("");
- data.sql_where = g_string_new ("");
- append_where_header (data.sql_where, service);
-
- data.fields = *fields;
-
- if (strlen (query) >= 10) {
- g_string_append (data.sql_where, "AND ");
- }
-
- data.parser = g_new0 (GMarkupParser, 1);
- data.parser->start_element = start_element_handler;
- data.parser->text = text_handler;
- data.parser->end_element = end_element_handler;
- data.parser->error = error_handler;
-
- data.current_operator = OP_NONE;
- data.current_logic_operator = LOP_NONE;
- data.query_okay = FALSE;
-
- data.context = g_markup_parse_context_new (data.parser, 0, &data, NULL);
-
- push_stack (&data, STATE_START);
-
- if ( (query != NULL) && (!g_markup_parse_context_parse (data.context, query, -1, error))) {
-
- *from = NULL;
- *where = NULL;
-
- g_string_free (data.sql_from, TRUE);
- g_string_free (data.sql_where, TRUE);
-
- } else {
- GSList *l;
-
- for (l = data.fields; l; l = l->next) {
- if (!tracker_field_data_get_is_condition (l->data)) {
- if (tracker_field_data_get_is_select (l->data) &&
- tracker_field_data_get_needs_join (l->data)) {
- g_string_append_printf (data.sql_from,
- "\n LEFT OUTER JOIN %s %s ON (S.ID = %s.ServiceID and %s.MetaDataID = %s) ",
- tracker_field_data_get_table_name (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_id_field (l->data));
- } else if (tracker_field_data_get_is_order (l->data) &&
- tracker_field_data_get_needs_collate (l->data)) {
- g_string_append_printf (data.sql_from,
- "\n LEFT OUTER JOIN %s %s ON (S.ID = %s.ServiceID and %s.MetaDataID = %s) ",
- tracker_field_data_get_table_name (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_id_field (l->data));
- }
- } else {
- gchar *related_metadata;
-
- related_metadata = tracker_data_schema_metadata_field_get_related_names (iface,
- tracker_field_data_get_field_name (l->data));
- if (tracker_field_data_get_needs_null (l->data)) {
- g_string_append_printf (data.sql_from,
- "\n LEFT OUTER JOIN %s %s ON (S.ID = %s.ServiceID and %s.MetaDataID in (%s)) ",
- tracker_field_data_get_table_name (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_alias (l->data),
- related_metadata);
- } else {
- g_string_append_printf (data.sql_from,
- "\n INNER JOIN %s %s ON (S.ID = %s.ServiceID and %s.MetaDataID in (%s)) ",
- tracker_field_data_get_table_name (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_alias (l->data),
- tracker_field_data_get_alias (l->data),
- related_metadata);
- }
-
- g_free (related_metadata);
- }
- }
-
-
- *from = g_strdup (data.sql_from->str);
- *where = g_strdup (data.sql_where->str);
- g_string_free (data.sql_from, TRUE);
- g_string_free (data.sql_where, TRUE);
-
-
- }
-
- *fields = data.fields;
-
- g_slist_free (data.stack);
- g_markup_parse_context_free (data.context);
-
- if (data.current_field) {
- g_free (data.current_field);
- }
-
- if (data.current_value) {
- g_free (data.current_value);
- }
-
- g_free (data.parser);
-}
-
-gchar *
-tracker_rdf_query_for_attr_value (const gchar *field,
- const gchar *value)
-{
- TrackerField *field_def;
- const gchar *rdf_type = NULL;
- gchar *rdf_query;
-
- field_def = tracker_ontology_get_field_by_name (field);
-
- if (!field_def) {
- return NULL;
- }
-
- switch (tracker_field_get_data_type (field_def)) {
- case TRACKER_FIELD_TYPE_KEYWORD:
- case TRACKER_FIELD_TYPE_INDEX:
- case TRACKER_FIELD_TYPE_FULLTEXT:
- case TRACKER_FIELD_TYPE_STRING:
- rdf_type = "rdf:String";
- break;
-
- case TRACKER_FIELD_TYPE_INTEGER:
- case TRACKER_FIELD_TYPE_DOUBLE:
- case TRACKER_FIELD_TYPE_DATE:
- rdf_type = "rdf:Integer";
- break;
-
- default:
- case TRACKER_FIELD_TYPE_BLOB:
- case TRACKER_FIELD_TYPE_STRUCT:
- case TRACKER_FIELD_TYPE_LINK:
- g_warning ("Unsupport field type for property %s",
- tracker_field_get_name (field_def));
- return NULL;
- }
-
- rdf_query = g_strconcat ("<rdfq:Condition>",
- " <rdfq:equals>",
- " <rdfq:Property name=\"", field, "\"/>",
- " <", rdf_type, ">", value, "</", rdf_type, ">",
- " </rdfq:equals>"
- "</rdfq:Condition>",
- NULL);
-
- return rdf_query;
-}
diff --git a/src/libtracker-data/tracker-rdf-query.h b/src/libtracker-data/tracker-rdf-query.h
deleted file mode 100644
index 51684859a..000000000
--- a/src/libtracker-data/tracker-rdf-query.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2006, Mr Jamie McCracken (jamiemcc@gnome.org)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __TRACKERD_RDF_QUERY_H__
-#define __TRACKERD_RDF_QUERY_H__
-
-#include <glib.h>
-
-#include <libtracker-db/tracker-db-manager.h>
-
-G_BEGIN_DECLS
-
-#define TRACKER_RDF_ERROR_DOMAIN "TrackerRDF"
-#define TRACKER_RDF_ERROR tracker_rdf_error_quark()
-
-GQuark tracker_rdf_error_quark (void);
-
-gchar *tracker_rdf_query_to_sql (TrackerDBInterface *iface,
- const gchar *query,
- const gchar *service,
- const gchar **fields,
- gint field_count,
- const gchar *search_text,
- const gchar **keywords,
- gint keyword_count,
- gboolean sort_by_service,
- const gchar **sort_fields,
- gint sort_field_count,
- gboolean sort_desc,
- gint offset,
- gint limit,
- GError **error);
-void tracker_rdf_filter_to_sql (TrackerDBInterface *iface,
- const gchar *query,
- const gchar *service,
- GSList **fields,
- gchar **from,
- gchar **where,
- GError **error);
-gchar *tracker_rdf_query_for_attr_value (const gchar *field,
- const gchar *value);
-
-G_END_DECLS
-
-#endif /* __TRACKERD_RDF_QUERY_H__ */
diff --git a/src/libtracker/tracker.c b/src/libtracker/tracker.c
index 8a3a729e1..62d3ce2af 100644
--- a/src/libtracker/tracker.c
+++ b/src/libtracker/tracker.c
@@ -538,84 +538,6 @@ tracker_metadata_get_registered_classes (TrackerClient *client, GError **error)
}
-GPtrArray *
-tracker_metadata_get_unique_values (TrackerClient *client, ServiceType service, char **meta_types, char *query, gboolean descending, int offset, int max_hits, GError **error)
-{
- GPtrArray *table;
- const char *service_str = tracker_service_types[service];
-
- if (!org_freedesktop_Tracker_Metadata_get_unique_values (client->proxy_metadata, service_str, (const char **)meta_types, query, descending, offset, max_hits, &table, &*error)) {
- return NULL;
- }
-
- return table;
-}
-
-int
-tracker_metadata_get_sum (TrackerClient *client, ServiceType service, char *field, char *query, GError **error)
-{
- int sum;
- const char *service_str = tracker_service_types[service];
-
- if (!org_freedesktop_Tracker_Metadata_get_sum (client->proxy_metadata, service_str, field, query, &sum, &*error)) {
- return -1;
- }
-
- return sum;
-}
-
-int
-tracker_metadata_get_count (TrackerClient *client, ServiceType service, char *field, char *query, GError **error)
-{
- int count;
- const char *service_str = tracker_service_types[service];
-
- if (!org_freedesktop_Tracker_Metadata_get_count (client->proxy_metadata, service_str, field, query, &count, &*error)) {
- return -1;
- }
-
- return count;
-
-}
-
-GPtrArray *
-tracker_metadata_get_unique_values_with_count (TrackerClient *client, ServiceType service, char **meta_types, char *query, char *count, gboolean descending, int offset, int max_hits, GError **error)
-{
- GPtrArray *table;
- const char *service_str = tracker_service_types[service];
-
- if (!org_freedesktop_Tracker_Metadata_get_unique_values_with_count (client->proxy_metadata, service_str, (const char **)meta_types, query, count, descending, offset, max_hits, &table, &*error)) {
- return NULL;
- }
-
- return table;
-}
-
-GPtrArray *
-tracker_metadata_get_unique_values_with_count_and_sum (TrackerClient *client, ServiceType service, char **meta_types, char *query, char *count, char *sum, gboolean descending, int offset, int max_hits, GError **error)
-{
- GPtrArray *table;
- const char *service_str = tracker_service_types[service];
-
- if (!org_freedesktop_Tracker_Metadata_get_unique_values_with_count_and_sum (client->proxy_metadata, service_str, (const char **)meta_types, query, count, sum, descending, offset, max_hits, &table, &*error)) {
- return NULL;
- }
-
- return table;
-}
-
-GPtrArray *
-tracker_metadata_get_unique_values_with_concat_count_and_sum (TrackerClient *client, ServiceType service, char **meta_types, char *query, char *concat, char *count, char *sum, gboolean descending, int offset, int max_hits, GError **error)
-{
- GPtrArray *table;
- const char *service_str = tracker_service_types[service];
-
- if (!org_freedesktop_Tracker_Metadata_get_unique_values_with_concat_count_and_sum (client->proxy_metadata, service_str, (const char **)meta_types, query, concat, count, sum, descending, offset, max_hits, &table, &*error)) {
- return NULL;
- }
-
- return table;
-}
GPtrArray *
tracker_keywords_get_list (TrackerClient *client, ServiceType service, GError **error)
@@ -764,35 +686,6 @@ tracker_search_get_snippet (TrackerClient *client, ServiceType service, const ch
}
-
-char **
-tracker_search_metadata (TrackerClient *client, ServiceType service, const char *field, const char* search_text, int offset, int max_hits, GError **error)
-{
- char **array = NULL;
- const char *service_str = tracker_service_types[service];
-
- if (!org_freedesktop_Tracker_Search_metadata (client->proxy_search, service_str, field, search_text, offset, max_hits, &array, &*error)) {
- return NULL;
- }
-
- return array;
-}
-
-
-
-GPtrArray *
-tracker_search_query (TrackerClient *client, int live_query_id, ServiceType service, char **fields, const char *search_text, char **keywords, const char *query, int offset, int max_hits, gboolean sort_by_service, char **sort_fields, gboolean sort_descending, GError **error)
-{
- GPtrArray *table;
- const char *service_str = tracker_service_types[service];
-
- if (!org_freedesktop_Tracker_Search_query (client->proxy_search, live_query_id, service_str, (const char **)fields, search_text, (const char **)keywords, query, sort_by_service, (const char **)sort_fields, sort_descending, offset, max_hits , &table, &*error)) {
- return NULL;
- }
-
- return table;
-}
-
char *
tracker_search_suggest (TrackerClient *client, const char *search_term, int maxdist, GError **error)
{
@@ -1214,93 +1107,6 @@ tracker_metadata_get_registered_classes_async (TrackerClient *client, TrackerArr
void
-tracker_metadata_get_unique_values_async (TrackerClient *client, ServiceType service, char **meta_types, const char *query, gboolean descending, int offset, int max_hits, TrackerGPtrArrayReply callback, gpointer user_data)
-{
-
- GPtrArrayCallBackStruct *callback_struct;
- const char *service_str = tracker_service_types[service];
-
- callback_struct = g_new (GPtrArrayCallBackStruct, 1);
- callback_struct->callback = callback;
- callback_struct->data = user_data;
-
- client->last_pending_call = org_freedesktop_Tracker_Metadata_get_unique_values_async (client->proxy_metadata, service_str, (const char **) meta_types, query, descending, offset, max_hits, tracker_GPtrArray_reply, callback_struct);
-
-}
-
-void
-tracker_metadata_get_sum_async (TrackerClient *client, ServiceType service, char *field, char *query, TrackerIntReply callback, gpointer user_data)
-{
- IntCallBackStruct *callback_struct;
- const char *service_str = tracker_service_types[service];
-
- callback_struct = g_new (IntCallBackStruct, 1);
- callback_struct->callback = callback;
- callback_struct->data = user_data;
-
- client->last_pending_call = org_freedesktop_Tracker_Metadata_get_sum_async (client->proxy_metadata, service_str, field, query, tracker_int_reply, callback_struct);
-}
-
-
-void
-tracker_metadata_get_count_async (TrackerClient *client, ServiceType service, char *field, char *query, TrackerIntReply callback, gpointer user_data)
-{
- IntCallBackStruct *callback_struct;
- const char *service_str = tracker_service_types[service];
-
- callback_struct = g_new (IntCallBackStruct, 1);
- callback_struct->callback = callback;
- callback_struct->data = user_data;
-
- client->last_pending_call = org_freedesktop_Tracker_Metadata_get_count_async (client->proxy_metadata, service_str, field, query, tracker_int_reply, callback_struct);
-}
-
-void
-tracker_metadata_get_unique_values_with_count_async (TrackerClient *client, ServiceType service, char **meta_types, const char *query, char *count, gboolean descending, int offset, int max_hits, TrackerGPtrArrayReply callback, gpointer user_data)
-{
-
- GPtrArrayCallBackStruct *callback_struct;
- const char *service_str = tracker_service_types[service];
-
- callback_struct = g_new (GPtrArrayCallBackStruct, 1);
- callback_struct->callback = callback;
- callback_struct->data = user_data;
-
- client->last_pending_call = org_freedesktop_Tracker_Metadata_get_unique_values_with_count_async (client->proxy_metadata, service_str, (const char **) meta_types, query, count, descending, offset, max_hits, tracker_GPtrArray_reply, callback_struct);
-
-}
-
-void
-tracker_metadata_get_unique_values_with_count_and_sum_async (TrackerClient *client, ServiceType service, char **meta_types, const char *query, char *count, char *sum, gboolean descending, int offset, int max_hits, TrackerGPtrArrayReply callback, gpointer user_data)
-{
-
- GPtrArrayCallBackStruct *callback_struct;
- const char *service_str = tracker_service_types[service];
-
- callback_struct = g_new (GPtrArrayCallBackStruct, 1);
- callback_struct->callback = callback;
- callback_struct->data = user_data;
-
- client->last_pending_call = org_freedesktop_Tracker_Metadata_get_unique_values_with_count_and_sum_async (client->proxy_metadata, service_str, (const char **) meta_types, query, count, sum, descending, offset, max_hits, tracker_GPtrArray_reply, callback_struct);
-
-}
-
-void
-tracker_metadata_get_unique_values_with_concat_count_and_sum_async (TrackerClient *client, ServiceType service, char **meta_types, const char *query, char *concat, char *count, char *sum, gboolean descending, int offset, int max_hits, TrackerGPtrArrayReply callback, gpointer user_data)
-{
-
- GPtrArrayCallBackStruct *callback_struct;
- const char *service_str = tracker_service_types[service];
-
- callback_struct = g_new (GPtrArrayCallBackStruct, 1);
- callback_struct->callback = callback;
- callback_struct->data = user_data;
-
- client->last_pending_call = org_freedesktop_Tracker_Metadata_get_unique_values_with_concat_count_and_sum_async (client->proxy_metadata, service_str, (const char **) meta_types, query, concat, count, sum, descending, offset, max_hits, tracker_GPtrArray_reply, callback_struct);
-
-}
-
-void
tracker_keywords_get_list_async (TrackerClient *client, ServiceType service, TrackerGPtrArrayReply callback, gpointer user_data)
{
@@ -1494,39 +1300,6 @@ tracker_search_get_snippet_async (TrackerClient *client, ServiceType service, co
void
-tracker_search_metadata_async (TrackerClient *client, ServiceType service, const char *field, const char* search_text, int offset, int max_hits, TrackerArrayReply callback, gpointer user_data)
-{
- ArrayCallBackStruct *callback_struct;
- const char *service_str;
-
- callback_struct = g_new (ArrayCallBackStruct, 1);
- callback_struct->callback = callback;
- callback_struct->data = user_data;
-
- service_str = tracker_service_types[service];
-
- org_freedesktop_Tracker_Search_metadata_async (client->proxy_search, service_str, field, search_text, offset, max_hits, tracker_array_reply, callback_struct);
-
-}
-
-void
-tracker_search_query_async (TrackerClient *client, int live_query_id, ServiceType service, char **fields, const char *search_text, char **keywords, const char *query, int offset, int max_hits, gboolean sort_by_service, char **sort_fields, gboolean sort_descending, TrackerGPtrArrayReply callback, gpointer user_data)
-{
- GPtrArrayCallBackStruct *callback_struct;
- const char *service_str;
-
- callback_struct = g_new (GPtrArrayCallBackStruct, 1);
- callback_struct->callback = callback;
- callback_struct->data = user_data;
-
- service_str = tracker_service_types[service];
-
- client->last_pending_call = org_freedesktop_Tracker_Search_query_async (client->proxy_search, live_query_id, service_str, (const char **)fields, search_text, (const char **)keywords, query, sort_by_service, (const char **)sort_fields, sort_descending, offset, max_hits, tracker_GPtrArray_reply, callback_struct);
-
-}
-
-
-void
tracker_search_suggest_async (TrackerClient *client, const char *search_text, int maxdist, TrackerStringReply callback, gpointer user_data)
{
diff --git a/src/libtracker/tracker.h b/src/libtracker/tracker.h
index 7a3f1cce5..50d8ae79d 100644
--- a/src/libtracker/tracker.h
+++ b/src/libtracker/tracker.h
@@ -127,12 +127,6 @@ MetaDataTypeDetails * tracker_metadata_get_type_details (TrackerClient *client,
char ** tracker_metadata_get_registered_types (TrackerClient *client, const char *classname, GError **error);
char ** tracker_metadata_get_writeable_types (TrackerClient *client, const char *classname, GError **error);
char ** tracker_metadata_get_registered_classes (TrackerClient *client, GError **error);
-GPtrArray * tracker_metadata_get_unique_values (TrackerClient *client, ServiceType service, char **meta_types, char *query, gboolean descending, int offset, int max_hits, GError **error);
-int tracker_metadata_get_sum (TrackerClient *client, ServiceType service, char *field, char *query, GError **error);
-int tracker_metadata_get_count (TrackerClient *client, ServiceType service, char *field, char *query, GError **error);
-GPtrArray * tracker_metadata_get_unique_values_with_count (TrackerClient *client, ServiceType service, char **meta_types, char *query, char *count, gboolean descending, int offset, int max_hits, GError **error);
-GPtrArray * tracker_metadata_get_unique_values_with_count_and_sum (TrackerClient *client, ServiceType service, char **meta_types, char *query, char *count, char *sum, gboolean descending, int offset, int max_hits, GError **error);
-GPtrArray * tracker_metadata_get_unique_values_with_concat_count_and_sum (TrackerClient *client, ServiceType service, char **meta_types, char *query, char *concat, char *count, char *sum, gboolean descending, int offset, int max_hits, GError **error);
GPtrArray * tracker_keywords_get_list (TrackerClient *client, ServiceType service, GError **error);
char ** tracker_keywords_get (TrackerClient *client, ServiceType service, const char *id, GError **error);
@@ -147,8 +141,6 @@ GPtrArray * tracker_search_get_hit_count_all (TrackerClient *client, const char
char ** tracker_search_text (TrackerClient *client, int live_query_id, ServiceType service, const char *search_text, int offset, int max_hits, GError **error);
GPtrArray * tracker_search_text_detailed (TrackerClient *client, int live_query_id, ServiceType service, const char *search_text, int offset, int max_hits, GError **error);
char * tracker_search_get_snippet (TrackerClient *client, ServiceType service, const char *uri, const char *search_text, GError **error);
-char ** tracker_search_metadata (TrackerClient *client, ServiceType service, const char *field, const char* search_text, int offset, int max_hits, GError **error);
-GPtrArray * tracker_search_query (TrackerClient *client, int live_query_id, ServiceType service, char **fields, const char *search_text, char **keywords, const char *query, int offset, int max_hits, gboolean sort_by_service, char **sort_fields, gboolean sort_descending, GError **error);
gchar * tracker_search_suggest (TrackerClient *client, const char *search_text, int maxdist, GError **error);
@@ -192,12 +184,6 @@ void tracker_metadata_register_type_async (TrackerClient *client, const char
void tracker_metadata_get_registered_types_async (TrackerClient *client, const char *classname, TrackerArrayReply callback, gpointer user_data);
void tracker_metadata_get_writeable_types_async (TrackerClient *client, const char *classname, TrackerArrayReply callback, gpointer user_data);
void tracker_metadata_get_registered_classes_async (TrackerClient *client, TrackerArrayReply callback, gpointer user_data);
-void tracker_metadata_get_unique_values_async (TrackerClient *client, ServiceType service, char **meta_types, const char *query, gboolean descending, int offset, int max_hits, TrackerGPtrArrayReply callback, gpointer user_data);
-void tracker_metadata_get_sum_async (TrackerClient *client, ServiceType service, char *field, char *query, TrackerIntReply callback, gpointer user_data);
-void tracker_metadata_get_count_async (TrackerClient *client, ServiceType service, char *field, char *query, TrackerIntReply callback, gpointer user_data);
-void tracker_metadata_get_unique_values_with_count_async (TrackerClient *client, ServiceType service, char **meta_types, const char *query, char *count, gboolean descending, int offset, int max_hits, TrackerGPtrArrayReply callback, gpointer user_data);
-void tracker_metadata_get_unique_values_with_count_and_sum_async (TrackerClient *client, ServiceType service, char **meta_types, const char *query, char *count, char *sum, gboolean descending, int offset, int max_hits, TrackerGPtrArrayReply callback, gpointer user_data);
-void tracker_metadata_get_unique_values_with_concat_count_and_sum_async (TrackerClient *client, ServiceType service, char **meta_types, const char *query, char *concat, char *count, char *sum, gboolean descending, int offset, int max_hits, TrackerGPtrArrayReply callback, gpointer user_data);
void tracker_keywords_get_list_async (TrackerClient *client, ServiceType service, TrackerGPtrArrayReply callback, gpointer user_data);
void tracker_keywords_get_async (TrackerClient *client, ServiceType service, const char *id, TrackerArrayReply callback, gpointer user_data);
@@ -211,8 +197,6 @@ void tracker_search_text_get_hit_count_all_async (TrackerClient *client, const
void tracker_search_text_async (TrackerClient *client, int live_query_id, ServiceType service, const char *search_text, int offset, int max_hits, TrackerArrayReply callback, gpointer user_data);
void tracker_search_text_detailed_async (TrackerClient *client, int live_query_id, ServiceType service, const char *search_text, int offset, int max_hits, TrackerGPtrArrayReply callback, gpointer user_data);
void tracker_search_get_snippet_async (TrackerClient *client, ServiceType service, const char *uri, const char *search_text, TrackerStringReply callback, gpointer user_data);
-void tracker_search_metadata_async (TrackerClient *client, ServiceType service, const char *field, const char* search_text, int offset, int max_hits, TrackerArrayReply callback, gpointer user_data);
-void tracker_search_query_async (TrackerClient *client, int live_query_id, ServiceType service, char **fields, const char *search_text, char **keywords, const char *query, int offset, int max_hits, gboolean sort_by_service, char **sort_fields, gboolean sort_descending, TrackerGPtrArrayReply callback, gpointer user_data);
void tracker_search_suggest_async (TrackerClient *client, const char *search_text, int maxdist, TrackerStringReply callback, gpointer user_data);
void tracker_files_create_async (TrackerClient *client, const char *uri, gboolean is_directory, const char *mime, int size, int mtime, TrackerVoidReply callback, gpointer user_data);
diff --git a/src/tracker-utils/Makefile.am b/src/tracker-utils/Makefile.am
index 987b19bad..8f2d1135b 100644
--- a/src/tracker-utils/Makefile.am
+++ b/src/tracker-utils/Makefile.am
@@ -21,13 +21,11 @@ libs = \
bin_PROGRAMS = \
tracker-search \
- tracker-query \
tracker-meta-folder \
tracker-stats \
tracker-tag \
tracker-files \
tracker-status \
- tracker-unique \
tracker-info \
tracker-processes \
tracker-services
@@ -35,9 +33,6 @@ bin_PROGRAMS = \
tracker_search_SOURCES = tracker-search.c
tracker_search_LDADD = $(libs)
-tracker_query_SOURCES = tracker-query.c
-tracker_query_LDADD = $(libs)
-
tracker_meta_folder_SOURCES = tracker-meta-folder.c
tracker_meta_folder_LDADD = $(libs)
@@ -53,9 +48,6 @@ tracker_files_LDADD = $(libs)
tracker_status_SOURCES = tracker-status.c
tracker_status_LDADD = $(libs)
-tracker_unique_SOURCES = tracker-unique.c
-tracker_unique_LDADD = $(libs)
-
tracker_info_SOURCES = tracker-info.c
tracker_info_LDADD = $(libs)
diff --git a/src/tracker-utils/tracker-query.c b/src/tracker-utils/tracker-query.c
deleted file mode 100644
index a7b354329..000000000
--- a/src/tracker-utils/tracker-query.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2006, Mr Jamie McCracken (jamiemcc@gnome.org)
- * Copyright (C) 2008, Nokia
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-
-#include <sys/param.h>
-#include <stdlib.h>
-#include <time.h>
-#include <locale.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-#include <libtracker/tracker.h>
-#include <libtracker-common/tracker-common.h>
-
-#ifdef G_OS_WIN32
-#include <trackerd/mingw-compat.h>
-#endif /* G_OS_WIN32 */
-
-static gchar *path;
-static gchar *search;
-static gchar **fields;
-static gchar *service;
-static gchar **keywords;
-static gchar **order;
-static gint limit = 512;
-static gint offset;
-
-static GOptionEntry entries[] = {
- { "path", 'p', 0, G_OPTION_ARG_STRING, &path,
- N_("Path to use in query"),
- NULL,
- },
- { "service", 's', 0, G_OPTION_ARG_STRING, &service,
- N_("Search from a specific service"),
- NULL
- },
- { "limit", 'l', 0, G_OPTION_ARG_INT, &limit,
- N_("Limit the number of results shown"),
- N_("512")
- },
- { "offset", 'o', 0, G_OPTION_ARG_INT, &offset,
- N_("Offset the results"),
- N_("0")
- },
- { "search-term", 't', 0, G_OPTION_ARG_STRING, &search,
- N_("Adds a fulltext search filter"),
- NULL,
- },
- { "keyword", 'k', 0, G_OPTION_ARG_STRING_ARRAY, &keywords,
- N_("Adds a keyword filter"),
- NULL
- },
- { "order", 'r', 0, G_OPTION_ARG_STRING_ARRAY, &order,
- N_("Adds an order field"),
- NULL
- },
- { G_OPTION_REMAINING, 0, 0,
- G_OPTION_ARG_STRING_ARRAY, &fields,
- N_("Metadata Fields"),
- N_("FIELD [FIELD...]")
- },
- { NULL }
-};
-
-static void
-get_meta_table_data (gpointer value)
-{
- gchar **meta;
- gchar **p;
- gint i;
-
- meta = value;
-
- for (p = meta, i = 0; *p; p++, i++) {
- if (i == 0) {
- g_print (" %s", *p);
- } else {
- g_print (", %s", *p);
- }
- }
-
- g_print ("\n");
-}
-
-int
-main (int argc, char **argv)
-{
- TrackerClient *client;
- ServiceType type;
- GOptionContext *context;
- GError *error = NULL;
- GFile *file;
- gchar *path_in_utf8, *abs_path;
- gchar *content;
- gchar *buffer;
- gsize size;
- GPtrArray *array;
-
- setlocale (LC_ALL, "");
-
- bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
-
- context = g_option_context_new (_("- Query using RDF and return results "
- "with specified metadata fields"));
-
- g_option_context_add_main_entries (context, entries, NULL);
- g_option_context_parse (context, &argc, &argv, NULL);
-
- if (!fields || !path) {
- gchar *help;
-
- g_printerr ("%s\n\n",
- _("Path or fields are missing"));
-
- help = g_option_context_get_help (context, TRUE, NULL);
- g_option_context_free (context);
- g_printerr ("%s", help);
- g_free (help);
-
- return EXIT_FAILURE;
- }
-
- g_option_context_free (context);
-
- client = tracker_connect (FALSE);
-
- if (!client) {
- g_printerr ("%s\n",
- _("Could not establish a DBus connection to Tracker"));
- return EXIT_FAILURE;
- }
-
- if (limit <= 0) {
- limit = 512;
- }
-
- if (!service) {
- g_print ("%s\n",
- _("Defaulting to 'files' service"));
-
- type = SERVICE_FILES;
- } else {
- type = tracker_service_name_to_type (service);
-
- if (type == SERVICE_OTHER_FILES && g_ascii_strcasecmp (service, "Other")) {
- g_printerr ("%s\n",
- _("Service not recognized, searching in other files..."));
- }
- }
-
- path_in_utf8 = g_filename_to_utf8 (path, -1, NULL, NULL, &error);
- if (error) {
- g_printerr ("%s:'%s', %s\n",
- _("Could not get UTF-8 path from path"),
- path,
- error->message);
- g_error_free (error);
- tracker_disconnect (client);
-
- return EXIT_FAILURE;
- }
-
- file = g_file_new_for_commandline_arg (path_in_utf8);
- abs_path = g_file_get_path (file);
-
- g_file_get_contents (abs_path, &content, &size, &error);
- if (error) {
- g_printerr ("%s:'%s', %s\n",
- _("Could not read file"),
- abs_path,
- error->message);
- g_error_free (error);
- g_free (path_in_utf8);
- g_free (abs_path);
- g_object_unref (file);
- tracker_disconnect (client);
-
- return EXIT_FAILURE;
- }
-
- g_free (path_in_utf8);
- g_free (abs_path);
- g_object_unref (file);
-
- buffer = g_locale_to_utf8 (content, size, NULL, NULL, &error);
- g_free (content);
-
- if (error) {
- g_printerr ("%s, %s\n",
- _("Could not convert query file to UTF-8"),
- error->message);
- g_error_free (error);
- tracker_disconnect (client);
-
- return EXIT_FAILURE;
- }
-
- array = tracker_search_query (client,
- time (NULL),
- type,
- fields,
- search,
- keywords,
- buffer,
- offset,
- limit,
- FALSE,
- order,
- FALSE,
- &error);
- g_free (buffer);
-
- if (error) {
- g_printerr ("%s, %s\n",
- _("Could not query search"),
- error->message);
- g_error_free (error);
-
- return EXIT_FAILURE;
- }
-
- if (!array) {
- g_print ("%s\n",
- _("No results found matching your query"));
- } else {
- gint length;
-
- length = array->len;
-
- g_print (tracker_dngettext (NULL,
- _("Result: %d"),
- _("Results: %d"),
- length),
- length);
- g_print ("\n");
-
- g_ptr_array_foreach (array, (GFunc) get_meta_table_data, NULL);
- g_ptr_array_free (array, TRUE);
-
- if (length >= limit) {
- /* Display '...' so the user thinks there is
- * more items.
- */
- g_print (" ...\n");
-
- /* Display warning so the user knows this is
- * not the WHOLE data set.
- */
- g_printerr ("\n"
- "%s\n",
- _("NOTE: Limit was reached, there are more items in the database not listed here"));
- }
- }
-
- tracker_disconnect (client);
-
- return EXIT_SUCCESS;
-}
diff --git a/src/tracker-utils/tracker-unique.c b/src/tracker-utils/tracker-unique.c
deleted file mode 100644
index 59b340eb9..000000000
--- a/src/tracker-utils/tracker-unique.c
+++ /dev/null
@@ -1,244 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2006, Mr Jamie McCracken (jamiemcc@gnome.org)
- * Copyright (C) 2008, Nokia
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-
-#include <sys/param.h>
-#include <stdlib.h>
-#include <locale.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-
-#include <libtracker/tracker.h>
-#include <libtracker-common/tracker-common.h>
-
-#ifdef G_OS_WIN32
-#include <trackerd/mingw-compat.h>
-#endif /* G_OS_WIN32 */
-
-static gchar **fields;
-static gchar *service;
-static gchar *path;
-static gchar *concat;
-static gchar *count;
-static gchar *sum;
-static gboolean descending;
-
-static GOptionEntry entries[] = {
- { "path", 'p', 0, G_OPTION_ARG_STRING, &path,
- N_("Path to use in query"),
- NULL
- },
- { "service", 's', 0, G_OPTION_ARG_STRING, &service,
- N_("Search from a specific service"),
- NULL
- },
- { "concat", 'n', 0, G_OPTION_ARG_STRING, &concat,
- N_("Concatenate different values of this field"),
- "e.g. File:Mime"
- },
- { "count", 'c', 0, G_OPTION_ARG_STRING, &count,
- N_("Count instances of unique fields of this type"),
- "e.g. File:Mime"
- },
- { "sum", 'u', 0, G_OPTION_ARG_STRING, &sum,
- N_("Sum the values of this field"),
- "e.g. File:Mime"
- },
- { "desc", 'o', 0, G_OPTION_ARG_NONE, &descending,
- N_("Sort to descending order"),
- NULL},
- { G_OPTION_REMAINING, 0, 0,
- G_OPTION_ARG_STRING_ARRAY, &fields,
- N_("Required fields"), N_("FIELD [FIELD...]")},
- { NULL }
-};
-
-static void
-get_meta_table_data (gpointer value)
-{
- gchar **meta;
- gchar **p;
- gint i;
-
- meta = value;
-
- for (p = meta, i = 0; *p; p++, i++) {
- if (i == 0) {
- g_print (" %s", *p);
- } else {
- g_print (", %s", *p);
- }
- }
-
- g_print ("\n");
-}
-
-int
-main (int argc, char **argv)
-{
- TrackerClient *client;
- ServiceType type;
- GOptionContext *context;
- GError *error = NULL;
- gchar *content;
- gchar *buffer = NULL;
- gsize size;
- GPtrArray *array;
-
- setlocale (LC_ALL, "");
-
- bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
-
- context = g_option_context_new ("- Get unique values with an optional RDF query filter");
- g_option_context_add_main_entries (context, entries, NULL);
- g_option_context_parse (context, &argc, &argv, NULL);
-
- if (!fields) {
- gchar *help;
-
- g_printerr ("%s\n\n",
- _("Fields are missing"));
-
- help = g_option_context_get_help (context, TRUE, NULL);
- g_option_context_free (context);
- g_printerr ("%s", help);
- g_free (help);
-
- return EXIT_FAILURE;
- }
-
- g_option_context_free (context);
-
- client = tracker_connect (FALSE);
-
- if (!client) {
- g_printerr ("%s\n",
- _("Could not establish a DBus connection to Tracker"));
- return EXIT_FAILURE;
- }
-
- if (!service) {
- g_print ("%s\n",
- _("Defaulting to 'files' service"));
-
- type = SERVICE_FILES;
- } else {
- type = tracker_service_name_to_type (service);
-
- if (type == SERVICE_OTHER_FILES && g_ascii_strcasecmp (service, "Other")) {
- g_printerr ("%s\n",
- _("Service not recognized, searching in other files..."));
- }
- }
-
- if (path) {
- gchar *path_in_utf8;
-
- path_in_utf8 = g_filename_to_utf8 (path, -1, NULL, NULL, &error);
- if (error) {
- g_printerr ("%s:'%s', %s\n",
- _("Could not get UTF-8 path from path"),
- path,
- error->message);
- g_error_free (error);
- tracker_disconnect (client);
-
- return EXIT_FAILURE;
- }
-
- g_file_get_contents (path_in_utf8, &content, &size, &error);
- if (error) {
- g_printerr ("%s:'%s', %s\n",
- _("Could not read file"),
- path_in_utf8,
- error->message);
- g_error_free (error);
- g_free (path_in_utf8);
- tracker_disconnect (client);
-
- return EXIT_FAILURE;
- }
-
- g_free (path_in_utf8);
-
- buffer = g_locale_to_utf8 (content, size, NULL, NULL, &error);
- g_free (content);
-
- if (error) {
- g_printerr ("%s, %s\n",
- _("Could not convert query file to UTF-8"),
- error->message);
- g_error_free (error);
- tracker_disconnect (client);
-
- return EXIT_FAILURE;
- }
- }
-
- array = tracker_metadata_get_unique_values_with_concat_count_and_sum (client,
- type,
- fields,
- buffer,
- concat,
- count,
- sum,
- descending,
- 0,
- 512,
- &error);
- g_free (buffer);
-
- if (error) {
- g_printerr ("%s, %s\n",
- _("Could not query search"),
- error->message);
- g_error_free (error);
-
- return EXIT_FAILURE;
- }
-
- if (!array) {
- g_print ("%s\n",
- _("No results found matching your query"));
- } else {
- gint length;
-
- length = array->len;
-
- g_print (tracker_dngettext (NULL,
- _("Result: %d"),
- _("Results: %d"),
- length),
- length);
- g_print ("\n");
-
- g_ptr_array_foreach (array, (GFunc) get_meta_table_data, NULL);
- g_ptr_array_free (array, TRUE);
- }
-
- tracker_disconnect (client);
-
- return EXIT_SUCCESS;
-}
diff --git a/src/trackerd/tracker-metadata.c b/src/trackerd/tracker-metadata.c
index cc7229654..1ce517607 100644
--- a/src/trackerd/tracker-metadata.c
+++ b/src/trackerd/tracker-metadata.c
@@ -36,7 +36,6 @@
#include <libtracker-data/tracker-data-query.h>
#include <libtracker-data/tracker-data-schema.h>
#include <libtracker-data/tracker-data-search.h>
-#include <libtracker-data/tracker-rdf-query.h>
#include "tracker-indexer-client.h"
#include "tracker-dbus.h"
@@ -533,340 +532,4 @@ tracker_metadata_get_registered_classes (TrackerMetadata *object,
tracker_dbus_request_success (request_id);
}
-void
-tracker_metadata_get_unique_values (TrackerMetadata *object,
- const gchar *service_type,
- gchar **fields,
- const gchar *query_condition,
- gboolean order_desc,
- gint offset,
- gint max_hits,
- DBusGMethodInvocation *context,
- GError **error)
-{
- TrackerDBResultSet *result_set = NULL;
- guint request_id;
-
- GPtrArray *values = NULL;
-
- GError *actual_error = NULL;
-
- request_id = tracker_dbus_get_next_request_id ();
-
- tracker_dbus_async_return_if_fail (service_type != NULL, context);
- tracker_dbus_async_return_if_fail (fields != NULL, context);
- tracker_dbus_async_return_if_fail (query_condition != NULL, context);
-
- tracker_dbus_request_new (request_id,
- "DBus request to get unique values, "
- "service type:'%s', query '%s'",
- service_type,
- query_condition);
-
- result_set = tracker_data_search_get_unique_values (service_type, fields,
- query_condition,
- order_desc,
- offset,
- max_hits,
- &actual_error);
-
- if (actual_error) {
- tracker_dbus_request_failed (request_id, &actual_error, NULL);
- dbus_g_method_return_error (context, actual_error);
- g_error_free (actual_error);
- return;
- }
-
- values = tracker_dbus_query_result_to_ptr_array (result_set);
-
- dbus_g_method_return (context, values);
-
- tracker_dbus_results_ptr_array_free (&values);
-
- if (result_set) {
- g_object_unref (result_set);
- }
-
- tracker_dbus_request_success (request_id);
-}
-
-void
-tracker_metadata_get_unique_values_with_count (TrackerMetadata *object,
- const gchar *service_type,
- gchar **fields,
- const gchar *query_condition,
- const gchar *count_field,
- gboolean order_desc,
- gint offset,
- gint max_hits,
- DBusGMethodInvocation *context,
- GError **error)
-{
- TrackerDBResultSet *result_set = NULL;
- guint request_id;
- GPtrArray *values = NULL;
- GError *actual_error = NULL;
-
- request_id = tracker_dbus_get_next_request_id ();
-
- tracker_dbus_async_return_if_fail (service_type != NULL, context);
- tracker_dbus_async_return_if_fail (fields != NULL, context);
- tracker_dbus_async_return_if_fail (query_condition != NULL, context);
-
- tracker_dbus_request_new (request_id,
- "DBus request to get unique values, "
- "service type:'%s', query '%s'"
- "count field :'%s'",
- service_type,
- query_condition,
- count_field);
-
- result_set =
- tracker_data_search_get_unique_values_with_count (service_type,
- fields,
- query_condition,
- count_field,
- order_desc,
- offset,
- max_hits,
- &actual_error);
-
- if (actual_error) {
- tracker_dbus_request_failed (request_id, &actual_error, NULL);
- dbus_g_method_return_error (context, actual_error);
- g_error_free (actual_error);
- return;
- }
-
- values = tracker_dbus_query_result_to_ptr_array (result_set);
-
- dbus_g_method_return (context, values);
-
- tracker_dbus_results_ptr_array_free (&values);
-
- if (result_set) {
- g_object_unref (result_set);
- }
-
- tracker_dbus_request_success (request_id);
-}
-
-void
-tracker_metadata_get_unique_values_with_count_and_sum (TrackerMetadata *object,
- const gchar *service_type,
- gchar **fields,
- const gchar *query_condition,
- const gchar *count_field,
- const gchar *sum_field,
- gboolean order_desc,
- gint offset,
- gint max_hits,
- DBusGMethodInvocation *context,
- GError **error)
-{
- TrackerDBResultSet *result_set = NULL;
- guint request_id;
- GPtrArray *values = NULL;
- GError *actual_error = NULL;
-
- request_id = tracker_dbus_get_next_request_id ();
-
- tracker_dbus_async_return_if_fail (service_type != NULL, context);
- tracker_dbus_async_return_if_fail (fields != NULL, context);
- tracker_dbus_async_return_if_fail (query_condition != NULL, context);
-
- tracker_dbus_request_new (request_id,
- "DBus request to get unique values with count and sum, "
- "service type:'%s', query '%s', "
- "count field :'%s', "
- "sum field :'%s'",
- service_type,
- query_condition,
- count_field,
- sum_field);
-
- result_set =
- tracker_data_search_get_unique_values_with_count_and_sum (service_type,
- fields,
- query_condition,
- count_field,
- sum_field,
- order_desc,
- offset,
- max_hits,
- &actual_error);
-
- if (actual_error) {
- tracker_dbus_request_failed (request_id, &actual_error, NULL);
- dbus_g_method_return_error (context, actual_error);
- g_error_free (actual_error);
- return;
- }
-
- values = tracker_dbus_query_result_to_ptr_array (result_set);
-
- dbus_g_method_return (context, values);
-
- tracker_dbus_results_ptr_array_free (&values);
-
- if (result_set) {
- g_object_unref (result_set);
- }
-
- tracker_dbus_request_success (request_id);
-}
-
-void
-tracker_metadata_get_unique_values_with_concat_count_and_sum (TrackerMetadata *object,
- const gchar *service_type,
- gchar **fields,
- const gchar *query_condition,
- const gchar *concat_field,
- const gchar *count_field,
- const gchar *sum_field,
- gboolean order_desc,
- gint offset,
- gint max_hits,
- DBusGMethodInvocation *context,
- GError **error)
-{
- TrackerDBResultSet *result_set = NULL;
- guint request_id;
- GPtrArray *values = NULL;
- GError *actual_error = NULL;
-
- request_id = tracker_dbus_get_next_request_id ();
-
- tracker_dbus_async_return_if_fail (service_type != NULL, context);
- tracker_dbus_async_return_if_fail (fields != NULL, context);
- tracker_dbus_async_return_if_fail (query_condition != NULL, context);
-
- tracker_dbus_request_new (request_id,
- "DBus request to get unique values with count and sum, "
- "service type:'%s', query '%s', "
- "concat field :'%s' "
- "count field :'%s', "
- "sum field :'%s'",
- service_type,
- query_condition,
- concat_field,
- count_field,
- sum_field);
-
- result_set =
- tracker_data_search_get_unique_values_with_concat_count_and_sum (service_type,
- fields,
- query_condition,
- concat_field,
- count_field,
- sum_field,
- order_desc,
- offset,
- max_hits,
- &actual_error);
-
- if (actual_error) {
- tracker_dbus_request_failed (request_id, &actual_error, NULL);
- dbus_g_method_return_error (context, actual_error);
- g_error_free (actual_error);
- return;
- }
-
- values = tracker_dbus_query_result_to_ptr_array (result_set);
-
- dbus_g_method_return (context, values);
-
- tracker_dbus_results_ptr_array_free (&values);
-
- if (result_set) {
- g_object_unref (result_set);
- }
-
- tracker_dbus_request_success (request_id);
-}
-
-void
-tracker_metadata_get_sum (TrackerMetadata *object,
- const gchar *service_type,
- const gchar *field,
- const gchar *query_condition,
- DBusGMethodInvocation *context,
- GError **error)
-{
- guint request_id;
- gint sum;
- GError *actual_error = NULL;
-
- request_id = tracker_dbus_get_next_request_id ();
-
- tracker_dbus_async_return_if_fail (service_type != NULL, context);
- tracker_dbus_async_return_if_fail (field != NULL, context);
- tracker_dbus_async_return_if_fail (query_condition != NULL, context);
-
- tracker_dbus_request_new (request_id,
- "DBus request to get sum, "
- "service type:'%s', field '%s', query '%s'",
- service_type,
- field,
- query_condition);
-
- sum = tracker_data_search_get_sum (service_type,
- field,
- query_condition,
- &actual_error);
-
- if (actual_error) {
- tracker_dbus_request_failed (request_id, &actual_error, NULL);
- dbus_g_method_return_error (context, actual_error);
- g_error_free (actual_error);
- return;
- }
-
- dbus_g_method_return (context, sum);
-
- tracker_dbus_request_success (request_id);
-}
-
-void
-tracker_metadata_get_count (TrackerMetadata *object,
- const gchar *service_type,
- const gchar *field,
- const gchar *query_condition,
- DBusGMethodInvocation *context,
- GError **error)
-{
- guint request_id;
- gint count;
-
- GError *actual_error = NULL;
-
- request_id = tracker_dbus_get_next_request_id ();
-
- tracker_dbus_async_return_if_fail (service_type != NULL, context);
- tracker_dbus_async_return_if_fail (field != NULL, context);
- tracker_dbus_async_return_if_fail (query_condition != NULL, context);
-
- tracker_dbus_request_new (request_id,
- "DBus request to get count, "
- "service type:'%s', field '%s', query '%s'",
- service_type,
- field,
- query_condition);
-
- count = tracker_data_search_get_count (service_type,
- field,
- query_condition,
- &actual_error);
-
- if (actual_error) {
- tracker_dbus_request_failed (request_id, &actual_error, NULL);
- dbus_g_method_return_error (context, actual_error);
- g_error_free (actual_error);
- return;
- }
-
- dbus_g_method_return (context, count);
-
- tracker_dbus_request_success (request_id);
-}
diff --git a/src/trackerd/tracker-metadata.h b/src/trackerd/tracker-metadata.h
index ec51ea2d7..23132c22d 100644
--- a/src/trackerd/tracker-metadata.h
+++ b/src/trackerd/tracker-metadata.h
@@ -87,60 +87,6 @@ void tracker_metadata_get_registered_types (T
void tracker_metadata_get_registered_classes (TrackerMetadata *object,
DBusGMethodInvocation *context,
GError **error);
-void tracker_metadata_get_unique_values (TrackerMetadata *object,
- const gchar *service_type,
- gchar **fields,
- const gchar *query_condition,
- gboolean order_desc,
- gint offset,
- gint max_hits,
- DBusGMethodInvocation *context,
- GError **error);
-void tracker_metadata_get_sum (TrackerMetadata *object,
- const gchar *service_type,
- const gchar *field,
- const gchar *query_condition,
- DBusGMethodInvocation *context,
- GError **error);
-void tracker_metadata_get_count (TrackerMetadata *object,
- const gchar *service_type,
- const gchar *field,
- const gchar *query_condition,
- DBusGMethodInvocation *context,
- GError **error);
-void tracker_metadata_get_unique_values_with_count (TrackerMetadata *object,
- const gchar *service_type,
- gchar **fields,
- const gchar *query_condition,
- const gchar *count,
- gboolean order_desc,
- gint offset,
- gint max_hits,
- DBusGMethodInvocation *context,
- GError **error);
-void tracker_metadata_get_unique_values_with_count_and_sum (TrackerMetadata *object,
- const gchar *service_type,
- gchar **fields,
- const gchar *query_condition,
- const gchar *count,
- const gchar *sum,
- gboolean order_desc,
- gint offset,
- gint max_hits,
- DBusGMethodInvocation *context,
- GError **error);
-void tracker_metadata_get_unique_values_with_concat_count_and_sum (TrackerMetadata *object,
- const gchar *service_type,
- gchar **fields,
- const gchar *query_condition,
- const gchar *concat,
- const gchar *count,
- const gchar *sum,
- gboolean order_desc,
- gint offset,
- gint max_hits,
- DBusGMethodInvocation *context,
- GError **error);
G_END_DECLS
diff --git a/src/trackerd/tracker-search.c b/src/trackerd/tracker-search.c
index 72ee554f4..67f0c7b39 100644
--- a/src/trackerd/tracker-search.c
+++ b/src/trackerd/tracker-search.c
@@ -40,7 +40,6 @@
#include <libtracker-data/tracker-data-schema.h>
#include <libtracker-data/tracker-data-search.h>
#include <libtracker-data/tracker-query-tree.h>
-#include <libtracker-data/tracker-rdf-query.h>
#include "tracker-dbus.h"
#include "tracker-search.h"
@@ -410,88 +409,6 @@ search_get_snippet (const gchar *text,
}
}
-static TrackerDBResultSet *
-search_perform_rdf_query (gint request_id,
- const gchar *service,
- const gchar **fields,
- const gchar *search_text,
- const gchar **keywords,
- const gchar *query_condition,
- gboolean sort_by_service,
- const gchar **sort_fields,
- gboolean sort_desc,
- gint offset,
- gint max_hits,
- GError **error)
-{
- TrackerDBInterface *iface;
- TrackerDBResultSet *result_set;
-
- result_set = NULL;
-
- iface = tracker_db_manager_get_db_interface_by_service (service);
-
- if (query_condition) {
- GError *query_error = NULL;
- gchar *query_translated;
-
- tracker_dbus_request_comment (request_id,
- "Executing RDF query:'%s' with search "
- "term:'%s'",
- query_condition,
- search_text);
-
- query_translated = tracker_rdf_query_to_sql (iface,
- query_condition,
- service,
- fields,
- g_strv_length ((GStrv) fields),
- search_text,
- keywords,
- keywords ? g_strv_length ((GStrv) keywords) : 0,
- sort_by_service,
- sort_fields,
- sort_fields ? g_strv_length ((GStrv) sort_fields) : 0,
- sort_desc,
- offset,
- search_sanity_check_max_hits (max_hits),
- &query_error);
-
- if (query_error) {
- g_propagate_error (error, query_error);
- return NULL;
- } else if (!query_translated) {
- g_set_error (error,
- tracker_rdf_error_quark (),
- 0,
- "Invalid rdf query, no error given");
- return NULL;
- }
-
- tracker_dbus_request_comment (request_id,
- "Translated RDF query:'%s'",
- query_translated);
-
- if (!tracker_is_empty_string (search_text)) {
- tracker_data_search_text (iface,
- service,
- search_text,
- 0,
- 999999,
- TRUE,
- FALSE);
- }
-
- result_set = tracker_db_interface_execute_query (iface,
- NULL,
- "%s",
- query_translated);
- g_free (query_translated);
- }
-
- return result_set;
-}
-
void
tracker_search_get_hit_count (TrackerSearch *object,
const gchar *service,
@@ -974,256 +891,6 @@ tracker_search_files_by_text (TrackerSearch *object,
}
void
-tracker_search_metadata (TrackerSearch *object,
- const gchar *service,
- const gchar *field,
- const gchar *search_text,
- gint offset,
- gint max_hits,
- DBusGMethodInvocation *context,
- GError **error)
-{
- TrackerDBResultSet *result_set;
- GError *actual_error = NULL;
- guint request_id;
- gchar **values;
- gchar *query_condition;
- const gchar *fields[] = {
- "File:NameDelimited",
- NULL
- };
-
- /* FIXME: This function is completely redundant */
-
- request_id = tracker_dbus_get_next_request_id ();
-
- tracker_dbus_async_return_if_fail (service != NULL, context);
- tracker_dbus_async_return_if_fail (field != NULL, context);
- tracker_dbus_async_return_if_fail (search_text != NULL, context);
-
- tracker_dbus_request_new (request_id,
- "DBus request to search metadata, "
- "service:'%s', search text:'%s', field:'%s', "
- "offset:%d, max hits:%d",
- service,
- search_text,
- field,
- offset,
- max_hits);
-
- if (!tracker_ontology_service_is_valid (service)) {
- tracker_dbus_request_failed (request_id,
- &actual_error,
- "Service '%s' is invalid or has not been implemented yet",
- service);
- dbus_g_method_return_error (context, actual_error);
- g_error_free (actual_error);
- return;
- }
-
- if (tracker_ontology_get_field_by_name (field) == NULL) {
- tracker_dbus_request_failed (request_id,
- &actual_error,
- "Metadata field '%s' not registered in the system",
- field);
- dbus_g_method_return_error (context, actual_error);
- g_error_free (actual_error);
- return;
- }
-
-
- query_condition = tracker_rdf_query_for_attr_value (field, search_text);
- result_set = search_perform_rdf_query (request_id,
- service,
- fields,
- "",
- NULL,
- query_condition,
- FALSE,
- NULL,
- FALSE,
- offset,
- max_hits,
- &actual_error);
- g_free (query_condition);
-
- values = tracker_dbus_query_result_to_strv (result_set, 1, NULL);
-
- dbus_g_method_return (context, values);
-
- g_strfreev (values);
-
- if (result_set) {
- g_object_unref (result_set);
- }
-
- tracker_dbus_request_success (request_id);
-}
-
-void
-tracker_search_matching_fields (TrackerSearch *object,
- const gchar *service,
- const gchar *id,
- const gchar *search_text,
- DBusGMethodInvocation *context,
- GError **error)
-{
- TrackerDBInterface *iface;
- TrackerDBResultSet *result_set;
- GError *actual_error = NULL;
- guint request_id;
- GHashTable *values = NULL;
-
- request_id = tracker_dbus_get_next_request_id ();
-
- tracker_dbus_async_return_if_fail (service != NULL, context);
- tracker_dbus_async_return_if_fail (id != NULL, context);
- tracker_dbus_async_return_if_fail (search_text != NULL, context);
-
- tracker_dbus_request_new (request_id,
- "DBus request to search matching fields, "
- "service:'%s', search text:'%s', id:'%s'",
- service,
- search_text,
- id);
-
- if (!tracker_ontology_service_is_valid (service)) {
- g_set_error (&actual_error,
- TRACKER_DBUS_ERROR,
- 0,
- "Service '%s' is invalid or has not been implemented yet",
- service);
- dbus_g_method_return_error (context, actual_error);
- g_error_free (actual_error);
- return;
- }
-
- if (tracker_is_empty_string (id)) {
- g_set_error (&actual_error,
- TRACKER_DBUS_ERROR,
- 0,
- "ID field must have a value");
- dbus_g_method_return_error (context, actual_error);
- g_error_free (actual_error);
- return;
- }
-
- iface = tracker_db_manager_get_db_interface_by_service (service);
-
- /* FIXME: This function no longer exists, it was returning
- * NULL in every case, this DBus function needs rewriting or
- * to be removed.
- */
- result_set = NULL;
-
- /* result_set = tracker_db_search_matching_metadata (iface, */
- /* service, */
- /* id, */
- /* search_text); */
-
- values = tracker_dbus_query_result_to_hash_table (result_set);
-
- dbus_g_method_return (context, values);
-
- g_hash_table_destroy (values);
-
- if (result_set) {
- g_object_unref (result_set);
- }
-
- tracker_dbus_request_success (request_id);
-}
-
-void
-tracker_search_query (TrackerSearch *object,
- gint live_query_id,
- const gchar *service,
- const gchar **fields,
- const gchar *search_text,
- const gchar **keywords,
- const gchar *query_condition,
- gboolean sort_by_service,
- const gchar **sort_fields,
- gboolean sort_desc,
- gint offset,
- gint max_hits,
- DBusGMethodInvocation *context,
- GError **error)
-{
- TrackerDBResultSet *result_set;
- GError *actual_error = NULL;
- guint request_id;
- GPtrArray *values = NULL;
-
- request_id = tracker_dbus_get_next_request_id ();
-
- tracker_dbus_async_return_if_fail (service != NULL, context);
- tracker_dbus_async_return_if_fail (fields != NULL, context);
- tracker_dbus_async_return_if_fail (search_text != NULL, context);
- tracker_dbus_async_return_if_fail (keywords != NULL, context);
- tracker_dbus_async_return_if_fail (query_condition != NULL, context);
-
- tracker_dbus_request_new (request_id,
- "DBus request to search query, "
- "query id:%d, service:'%s', search text '%s', "
- "query condition:'%s', offset:%d, "
- "max hits:%d, sort by service:'%s', sort descending'%s'",
- live_query_id,
- service,
- search_text,
- query_condition,
- offset,
- max_hits,
- sort_by_service ? "yes" : "no",
- sort_desc ? "yes" : "no");
-
- if (!tracker_ontology_service_is_valid (service)) {
- tracker_dbus_request_failed (request_id,
- &actual_error,
- "Service '%s' is invalid or has not been implemented yet",
- service);
- dbus_g_method_return_error (context, actual_error);
- g_error_free (actual_error);
- return;
- }
-
-
- result_set = search_perform_rdf_query (request_id,
- service,
- fields,
- search_text,
- keywords,
- query_condition,
- sort_by_service,
- sort_fields,
- sort_desc,
- offset,
- max_hits,
- &actual_error);
-
- if (actual_error) {
- tracker_dbus_request_failed (request_id,
- &actual_error,
- NULL);
- dbus_g_method_return_error (context, actual_error);
- g_error_free (actual_error);
- return;
- }
-
- values = tracker_dbus_query_result_to_ptr_array (result_set);
-
- dbus_g_method_return (context, values);
-
- tracker_dbus_results_ptr_array_free (&values);
-
- if (result_set) {
- g_object_unref (result_set);
- }
-
- tracker_dbus_request_success (request_id);
-}
-
-void
tracker_search_suggest (TrackerSearch *object,
const gchar *search_text,
gint max_dist,
diff --git a/src/trackerd/tracker-search.h b/src/trackerd/tracker-search.h
index a0c2b7d0d..890a1ed77 100644
--- a/src/trackerd/tracker-search.h
+++ b/src/trackerd/tracker-search.h
@@ -96,34 +96,6 @@ void tracker_search_files_by_text (TrackerSearch *object,
gboolean group_results,
DBusGMethodInvocation *context,
GError **error);
-void tracker_search_metadata (TrackerSearch *object,
- const gchar *service,
- const gchar *field,
- const gchar *search_text,
- gint offset,
- gint max_hits,
- DBusGMethodInvocation *context,
- GError **error);
-void tracker_search_matching_fields (TrackerSearch *object,
- const gchar *service,
- const gchar *id,
- const gchar *search_text,
- DBusGMethodInvocation *context,
- GError **error);
-void tracker_search_query (TrackerSearch *object,
- gint live_query_id,
- const gchar *service,
- const gchar **fields,
- const gchar *search_text,
- const gchar **keywords,
- const gchar *query_condition,
- gboolean sort_by_service,
- const gchar **sort_fields,
- gint sort_field_count,
- gint offset,
- gint max_hits,
- DBusGMethodInvocation *context,
- GError **error);
void tracker_search_suggest (TrackerSearch *object,
const gchar *search_text,
gint max_dist,