[tracker] SPARQL: Support multi-valued properties as functions



commit 680aa9c9211bd789f98badc8e6e86205bcf9d24b
Author: Jürg Billeter <j bitron ch>
Date:   Fri Oct 16 11:11:23 2009 +0200

    SPARQL: Support multi-valued properties as functions
    
    Use GROUP_CONCAT(?,',') to combine multiple values.

 src/libtracker-data/tracker-sparql-query.vala |   20 ++++++++++++++------
 1 files changed, 14 insertions(+), 6 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql-query.vala b/src/libtracker-data/tracker-sparql-query.vala
index 404ca78..48ed6cf 100644
--- a/src/libtracker-data/tracker-sparql-query.vala
+++ b/src/libtracker-data/tracker-sparql-query.vala
@@ -1206,17 +1206,25 @@ public class Tracker.SparqlQuery : Object {
 
 			return PropertyType.BOOLEAN;
 		} else {
-			// support single valued properties as functions
+			// support properties as functions
 			var prop = Ontology.get_property_by_uri (uri);
-			if (prop == null || prop.multiple_values) {
+			if (prop == null) {
 				throw get_error ("Unknown function");
 			}
 
-			sql.append_printf ("(SELECT \"%s\" FROM \"%s\" WHERE ID = ", prop.name, prop.domain.name);
-			translate_expression (sql);
-			sql.append (")");
+			if (prop.multiple_values) {
+				sql.append_printf ("(SELECT GROUP_CONCAT(\"%s\",',') FROM \"%s_%s\" WHERE ID = ", prop.name, prop.domain.name, prop.name);
+				translate_expression (sql);
+				sql.append (")");
 
-			return prop.data_type;
+				return PropertyType.STRING;
+			} else {
+				sql.append_printf ("(SELECT \"%s\" FROM \"%s\" WHERE ID = ", prop.name, prop.domain.name);
+				translate_expression (sql);
+				sql.append (")");
+
+				return prop.data_type;
+			}
 		}
 	}
 



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