[rygel] media-export: Fix virtual containers



commit 05c97eee4d8bfc69c2e4d83f3991a9f4c2e8d857
Author: Jens Georg <jensg openismus com>
Date:   Wed Aug 7 13:09:24 2013 +0200

    media-export: Fix virtual containers
    
    Final fix. Add dummy columns from sorting to union as well to not break the
    "All" container use-case.
    
    Hopefully that's the final fix now

 .../rygel-media-export-media-cache.vala            |   31 +++++++++++++------
 1 files changed, 21 insertions(+), 10 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 a488e61..48f3005 100644
--- a/src/plugins/media-export/rygel-media-export-media-cache.vala
+++ b/src/plugins/media-export/rygel-media-export-media-cache.vala
@@ -440,28 +440,37 @@ public class Rygel.MediaExport.MediaCache : Object {
         v = max_count;
         args.append (v);
         string extra_columns;
+        int column_count;
 
+        var builder = new StringBuilder ();
         var data = new ArrayList<string> ();
 
         var sql_sort_order = MediaCache.translate_sort_criteria
                                         (sort_criteria,
-                                         out extra_columns);
+                                         out extra_columns,
+                                         out column_count);
 
         // title here is actually the meta-data column, so if we had
         // dc:title in the sort criteria, we need to change this
         sql_sort_order = sql_sort_order.replace ("o.title", "_column");
-        extra_columns  = extra_columns.replace (",o.title", "");
+        extra_columns  = extra_columns.replace ("o.title", "1");
 
-        var sql = this.sql.make (SQLString.GET_META_DATA_COLUMN);
         if (add_all_container) {
-            sql = "SELECT 'all_place_holder' AS _column UNION " + sql;
+            builder.append ("SELECT 'all_place_holder' AS _column ");
+            for (var i = 0; i < column_count; i++) {
+                builder.append (", 1 ");
+            }
+            builder.append ("UNION ");
         }
 
-        var cursor = this.db.exec_cursor (sql.printf (column,
-                                                      extra_columns,
-                                                      filter,
-                                                      sql_sort_order),
-                                          args.values);
+
+        builder.append_printf (this.sql.make (SQLString.GET_META_DATA_COLUMN),
+                               column,
+                               extra_columns,
+                               filter,
+                               sql_sort_order);
+
+        var cursor = this.db.exec_cursor (builder.str, args.values);
         foreach (var statement in cursor) {
             data.add (statement.column_text (0));
         }
@@ -1146,11 +1155,13 @@ public class Rygel.MediaExport.MediaCache : Object {
 
     private static string translate_sort_criteria
                                         (string sort_criteria,
-                                         out string extra_columns = null) {
+                                         out string extra_columns = null,
+                                         out int column_count = null) {
         string? collate;
         var builder = new StringBuilder("ORDER BY ");
         var column_builder = new StringBuilder ();
         var fields = sort_criteria.split (",");
+        column_count = fields.length;
         foreach (unowned string field in fields) {
             try {
                 var column = MediaCache.map_operand_to_column


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