[rygel/rygel-0-18] media-export: Fix sort-criteria in virtual folders
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel/rygel-0-18] media-export: Fix sort-criteria in virtual folders
- Date: Fri, 9 Aug 2013 08:10:45 +0000 (UTC)
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]