[rygel/rygel-0-18] media-export: Fix sort-criteria in virtual folders



commit 94c09d8c4c5967f23f6054baa46995f041431118
Author: Jens Georg <jensg openismus com>
Date:   Mon Aug 5 16:39:51 2013 +0200

    media-export: Fix sort-criteria in virtual folders
    
    Looks like SQLite can only sort on columns it selects so we get the extra
    columns from the sort criteria and select them as well.

 .../rygel-media-export-media-cache.vala            |   15 +++++++++++++--
 .../rygel-media-export-sql-factory.vala            |    2 +-
 2 files changed, 14 insertions(+), 3 deletions(-)
---
diff --git a/src/plugins/media-export/rygel-media-export-media-cache.vala 
b/src/plugins/media-export/rygel-media-export-media-cache.vala
index 44a2231..e7f9117 100644
--- a/src/plugins/media-export/rygel-media-export-media-cache.vala
+++ b/src/plugins/media-export/rygel-media-export-media-cache.vala
@@ -431,10 +431,13 @@ public class Rygel.MediaExport.MediaCache : Object {
         args.append (v);
         v = max_count;
         args.append (v);
+        string extra_columns;
 
         var data = new ArrayList<string> ();
 
-        var sql_sort_order = MediaCache.translate_sort_criteria (sort_criteria);
+        var sql_sort_order = MediaCache.translate_sort_criteria
+                                        (sort_criteria,
+                                         out extra_columns);
 
         // title here is actually the meta-data column, so if we had
         // dc:title in the sort criteria, we need to change this
@@ -446,6 +449,7 @@ public class Rygel.MediaExport.MediaCache : Object {
         }
 
         var cursor = this.db.exec_cursor (sql.printf (column,
+                                                      extra_columns,
                                                       filter,
                                                       sql_sort_order),
                                           args.values);
@@ -1104,9 +1108,12 @@ public class Rygel.MediaExport.MediaCache : Object {
         return this.db.query_value (this.sql.make (id), values);
     }
 
-    private static string translate_sort_criteria (string sort_criteria) {
+    private static string translate_sort_criteria
+                                        (string sort_criteria,
+                                         out string extra_columns = null) {
         string? collate;
         var builder = new StringBuilder("ORDER BY ");
+        var column_builder = new StringBuilder ();
         var fields = sort_criteria.split (",");
         foreach (unowned string field in fields) {
             try {
@@ -1117,15 +1124,19 @@ public class Rygel.MediaExport.MediaCache : Object {
                 if (field != fields[0]) {
                     builder.append (",");
                 }
+                column_builder.append (",");
                 builder.append_printf ("%s %s %s ",
                                        column,
                                        collate,
                                        field[0] == '-' ? "DESC" : "ASC");
+                column_builder.append (column);
             } catch (Error error) {
                 warning ("Skipping unsupported field: %s", field);
             }
         }
 
+        extra_columns = column_builder.str;
+
         return builder.str;
     }
 }
diff --git a/src/plugins/media-export/rygel-media-export-sql-factory.vala 
b/src/plugins/media-export/rygel-media-export-sql-factory.vala
index 440769f..d3db2d0 100644
--- a/src/plugins/media-export/rygel-media-export-sql-factory.vala
+++ b/src/plugins/media-export/rygel-media-export-sql-factory.vala
@@ -181,7 +181,7 @@ internal class Rygel.MediaExport.SQLFactory : Object {
     "SELECT upnp_id FROM OBJECT WHERE parent = ?";
 
     private const string GET_META_DATA_COLUMN_STRING =
-    "SELECT DISTINCT %s AS _column FROM meta_data AS m " +
+    "SELECT DISTINCT %s AS _column %s FROM meta_data AS m " +
         "WHERE _column IS NOT NULL %s %s" +
     "LIMIT ?,?";
 


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