[tracker/fts-positions: 2/2] SPARQL: Support fts:rank and fts:offsets functions in queries



commit 9fc4257642232920ee666f823034fa008cb094db
Author: Jürg Billeter <j bitron ch>
Date:   Thu Oct 8 13:42:32 2009 +0200

    SPARQL: Support fts:rank and fts:offsets functions in queries

 src/libtracker-data/tracker-sparql-query.vala |   22 ++++++++++++++++++++++
 1 files changed, 22 insertions(+), 0 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql-query.vala b/src/libtracker-data/tracker-sparql-query.vala
index 6570650..aca002a 100644
--- a/src/libtracker-data/tracker-sparql-query.vala
+++ b/src/libtracker-data/tracker-sparql-query.vala
@@ -247,6 +247,7 @@ public class Tracker.SparqlQuery : Object {
 	}
 
 	const string FN_NS = "http://www.w3.org/2005/xpath-functions#";;
+	const string FTS_NS = "http://www.tracker-project.org/ontologies/fts#";;
 
 	string query_string;
 	bool update_extensions;
@@ -1205,6 +1206,18 @@ public class Tracker.SparqlQuery : Object {
 			sql.append (")");
 
 			return PropertyType.BOOLEAN;
+		} else if (uri == FTS_NS + "rank") {
+			bool is_var;
+			string v = parse_var_or_term (null, out is_var);
+			sql.append_printf ("\"%s_u_rank\"", v);
+
+			return PropertyType.DOUBLE;
+		} else if (uri == FTS_NS + "offsets") {
+			bool is_var;
+			string v = parse_var_or_term (null, out is_var);
+			sql.append_printf ("\"%s_u_offsets\"", v);
+
+			return PropertyType.STRING;
 		} else {
 			throw get_error ("Unknown function");
 		}
@@ -2398,6 +2411,15 @@ public class Tracker.SparqlQuery : Object {
 						binding.sql_db_column_name,
 						binding.variable);
 
+					if (is_fts_match) {
+						sql.append_printf ("rank(\"%s\".\"fts\") AS \"%s_u_rank\", ",
+							binding.table.sql_query_tablename,
+							binding.variable);
+						sql.append_printf ("offsets(\"%s\".\"fts\") AS \"%s_u_offsets\", ",
+							binding.table.sql_query_tablename,
+							binding.variable);
+					}
+
 					subgraph_var_set.insert (binding.variable, VariableState.BOUND);
 				}
 				binding_list.list.append (binding);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]