[rygel-gst-0-10-plugins] Cleanup RygelMediaExportMediaCache.



commit 8a07694da6e197cf31b7bbe22e053e0e9b3b5070
Author: Krzesimir Nowak <krnowak openismus com>
Date:   Mon Feb 4 15:35:00 2013 +0100

    Cleanup RygelMediaExportMediaCache.

 src/media-export/rygel-media-export-media-cache.c  | 2407 ++++++--------------
 .../rygel-media-export-object-factory.c            |   19 +-
 .../rygel-media-export-object-factory.h            |    4 -
 3 files changed, 694 insertions(+), 1736 deletions(-)
---
diff --git a/src/media-export/rygel-media-export-media-cache.c b/src/media-export/rygel-media-export-media-cache.c
index 21af856..f4a5398 100644
--- a/src/media-export/rygel-media-export-media-cache.c
+++ b/src/media-export/rygel-media-export-media-cache.c
@@ -33,6 +33,7 @@
 #include "rygel-media-export-sql-factory.h"
 #include "rygel-media-export-sql-function.h"
 #include "rygel-media-export-sql-operator.h"
+#include "rygel-media-export-string-utils.h"
 #include "rygel-media-export-video-item.h"
 
 /**
@@ -51,8 +52,6 @@ G_DEFINE_TYPE (RygelMediaExportMediaCache,
 typedef struct _RygelMediaExportExistsCacheEntry RygelMediaExportExistsCacheEntry;
 
 #define _rygel_media_export_exists_cache_entry_free0(var) ((var == NULL) ? NULL : (var = (rygel_media_export_exists_cache_entry_free (var), NULL)))
-#define __vala_GValue_free0(var) ((var == NULL) ? NULL : (var = (_vala_GValue_free (var), NULL)))
-#define _g_string_free0(var) ((var == NULL) ? NULL : (var = (g_string_free (var, TRUE), NULL)))
 
 typedef enum  {
   RYGEL_MEDIA_EXPORT_OBJECT_TYPE_CONTAINER,
@@ -84,26 +83,21 @@ enum  {
 
 static void rygel_media_export_media_cache_open_db (RygelMediaExportMediaCache* self, const gchar* name, GError** error);
 static void rygel_media_export_media_cache_get_exists_cache (RygelMediaExportMediaCache* self, GError** error);
-static void _vala_GValue_array_free (GValue* array, gint array_length);
 static void rygel_media_export_media_cache_create_object (RygelMediaExportMediaCache* self, RygelMediaObject* item, GError** error);
 static void rygel_media_export_media_cache_save_metadata (RygelMediaExportMediaCache* self, RygelMediaItem* item, GError** error);
 static RygelMediaExportDatabaseCursor* rygel_media_export_media_cache_exec_cursor (RygelMediaExportMediaCache* self, RygelMediaExportSQLString id, GValue* values, int values_length1, GError** error);
 static RygelMediaObject* rygel_media_export_media_cache_get_object_from_statement (RygelMediaExportMediaCache* self, RygelMediaContainer* parent, sqlite3_stmt* statement);
 static gint rygel_media_export_media_cache_query_value (RygelMediaExportMediaCache* self, RygelMediaExportSQLString id, GValue* values, int values_length1, GError** error);
-static gchar* rygel_media_export_media_cache_translate_sort_criteria (RygelMediaExportMediaCache* self, const gchar* sort_criteria);
-static gchar* rygel_media_export_media_cache_translate_search_expression (RygelMediaExportMediaCache* self, RygelSearchExpression* expression, GArray* args, const gchar* prefix, GError** error);
+static gchar* rygel_media_export_media_cache_translate_sort_criteria (const gchar* sort_criteria);
+static gchar* rygel_media_export_media_cache_translate_search_expression (RygelSearchExpression* expression, GArray* args, const gchar* prefix, GError** error);
 static guint rygel_media_export_media_cache_modify_limit (guint max_count);
-static void _vala_GValue_free (GValue* self);
-static gchar* rygel_media_export_media_cache_map_operand_to_column (RygelMediaExportMediaCache* self, const gchar* operand, gchar** collate, GError** error);
+static gchar* rygel_media_export_media_cache_map_operand_to_column (const gchar* operand, gchar** collate, GError** error);
 static gboolean rygel_media_export_media_cache_create_schema (RygelMediaExportMediaCache* self);
 static void rygel_media_export_media_cache_fill_item (RygelMediaExportMediaCache* self, sqlite3_stmt* statement, RygelMediaItem* item);
-static gchar* rygel_media_export_media_cache_search_expression_to_sql (RygelMediaExportMediaCache* self, RygelSearchExpression* expression, GArray* args, GError** error);
-static gchar* rygel_media_export_media_cache_logical_expression_to_sql (RygelMediaExportMediaCache* self, RygelLogicalExpression* expression, GArray* args, GError** error);
-static gchar* rygel_media_export_media_cache_relational_expression_to_sql (RygelMediaExportMediaCache* self, RygelRelationalExpression* exp, GArray* args, GError** error);
+static gchar* rygel_media_export_media_cache_search_expression_to_sql (RygelSearchExpression* expression, GArray* args, GError** error);
+static gchar* rygel_media_export_media_cache_logical_expression_to_sql (RygelLogicalExpression* expression, GArray* args, GError** error);
+static gchar* rygel_media_export_media_cache_relational_expression_to_sql (RygelRelationalExpression* exp, GArray* args, GError** error);
 static void rygel_media_export_media_cache_dispose (GObject* obj);
-static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
-static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
-static gint _vala_array_length (gpointer array);
 
 static GArray *
 our_g_value_array_new (void)
@@ -212,16 +206,6 @@ rygel_media_export_media_cache_get_default (GError **error) {
   return g_object_ref (rygel_media_export_media_cache_instance);
 }
 
-static void _vala_GValue_array_free (GValue* array, gint array_length) {
-  if (array != NULL) {
-    int i;
-    for (i = 0; i < array_length; i = i + 1) {
-      g_value_unset (&array[i]);
-    }
-  }
-  g_free (array);
-}
-
 void
 rygel_media_export_media_cache_remove_by_id (RygelMediaExportMediaCache  *self,
 					     const gchar                 *id,
@@ -524,7 +508,7 @@ rygel_media_export_media_cache_get_children (RygelMediaExportMediaCache  *self,
   g_value_init (&(values[2]), G_TYPE_LONG);
   g_value_set_long (&(values[2]), max_count);
 
-  sort_order = rygel_media_export_media_cache_translate_sort_criteria (self, sort_criteria);
+  sort_order = rygel_media_export_media_cache_translate_sort_criteria (sort_criteria);
   priv = self->priv;
   sql = g_strdup_printf (rygel_media_export_sql_factory_make (priv->sql, RYGEL_MEDIA_EXPORT_SQL_STRING_GET_CHILDREN),
 			 sort_order);
@@ -586,7 +570,7 @@ rygel_media_export_media_cache_get_objects_by_search_expression (RygelMediaExpor
 
   args = our_g_value_array_new ();
   inner_error = NULL;
-  filter = rygel_media_export_media_cache_translate_search_expression (self, expression, args, "WHERE", &inner_error);
+  filter = rygel_media_export_media_cache_translate_search_expression (expression, args, "WHERE", &inner_error);
   if (inner_error) {
     g_propagate_error (error, inner_error);
     g_array_unref (args);
@@ -629,11 +613,6 @@ rygel_media_export_media_cache_get_objects_by_search_expression (RygelMediaExpor
   return objects;
 }
 
-static void _vala_GValue_free (GValue* self) {
-  g_value_unset (self);
-  g_free (self);
-}
-
 glong
 rygel_media_export_media_cache_get_object_count_by_search_expression (RygelMediaExportMediaCache  *self,
 								      RygelSearchExpression       *expression,
@@ -649,7 +628,7 @@ rygel_media_export_media_cache_get_object_count_by_search_expression (RygelMedia
 
   args = our_g_value_array_new ();
   inner_error = NULL;
-  filter = rygel_media_export_media_cache_translate_search_expression (self, expression, args, "WHERE", &inner_error);
+  filter = rygel_media_export_media_cache_translate_search_expression (expression, args, "WHERE", &inner_error);
   if (inner_error) {
     g_propagate_error (error, inner_error);
     g_array_unref (args);
@@ -788,7 +767,7 @@ rygel_media_export_media_cache_get_objects_by_filter (RygelMediaExportMediaCache
   } else {
     string_id = RYGEL_MEDIA_EXPORT_SQL_STRING_GET_OBJECTS_BY_FILTER;
   }
-  sort_order = rygel_media_export_media_cache_translate_sort_criteria (self, sort_criteria);
+  sort_order = rygel_media_export_media_cache_translate_sort_criteria (sort_criteria);
   priv = self->priv;
   sql = g_strdup_printf (rygel_media_export_sql_factory_make (priv->sql, string_id), filter, sort_order);
   g_free (sort_order);
@@ -827,7 +806,7 @@ rygel_media_export_media_cache_get_objects_by_filter (RygelMediaExportMediaCache
       g_object_unref (object);
     } else {
       g_warning ("Inconsistent database: item %s has no parent %s",
-		 sqlite3_column_text (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_ID),
+		 (const gchar *) sqlite3_column_text (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_ID),
 		 parent_id);
     }
   }
@@ -906,7 +885,7 @@ rygel_media_export_media_cache_get_child_ids (RygelMediaExportMediaCache  *self,
       g_object_unref (cursor);
       return NULL;
     }
-    gee_abstract_collection_add (abstract_children, sqlite3_column_text (statement, 0));
+    gee_abstract_collection_add (abstract_children, (const gchar *) sqlite3_column_text (statement, 0));
   }
   g_object_unref (cursor);
   return children;
@@ -965,7 +944,7 @@ rygel_media_export_media_cache_get_meta_data_column_by_filter (RygelMediaExportM
       g_object_unref (data);
       return NULL;
     }
-    gee_abstract_collection_add (abstract_data, sqlite3_column_text (statement, 0));
+    gee_abstract_collection_add (abstract_data, (const gchar *) sqlite3_column_text (statement, 0));
   }
   g_object_unref (cursor);
 
@@ -991,14 +970,14 @@ rygel_media_export_media_cache_get_object_attribute_by_search_expression (RygelM
 
   args = our_g_value_array_new ();
   inner_error = NULL;
-  filter = rygel_media_export_media_cache_translate_search_expression (self, expression, args, "AND", &inner_error);
+  filter = rygel_media_export_media_cache_translate_search_expression (expression, args, "AND", &inner_error);
   if (inner_error) {
     g_propagate_error (error, inner_error);
     g_array_unref (args);
     return NULL;
   }
   g_debug ("Parsed filter: %s", filter);
-  column = rygel_media_export_media_cache_map_operand_to_column (self, attribute, NULL, &inner_error);
+  column = rygel_media_export_media_cache_map_operand_to_column (attribute, NULL, &inner_error);
   if (inner_error) {
     g_propagate_error (error, inner_error);
     g_free (filter);
@@ -1084,7 +1063,7 @@ rygel_media_export_media_cache_get_flagged_uris (RygelMediaExportMediaCache  *se
       g_object_unref (uris);
       return NULL;
     }
-    gee_abstract_collection_add (abstract_uris, sqlite3_column_text (statement, 0));
+    gee_abstract_collection_add (abstract_uris, (const gchar *) sqlite3_column_text (statement, 0));
   }
   g_object_unref (cursor);
   return GEE_LIST (uris);
@@ -1126,7 +1105,7 @@ rygel_media_export_media_cache_get_exists_cache (RygelMediaExportMediaCache  *se
     }
     entry.mtime = sqlite3_column_int64 (statement, 1);
     entry.size = sqlite3_column_int64 (statement, 0);
-    gee_abstract_map_set (abstract_cache, sqlite3_column_text (statement, 2), &entry);
+    gee_abstract_map_set (abstract_cache, (const gchar *) sqlite3_column_text (statement, 2), &entry);
   }
   g_object_unref (cursor);
 }
@@ -1239,506 +1218,220 @@ rygel_media_export_media_cache_open_db (RygelMediaExportMediaCache  *self,
   }
 }
 
+static void
+rygel_media_export_media_cache_save_metadata (RygelMediaExportMediaCache  *self,
+					      RygelMediaItem              *item,
+					      GError                     **error) {
+  GValue values [] = {G_VALUE_INIT,  /* item size */
+		      G_VALUE_INIT,  /* item mime type */
+		      G_VALUE_INIT,  /* visual item width */
+		      G_VALUE_INIT,  /* visual item height */
+		      G_VALUE_INIT,  /* item upnp class */
+		      G_VALUE_INIT,  /* music item artist / video item author / playlist item creator */
+		      G_VALUE_INIT,  /* music item album */
+		      G_VALUE_INIT,  /* item date */
+		      G_VALUE_INIT,  /* audio item bitrate */
+		      G_VALUE_INIT,  /* audio item sample frequency */
+		      G_VALUE_INIT,  /* audio item bits per sample */
+		      G_VALUE_INIT,  /* audio item channels */
+		      G_VALUE_INIT,  /* music item track number  */
+		      G_VALUE_INIT,  /* visual item color depth */
+		      G_VALUE_INIT,  /* audio item duration */
+		      G_VALUE_INIT,  /* item id */
+		      G_VALUE_INIT,  /* item dlna profile */
+		      G_VALUE_INIT,  /* music item genre */
+		      G_VALUE_INIT}; /* music item disc */
+  GError *inner_error;
+  RygelMediaObject *object;
+  guint iter;
+  RygelMediaExportMediaCachePrivate *priv;
+
+  g_return_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self));
+  g_return_if_fail (RYGEL_IS_MEDIA_ITEM (item));
+
+  priv = self->priv;
+  object = RYGEL_MEDIA_OBJECT (item);
+
+  g_value_init (&(values[0]), G_TYPE_INT64);
+  g_value_set_int64 (&(values[0]), rygel_media_item_get_size (item));
+
+  g_value_init (&(values[1]), G_TYPE_STRING);
+  g_value_set_string (&(values[1]), rygel_media_item_get_mime_type (item));
+
+  g_value_init (&(values[2]), G_TYPE_INT);
+  g_value_set_int (&(values[2]), -1);
+
+  g_value_init (&(values[3]), G_TYPE_INT);
+  g_value_set_int (&(values[3]), -1);
+
+  g_value_init (&(values[4]), G_TYPE_STRING);
+  g_value_set_string (&(values[4]), rygel_media_object_get_upnp_class (object));
 
-static void rygel_media_export_media_cache_save_metadata (RygelMediaExportMediaCache* self, RygelMediaItem* item, GError** error) {
-  RygelMediaItem* _tmp0_;
-  gint64 _tmp1_;
-  gint64 _tmp2_;
-  GValue _tmp3_ = {0};
-  RygelMediaItem* _tmp4_;
-  const gchar* _tmp5_;
-  const gchar* _tmp6_;
-  GValue _tmp7_ = {0};
-  GValue _tmp8_ = {0};
-  GValue _tmp9_ = {0};
-  RygelMediaItem* _tmp10_;
-  const gchar* _tmp11_;
-  const gchar* _tmp12_;
-  GValue _tmp13_ = {0};
-  GValue _tmp14_ = {0};
-  GValue _tmp15_ = {0};
-  RygelMediaItem* _tmp16_;
-  const gchar* _tmp17_;
-  const gchar* _tmp18_;
-  GValue _tmp19_ = {0};
-  GValue _tmp20_ = {0};
-  GValue _tmp21_ = {0};
-  GValue _tmp22_ = {0};
-  GValue _tmp23_ = {0};
-  GValue _tmp24_ = {0};
-  GValue _tmp25_ = {0};
-  GValue _tmp26_ = {0};
-  RygelMediaItem* _tmp27_;
-  const gchar* _tmp28_;
-  const gchar* _tmp29_;
-  GValue _tmp30_ = {0};
-  RygelMediaItem* _tmp31_;
-  const gchar* _tmp32_;
-  const gchar* _tmp33_;
-  GValue _tmp34_ = {0};
-  GValue _tmp35_ = {0};
-  GValue _tmp36_ = {0};
-  GValue* _tmp37_ = NULL;
-  GValue* values;
-  gint values_length1;
-  RygelMediaItem* _tmp38_;
-  RygelMediaItem* _tmp103_;
-  RygelMediaExportDatabase* _tmp133_;
-  RygelMediaExportSQLFactory* _tmp134_;
-  const gchar* _tmp135_ = NULL;
-  GValue* _tmp136_;
-  gint _tmp136__length1;
-  GError * inner_error = NULL;
-  g_return_if_fail (self != NULL);
-  g_return_if_fail (item != NULL);
-  _tmp0_ = item;
-  _tmp1_ = rygel_media_item_get_size (_tmp0_);
-  _tmp2_ = _tmp1_;
-  g_value_init (&_tmp3_, G_TYPE_INT64);
-  g_value_set_int64 (&_tmp3_, _tmp2_);
-  _tmp4_ = item;
-  _tmp5_ = rygel_media_item_get_mime_type (_tmp4_);
-  _tmp6_ = _tmp5_;
-  g_value_init (&_tmp7_, G_TYPE_STRING);
-  g_value_set_string (&_tmp7_, _tmp6_);
-  g_value_init (&_tmp8_, G_TYPE_INT);
-  g_value_set_int (&_tmp8_, -1);
-  g_value_init (&_tmp9_, G_TYPE_INT);
-  g_value_set_int (&_tmp9_, -1);
-  _tmp10_ = item;
-  _tmp11_ = rygel_media_object_get_upnp_class ((RygelMediaObject*) _tmp10_);
-  _tmp12_ = _tmp11_;
-  g_value_init (&_tmp13_, G_TYPE_STRING);
-  g_value_set_string (&_tmp13_, _tmp12_);
-  rygel_media_export_database_null (&_tmp14_);
-  rygel_media_export_database_null (&_tmp15_);
-  _tmp16_ = item;
-  _tmp17_ = rygel_media_item_get_date (_tmp16_);
-  _tmp18_ = _tmp17_;
-  g_value_init (&_tmp19_, G_TYPE_STRING);
-  g_value_set_string (&_tmp19_, _tmp18_);
-  g_value_init (&_tmp20_, G_TYPE_INT);
-  g_value_set_int (&_tmp20_, -1);
-  g_value_init (&_tmp21_, G_TYPE_INT);
-  g_value_set_int (&_tmp21_, -1);
-  g_value_init (&_tmp22_, G_TYPE_INT);
-  g_value_set_int (&_tmp22_, -1);
-  g_value_init (&_tmp23_, G_TYPE_INT);
-  g_value_set_int (&_tmp23_, -1);
-  g_value_init (&_tmp24_, G_TYPE_INT);
-  g_value_set_int (&_tmp24_, -1);
-  g_value_init (&_tmp25_, G_TYPE_INT);
-  g_value_set_int (&_tmp25_, -1);
-  g_value_init (&_tmp26_, G_TYPE_INT);
-  g_value_set_int (&_tmp26_, -1);
-  _tmp27_ = item;
-  _tmp28_ = rygel_media_object_get_id ((RygelMediaObject*) _tmp27_);
-  _tmp29_ = _tmp28_;
-  g_value_init (&_tmp30_, G_TYPE_STRING);
-  g_value_set_string (&_tmp30_, _tmp29_);
-  _tmp31_ = item;
-  _tmp32_ = rygel_media_item_get_dlna_profile (_tmp31_);
-  _tmp33_ = _tmp32_;
-  g_value_init (&_tmp34_, G_TYPE_STRING);
-  g_value_set_string (&_tmp34_, _tmp33_);
-  rygel_media_export_database_null (&_tmp35_);
-  g_value_init (&_tmp36_, G_TYPE_INT);
-  g_value_set_int (&_tmp36_, -1);
-  _tmp37_ = g_new0 (GValue, 19);
-  _tmp37_[0] = _tmp3_;
-  _tmp37_[1] = _tmp7_;
-  _tmp37_[2] = _tmp8_;
-  _tmp37_[3] = _tmp9_;
-  _tmp37_[4] = _tmp13_;
-  _tmp37_[5] = _tmp14_;
-  _tmp37_[6] = _tmp15_;
-  _tmp37_[7] = _tmp19_;
-  _tmp37_[8] = _tmp20_;
-  _tmp37_[9] = _tmp21_;
-  _tmp37_[10] = _tmp22_;
-  _tmp37_[11] = _tmp23_;
-  _tmp37_[12] = _tmp24_;
-  _tmp37_[13] = _tmp25_;
-  _tmp37_[14] = _tmp26_;
-  _tmp37_[15] = _tmp30_;
-  _tmp37_[16] = _tmp34_;
-  _tmp37_[17] = _tmp35_;
-  _tmp37_[18] = _tmp36_;
-  values = _tmp37_;
-  values_length1 = 19;
-  _tmp38_ = item;
-  if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp38_, RYGEL_TYPE_AUDIO_ITEM)) {
-    RygelMediaItem* _tmp39_;
-    RygelAudioItem* _tmp40_;
-    RygelAudioItem* audio_item;
-    GValue* _tmp41_;
-    RygelAudioItem* _tmp42_;
-    glong _tmp43_;
-    glong _tmp44_;
-    GValue _tmp45_ = {0};
-    GValue* _tmp47_;
-    RygelAudioItem* _tmp48_;
-    gint _tmp49_;
-    gint _tmp50_;
-    GValue _tmp51_ = {0};
-    GValue* _tmp53_;
-    RygelAudioItem* _tmp54_;
-    gint _tmp55_;
-    gint _tmp56_;
-    GValue _tmp57_ = {0};
-    GValue* _tmp59_;
-    RygelAudioItem* _tmp60_;
-    gint _tmp61_;
-    gint _tmp62_;
-    GValue _tmp63_ = {0};
-    GValue* _tmp65_;
-    RygelAudioItem* _tmp66_;
-    gint _tmp67_;
-    gint _tmp68_;
-    GValue _tmp69_ = {0};
-    RygelMediaItem* _tmp71_;
-    _tmp39_ = item;
-    _tmp40_ = g_object_ref (G_TYPE_CHECK_INSTANCE_TYPE (_tmp39_, RYGEL_TYPE_AUDIO_ITEM) ? ((RygelAudioItem*) _tmp39_) : NULL);
-    audio_item = _tmp40_;
-    _tmp41_ = values;
-    _tmp42_ = audio_item;
-    _tmp43_ = rygel_audio_item_get_duration (_tmp42_);
-    _tmp44_ = _tmp43_;
-    g_value_init (&_tmp45_, G_TYPE_LONG);
-    g_value_set_long (&_tmp45_, _tmp44_);
-    G_IS_VALUE (&_tmp41_[14]) ? (g_value_unset (&_tmp41_[14]), NULL) : NULL;
-    _tmp41_[14] = _tmp45_;
-    _tmp47_ = values;
-    _tmp48_ = audio_item;
-    _tmp49_ = rygel_audio_item_get_bitrate (_tmp48_);
-    _tmp50_ = _tmp49_;
-    g_value_init (&_tmp51_, G_TYPE_INT);
-    g_value_set_int (&_tmp51_, _tmp50_);
-    G_IS_VALUE (&_tmp47_[8]) ? (g_value_unset (&_tmp47_[8]), NULL) : NULL;
-    _tmp47_[8] = _tmp51_;
-    _tmp53_ = values;
-    _tmp54_ = audio_item;
-    _tmp55_ = rygel_audio_item_get_sample_freq (_tmp54_);
-    _tmp56_ = _tmp55_;
-    g_value_init (&_tmp57_, G_TYPE_INT);
-    g_value_set_int (&_tmp57_, _tmp56_);
-    G_IS_VALUE (&_tmp53_[9]) ? (g_value_unset (&_tmp53_[9]), NULL) : NULL;
-    _tmp53_[9] = _tmp57_;
-    _tmp59_ = values;
-    _tmp60_ = audio_item;
-    _tmp61_ = rygel_audio_item_get_bits_per_sample (_tmp60_);
-    _tmp62_ = _tmp61_;
-    g_value_init (&_tmp63_, G_TYPE_INT);
-    g_value_set_int (&_tmp63_, _tmp62_);
-    G_IS_VALUE (&_tmp59_[10]) ? (g_value_unset (&_tmp59_[10]), NULL) : NULL;
-    _tmp59_[10] = _tmp63_;
-    _tmp65_ = values;
-    _tmp66_ = audio_item;
-    _tmp67_ = rygel_audio_item_get_channels (_tmp66_);
-    _tmp68_ = _tmp67_;
-    g_value_init (&_tmp69_, G_TYPE_INT);
-    g_value_set_int (&_tmp69_, _tmp68_);
-    G_IS_VALUE (&_tmp65_[11]) ? (g_value_unset (&_tmp65_[11]), NULL) : NULL;
-    _tmp65_[11] = _tmp69_;
-    _tmp71_ = item;
-    if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp71_, RYGEL_MEDIA_EXPORT_TYPE_MUSIC_ITEM)) {
-      RygelMediaItem* _tmp72_;
-      RygelMediaExportMusicItem* _tmp73_;
-      RygelMediaExportMusicItem* music_item;
-      GValue* _tmp74_;
-      RygelMediaExportMusicItem* _tmp75_;
-      const gchar* _tmp76_;
-      const gchar* _tmp77_;
-      GValue _tmp78_ = {0};
-      GValue* _tmp80_;
-      RygelMediaExportMusicItem* _tmp81_;
-      const gchar* _tmp82_;
-      const gchar* _tmp83_;
-      GValue _tmp84_ = {0};
-      GValue* _tmp86_;
-      RygelMediaExportMusicItem* _tmp87_;
-      const gchar* _tmp88_;
-      const gchar* _tmp89_;
-      GValue _tmp90_ = {0};
-      GValue* _tmp92_;
-      RygelMediaExportMusicItem* _tmp93_;
-      gint _tmp94_;
-      gint _tmp95_;
-      GValue _tmp96_ = {0};
-      GValue* _tmp98_;
-      RygelMediaExportMusicItem* _tmp99_;
-      gint _tmp100_;
-      GValue _tmp101_ = {0};
-      _tmp72_ = item;
-      _tmp73_ = g_object_ref (G_TYPE_CHECK_INSTANCE_TYPE (_tmp72_, RYGEL_MEDIA_EXPORT_TYPE_MUSIC_ITEM) ? ((RygelMediaExportMusicItem*) _tmp72_) : NULL);
-      music_item = _tmp73_;
-      _tmp74_ = values;
-      _tmp75_ = music_item;
-      _tmp76_ = rygel_music_item_get_artist ((RygelMusicItem*) _tmp75_);
-      _tmp77_ = _tmp76_;
-      g_value_init (&_tmp78_, G_TYPE_STRING);
-      g_value_set_string (&_tmp78_, _tmp77_);
-      G_IS_VALUE (&_tmp74_[5]) ? (g_value_unset (&_tmp74_[5]), NULL) : NULL;
-      _tmp74_[5] = _tmp78_;
-      _tmp80_ = values;
-      _tmp81_ = music_item;
-      _tmp82_ = rygel_music_item_get_album ((RygelMusicItem*) _tmp81_);
-      _tmp83_ = _tmp82_;
-      g_value_init (&_tmp84_, G_TYPE_STRING);
-      g_value_set_string (&_tmp84_, _tmp83_);
-      G_IS_VALUE (&_tmp80_[6]) ? (g_value_unset (&_tmp80_[6]), NULL) : NULL;
-      _tmp80_[6] = _tmp84_;
-      _tmp86_ = values;
-      _tmp87_ = music_item;
-      _tmp88_ = rygel_music_item_get_genre ((RygelMusicItem*) _tmp87_);
-      _tmp89_ = _tmp88_;
-      g_value_init (&_tmp90_, G_TYPE_STRING);
-      g_value_set_string (&_tmp90_, _tmp89_);
-      G_IS_VALUE (&_tmp86_[17]) ? (g_value_unset (&_tmp86_[17]), NULL) : NULL;
-      _tmp86_[17] = _tmp90_;
-      _tmp92_ = values;
-      _tmp93_ = music_item;
-      _tmp94_ = rygel_music_item_get_track_number ((RygelMusicItem*) _tmp93_);
-      _tmp95_ = _tmp94_;
-      g_value_init (&_tmp96_, G_TYPE_INT);
-      g_value_set_int (&_tmp96_, _tmp95_);
-      G_IS_VALUE (&_tmp92_[12]) ? (g_value_unset (&_tmp92_[12]), NULL) : NULL;
-      _tmp92_[12] = _tmp96_;
-      _tmp98_ = values;
-      _tmp99_ = music_item;
-      _tmp100_ = _tmp99_->disc;
-      g_value_init (&_tmp101_, G_TYPE_INT);
-      g_value_set_int (&_tmp101_, _tmp100_);
-      G_IS_VALUE (&_tmp98_[18]) ? (g_value_unset (&_tmp98_[18]), NULL) : NULL;
-      _tmp98_[18] = _tmp101_;
-      g_object_unref (music_item);
+  rygel_media_export_database_null (&(values[5]));
+
+  rygel_media_export_database_null (&(values[6]));
+
+  g_value_init (&(values[7]), G_TYPE_STRING);
+  g_value_set_string (&(values[7]), rygel_media_item_get_date (item));
+
+  g_value_init (&(values[8]), G_TYPE_INT);
+  g_value_set_int (&(values[8]), -1);
+
+  g_value_init (&(values[9]), G_TYPE_INT);
+  g_value_set_int (&(values[9]), -1);
+
+  g_value_init (&(values[10]), G_TYPE_INT);
+  g_value_set_int (&(values[10]), -1);
+
+  g_value_init (&(values[11]), G_TYPE_INT);
+  g_value_set_int (&(values[11]), -1);
+
+  g_value_init (&(values[12]), G_TYPE_INT);
+  g_value_set_int (&(values[12]), -1);
+
+  g_value_init (&(values[13]), G_TYPE_INT);
+  g_value_set_int (&(values[13]), -1);
+
+  g_value_init (&(values[14]), G_TYPE_LONG);
+  g_value_set_long (&(values[14]), -1);
+
+  g_value_init (&(values[15]), G_TYPE_STRING);
+  g_value_set_string (&(values[15]), rygel_media_object_get_id (object));
+
+  g_value_init (&(values[16]), G_TYPE_STRING);
+  g_value_set_string (&(values[16]), rygel_media_item_get_dlna_profile (item));
+
+  rygel_media_export_database_null (&(values[17]));
+
+  g_value_init (&(values[18]), G_TYPE_INT);
+  g_value_set_int (&(values[18]), -1);
+
+  if (RYGEL_IS_AUDIO_ITEM (item)) {
+    RygelAudioItem *audio_item = RYGEL_AUDIO_ITEM (item);
+
+    g_value_set_long (&(values[14]), rygel_audio_item_get_duration (audio_item));
+    g_value_set_int (&(values[8]), rygel_audio_item_get_bitrate (audio_item));
+    g_value_set_int (&(values[9]), rygel_audio_item_get_sample_freq (audio_item));
+    g_value_set_int (&(values[10]), rygel_audio_item_get_bits_per_sample (audio_item));
+    g_value_set_int (&(values[11]), rygel_audio_item_get_channels (audio_item));
+    if (RYGEL_IS_MUSIC_ITEM (item)) {
+      RygelMusicItem *music_item = RYGEL_MUSIC_ITEM (item);
+
+      g_value_unset (&(values[5]));
+      g_value_init (&(values[5]), G_TYPE_STRING);
+      g_value_set_string (&(values[5]), rygel_music_item_get_artist (music_item));
+
+      g_value_unset (&(values[6]));
+      g_value_init (&(values[6]), G_TYPE_STRING);
+      g_value_set_string (&(values[6]), rygel_music_item_get_album (music_item));
+
+      g_value_unset (&(values[17]));
+      g_value_init (&(values[17]), G_TYPE_STRING);
+      g_value_set_string (&(values[17]), rygel_music_item_get_genre (music_item));
+
+      g_value_set_int (&(values[12]), rygel_music_item_get_track_number (music_item));
+      if (RYGEL_MEDIA_EXPORT_IS_MUSIC_ITEM (item)) {
+	g_value_set_int (&(values[18]), RYGEL_MEDIA_EXPORT_MUSIC_ITEM (item)->disc);
+      }
     }
-    g_object_unref (audio_item);
-  }
-  _tmp103_ = item;
-  if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp103_, RYGEL_TYPE_VISUAL_ITEM)) {
-    RygelMediaItem* _tmp104_;
-    RygelVisualItem* _tmp105_;
-    RygelVisualItem* visual_item;
-    GValue* _tmp106_;
-    RygelVisualItem* _tmp107_;
-    gint _tmp108_;
-    gint _tmp109_;
-    GValue _tmp110_ = {0};
-    GValue* _tmp112_;
-    RygelVisualItem* _tmp113_;
-    gint _tmp114_;
-    gint _tmp115_;
-    GValue _tmp116_ = {0};
-    GValue* _tmp118_;
-    RygelVisualItem* _tmp119_;
-    gint _tmp120_;
-    gint _tmp121_;
-    GValue _tmp122_ = {0};
-    RygelMediaItem* _tmp124_;
-    _tmp104_ = item;
-    _tmp105_ = g_object_ref (G_TYPE_CHECK_INSTANCE_TYPE (_tmp104_, RYGEL_TYPE_VISUAL_ITEM) ? ((RygelVisualItem*) _tmp104_) : NULL);
-    visual_item = _tmp105_;
-    _tmp106_ = values;
-    _tmp107_ = visual_item;
-    _tmp108_ = rygel_visual_item_get_width (_tmp107_);
-    _tmp109_ = _tmp108_;
-    g_value_init (&_tmp110_, G_TYPE_INT);
-    g_value_set_int (&_tmp110_, _tmp109_);
-    G_IS_VALUE (&_tmp106_[2]) ? (g_value_unset (&_tmp106_[2]), NULL) : NULL;
-    _tmp106_[2] = _tmp110_;
-    _tmp112_ = values;
-    _tmp113_ = visual_item;
-    _tmp114_ = rygel_visual_item_get_height (_tmp113_);
-    _tmp115_ = _tmp114_;
-    g_value_init (&_tmp116_, G_TYPE_INT);
-    g_value_set_int (&_tmp116_, _tmp115_);
-    G_IS_VALUE (&_tmp112_[3]) ? (g_value_unset (&_tmp112_[3]), NULL) : NULL;
-    _tmp112_[3] = _tmp116_;
-    _tmp118_ = values;
-    _tmp119_ = visual_item;
-    _tmp120_ = rygel_visual_item_get_color_depth (_tmp119_);
-    _tmp121_ = _tmp120_;
-    g_value_init (&_tmp122_, G_TYPE_INT);
-    g_value_set_int (&_tmp122_, _tmp121_);
-    G_IS_VALUE (&_tmp118_[13]) ? (g_value_unset (&_tmp118_[13]), NULL) : NULL;
-    _tmp118_[13] = _tmp122_;
-    _tmp124_ = item;
-    if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp124_, RYGEL_MEDIA_EXPORT_TYPE_VIDEO_ITEM)) {
-      RygelMediaItem* _tmp125_;
-      RygelMediaExportVideoItem* _tmp126_;
-      RygelMediaExportVideoItem* video_item;
-      GValue* _tmp127_;
-      RygelMediaExportVideoItem* _tmp128_;
-      const gchar* _tmp129_;
-      const gchar* _tmp130_;
-      GValue _tmp131_ = {0};
-      _tmp125_ = item;
-      _tmp126_ = g_object_ref (G_TYPE_CHECK_INSTANCE_TYPE (_tmp125_, RYGEL_MEDIA_EXPORT_TYPE_VIDEO_ITEM) ? ((RygelMediaExportVideoItem*) _tmp125_) : NULL);
-      video_item = _tmp126_;
-      _tmp127_ = values;
-      _tmp128_ = video_item;
-      _tmp129_ = rygel_video_item_get_author ((RygelVideoItem*) _tmp128_);
-      _tmp130_ = _tmp129_;
-      g_value_init (&_tmp131_, G_TYPE_STRING);
-      g_value_set_string (&_tmp131_, _tmp130_);
-      G_IS_VALUE (&_tmp127_[5]) ? (g_value_unset (&_tmp127_[5]), NULL) : NULL;
-      _tmp127_[5] = _tmp131_;
-      g_object_unref (video_item);
+  }
+  if (RYGEL_IS_VISUAL_ITEM (item)) {
+    RygelVisualItem *visual_item = RYGEL_VISUAL_ITEM (item);
+
+    g_value_set_int (&(values[2]), rygel_visual_item_get_width (visual_item));
+    g_value_set_int (&(values[3]), rygel_visual_item_get_height (visual_item));
+    g_value_set_int (&(values[13]), rygel_visual_item_get_color_depth (visual_item));
+
+    if (RYGEL_IS_VIDEO_ITEM (item)) {
+      RygelVideoItem *video_item = RYGEL_VIDEO_ITEM (item);
+
+      g_value_set_string (&(values[5]), rygel_video_item_get_author (video_item));
     }
-    g_object_unref (visual_item);
-  }
-  _tmp133_ = self->priv->db;
-  _tmp134_ = self->priv->sql;
-  _tmp135_ = rygel_media_export_sql_factory_make (_tmp134_, RYGEL_MEDIA_EXPORT_SQL_STRING_SAVE_METADATA);
-  _tmp136_ = values;
-  _tmp136__length1 = values_length1;
-  rygel_media_export_database_exec (_tmp133_, _tmp135_, _tmp136_, _tmp136__length1, &inner_error);
-  if (inner_error != NULL) {
+  }
+  inner_error = NULL;
+  rygel_media_export_database_exec (priv->db,
+				    rygel_media_export_sql_factory_make (priv->sql, RYGEL_MEDIA_EXPORT_SQL_STRING_SAVE_METADATA),
+				    values,
+				    G_N_ELEMENTS (values),
+				    &inner_error);
+  for (iter = 0; iter < G_N_ELEMENTS (values); ++iter) {
+    g_value_unset (&(values[iter]));
+  }
+  if (inner_error) {
     g_propagate_error (error, inner_error);
-    values = (_vala_GValue_array_free (values, values_length1), NULL);
-    return;
   }
-  values = (_vala_GValue_array_free (values, values_length1), NULL);
 }
 
-
-static void rygel_media_export_media_cache_create_object (RygelMediaExportMediaCache* self, RygelMediaObject* item, GError** error) {
+static void
+rygel_media_export_media_cache_create_object (RygelMediaExportMediaCache  *self,
+					      RygelMediaObject            *object,
+					      GError                     **error) {
+  GValue values[] = {G_VALUE_INIT,  /* object id */
+		     G_VALUE_INIT,  /* object title */
+		     G_VALUE_INIT,  /* type */
+		     G_VALUE_INIT,  /* parent */
+		     G_VALUE_INIT,  /* object modified */
+		     G_VALUE_INIT}; /* object uris */
   gint type;
-  GValue parent = {0};
-  RygelMediaObject* _tmp0_;
-  RygelMediaObject* _tmp1_;
-  RygelMediaContainer* _tmp2_;
-  gchar* _tmp9_ = NULL;
-  RygelMediaObject* _tmp10_;
-  GeeArrayList* _tmp11_;
-  gint _tmp12_;
-  gint _tmp13_;
-  RygelMediaObject* _tmp17_;
-  const gchar* _tmp18_;
-  const gchar* _tmp19_;
-  GValue _tmp20_ = {0};
-  RygelMediaObject* _tmp21_;
-  const gchar* _tmp22_;
-  const gchar* _tmp23_;
-  GValue _tmp24_ = {0};
-  gint _tmp25_;
-  GValue _tmp26_ = {0};
-  GValue _tmp27_;
-  GValue _tmp28_ = {0};
-  RygelMediaObject* _tmp29_;
-  guint64 _tmp30_;
-  guint64 _tmp31_;
-  GValue _tmp32_ = {0};
-  const gchar* _tmp33_;
-  GValue _tmp34_ = {0};
-  GValue* _tmp35_ = NULL;
-  GValue* values;
-  gint values_length1;
-  RygelMediaExportDatabase* _tmp36_;
-  RygelMediaExportSQLFactory* _tmp37_;
-  const gchar* _tmp38_ = NULL;
-  GError * inner_error = NULL;
-  g_return_if_fail (self != NULL);
-  g_return_if_fail (item != NULL);
-  type = (gint) RYGEL_MEDIA_EXPORT_OBJECT_TYPE_CONTAINER;
-  _tmp0_ = item;
-  if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, RYGEL_TYPE_MEDIA_ITEM)) {
+  GError *inner_error;
+  RygelMediaObject *object_parent;
+  gchar *uri;
+  guint iter;
+  RygelMediaExportMediaCachePrivate *priv;
+
+  g_return_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self));
+  g_return_if_fail (RYGEL_IS_MEDIA_OBJECT (object));
+
+  priv = self->priv;
+  g_value_init (&(values[0]), G_TYPE_STRING);
+  g_value_set_string (&(values[0]), rygel_media_object_get_id (object));
+
+  g_value_init (&(values[1]), G_TYPE_STRING);
+  g_value_set_string (&(values[1]), rygel_media_object_get_title (object));
+
+  if (RYGEL_IS_MEDIA_ITEM (object)) {
     type = (gint) RYGEL_MEDIA_EXPORT_OBJECT_TYPE_ITEM;
-  }
-  _tmp1_ = item;
-  _tmp2_ = rygel_media_object_get_parent (_tmp1_);
-  if (_tmp2_ == NULL) {
-    GValue _tmp3_ = {0};
-    rygel_media_export_database_null (&_tmp3_);
-    G_IS_VALUE (&parent) ? (g_value_unset (&parent), NULL) : NULL;
-    parent = _tmp3_;
   } else {
-    RygelMediaObject* _tmp4_;
-    RygelMediaContainer* _tmp5_;
-    const gchar* _tmp6_;
-    const gchar* _tmp7_;
-    GValue _tmp8_ = {0};
-    _tmp4_ = item;
-    _tmp5_ = rygel_media_object_get_parent (_tmp4_);
-    _tmp6_ = rygel_media_object_get_id ((RygelMediaObject*) _tmp5_);
-    _tmp7_ = _tmp6_;
-    g_value_init (&_tmp8_, G_TYPE_STRING);
-    g_value_set_string (&_tmp8_, _tmp7_);
-    G_IS_VALUE (&parent) ? (g_value_unset (&parent), NULL) : NULL;
-    parent = _tmp8_;
-  }
-  _tmp10_ = item;
-  _tmp11_ = _tmp10_->uris;
-  _tmp12_ = gee_abstract_collection_get_size ((GeeAbstractCollection*) _tmp11_);
-  _tmp13_ = _tmp12_;
-  if (_tmp13_ == 0) {
-    g_free (_tmp9_);
-    _tmp9_ = NULL;
+    type = (gint) RYGEL_MEDIA_EXPORT_OBJECT_TYPE_CONTAINER;
+  }
+
+  g_value_init (&(values[2]), G_TYPE_INT);
+  g_value_set_int (&(values[2]), type);
+
+  object_parent = RYGEL_MEDIA_OBJECT (rygel_media_object_get_parent (object));
+  if (object_parent) {
+    g_value_init (&(values[3]), G_TYPE_STRING);
+    g_value_set_string (&(values[3]), rygel_media_object_get_id (object_parent));
   } else {
-    RygelMediaObject* _tmp14_;
-    GeeArrayList* _tmp15_;
-    gpointer _tmp16_ = NULL;
-    _tmp14_ = item;
-    _tmp15_ = _tmp14_->uris;
-    _tmp16_ = gee_abstract_list_get ((GeeAbstractList*) _tmp15_, 0);
-    g_free (_tmp9_);
-    _tmp9_ = (gchar*) _tmp16_;
-  }
-  _tmp17_ = item;
-  _tmp18_ = rygel_media_object_get_id (_tmp17_);
-  _tmp19_ = _tmp18_;
-  g_value_init (&_tmp20_, G_TYPE_STRING);
-  g_value_set_string (&_tmp20_, _tmp19_);
-  _tmp21_ = item;
-  _tmp22_ = rygel_media_object_get_title (_tmp21_);
-  _tmp23_ = _tmp22_;
-  g_value_init (&_tmp24_, G_TYPE_STRING);
-  g_value_set_string (&_tmp24_, _tmp23_);
-  _tmp25_ = type;
-  g_value_init (&_tmp26_, G_TYPE_INT);
-  g_value_set_int (&_tmp26_, _tmp25_);
-  _tmp27_ = parent;
-  if (G_IS_VALUE (&_tmp27_)) {
-    g_value_init (&_tmp28_, G_VALUE_TYPE (&_tmp27_));
-    g_value_copy (&_tmp27_, &_tmp28_);
+    rygel_media_export_database_null (&(values[3]));
+  }
+
+  g_value_init (&(values[4]), G_TYPE_UINT64);
+  g_value_set_uint64 (&(values[4]), rygel_media_object_get_modified (object));
+
+  if (gee_collection_get_is_empty (GEE_COLLECTION (object->uris))) {
+    uri = NULL;
   } else {
-    _tmp28_ = _tmp27_;
-  }
-  _tmp29_ = item;
-  _tmp30_ = rygel_media_object_get_modified (_tmp29_);
-  _tmp31_ = _tmp30_;
-  g_value_init (&_tmp32_, G_TYPE_UINT64);
-  g_value_set_uint64 (&_tmp32_, _tmp31_);
-  _tmp33_ = _tmp9_;
-  g_value_init (&_tmp34_, G_TYPE_STRING);
-  g_value_set_string (&_tmp34_, _tmp33_);
-  _tmp35_ = g_new0 (GValue, 6);
-  _tmp35_[0] = _tmp20_;
-  _tmp35_[1] = _tmp24_;
-  _tmp35_[2] = _tmp26_;
-  _tmp35_[3] = _tmp28_;
-  _tmp35_[4] = _tmp32_;
-  _tmp35_[5] = _tmp34_;
-  values = _tmp35_;
-  values_length1 = 6;
-  _tmp36_ = self->priv->db;
-  _tmp37_ = self->priv->sql;
-  _tmp38_ = rygel_media_export_sql_factory_make (_tmp37_, RYGEL_MEDIA_EXPORT_SQL_STRING_INSERT);
-  rygel_media_export_database_exec (_tmp36_, _tmp38_, values, values_length1, &inner_error);
-  if (inner_error != NULL) {
+    uri = (gchar *) gee_list_first (GEE_LIST (object->uris));
+  }
+  g_value_init (&(values[5]), G_TYPE_STRING);
+  g_value_take_string (&(values[5]), uri);
+
+  inner_error = NULL;
+  rygel_media_export_database_exec (priv->db,
+				    rygel_media_export_sql_factory_make (priv->sql, RYGEL_MEDIA_EXPORT_SQL_STRING_INSERT),
+				    values,
+				    G_N_ELEMENTS (values),
+				    &inner_error);
+  for (iter = 0; iter < G_N_ELEMENTS (values); ++iter) {
+    g_value_unset (&(values[iter]));
+  }
+  if (inner_error) {
     g_propagate_error (error, inner_error);
-    values = (_vala_GValue_array_free (values, values_length1), NULL);
-    g_free (_tmp9_);
-    G_IS_VALUE (&parent) ? (g_value_unset (&parent), NULL) : NULL;
     return;
   }
-  values = (_vala_GValue_array_free (values, values_length1), NULL);
-  g_free (_tmp9_);
-  G_IS_VALUE (&parent) ? (g_value_unset (&parent), NULL) : NULL;
 }
 
-
 /**
  * Create the current schema.
  *
@@ -1747,1283 +1440,584 @@ static void rygel_media_export_media_cache_create_object (RygelMediaExportMediaC
  *
  * @returns: true on success, false on failure
  */
-static gboolean rygel_media_export_media_cache_create_schema (RygelMediaExportMediaCache* self) {
-  gboolean result = FALSE;
-  GError * inner_error = NULL;
-  g_return_val_if_fail (self != NULL, FALSE);
-  {
-    RygelMediaExportDatabase* _tmp0_;
-    RygelMediaExportDatabase* _tmp1_;
-    RygelMediaExportSQLFactory* _tmp2_;
-    const gchar* _tmp3_ = NULL;
-    RygelMediaExportDatabase* _tmp4_;
-    RygelMediaExportSQLFactory* _tmp5_;
-    const gchar* _tmp6_ = NULL;
-    RygelMediaExportDatabase* _tmp7_;
-    RygelMediaExportSQLFactory* _tmp8_;
-    const gchar* _tmp9_ = NULL;
-    RygelMediaExportDatabase* _tmp10_;
-    RygelMediaExportSQLFactory* _tmp11_;
-    const gchar* _tmp12_ = NULL;
-    RygelMediaExportDatabase* _tmp13_;
-    RygelMediaExportSQLFactory* _tmp14_;
-    const gchar* _tmp15_ = NULL;
-    RygelMediaExportDatabase* _tmp16_;
-    RygelMediaExportDatabase* _tmp17_;
-    _tmp0_ = self->priv->db;
-    rygel_media_export_database_begin (_tmp0_, &inner_error);
-    if (inner_error != NULL) {
-      goto __catch10_g_error;
-    }
-    _tmp1_ = self->priv->db;
-    _tmp2_ = self->priv->sql;
-    _tmp3_ = rygel_media_export_sql_factory_make (_tmp2_, RYGEL_MEDIA_EXPORT_SQL_STRING_SCHEMA);
-    rygel_media_export_database_exec (_tmp1_, _tmp3_, NULL, 0, &inner_error);
-    if (inner_error != NULL) {
-      goto __catch10_g_error;
-    }
-    _tmp4_ = self->priv->db;
-    _tmp5_ = self->priv->sql;
-    _tmp6_ = rygel_media_export_sql_factory_make (_tmp5_, RYGEL_MEDIA_EXPORT_SQL_STRING_TRIGGER_COMMON);
-    rygel_media_export_database_exec (_tmp4_, _tmp6_, NULL, 0, &inner_error);
-    if (inner_error != NULL) {
-      goto __catch10_g_error;
-    }
-    _tmp7_ = self->priv->db;
-    _tmp8_ = self->priv->sql;
-    _tmp9_ = rygel_media_export_sql_factory_make (_tmp8_, RYGEL_MEDIA_EXPORT_SQL_STRING_TABLE_CLOSURE);
-    rygel_media_export_database_exec (_tmp7_, _tmp9_, NULL, 0, &inner_error);
-    if (inner_error != NULL) {
-      goto __catch10_g_error;
-    }
-    _tmp10_ = self->priv->db;
-    _tmp11_ = self->priv->sql;
-    _tmp12_ = rygel_media_export_sql_factory_make (_tmp11_, RYGEL_MEDIA_EXPORT_SQL_STRING_INDEX_COMMON);
-    rygel_media_export_database_exec (_tmp10_, _tmp12_, NULL, 0, &inner_error);
-    if (inner_error != NULL) {
-      goto __catch10_g_error;
-    }
-    _tmp13_ = self->priv->db;
-    _tmp14_ = self->priv->sql;
-    _tmp15_ = rygel_media_export_sql_factory_make (_tmp14_, RYGEL_MEDIA_EXPORT_SQL_STRING_TRIGGER_CLOSURE);
-    rygel_media_export_database_exec (_tmp13_, _tmp15_, NULL, 0, &inner_error);
-    if (inner_error != NULL) {
-      goto __catch10_g_error;
-    }
-    _tmp16_ = self->priv->db;
-    rygel_media_export_database_commit (_tmp16_, &inner_error);
-    if (inner_error != NULL) {
-      goto __catch10_g_error;
-    }
-    _tmp17_ = self->priv->db;
-    rygel_media_export_database_analyze (_tmp17_);
-    result = TRUE;
-    return result;
+static gboolean
+rygel_media_export_media_cache_create_schema (RygelMediaExportMediaCache *self) {
+  GError *inner_error;
+  RygelMediaExportMediaCachePrivate *priv;
+
+  g_return_val_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self), FALSE);
+
+  priv = self->priv;
+  inner_error = NULL;
+  rygel_media_export_database_begin (priv->db, &inner_error);
+  if (inner_error) {
+    goto out;
   }
-  goto __finally10;
- __catch10_g_error:
-  {
-    GError* err = NULL;
-    GError* _tmp18_;
-    const gchar* _tmp19_;
-    RygelMediaExportDatabase* _tmp20_;
-    err = inner_error;
-    inner_error = NULL;
-    _tmp18_ = err;
-    _tmp19_ = _tmp18_->message;
-    g_warning ("rygel-media-export-media-cache.vala:597: Failed to create schema: %s", _tmp19_);
-    _tmp20_ = self->priv->db;
-    rygel_media_export_database_rollback (_tmp20_);
-    g_error_free (err);
-  }
- __finally10:
-  if (inner_error != NULL) {
-    g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, inner_error->message, g_quark_to_string (inner_error->domain), inner_error->code);
-    g_clear_error (&inner_error);
+
+  rygel_media_export_database_exec (priv->db,
+				    rygel_media_export_sql_factory_make (priv->sql, RYGEL_MEDIA_EXPORT_SQL_STRING_SCHEMA),
+				    NULL,
+				    0,
+				    &inner_error);
+  if (inner_error) {
+    goto out;
+  }
+
+  rygel_media_export_database_exec (priv->db,
+				    rygel_media_export_sql_factory_make (priv->sql, RYGEL_MEDIA_EXPORT_SQL_STRING_TRIGGER_COMMON),
+				    NULL,
+				    0,
+				    &inner_error);
+  if (inner_error) {
+    goto out;
+  }
+
+  rygel_media_export_database_exec (priv->db,
+				    rygel_media_export_sql_factory_make (priv->sql, RYGEL_MEDIA_EXPORT_SQL_STRING_TABLE_CLOSURE),
+				    NULL,
+				    0,
+				    &inner_error);
+  if (inner_error) {
+    goto out;
+  }
+
+  rygel_media_export_database_exec (priv->db,
+				    rygel_media_export_sql_factory_make (priv->sql, RYGEL_MEDIA_EXPORT_SQL_STRING_INDEX_COMMON),
+				    NULL,
+				    0,
+				    &inner_error);
+  if (inner_error) {
+    goto out;
+  }
+
+  rygel_media_export_database_exec (priv->db,
+				    rygel_media_export_sql_factory_make (priv->sql, RYGEL_MEDIA_EXPORT_SQL_STRING_TRIGGER_CLOSURE),
+				    NULL,
+				    0,
+				    &inner_error);
+  if (inner_error) {
+    goto out;
+  }
+
+  rygel_media_export_database_commit (priv->db, &inner_error);
+  if (inner_error) {
+    goto out;
+  }
+
+  rygel_media_export_database_analyze (priv->db);
+ out:
+  if (inner_error) {
+    g_warning ("Failed to create schema: %s", inner_error->message);
+    rygel_media_export_database_rollback (priv->db);
+    g_error_free (inner_error);
     return FALSE;
   }
-  result = FALSE;
-  return result;
+  return TRUE;
 }
 
+static RygelMediaObject *
+rygel_media_export_media_cache_get_object_from_statement (RygelMediaExportMediaCache *self,
+							  RygelMediaContainer        *parent,
+							  sqlite3_stmt               *statement) {
+  RygelMediaObject *object;
+  const gchar *title;
+  const gchar *object_id;
+  const gchar *uri;
+  RygelMediaExportMediaCachePrivate *priv;
 
-static RygelMediaObject* rygel_media_export_media_cache_get_object_from_statement (RygelMediaExportMediaCache* self, RygelMediaContainer* parent, sqlite3_stmt* statement) {
-  RygelMediaObject* result = NULL;
-  RygelMediaObject* object;
-  sqlite3_stmt* _tmp0_;
-  const gchar* _tmp1_ = NULL;
-  const gchar* title;
-  sqlite3_stmt* _tmp2_;
-  const gchar* _tmp3_ = NULL;
-  const gchar* object_id;
-  sqlite3_stmt* _tmp4_;
-  const gchar* _tmp5_ = NULL;
-  const gchar* uri;
-  sqlite3_stmt* _tmp6_;
-  gint _tmp7_ = 0;
-  RygelMediaObject* _tmp32_;
-  g_return_val_if_fail (self != NULL, NULL);
+  g_return_val_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self), NULL);
   g_return_val_if_fail (statement != NULL, NULL);
-  object = NULL;
-  _tmp0_ = statement;
-  _tmp1_ = (const gchar *) sqlite3_column_text (_tmp0_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_TITLE);
-  title = _tmp1_;
-  _tmp2_ = statement;
-  _tmp3_ = (const gchar *) sqlite3_column_text (_tmp2_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_ID);
-  object_id = _tmp3_;
-  _tmp4_ = statement;
-  _tmp5_ = (const gchar *) sqlite3_column_text (_tmp4_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_URI);
-  uri = _tmp5_;
-  _tmp6_ = statement;
-  _tmp7_ = sqlite3_column_int (_tmp6_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_TYPE);
-  switch (_tmp7_) {
-  case 0:
-    {
-      RygelMediaExportObjectFactory* _tmp8_;
-      const gchar* _tmp9_;
-      const gchar* _tmp10_;
-      const gchar* _tmp11_;
-      RygelMediaExportDBContainer* _tmp12_ = NULL;
-      RygelMediaObject* _tmp13_;
-      RygelMediaContainer* _tmp14_;
-      RygelMediaContainer* container;
-      const gchar* _tmp15_;
-      _tmp8_ = self->priv->factory;
-      _tmp9_ = object_id;
-      _tmp10_ = title;
-      _tmp11_ = uri;
-      _tmp12_ = rygel_media_export_object_factory_get_container (_tmp8_, self, _tmp9_, _tmp10_, (guint) 0, _tmp11_);
-      g_object_unref (object);
-      object = (RygelMediaObject*) _tmp12_;
-      _tmp13_ = object;
-      _tmp14_ = g_object_ref (G_TYPE_CHECK_INSTANCE_TYPE (_tmp13_, RYGEL_TYPE_MEDIA_CONTAINER) ? ((RygelMediaContainer*) _tmp13_) : NULL);
-      container = _tmp14_;
-      _tmp15_ = uri;
-      if (_tmp15_ != NULL) {
-	RygelMediaContainer* _tmp16_;
-	GeeArrayList* _tmp17_;
-	const gchar* _tmp18_;
-	_tmp16_ = container;
-	_tmp17_ = ((RygelMediaObject*) _tmp16_)->uris;
-	_tmp18_ = uri;
-	gee_abstract_collection_add ((GeeAbstractCollection*) _tmp17_, _tmp18_);
-      }
-      g_object_unref (container);
-      break;
+
+  priv = self->priv;
+  title = (const gchar *) sqlite3_column_text (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_TITLE);
+  object_id = (const gchar *) sqlite3_column_text (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_ID);
+  uri = (const gchar *) sqlite3_column_text (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_URI);
+  switch (sqlite3_column_int (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_TYPE)) {
+  case 0: { /* container */
+    object = RYGEL_MEDIA_OBJECT (rygel_media_export_object_factory_get_container (priv->factory,
+										  object_id,
+										  title,
+										  (guint) 0,
+										  uri));
+    if (uri) {
+      gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (object->uris), uri);
     }
-  case 1:
-    {
-      sqlite3_stmt* _tmp19_;
-      const gchar* _tmp20_ = NULL;
-      const gchar* upnp_class;
-      RygelMediaExportObjectFactory* _tmp21_;
-      RygelMediaContainer* _tmp22_;
-      const gchar* _tmp23_;
-      const gchar* _tmp24_;
-      const gchar* _tmp25_;
-      RygelMediaItem* _tmp26_ = NULL;
-      sqlite3_stmt* _tmp27_;
-      RygelMediaObject* _tmp28_;
-      const gchar* _tmp29_;
-      _tmp19_ = statement;
-      _tmp20_ = (const gchar *) sqlite3_column_text (_tmp19_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_CLASS);
-      upnp_class = _tmp20_;
-      _tmp21_ = self->priv->factory;
-      _tmp22_ = parent;
-      _tmp23_ = object_id;
-      _tmp24_ = title;
-      _tmp25_ = upnp_class;
-      _tmp26_ = rygel_media_export_object_factory_get_item (_tmp21_, self, _tmp22_, _tmp23_, _tmp24_, _tmp25_);
-      g_object_unref (object);
-      object = (RygelMediaObject*) _tmp26_;
-      _tmp27_ = statement;
-      _tmp28_ = object;
-      rygel_media_export_media_cache_fill_item (self, _tmp27_, G_TYPE_CHECK_INSTANCE_TYPE (_tmp28_, RYGEL_TYPE_MEDIA_ITEM) ? ((RygelMediaItem*) _tmp28_) : NULL);
-      _tmp29_ = uri;
-      if (_tmp29_ != NULL) {
-	RygelMediaObject* _tmp30_;
-	const gchar* _tmp31_;
-	_tmp30_ = object;
-	_tmp31_ = uri;
-	rygel_media_item_add_uri (G_TYPE_CHECK_INSTANCE_TYPE (_tmp30_, RYGEL_TYPE_MEDIA_ITEM) ? ((RygelMediaItem*) _tmp30_) : NULL, _tmp31_);
-      }
-      break;
+    break;
+  }
+
+  case 1: { /* item */
+    RygelMediaItem *item = rygel_media_export_object_factory_get_item (priv->factory,
+								       parent,
+								       object_id,
+								       title,
+								       (const gchar *) sqlite3_column_text (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_CLASS));
+
+    object = RYGEL_MEDIA_OBJECT (item);
+    rygel_media_export_media_cache_fill_item (self, statement, item);
+    if (uri) {
+      rygel_media_item_add_uri (item, uri);
     }
+    break;
+  }
+
   default:
-    {
-      g_assert_not_reached ();
-    }
+    g_assert_not_reached ();
   }
-  _tmp32_ = object;
-  if (_tmp32_ != NULL) {
-    RygelMediaObject* _tmp33_;
-    sqlite3_stmt* _tmp34_;
-    gint64 _tmp35_ = 0LL;
-    gboolean _tmp36_ = FALSE;
-    RygelMediaObject* _tmp37_;
-    guint64 _tmp38_;
-    guint64 _tmp39_;
-    gint64 _tmp40_;
-    gboolean _tmp42_;
-    _tmp33_ = object;
-    _tmp34_ = statement;
-    _tmp35_ = sqlite3_column_int64 (_tmp34_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_TIMESTAMP);
-    rygel_media_object_set_modified (_tmp33_, (guint64) _tmp35_);
-    _tmp37_ = object;
-    _tmp38_ = rygel_media_object_get_modified (_tmp37_);
-    _tmp39_ = _tmp38_;
-    _tmp40_ = G_MAXINT64;
-    if (_tmp39_ == ((guint64) _tmp40_)) {
-      RygelMediaObject* _tmp41_;
-      _tmp41_ = object;
-      _tmp36_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp41_, RYGEL_TYPE_MEDIA_ITEM);
-    } else {
-      _tmp36_ = FALSE;
-    }
-    _tmp42_ = _tmp36_;
-    if (_tmp42_) {
-      RygelMediaObject* _tmp43_;
-      RygelMediaObject* _tmp44_;
-      _tmp43_ = object;
-      rygel_media_object_set_modified (_tmp43_, (guint64) 0);
-      _tmp44_ = object;
-      rygel_media_item_set_place_holder (G_TYPE_CHECK_INSTANCE_TYPE (_tmp44_, RYGEL_TYPE_MEDIA_ITEM) ? ((RygelMediaItem*) _tmp44_) : NULL, TRUE);
+  if (object) {
+    guint64 modified;
+
+    rygel_media_object_set_modified (object,
+				     (guint64) sqlite3_column_int64 (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_TIMESTAMP));
+    modified = rygel_media_object_get_modified (object);
+    if ((modified == G_MAXINT64) && RYGEL_IS_MEDIA_ITEM (object)) {
+      rygel_media_object_set_modified (object, 0);
+      rygel_media_item_set_place_holder (RYGEL_MEDIA_ITEM (object), TRUE);
     }
   }
-  result = object;
-  return result;
-}
 
+  return object;
+}
 
-static void rygel_media_export_media_cache_fill_item (RygelMediaExportMediaCache* self, sqlite3_stmt* statement, RygelMediaItem* item) {
-  RygelMediaItem* _tmp0_;
-  sqlite3_stmt* _tmp1_;
-  const gchar* _tmp2_ = NULL;
-  RygelMediaItem* _tmp3_;
-  sqlite3_stmt* _tmp4_;
-  const gchar* _tmp5_ = NULL;
-  RygelMediaItem* _tmp6_;
-  sqlite3_stmt* _tmp7_;
-  const gchar* _tmp8_ = NULL;
-  RygelMediaItem* _tmp9_;
-  sqlite3_stmt* _tmp10_;
-  gint64 _tmp11_ = 0LL;
-  RygelMediaItem* _tmp12_;
-  RygelMediaItem* _tmp46_;
-  g_return_if_fail (self != NULL);
+static void
+rygel_media_export_media_cache_fill_item (RygelMediaExportMediaCache *self,
+					  sqlite3_stmt               *statement,
+					  RygelMediaItem             *item) {
+  g_return_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self));
   g_return_if_fail (statement != NULL);
-  g_return_if_fail (item != NULL);
-  _tmp0_ = item;
-  _tmp1_ = statement;
-  _tmp2_ = (const gchar *) sqlite3_column_text (_tmp1_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_DATE);
-  rygel_media_item_set_date (_tmp0_, _tmp2_);
-  _tmp3_ = item;
-  _tmp4_ = statement;
-  _tmp5_ = (const gchar *) sqlite3_column_text (_tmp4_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_MIME_TYPE);
-  rygel_media_item_set_mime_type (_tmp3_, _tmp5_);
-  _tmp6_ = item;
-  _tmp7_ = statement;
-  _tmp8_ = (const gchar *) sqlite3_column_text (_tmp7_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_DLNA_PROFILE);
-  rygel_media_item_set_dlna_profile (_tmp6_, _tmp8_);
-  _tmp9_ = item;
-  _tmp10_ = statement;
-  _tmp11_ = sqlite3_column_int64 (_tmp10_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_SIZE);
-  rygel_media_item_set_size (_tmp9_, _tmp11_);
-  _tmp12_ = item;
-  if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp12_, RYGEL_TYPE_AUDIO_ITEM)) {
-    RygelMediaItem* _tmp13_;
-    RygelAudioItem* _tmp14_;
-    RygelAudioItem* audio_item;
-    RygelAudioItem* _tmp15_;
-    sqlite3_stmt* _tmp16_;
-    gint64 _tmp17_ = 0LL;
-    RygelAudioItem* _tmp18_;
-    sqlite3_stmt* _tmp19_;
-    gint _tmp20_ = 0;
-    RygelAudioItem* _tmp21_;
-    sqlite3_stmt* _tmp22_;
-    gint _tmp23_ = 0;
-    RygelAudioItem* _tmp24_;
-    sqlite3_stmt* _tmp25_;
-    gint _tmp26_ = 0;
-    RygelAudioItem* _tmp27_;
-    sqlite3_stmt* _tmp28_;
-    gint _tmp29_ = 0;
-    RygelMediaItem* _tmp30_;
-    _tmp13_ = item;
-    _tmp14_ = g_object_ref (G_TYPE_CHECK_INSTANCE_TYPE (_tmp13_, RYGEL_TYPE_AUDIO_ITEM) ? ((RygelAudioItem*) _tmp13_) : NULL);
-    audio_item = _tmp14_;
-    _tmp15_ = audio_item;
-    _tmp16_ = statement;
-    _tmp17_ = sqlite3_column_int64 (_tmp16_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_DURATION);
-    rygel_audio_item_set_duration (_tmp15_, (glong) _tmp17_);
-    _tmp18_ = audio_item;
-    _tmp19_ = statement;
-    _tmp20_ = sqlite3_column_int (_tmp19_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_BITRATE);
-    rygel_audio_item_set_bitrate (_tmp18_, _tmp20_);
-    _tmp21_ = audio_item;
-    _tmp22_ = statement;
-    _tmp23_ = sqlite3_column_int (_tmp22_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_SAMPLE_FREQ);
-    rygel_audio_item_set_sample_freq (_tmp21_, _tmp23_);
-    _tmp24_ = audio_item;
-    _tmp25_ = statement;
-    _tmp26_ = sqlite3_column_int (_tmp25_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_BITS_PER_SAMPLE);
-    rygel_audio_item_set_bits_per_sample (_tmp24_, _tmp26_);
-    _tmp27_ = audio_item;
-    _tmp28_ = statement;
-    _tmp29_ = sqlite3_column_int (_tmp28_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_CHANNELS);
-    rygel_audio_item_set_channels (_tmp27_, _tmp29_);
-    _tmp30_ = item;
-    if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp30_, RYGEL_MEDIA_EXPORT_TYPE_MUSIC_ITEM)) {
-      RygelMediaItem* _tmp31_;
-      RygelMediaExportMusicItem* _tmp32_;
-      RygelMediaExportMusicItem* music_item;
-      RygelMediaExportMusicItem* _tmp33_;
-      sqlite3_stmt* _tmp34_;
-      const gchar* _tmp35_ = NULL;
-      RygelMediaExportMusicItem* _tmp36_;
-      sqlite3_stmt* _tmp37_;
-      const gchar* _tmp38_ = NULL;
-      RygelMediaExportMusicItem* _tmp39_;
-      sqlite3_stmt* _tmp40_;
-      const gchar* _tmp41_ = NULL;
-      RygelMediaExportMusicItem* _tmp42_;
-      sqlite3_stmt* _tmp43_;
-      gint _tmp44_ = 0;
-      RygelMediaExportMusicItem* _tmp45_;
-      _tmp31_ = item;
-      _tmp32_ = g_object_ref (G_TYPE_CHECK_INSTANCE_TYPE (_tmp31_, RYGEL_MEDIA_EXPORT_TYPE_MUSIC_ITEM) ? ((RygelMediaExportMusicItem*) _tmp31_) : NULL);
-      music_item = _tmp32_;
-      _tmp33_ = music_item;
-      _tmp34_ = statement;
-      _tmp35_ = (const gchar *) sqlite3_column_text (_tmp34_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_AUTHOR);
-      rygel_music_item_set_artist ((RygelMusicItem*) _tmp33_, _tmp35_);
-      _tmp36_ = music_item;
-      _tmp37_ = statement;
-      _tmp38_ = (const gchar *) sqlite3_column_text (_tmp37_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_ALBUM);
-      rygel_music_item_set_album ((RygelMusicItem*) _tmp36_, _tmp38_);
-      _tmp39_ = music_item;
-      _tmp40_ = statement;
-      _tmp41_ = (const gchar *) sqlite3_column_text (_tmp40_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_GENRE);
-      rygel_music_item_set_genre ((RygelMusicItem*) _tmp39_, _tmp41_);
-      _tmp42_ = music_item;
-      _tmp43_ = statement;
-      _tmp44_ = sqlite3_column_int (_tmp43_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_TRACK);
-      rygel_music_item_set_track_number ((RygelMusicItem*) _tmp42_, _tmp44_);
-      _tmp45_ = music_item;
-      rygel_music_item_lookup_album_art ((RygelMusicItem*) _tmp45_);
-      g_object_unref (music_item);
-    }
-    g_object_unref (audio_item);
-  }
-  _tmp46_ = item;
-  if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp46_, RYGEL_TYPE_VISUAL_ITEM)) {
-    RygelMediaItem* _tmp47_;
-    RygelVisualItem* _tmp48_;
-    RygelVisualItem* visual_item;
-    RygelVisualItem* _tmp49_;
-    sqlite3_stmt* _tmp50_;
-    gint _tmp51_ = 0;
-    RygelVisualItem* _tmp52_;
-    sqlite3_stmt* _tmp53_;
-    gint _tmp54_ = 0;
-    RygelVisualItem* _tmp55_;
-    sqlite3_stmt* _tmp56_;
-    gint _tmp57_ = 0;
-    RygelMediaItem* _tmp58_;
-    _tmp47_ = item;
-    _tmp48_ = g_object_ref (G_TYPE_CHECK_INSTANCE_TYPE (_tmp47_, RYGEL_TYPE_VISUAL_ITEM) ? ((RygelVisualItem*) _tmp47_) : NULL);
-    visual_item = _tmp48_;
-    _tmp49_ = visual_item;
-    _tmp50_ = statement;
-    _tmp51_ = sqlite3_column_int (_tmp50_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_WIDTH);
-    rygel_visual_item_set_width (_tmp49_, _tmp51_);
-    _tmp52_ = visual_item;
-    _tmp53_ = statement;
-    _tmp54_ = sqlite3_column_int (_tmp53_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_HEIGHT);
-    rygel_visual_item_set_height (_tmp52_, _tmp54_);
-    _tmp55_ = visual_item;
-    _tmp56_ = statement;
-    _tmp57_ = sqlite3_column_int (_tmp56_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_COLOR_DEPTH);
-    rygel_visual_item_set_color_depth (_tmp55_, _tmp57_);
-    _tmp58_ = item;
-    if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp58_, RYGEL_MEDIA_EXPORT_TYPE_VIDEO_ITEM)) {
-      RygelMediaItem* _tmp59_;
-      RygelMediaExportVideoItem* _tmp60_;
-      RygelMediaExportVideoItem* video_item;
-      RygelMediaExportVideoItem* _tmp61_;
-      sqlite3_stmt* _tmp62_;
-      const gchar* _tmp63_ = NULL;
-      _tmp59_ = item;
-      _tmp60_ = g_object_ref (G_TYPE_CHECK_INSTANCE_TYPE (_tmp59_, RYGEL_MEDIA_EXPORT_TYPE_VIDEO_ITEM) ? ((RygelMediaExportVideoItem*) _tmp59_) : NULL);
-      video_item = _tmp60_;
-      _tmp61_ = video_item;
-      _tmp62_ = statement;
-      _tmp63_ = (const gchar *) sqlite3_column_text (_tmp62_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_AUTHOR);
-      rygel_video_item_set_author ((RygelVideoItem*) _tmp61_, _tmp63_);
-      g_object_unref (video_item);
+  g_return_if_fail (RYGEL_IS_MEDIA_ITEM (item));
+
+  rygel_media_item_set_date (item,
+			     (const gchar *) sqlite3_column_text (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_DATE));
+  rygel_media_item_set_mime_type (item,
+				  (const gchar *) sqlite3_column_text (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_MIME_TYPE));
+  rygel_media_item_set_dlna_profile (item, (const gchar *) sqlite3_column_text (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_DLNA_PROFILE));
+  rygel_media_item_set_size (item,
+			     sqlite3_column_int64 (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_SIZE));
+  if (RYGEL_IS_AUDIO_ITEM (item)) {
+    RygelAudioItem *audio_item = RYGEL_AUDIO_ITEM (item);
+
+    rygel_audio_item_set_duration (audio_item,
+				   (glong) sqlite3_column_int64 (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_DURATION));
+    rygel_audio_item_set_bitrate (audio_item,
+				  sqlite3_column_int (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_BITRATE));
+    rygel_audio_item_set_sample_freq (audio_item,
+				      sqlite3_column_int (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_SAMPLE_FREQ));
+    rygel_audio_item_set_bits_per_sample (audio_item,
+					  sqlite3_column_int (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_BITS_PER_SAMPLE));
+    rygel_audio_item_set_channels (audio_item, sqlite3_column_int (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_CHANNELS));
+    if (RYGEL_IS_MUSIC_ITEM (item)) {
+      RygelMusicItem *music_item = RYGEL_MUSIC_ITEM (item);
+
+      rygel_music_item_set_artist (music_item, (const gchar *) sqlite3_column_text (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_AUTHOR));
+      rygel_music_item_set_album (music_item, (const gchar *) sqlite3_column_text (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_ALBUM));
+      rygel_music_item_set_genre (music_item, (const gchar *) sqlite3_column_text (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_GENRE));
+      rygel_music_item_set_track_number (music_item, sqlite3_column_int (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_TRACK));
+      rygel_music_item_lookup_album_art (music_item);
+    }
+  }
+  if (RYGEL_IS_VISUAL_ITEM (item)) {
+    RygelVisualItem *visual_item = RYGEL_VISUAL_ITEM (item);
+
+    rygel_visual_item_set_width (visual_item, sqlite3_column_int (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_WIDTH));
+    rygel_visual_item_set_height (visual_item, sqlite3_column_int (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_HEIGHT));
+    rygel_visual_item_set_color_depth (visual_item, sqlite3_column_int (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_COLOR_DEPTH));
+
+    if (RYGEL_IS_VIDEO_ITEM (item)) {
+      RygelVideoItem *video_item = RYGEL_VIDEO_ITEM (item);
+
+      rygel_video_item_set_author (video_item,
+				   (const gchar *) sqlite3_column_text (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_AUTHOR));
     }
-    g_object_unref (visual_item);
   }
 }
 
-
-static gchar* rygel_media_export_media_cache_translate_search_expression (RygelMediaExportMediaCache* self, RygelSearchExpression* expression, GArray* args, const gchar* prefix, GError** error) {
-  gchar* result = NULL;
-  RygelSearchExpression* _tmp0_;
-  RygelSearchExpression* _tmp2_;
-  gchar* _tmp4_ = NULL;
+static gchar *
+rygel_media_export_media_cache_translate_search_expression (RygelSearchExpression  *expression,
+							    GArray                 *args,
+							    const gchar            *prefix,
+							    GError                **error) {
+  gchar *str;
   gchar* filter;
-  const gchar* _tmp5_;
-  const gchar* _tmp6_;
-  gchar* _tmp7_ = NULL;
-  GError * inner_error = NULL;
-  g_return_val_if_fail (self != NULL, NULL);
+  GError *inner_error;
+
   g_return_val_if_fail (args != NULL, NULL);
   g_return_val_if_fail (prefix != NULL, NULL);
-  _tmp0_ = expression;
-  if (_tmp0_ == NULL) {
-    gchar* _tmp1_;
-    _tmp1_ = g_strdup ("");
-    result = _tmp1_;
-    return result;
-  }
-  _tmp2_ = expression;
-  _tmp4_ = rygel_media_export_media_cache_search_expression_to_sql (self, _tmp2_, args, &inner_error);
-  filter = _tmp4_;
-  if (inner_error != NULL) {
+
+  if (!expression) {
+    return g_strdup ("");
+  }
+
+  inner_error = NULL;
+  filter = rygel_media_export_media_cache_search_expression_to_sql (expression, args, &inner_error);
+  if (inner_error) {
     g_propagate_error (error, inner_error);
     return NULL;
   }
-  _tmp5_ = prefix;
-  _tmp6_ = filter;
-  _tmp7_ = g_strdup_printf (" %s %s", _tmp5_, _tmp6_);
-  result = _tmp7_;
+  str = g_strdup_printf (" %s %s", prefix, filter);
   g_free (filter);
-  return result;
+  return str;
 }
 
+static gchar *
+rygel_media_export_media_cache_search_expression_to_sql (RygelSearchExpression  *expression,
+							 GArray                 *args,
+							 GError                **error) {
+  GError *inner_error;
 
-static gchar* rygel_media_export_media_cache_search_expression_to_sql (RygelMediaExportMediaCache* self, RygelSearchExpression* expression, GArray* args, GError** error) {
-  gchar* result = NULL;
-  RygelSearchExpression* _tmp0_;
-  RygelSearchExpression* _tmp2_;
-  GError * inner_error = NULL;
-  g_return_val_if_fail (self != NULL, NULL);
   g_return_val_if_fail (args != NULL, NULL);
-  _tmp0_ = expression;
-  if (_tmp0_ == NULL) {
-    gchar* _tmp1_;
-    _tmp1_ = g_strdup ("");
-    result = _tmp1_;
-    return result;
-  }
-  _tmp2_ = expression;
-  if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, RYGEL_TYPE_LOGICAL_EXPRESSION)) {
-    RygelSearchExpression* _tmp3_;
-    gchar* _tmp5_ = NULL;
-    gchar* _tmp6_;
-    _tmp3_ = expression;
-    _tmp5_ = rygel_media_export_media_cache_logical_expression_to_sql (self, G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, RYGEL_TYPE_LOGICAL_EXPRESSION) ? ((RygelLogicalExpression*) _tmp3_) : NULL, args, &inner_error);
-    _tmp6_ = _tmp5_;
-    if (inner_error != NULL) {
+
+  if (!expression) {
+    return g_strdup ("");
+  }
+
+  if (RYGEL_IS_LOGICAL_EXPRESSION (expression)) {
+    gchar *str;
+
+    inner_error = NULL;
+    str = rygel_media_export_media_cache_logical_expression_to_sql (RYGEL_LOGICAL_EXPRESSION (expression),
+								    args,
+								    &inner_error);
+    if (inner_error) {
       g_propagate_error (error, inner_error);
       return NULL;
     }
-    result = _tmp6_;
-    return result;
+
+    return str;
   } else {
-    RygelSearchExpression* _tmp7_;
-    gchar* _tmp9_ = NULL;
-    gchar* _tmp10_;
-    _tmp7_ = expression;
-    _tmp9_ = rygel_media_export_media_cache_relational_expression_to_sql (self, G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, RYGEL_TYPE_RELATIONAL_EXPRESSION) ? ((RygelRelationalExpression*) _tmp7_) : NULL, args, &inner_error);
-    _tmp10_ = _tmp9_;
-    if (inner_error != NULL) {
+    gchar *str;
+
+    str = rygel_media_export_media_cache_relational_expression_to_sql (RYGEL_RELATIONAL_EXPRESSION (expression),
+								       args,
+								       &inner_error);
+    if (inner_error) {
       g_propagate_error (error, inner_error);
       return NULL;
     }
-    result = _tmp10_;
-    return result;
+    return str;
   }
 }
 
+static gchar *
+rygel_media_export_media_cache_logical_expression_to_sql (RygelLogicalExpression  *expression,
+							  GArray                  *args,
+							  GError                 **error) {
+  RygelSearchExpression *search_expression;
+  gchar *str;
+  gchar *left_sql_string;
+  gchar *right_sql_string;
+  const gchar *operator_sql_string;
+  GError *inner_error;
 
-static gchar* rygel_media_export_media_cache_logical_expression_to_sql (RygelMediaExportMediaCache* self, RygelLogicalExpression* expression, GArray* args, GError** error) {
-  gchar* result = NULL;
-  RygelLogicalExpression* _tmp0_;
-  gconstpointer _tmp1_;
-  gchar* _tmp3_ = NULL;
-  gchar* left_sql_string;
-  RygelLogicalExpression* _tmp4_;
-  gconstpointer _tmp5_;
-  gchar* _tmp7_ = NULL;
-  gchar* right_sql_string;
-  gchar* _tmp8_;
-  gchar* operator_sql_string;
-  RygelLogicalExpression* _tmp9_;
-  gconstpointer _tmp10_;
-  const gchar* _tmp12_;
-  const gchar* _tmp13_;
-  const gchar* _tmp14_;
-  gchar* _tmp15_ = NULL;
-  GError * inner_error = NULL;
-  g_return_val_if_fail (self != NULL, NULL);
+  g_return_val_if_fail (RYGEL_IS_LOGICAL_EXPRESSION (expression), NULL);
   g_return_val_if_fail (args != NULL, NULL);
-  _tmp0_ = expression;
-  _tmp1_ = ((RygelSearchExpression*) _tmp0_)->operand1;
-  _tmp3_ = rygel_media_export_media_cache_search_expression_to_sql (self, (RygelSearchExpression*) _tmp1_, args, &inner_error);
-  left_sql_string = _tmp3_;
-  if (inner_error != NULL) {
+
+  search_expression = RYGEL_SEARCH_EXPRESSION (expression);
+  inner_error = NULL;
+  left_sql_string = rygel_media_export_media_cache_search_expression_to_sql (RYGEL_SEARCH_EXPRESSION (search_expression->operand1),
+									     args,
+									     &inner_error);
+  if (inner_error) {
     g_propagate_error (error, inner_error);
     return NULL;
   }
-  _tmp4_ = expression;
-  _tmp5_ = ((RygelSearchExpression*) _tmp4_)->operand2;
-  _tmp7_ = rygel_media_export_media_cache_search_expression_to_sql (self, (RygelSearchExpression*) _tmp5_, args, &inner_error);
-  right_sql_string = _tmp7_;
-  if (inner_error != NULL) {
+
+  right_sql_string = rygel_media_export_media_cache_search_expression_to_sql (RYGEL_SEARCH_EXPRESSION (search_expression->operand2),
+									      args,
+									      &inner_error);
+  if (inner_error) {
     g_propagate_error (error, inner_error);
     g_free (left_sql_string);
     return NULL;
   }
-  _tmp8_ = g_strdup ("OR");
-  operator_sql_string = _tmp8_;
-  _tmp9_ = expression;
-  _tmp10_ = ((RygelSearchExpression*) _tmp9_)->op;
-  if (((RygelLogicalOperator) ((gintptr) _tmp10_)) == RYGEL_LOGICAL_OPERATOR_AND) {
-    gchar* _tmp11_;
-    _tmp11_ = g_strdup ("AND");
-    g_free (operator_sql_string);
-    operator_sql_string = _tmp11_;
-  }
-  _tmp12_ = left_sql_string;
-  _tmp13_ = operator_sql_string;
-  _tmp14_ = right_sql_string;
-  _tmp15_ = g_strdup_printf ("(%s %s %s)", _tmp12_, _tmp13_, _tmp14_);
-  result = _tmp15_;
-  g_free (operator_sql_string);
+
+  if (((RygelLogicalOperator) ((gintptr) search_expression->op)) == RYGEL_LOGICAL_OPERATOR_AND) {
+    operator_sql_string = "AND";
+  } else {
+    operator_sql_string = "OR";
+  }
+
+  str = g_strdup_printf ("(%s %s %s)", left_sql_string, operator_sql_string, right_sql_string);
   g_free (right_sql_string);
   g_free (left_sql_string);
-  return result;
+  return str;
 }
 
-
-static gchar* rygel_media_export_media_cache_map_operand_to_column (RygelMediaExportMediaCache* self, const gchar* operand, gchar** collate, GError** error) {
-  gchar* _vala_collate = NULL;
-  gchar* result = NULL;
-  gchar* column;
+static gchar *
+rygel_media_export_media_cache_map_operand_to_column (const gchar  *operand,
+						      gchar       **collate,
+						      GError      **error) {
+  const gchar *column;
   gboolean use_collation;
-  const gchar* _tmp0_;
-  const gchar* _tmp1_;
-  GQuark _tmp3_ = 0U;
-  static GQuark _tmp2_label0 = 0;
-  static GQuark _tmp2_label1 = 0;
-  static GQuark _tmp2_label2 = 0;
-  static GQuark _tmp2_label3 = 0;
-  static GQuark _tmp2_label4 = 0;
-  static GQuark _tmp2_label5 = 0;
-  static GQuark _tmp2_label6 = 0;
-  static GQuark _tmp2_label7 = 0;
-  static GQuark _tmp2_label8 = 0;
-  static GQuark _tmp2_label9 = 0;
-  static GQuark _tmp2_label10 = 0;
-  static GQuark _tmp2_label11 = 0;
-  static GQuark _tmp2_label12 = 0;
-  static GQuark _tmp2_label13 = 0;
-  static GQuark _tmp2_label14 = 0;
-  gboolean _tmp21_;
-  GError * inner_error = NULL;
-  g_return_val_if_fail (self != NULL, NULL);
+
   g_return_val_if_fail (operand != NULL, NULL);
+
   column = NULL;
   use_collation = FALSE;
-  _tmp0_ = operand;
-  _tmp1_ = _tmp0_;
-  _tmp3_ = (NULL == _tmp1_) ? 0 : g_quark_from_string (_tmp1_);
-  if (_tmp3_ == ((0 != _tmp2_label0) ? _tmp2_label0 : (_tmp2_label0 = g_quark_from_static_string ("res")))) {
-    switch (0) {
-    default:
-      {
-	gchar* _tmp4_;
-	_tmp4_ = g_strdup ("o.uri");
-	g_free (column);
-	column = _tmp4_;
-	break;
-      }
-    }
-  } else if (_tmp3_ == ((0 != _tmp2_label1) ? _tmp2_label1 : (_tmp2_label1 = g_quark_from_static_string ("res duration")))) {
-    switch (0) {
-    default:
-      {
-	gchar* _tmp5_;
-	_tmp5_ = g_strdup ("m.duration");
-	g_free (column);
-	column = _tmp5_;
-	break;
-      }
-    }
-  } else if (_tmp3_ == ((0 != _tmp2_label2) ? _tmp2_label2 : (_tmp2_label2 = g_quark_from_static_string ("@refID")))) {
-    switch (0) {
-    default:
-      {
-	gchar* _tmp6_;
-	_tmp6_ = g_strdup ("NULL");
-	g_free (column);
-	column = _tmp6_;
-	break;
-      }
-    }
-  } else if (_tmp3_ == ((0 != _tmp2_label3) ? _tmp2_label3 : (_tmp2_label3 = g_quark_from_static_string ("@id")))) {
-    switch (0) {
-    default:
-      {
-	gchar* _tmp7_;
-	_tmp7_ = g_strdup ("o.upnp_id");
-	g_free (column);
-	column = _tmp7_;
-	break;
-      }
-    }
-  } else if (_tmp3_ == ((0 != _tmp2_label4) ? _tmp2_label4 : (_tmp2_label4 = g_quark_from_static_string ("@parentID")))) {
-    switch (0) {
-    default:
-      {
-	gchar* _tmp8_;
-	_tmp8_ = g_strdup ("o.parent");
-	g_free (column);
-	column = _tmp8_;
-	break;
-      }
-    }
-  } else if (_tmp3_ == ((0 != _tmp2_label5) ? _tmp2_label5 : (_tmp2_label5 = g_quark_from_static_string ("upnp:class")))) {
-    switch (0) {
-    default:
-      {
-	gchar* _tmp9_;
-	_tmp9_ = g_strdup ("m.class");
-	g_free (column);
-	column = _tmp9_;
-	break;
-      }
-    }
-  } else if (_tmp3_ == ((0 != _tmp2_label6) ? _tmp2_label6 : (_tmp2_label6 = g_quark_from_static_string ("dc:title")))) {
-    switch (0) {
-    default:
-      {
-	gchar* _tmp10_;
-	_tmp10_ = g_strdup ("o.title");
-	g_free (column);
-	column = _tmp10_;
-	use_collation = TRUE;
-	break;
-      }
-    }
-  } else if ((_tmp3_ == ((0 != _tmp2_label7) ? _tmp2_label7 : (_tmp2_label7 = g_quark_from_static_string ("upnp:artist")))) || (_tmp3_ == ((0 != _tmp2_label8) ? _tmp2_label8 : (_tmp2_label8 = g_quark_from_static_string ("dc:creator"))))) {
-    switch (0) {
-    default:
-      {
-	gchar* _tmp11_;
-	_tmp11_ = g_strdup ("m.author");
-	g_free (column);
-	column = _tmp11_;
-	use_collation = TRUE;
-	break;
-      }
-    }
-  } else if (_tmp3_ == ((0 != _tmp2_label9) ? _tmp2_label9 : (_tmp2_label9 = g_quark_from_static_string ("dc:date")))) {
-    switch (0) {
-    default:
-      {
-	gchar* _tmp12_;
-	_tmp12_ = g_strdup ("strftime(\"%Y\", m.date)");
-	g_free (column);
-	column = _tmp12_;
-	break;
-      }
-    }
-  } else if (_tmp3_ == ((0 != _tmp2_label10) ? _tmp2_label10 : (_tmp2_label10 = g_quark_from_static_string ("upnp:album")))) {
-    switch (0) {
-    default:
-      {
-	gchar* _tmp13_;
-	_tmp13_ = g_strdup ("m.album");
-	g_free (column);
-	column = _tmp13_;
-	use_collation = TRUE;
-	break;
-      }
-    }
-  } else if ((_tmp3_ == ((0 != _tmp2_label11) ? _tmp2_label11 : (_tmp2_label11 = g_quark_from_static_string ("upnp:genre")))) || (_tmp3_ == ((0 != _tmp2_label12) ? _tmp2_label12 : (_tmp2_label12 = g_quark_from_static_string ("dc:genre"))))) {
-    switch (0) {
-    default:
-      {
-	gchar* _tmp14_;
-	_tmp14_ = g_strdup ("m.genre");
-	g_free (column);
-	column = _tmp14_;
-	use_collation = TRUE;
-	break;
-      }
-    }
-  } else if (_tmp3_ == ((0 != _tmp2_label13) ? _tmp2_label13 : (_tmp2_label13 = g_quark_from_static_string ("upnp:originalTrackNumber")))) {
-    switch (0) {
-    default:
-      {
-	gchar* _tmp15_;
-	_tmp15_ = g_strdup ("m.track");
-	g_free (column);
-	column = _tmp15_;
-	break;
-      }
-    }
-  } else if (_tmp3_ == ((0 != _tmp2_label14) ? _tmp2_label14 : (_tmp2_label14 = g_quark_from_static_string ("rygel:originalVolumeNumber")))) {
-    switch (0) {
-    default:
-      {
-	gchar* _tmp16_;
-	_tmp16_ = g_strdup ("m.disc");
-	g_free (column);
-	column = _tmp16_;
-	break;
-      }
-    }
-  } else {
-    switch (0) {
-    default:
-      {
-	const gchar* _tmp17_;
-	gchar* _tmp18_ = NULL;
-	gchar* message;
-	const gchar* _tmp19_;
-	GError* _tmp20_;
-	_tmp17_ = operand;
-	_tmp18_ = g_strdup_printf ("Unsupported column %s", _tmp17_);
-	message = _tmp18_;
-	_tmp19_ = message;
-	_tmp20_ = g_error_new_literal (RYGEL_MEDIA_EXPORT_MEDIA_CACHE_ERROR, RYGEL_MEDIA_EXPORT_MEDIA_CACHE_ERROR_UNSUPPORTED_SEARCH, _tmp19_);
-	inner_error = _tmp20_;
-	g_propagate_error (error, inner_error);
-	g_free (message);
-	g_free (column);
-	return NULL;
-      }
-    }
-  }
-  _tmp21_ = use_collation;
-  if (_tmp21_) {
-    gchar* _tmp22_;
-    _tmp22_ = g_strdup ("COLLATE CASEFOLD");
-    g_free (_vala_collate);
-    _vala_collate = _tmp22_;
+
+  if (!g_strcmp0 (operand, "res")) {
+    column = "o.uri";
+  } else if (!g_strcmp0 (operand, "res duration")) {
+    column = "m.duration";
+  } else if (!g_strcmp0 (operand, "@refID")) {
+    column = "NULL";
+  } else if (!g_strcmp0 (operand, "@id")) {
+    column = "o.upnp_id";
+  } else if (!g_strcmp0 (operand, "@parentID")) {
+    column = "o.parent";
+  } else if (!g_strcmp0 (operand, "upnp:class")) {
+    column = "m.class";
+  } else if (!g_strcmp0 (operand, "dc:title")) {
+    column = "o.title";
+    use_collation = TRUE;
+  } else if (!g_strcmp0 (operand, "upnp:artist") || !g_strcmp0(operand, "dc:creator")) {
+    column = "m.author";
+    use_collation = TRUE;
+  } else if (!g_strcmp0 (operand, "dc:date")) {
+    column = "strftime(\"%Y\", m.date)";
+  } else if (!g_strcmp0 (operand, "upnp:album")) {
+    column = "m.album";
+    use_collation = TRUE;
+  } else if (!g_strcmp0 (operand, "upnp:genre") || !g_strcmp0(operand, "dc:genre")) {
+    column = "m.genre";
+    use_collation = TRUE;
+  } else if (!g_strcmp0 (operand, "upnp:originalTrackNumber")) {
+    column = "m.track";
+  } else if (!g_strcmp0 (operand, "upnp:originalVolumeNumber")) {
+    column = "m.disc";
   } else {
-    gchar* _tmp23_;
-    _tmp23_ = g_strdup ("");
-    g_free (_vala_collate);
-    _vala_collate = _tmp23_;
+    g_set_error (error,
+		 RYGEL_MEDIA_EXPORT_MEDIA_CACHE_ERROR,
+		 RYGEL_MEDIA_EXPORT_MEDIA_CACHE_ERROR_UNSUPPORTED_SEARCH,
+		 "Unsupported column %s",
+		 operand);
+    return NULL;
   }
-  result = column;
   if (collate) {
-    *collate = _vala_collate;
-  } else {
-    g_free (_vala_collate);
+    *collate = g_strdup (use_collation ? "COLLATE CASEFOLD" : "");
   }
-  return result;
+  return g_strdup (column);
 }
 
+static gchar *
+rygel_media_export_media_cache_relational_expression_to_sql (RygelRelationalExpression  *exp,
+							     GArray                     *args,
+							     GError                    **error) {
+  RygelSearchExpression *search_expression;
+  gchar *str;
+  GValue v = G_VALUE_INIT;
+  gchar *collate;
+  gchar *column;
+  RygelMediaExportSqlOperator *operator;
+  GError *inner_error;
 
-static gchar* rygel_media_export_media_cache_relational_expression_to_sql (RygelMediaExportMediaCache* self, RygelRelationalExpression* exp, GArray* args, GError** error) {
-  gchar* result = NULL;
-  GValue* v;
-  gchar* collate;
-  RygelRelationalExpression* _tmp0_;
-  gconstpointer _tmp1_;
-  gchar* _tmp2_ = NULL;
-  gchar* _tmp3_ = NULL;
-  gchar* column;
-  RygelMediaExportSqlOperator* operator = NULL;
-  RygelRelationalExpression* _tmp4_;
-  gconstpointer _tmp5_;
-  GValue* _tmp40_;
-  RygelMediaExportSqlOperator* _tmp44_;
-  gchar* _tmp45_ = NULL;
-  GError * inner_error = NULL;
-  g_return_val_if_fail (self != NULL, NULL);
+  g_return_val_if_fail (RYGEL_IS_RELATIONAL_EXPRESSION (exp), NULL);
   g_return_val_if_fail (args != NULL, NULL);
-  v = NULL;
+
   collate = NULL;
-  _tmp0_ = exp;
-  _tmp1_ = ((RygelSearchExpression*) _tmp0_)->operand1;
-  _tmp3_ = rygel_media_export_media_cache_map_operand_to_column (self, (const gchar*) _tmp1_, &_tmp2_, &inner_error);
-  g_free (collate);
-  collate = _tmp2_;
-  column = _tmp3_;
-  if (inner_error != NULL) {
+  search_expression = RYGEL_SEARCH_EXPRESSION (exp);
+  inner_error = NULL;
+  column = rygel_media_export_media_cache_map_operand_to_column ((const gchar *) search_expression->operand1, &collate, &inner_error);
+  if (inner_error) {
     g_propagate_error (error, inner_error);
-    g_free (collate);
-    __vala_GValue_free0 (v);
     return NULL;
   }
-  _tmp4_ = exp;
-  _tmp5_ = ((RygelSearchExpression*) _tmp4_)->op;
-  switch ((GUPnPSearchCriteriaOp) ((gintptr) _tmp5_)) {
-  case GUPNP_SEARCH_CRITERIA_OP_EXISTS:
-    {
-      gchar* sql_function = NULL;
-      RygelRelationalExpression* _tmp6_;
-      gconstpointer _tmp7_;
-      const gchar* _tmp10_;
-      const gchar* _tmp11_;
-      const gchar* _tmp12_;
-      gchar* _tmp13_ = NULL;
-      _tmp6_ = exp;
-      _tmp7_ = ((RygelSearchExpression*) _tmp6_)->operand2;
-      if (g_strcmp0 ((const gchar*) _tmp7_, "true") == 0) {
-	gchar* _tmp8_;
-	_tmp8_ = g_strdup ("%s IS NOT NULL AND %s != ''");
-	g_free (sql_function);
-	sql_function = _tmp8_;
-      } else {
-	gchar* _tmp9_;
-	_tmp9_ = g_strdup ("%s IS NULL OR %s = ''");
-	g_free (sql_function);
-	sql_function = _tmp9_;
-      }
-      _tmp10_ = sql_function;
-      _tmp11_ = column;
-      _tmp12_ = column;
-      _tmp13_ = g_strdup_printf (_tmp10_, _tmp11_, _tmp12_);
-      result = _tmp13_;
-      g_free (sql_function);
-      g_object_unref (operator);
-      g_free (column);
-      g_free (collate);
-      __vala_GValue_free0 (v);
-      return result;
+
+  switch ((GUPnPSearchCriteriaOp) ((gintptr) search_expression->op)) {
+  case GUPNP_SEARCH_CRITERIA_OP_EXISTS: {
+    const gchar *sql_function;
+    gchar *sql;
+
+    if (g_strcmp0 ((const gchar *) search_expression->operand2, "true")) {
+      sql_function = g_strdup ("%s IS NULL OR %s = ''");
+    } else {
+      sql_function = g_strdup ("%s IS NOT NULL AND %s != ''");
     }
+
+    sql = g_strdup_printf (sql_function, column, column);
+    g_free (column);
+    g_free (collate);
+
+    return sql;
+  }
   case GUPNP_SEARCH_CRITERIA_OP_EQ:
   case GUPNP_SEARCH_CRITERIA_OP_NEQ:
   case GUPNP_SEARCH_CRITERIA_OP_LESS:
   case GUPNP_SEARCH_CRITERIA_OP_LEQ:
   case GUPNP_SEARCH_CRITERIA_OP_GREATER:
-  case GUPNP_SEARCH_CRITERIA_OP_GEQ:
-    {
-      RygelRelationalExpression* _tmp14_;
-      gconstpointer _tmp15_;
-      GValue* _tmp16_ = NULL;
-      RygelRelationalExpression* _tmp17_;
-      gconstpointer _tmp18_;
-      const gchar* _tmp19_;
-      const gchar* _tmp20_;
-      RygelMediaExportSqlOperator* _tmp21_;
-      _tmp14_ = exp;
-      _tmp15_ = ((RygelSearchExpression*) _tmp14_)->operand2;
-      _tmp16_ = g_new0 (GValue, 1);
-      g_value_init (_tmp16_, G_TYPE_STRING);
-      g_value_set_string (_tmp16_, (const gchar*) _tmp15_);
-      __vala_GValue_free0 (v);
-      v = _tmp16_;
-      _tmp17_ = exp;
-      _tmp18_ = ((RygelSearchExpression*) _tmp17_)->op;
-      _tmp19_ = column;
-      _tmp20_ = collate;
-      _tmp21_ = rygel_media_export_sql_operator_new_from_search_criteria_op ((GUPnPSearchCriteriaOp) ((gintptr) _tmp18_), _tmp19_, _tmp20_);
-      g_object_unref (operator);
-      operator = _tmp21_;
-      break;
-    }
-  case GUPNP_SEARCH_CRITERIA_OP_CONTAINS:
-    {
-      const gchar* _tmp22_;
-      RygelMediaExportSqlFunction* _tmp23_;
-      RygelRelationalExpression* _tmp24_;
-      gconstpointer _tmp25_;
-      GValue* _tmp26_ = NULL;
-      _tmp22_ = column;
-      _tmp23_ = rygel_media_export_sql_function_new ("contains", _tmp22_);
-      g_object_unref (operator);
-      operator = (RygelMediaExportSqlOperator*) _tmp23_;
-      _tmp24_ = exp;
-      _tmp25_ = ((RygelSearchExpression*) _tmp24_)->operand2;
-      _tmp26_ = g_new0 (GValue, 1);
-      g_value_init (_tmp26_, G_TYPE_STRING);
-      g_value_set_string (_tmp26_, (const gchar*) _tmp25_);
-      __vala_GValue_free0 (v);
-      v = _tmp26_;
-      break;
-    }
-  case GUPNP_SEARCH_CRITERIA_OP_DOES_NOT_CONTAIN:
-    {
-      const gchar* _tmp27_;
-      RygelMediaExportSqlFunction* _tmp28_;
-      RygelRelationalExpression* _tmp29_;
-      gconstpointer _tmp30_;
-      GValue* _tmp31_ = NULL;
-      _tmp27_ = column;
-      _tmp28_ = rygel_media_export_sql_function_new ("NOT contains", _tmp27_);
-      g_object_unref (operator);
-      operator = (RygelMediaExportSqlOperator*) _tmp28_;
-      _tmp29_ = exp;
-      _tmp30_ = ((RygelSearchExpression*) _tmp29_)->operand2;
-      _tmp31_ = g_new0 (GValue, 1);
-      g_value_init (_tmp31_, G_TYPE_STRING);
-      g_value_set_string (_tmp31_, (const gchar*) _tmp30_);
-      __vala_GValue_free0 (v);
-      v = _tmp31_;
-      break;
-    }
-  case GUPNP_SEARCH_CRITERIA_OP_DERIVED_FROM:
-    {
-      const gchar* _tmp32_;
-      RygelMediaExportSqlOperator* _tmp33_;
-      RygelRelationalExpression* _tmp34_;
-      gconstpointer _tmp35_;
-      gchar* _tmp36_ = NULL;
-      GValue* _tmp37_ = NULL;
-      _tmp32_ = column;
-      _tmp33_ = rygel_media_export_sql_operator_new ("LIKE", _tmp32_, "");
-      g_object_unref (operator);
-      operator = _tmp33_;
-      _tmp34_ = exp;
-      _tmp35_ = ((RygelSearchExpression*) _tmp34_)->operand2;
-      _tmp36_ = g_strdup_printf ("%s%%", (const gchar*) _tmp35_);
-      _tmp37_ = g_new0 (GValue, 1);
-      g_value_init (_tmp37_, G_TYPE_STRING);
-      g_value_take_string (_tmp37_, _tmp36_);
-      __vala_GValue_free0 (v);
-      v = _tmp37_;
-      break;
+  case GUPNP_SEARCH_CRITERIA_OP_GEQ: {
+    if (!g_strcmp0 (column, "m.class") &&
+	((GUPnPSearchCriteriaOp) ((gintptr) search_expression->op) == GUPNP_SEARCH_CRITERIA_OP_EQ) &&
+	!g_strcmp0 ((const gchar *) search_expression->operand2, "object.container")) {
+      g_value_init (&v, G_TYPE_INT);
+      g_value_set_int (&v, (gint) RYGEL_MEDIA_EXPORT_OBJECT_TYPE_CONTAINER);
+    } else {
+      g_value_init (&v, G_TYPE_STRING);
+      g_value_set_string (&v, (const gchar *) search_expression->operand2);
+      operator = rygel_media_export_sql_operator_new_from_search_criteria_op ((GUPnPSearchCriteriaOp) ((gintptr) search_expression->op), column, collate);
     }
-  default:
-    {
-      RygelRelationalExpression* _tmp38_;
-      gconstpointer _tmp39_;
-      _tmp38_ = exp;
-      _tmp39_ = ((RygelSearchExpression*) _tmp38_)->op;
-      g_warning ("rygel-media-export-media-cache.vala:851: Unsupported op %d", (gint) ((GUPnPSearchCriteriaOp) ((gintptr) _tmp39_)));
-      result = NULL;
-      g_object_unref (operator);
-      g_free (column);
-      g_free (collate);
-      __vala_GValue_free0 (v);
-      return result;
+    break;
+  }
+  case GUPNP_SEARCH_CRITERIA_OP_CONTAINS: {
+    operator = RYGEL_MEDIA_EXPORT_SQL_OPERATOR (rygel_media_export_sql_function_new ("contains", column));
+    g_value_init (&v, G_TYPE_STRING);
+    g_value_set_string (&v, (const gchar*) search_expression->operand2);
+    break;
+  }
+  case GUPNP_SEARCH_CRITERIA_OP_DOES_NOT_CONTAIN: {
+    operator = RYGEL_MEDIA_EXPORT_SQL_OPERATOR (rygel_media_export_sql_function_new ("NOT contains", column));
+    g_value_init (&v, G_TYPE_STRING);
+    g_value_set_string (&v, (const gchar*) search_expression->operand2);
+    break;
+  }
+  case GUPNP_SEARCH_CRITERIA_OP_DERIVED_FROM: {
+    if (!g_strcmp0 (column, "m.class") &&
+	g_str_has_prefix ((const gchar *) search_expression->operand2, "object.container")) {
+      operator = rygel_media_export_sql_operator_new ("=", "o.type_fk", "");
+      g_value_init (&v, G_TYPE_INT);
+      g_value_set_int (&v, (gint) RYGEL_MEDIA_EXPORT_OBJECT_TYPE_CONTAINER);
+    } else {
+      operator = rygel_media_export_sql_operator_new ("LIKE", column, "");
+      g_value_init (&v, G_TYPE_STRING);
+      g_value_take_string (&v, g_strdup_printf ("%s%%", (const gchar*) search_expression->operand2));
     }
+    break;
   }
-  _tmp40_ = v;
-  if (_tmp40_ != NULL) {
-    g_array_append_val (args, *v);
+  default:
+    g_warning ("Unsupported op %d",
+	       (gint) ((GUPnPSearchCriteriaOp) ((gintptr) search_expression->op)));
+    g_free (column);
+    g_free (collate);
+    return NULL;
   }
-  _tmp44_ = operator;
-  _tmp45_ = rygel_media_export_sql_operator_to_string (_tmp44_);
-  result = _tmp45_;
+  g_array_append_val (args, v);
+  str = rygel_media_export_sql_operator_to_string (operator);
   g_object_unref (operator);
   g_free (column);
   g_free (collate);
-  __vala_GValue_free0 (v);
-  return result;
-}
 
-
-static RygelMediaExportDatabaseCursor* rygel_media_export_media_cache_exec_cursor (RygelMediaExportMediaCache* self, RygelMediaExportSQLString id, GValue* values, int values_length1, GError** error) {
-  RygelMediaExportDatabaseCursor* result = NULL;
-  RygelMediaExportDatabase* _tmp0_;
-  RygelMediaExportSQLFactory* _tmp1_;
-  RygelMediaExportSQLString _tmp2_;
-  const gchar* _tmp3_ = NULL;
-  GValue* _tmp4_;
-  gint _tmp4__length1;
-  RygelMediaExportDatabaseCursor* _tmp5_ = NULL;
-  RygelMediaExportDatabaseCursor* _tmp6_;
-  GError * inner_error = NULL;
-  g_return_val_if_fail (self != NULL, NULL);
-  _tmp0_ = self->priv->db;
-  _tmp1_ = self->priv->sql;
-  _tmp2_ = id;
-  _tmp3_ = rygel_media_export_sql_factory_make (_tmp1_, _tmp2_);
-  _tmp4_ = values;
-  _tmp4__length1 = values_length1;
-  _tmp5_ = rygel_media_export_database_exec_cursor (_tmp0_, _tmp3_, _tmp4_, _tmp4__length1, &inner_error);
-  _tmp6_ = _tmp5_;
-  if (inner_error != NULL) {
-    if (inner_error->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-      g_propagate_error (error, inner_error);
-      return NULL;
-    } else {
-      g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, inner_error->message, g_quark_to_string (inner_error->domain), inner_error->code);
-      g_clear_error (&inner_error);
-      return NULL;
-    }
-  }
-  result = _tmp6_;
-  return result;
+  return str;
 }
 
+static RygelMediaExportDatabaseCursor *
+rygel_media_export_media_cache_exec_cursor (RygelMediaExportMediaCache  *self,
+					    RygelMediaExportSQLString    id,
+					    GValue                      *values,
+					    int                          values_length,
+					    GError                     **error) {
+  RygelMediaExportDatabaseCursor *cursor;
+  GError *inner_error;
+  RygelMediaExportMediaCachePrivate *priv;
 
-static gint rygel_media_export_media_cache_query_value (RygelMediaExportMediaCache* self, RygelMediaExportSQLString id, GValue* values, int values_length1, GError** error) {
-  gint result = 0;
-  RygelMediaExportDatabase* _tmp0_;
-  RygelMediaExportSQLFactory* _tmp1_;
-  RygelMediaExportSQLString _tmp2_;
-  const gchar* _tmp3_ = NULL;
-  GValue* _tmp4_;
-  gint _tmp4__length1;
-  gint _tmp5_ = 0;
-  gint _tmp6_;
-  GError * inner_error = NULL;
-  g_return_val_if_fail (self != NULL, 0);
-  _tmp0_ = self->priv->db;
-  _tmp1_ = self->priv->sql;
-  _tmp2_ = id;
-  _tmp3_ = rygel_media_export_sql_factory_make (_tmp1_, _tmp2_);
-  _tmp4_ = values;
-  _tmp4__length1 = values_length1;
-  _tmp5_ = rygel_media_export_database_query_value (_tmp0_, _tmp3_, _tmp4_, _tmp4__length1, &inner_error);
-  _tmp6_ = _tmp5_;
-  if (inner_error != NULL) {
-    if (inner_error->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-      g_propagate_error (error, inner_error);
-      return 0;
-    } else {
-      g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, inner_error->message, g_quark_to_string (inner_error->domain), inner_error->code);
-      g_clear_error (&inner_error);
-      return 0;
-    }
+  g_return_val_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self), NULL);
+
+  priv = self->priv;
+  inner_error = NULL;
+  cursor = rygel_media_export_database_exec_cursor (priv->db,
+						    rygel_media_export_sql_factory_make (priv->sql, id),
+						    values,
+						    values_length,
+						    &inner_error);
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    return NULL;
   }
-  result = _tmp6_;
-  return result;
+
+  return cursor;
 }
 
+static gint
+rygel_media_export_media_cache_query_value (RygelMediaExportMediaCache  *self,
+					    RygelMediaExportSQLString    id,
+					    GValue                      *values,
+					    gint                         values_length,
+					    GError                     **error) {
+  gint value;
+  GError *inner_error;
+  RygelMediaExportMediaCachePrivate *priv;
+
+  g_return_val_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self), 0);
 
-static gchar* string_slice (const gchar* self, glong start, glong end) {
-  gchar* result = NULL;
-  gint _tmp0_;
-  gint _tmp1_;
-  glong string_length;
-  glong _tmp2_;
-  glong _tmp5_;
-  gboolean _tmp8_ = FALSE;
-  glong _tmp9_;
-  gboolean _tmp12_;
-  gboolean _tmp13_ = FALSE;
-  glong _tmp14_;
-  gboolean _tmp17_;
-  glong _tmp18_;
-  glong _tmp19_;
-  glong _tmp20_;
-  glong _tmp21_;
-  glong _tmp22_;
-  gchar* _tmp23_ = NULL;
-  g_return_val_if_fail (self != NULL, NULL);
-  _tmp0_ = strlen (self);
-  _tmp1_ = _tmp0_;
-  string_length = (glong) _tmp1_;
-  _tmp2_ = start;
-  if (_tmp2_ < ((glong) 0)) {
-    glong _tmp3_;
-    glong _tmp4_;
-    _tmp3_ = string_length;
-    _tmp4_ = start;
-    start = _tmp3_ + _tmp4_;
-  }
-  _tmp5_ = end;
-  if (_tmp5_ < ((glong) 0)) {
-    glong _tmp6_;
-    glong _tmp7_;
-    _tmp6_ = string_length;
-    _tmp7_ = end;
-    end = _tmp6_ + _tmp7_;
-  }
-  _tmp9_ = start;
-  if (_tmp9_ >= ((glong) 0)) {
-    glong _tmp10_;
-    glong _tmp11_;
-    _tmp10_ = start;
-    _tmp11_ = string_length;
-    _tmp8_ = _tmp10_ <= _tmp11_;
-  } else {
-    _tmp8_ = FALSE;
-  }
-  _tmp12_ = _tmp8_;
-  g_return_val_if_fail (_tmp12_, NULL);
-  _tmp14_ = end;
-  if (_tmp14_ >= ((glong) 0)) {
-    glong _tmp15_;
-    glong _tmp16_;
-    _tmp15_ = end;
-    _tmp16_ = string_length;
-    _tmp13_ = _tmp15_ <= _tmp16_;
-  } else {
-    _tmp13_ = FALSE;
-  }
-  _tmp17_ = _tmp13_;
-  g_return_val_if_fail (_tmp17_, NULL);
-  _tmp18_ = start;
-  _tmp19_ = end;
-  g_return_val_if_fail (_tmp18_ <= _tmp19_, NULL);
-  _tmp20_ = start;
-  _tmp21_ = end;
-  _tmp22_ = start;
-  _tmp23_ = g_strndup (((gchar*) self) + _tmp20_, (gsize) (_tmp21_ - _tmp22_));
-  result = _tmp23_;
-  return result;
-}
+  priv = self->priv;
+  value = rygel_media_export_database_query_value (priv->db,
+						   rygel_media_export_sql_factory_make (priv->sql, id),
+						   values,
+						   values_length,
+						   &inner_error);
 
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    return 0;
+  }
 
-static gchar string_get (const gchar* self, glong index) {
-  gchar result = '\0';
-  glong _tmp0_;
-  gchar _tmp1_;
-  g_return_val_if_fail (self != NULL, '\0');
-  _tmp0_ = index;
-  _tmp1_ = ((gchar*) self)[_tmp0_];
-  result = _tmp1_;
-  return result;
+  return value;
 }
 
+static gchar *
+rygel_media_export_media_cache_translate_sort_criteria (const gchar *sort_criteria) {
+  gchar *order_str;
+  gchar *str;
+  gchar **iter;
+  gchar **fields;
+  GPtrArray *order_list;
 
-static gchar* rygel_media_export_media_cache_translate_sort_criteria (RygelMediaExportMediaCache* self, const gchar* sort_criteria) {
-  gchar* result = NULL;
-  gchar* collate = NULL;
-  GString* _tmp0_;
-  GString* builder;
-  const gchar* _tmp1_;
-  gchar** _tmp2_;
-  gchar** _tmp3_ = NULL;
-  gchar** fields;
-  gint fields_length1;
-  gchar** _tmp4_;
-  gint _tmp4__length1;
-  GString* _tmp27_;
-  const gchar* _tmp28_;
-  gchar* _tmp29_;
-  GError * inner_error = NULL;
-  g_return_val_if_fail (self != NULL, NULL);
   g_return_val_if_fail (sort_criteria != NULL, NULL);
-  _tmp0_ = g_string_new ("ORDER BY ");
-  builder = _tmp0_;
-  _tmp1_ = sort_criteria;
-  _tmp3_ = _tmp2_ = g_strsplit (_tmp1_, ",", 0);
-  fields = _tmp3_;
-  fields_length1 = _vala_array_length (_tmp2_);
-  _tmp4_ = fields;
-  _tmp4__length1 = fields_length1;
-  {
-    gchar** field_collection = NULL;
-    gint field_it = 0;
-    field_collection = _tmp4_;
-    for (field_it = 0; field_it < _tmp4__length1; field_it = field_it + 1) {
-      gchar* _tmp5_;
-      gchar* field = NULL;
-      _tmp5_ = g_strdup (field_collection[field_it]);
-      field = _tmp5_;
-      {
-	{
-	  const gchar* _tmp6_;
-	  const gchar* _tmp7_;
-	  gint _tmp8_;
-	  gint _tmp9_;
-	  gchar* _tmp10_ = NULL;
-	  gchar* _tmp11_;
-	  gchar* _tmp12_ = NULL;
-	  gchar* _tmp13_ = NULL;
-	  gchar* _tmp14_;
-	  gchar* column;
-	  const gchar* _tmp15_;
-	  gchar** _tmp16_;
-	  const gchar* _tmp17_;
-	  const gchar* _tmp19_ = NULL;
-	  const gchar* _tmp20_;
-	  gchar _tmp21_ = '\0';
-	  GString* _tmp22_;
-	  const gchar* _tmp23_;
-	  const gchar* _tmp24_;
-	  const gchar* _tmp25_;
-	  _tmp6_ = field;
-	  _tmp7_ = field;
-	  _tmp8_ = strlen (_tmp7_);
-	  _tmp9_ = _tmp8_;
-	  _tmp10_ = string_slice (_tmp6_, (glong) 1, (glong) _tmp9_);
-	  _tmp11_ = _tmp10_;
-	  _tmp13_ = rygel_media_export_media_cache_map_operand_to_column (self, _tmp11_, &_tmp12_, &inner_error);
-	  g_free (collate);
-	  collate = _tmp12_;
-	  _tmp14_ = _tmp13_;
-	  g_free (_tmp11_);
-	  column = _tmp14_;
-	  if (inner_error != NULL) {
-	    goto __catch11_g_error;
-	  }
-	  _tmp15_ = field;
-	  _tmp16_ = fields;
-	  _tmp17_ = _tmp16_[0];
-	  if (g_strcmp0 (_tmp15_, _tmp17_) != 0) {
-	    GString* _tmp18_;
-	    _tmp18_ = builder;
-	    g_string_append (_tmp18_, ",");
-	  }
-	  _tmp20_ = field;
-	  _tmp21_ = string_get (_tmp20_, (glong) 0);
-	  if (_tmp21_ == '-') {
-	    _tmp19_ = "DESC";
-	  } else {
-	    _tmp19_ = "ASC";
-	  }
-	  _tmp22_ = builder;
-	  _tmp23_ = column;
-	  _tmp24_ = collate;
-	  _tmp25_ = _tmp19_;
-	  g_string_append_printf (_tmp22_, "%s %s %s ", _tmp23_, _tmp24_, _tmp25_);
-	  g_free (column);
-	}
-	goto __finally11;
-      __catch11_g_error:
-	{
-	  GError* _error_ = NULL;
-	  const gchar* _tmp26_;
-	  _error_ = inner_error;
-	  inner_error = NULL;
-	  _tmp26_ = field;
-	  g_warning ("rygel-media-export-media-cache.vala:890: Skipping nsupported field: %s", _tmp26_);
-	  g_error_free (_error_);
-	}
-      __finally11:
-	if (inner_error != NULL) {
-	  g_free (field);
-	  fields = (_vala_array_free (fields, fields_length1, (GDestroyNotify) g_free), NULL);
-	  _g_string_free0 (builder);
-	  g_free (collate);
-	  g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, inner_error->message, g_quark_to_string (inner_error->domain), inner_error->code);
-	  g_clear_error (&inner_error);
-	  return NULL;
-	}
-	g_free (field);
-      }
+
+  order_list = g_ptr_array_new_with_free_func (g_free);
+  fields = g_strsplit (sort_criteria, ",", 0);
+
+  for (iter = fields; iter; ++iter) {
+    const gchar *order;
+    gchar *field = *iter;
+    gchar *slice = rygel_media_export_string_slice (field, 1, strlen (field));
+    gchar *collate = NULL;
+    GError *inner_error = NULL;
+    gchar *column = rygel_media_export_media_cache_map_operand_to_column (slice,
+									  &collate,
+									  &inner_error);
+
+    g_free (slice);
+    if (inner_error) {
+      g_warning ("Skipping unsupported field: %s", field);
+      g_error_free (inner_error);
+      continue;
+    }
+    if (field[0] == '-') {
+      order = "DESC";
+    } else {
+      order = "ASC";
     }
+
+    g_ptr_array_add (order_list,
+		     g_strdup_printf ("%s %s %s ", column, collate, order));
+    g_free (column);
+    g_free (collate);
   }
-  _tmp27_ = builder;
-  _tmp28_ = _tmp27_->str;
-  _tmp29_ = g_strdup (_tmp28_);
-  result = _tmp29_;
-  fields = (_vala_array_free (fields, fields_length1, (GDestroyNotify) g_free), NULL);
-  _g_string_free0 (builder);
-  g_free (collate);
-  return result;
+  g_ptr_array_add (order_list, NULL);
+  order_str = g_strjoinv (",", (gchar **) order_list->pdata);
+  g_ptr_array_unref (order_list);
+  str = g_strdup_printf ("ORDER BY %s", order_str);
+  g_free (order_str);
+  g_strfreev (fields);
+
+  return str;
 }
 
+static void
+rygel_media_export_media_cache_class_init (RygelMediaExportMediaCacheClass *cache_class) {
+  GObjectClass *object_class = G_OBJECT_CLASS (cache_class);
 
-static void rygel_media_export_media_cache_class_init (RygelMediaExportMediaCacheClass * klass) {
-  rygel_media_export_media_cache_parent_class = g_type_class_peek_parent (klass);
-  g_type_class_add_private (klass, sizeof (RygelMediaExportMediaCachePrivate));
-  G_OBJECT_CLASS (klass)->dispose = rygel_media_export_media_cache_dispose;
+  object_class->dispose = rygel_media_export_media_cache_dispose;
+  g_type_class_add_private (cache_class,
+			    sizeof (RygelMediaExportMediaCachePrivate));
 }
 
-
-static void rygel_media_export_media_cache_init (RygelMediaExportMediaCache * self) {
+static void
+rygel_media_export_media_cache_init (RygelMediaExportMediaCache *self) {
   self->priv = RYGEL_MEDIA_EXPORT_MEDIA_CACHE_GET_PRIVATE (self);
 }
 
-
-static void rygel_media_export_media_cache_dispose (GObject *object) {
+static void
+rygel_media_export_media_cache_dispose (GObject *object) {
   RygelMediaExportMediaCache *self = RYGEL_MEDIA_EXPORT_MEDIA_CACHE (object);
   RygelMediaExportMediaCachePrivate *priv = self->priv;
 
@@ -3053,32 +2047,3 @@ static void rygel_media_export_media_cache_dispose (GObject *object) {
   }
   G_OBJECT_CLASS (rygel_media_export_media_cache_parent_class)->dispose (object);
 }
-
-static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
-  if ((array != NULL) && (destroy_func != NULL)) {
-    int i;
-    for (i = 0; i < array_length; i = i + 1) {
-      if (((gpointer*) array)[i] != NULL) {
-	destroy_func (((gpointer*) array)[i]);
-      }
-    }
-  }
-}
-
-
-static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
-  _vala_array_destroy (array, array_length, destroy_func);
-  g_free (array);
-}
-
-
-static gint _vala_array_length (gpointer array) {
-  int length;
-  length = 0;
-  if (array) {
-    while (((gpointer*) array)[length]) {
-      length++;
-    }
-  }
-  return length;
-}
diff --git a/src/media-export/rygel-media-export-object-factory.c b/src/media-export/rygel-media-export-object-factory.c
index 1115e71..fb66b08 100644
--- a/src/media-export/rygel-media-export-object-factory.c
+++ b/src/media-export/rygel-media-export-object-factory.c
@@ -35,8 +35,8 @@ G_DEFINE_TYPE (RygelMediaExportObjectFactory, rygel_media_export_object_factory,
 enum  {
 	RYGEL_MEDIA_EXPORT_OBJECT_FACTORY_DUMMY_PROPERTY
 };
-static RygelMediaExportDBContainer* rygel_media_export_object_factory_real_get_container (RygelMediaExportObjectFactory* self, RygelMediaExportMediaCache* media_db, const gchar* id, const gchar* title, guint child_count, const gchar* uri);
-static RygelMediaItem* rygel_media_export_object_factory_real_get_item (RygelMediaExportObjectFactory* self, RygelMediaExportMediaCache* media_db, RygelMediaContainer* parent, const gchar* id, const gchar* title, const gchar* upnp_class);
+static RygelMediaExportDBContainer* rygel_media_export_object_factory_real_get_container (RygelMediaExportObjectFactory* self, const gchar* id, const gchar* title, guint child_count, const gchar* uri);
+static RygelMediaItem* rygel_media_export_object_factory_real_get_item (RygelMediaExportObjectFactory* self, RygelMediaContainer* parent, const gchar* id, const gchar* title, const gchar* upnp_class);
 RygelMediaExportObjectFactory* rygel_media_export_object_factory_construct (GType object_type);
 
 
@@ -47,7 +47,7 @@ RygelMediaExportObjectFactory* rygel_media_export_object_factory_construct (GTyp
  * @param title title of the container
  * @param child_count number of children in the container
  */
-static RygelMediaExportDBContainer* rygel_media_export_object_factory_real_get_container (RygelMediaExportObjectFactory* self G_GNUC_UNUSED, RygelMediaExportMediaCache* media_db, const gchar* id, const gchar* title, guint child_count G_GNUC_UNUSED, const gchar* uri) {
+static RygelMediaExportDBContainer* rygel_media_export_object_factory_real_get_container (RygelMediaExportObjectFactory* self G_GNUC_UNUSED, const gchar* id, const gchar* title, guint child_count G_GNUC_UNUSED, const gchar* uri) {
 	RygelMediaExportDBContainer* result = NULL;
 	const gchar* _tmp0_;
 	const gchar* _tmp8_;
@@ -57,7 +57,6 @@ static RygelMediaExportDBContainer* rygel_media_export_object_factory_real_get_c
 	const gchar* _tmp23_;
 	RygelMediaExportWritableDbContainer* _tmp24_;
 	GError * _inner_error_ = NULL;
-	g_return_val_if_fail (media_db != NULL, NULL);
 	g_return_val_if_fail (id != NULL, NULL);
 	g_return_val_if_fail (title != NULL, NULL);
 	_tmp0_ = id;
@@ -161,26 +160,24 @@ static RygelMediaExportDBContainer* rygel_media_export_object_factory_real_get_c
 }
 
 
-RygelMediaExportDBContainer* rygel_media_export_object_factory_get_container (RygelMediaExportObjectFactory* self, RygelMediaExportMediaCache* media_db, const gchar* id, const gchar* title, guint child_count, const gchar* uri) {
+RygelMediaExportDBContainer* rygel_media_export_object_factory_get_container (RygelMediaExportObjectFactory* self, const gchar* id, const gchar* title, guint child_count, const gchar* uri) {
 	g_return_val_if_fail (self != NULL, NULL);
-	return RYGEL_MEDIA_EXPORT_OBJECT_FACTORY_GET_CLASS (self)->get_container (self, media_db, id, title, child_count, uri);
+	return RYGEL_MEDIA_EXPORT_OBJECT_FACTORY_GET_CLASS (self)->get_container (self, id, title, child_count, uri);
 }
 
 
 /**
      * Return a new instance of MediaItem
      *
-     * @param media_db instance of MediaDB
      * @param id id of the item
      * @param title title of the item
      * @param upnp_class upnp_class of the item
      */
-static RygelMediaItem* rygel_media_export_object_factory_real_get_item (RygelMediaExportObjectFactory* self G_GNUC_UNUSED, RygelMediaExportMediaCache* media_db, RygelMediaContainer* parent, const gchar* id, const gchar* title, const gchar* upnp_class) {
+static RygelMediaItem* rygel_media_export_object_factory_real_get_item (RygelMediaExportObjectFactory* self G_GNUC_UNUSED, RygelMediaContainer* parent, const gchar* id, const gchar* title, const gchar* upnp_class) {
 	RygelMediaItem* result = NULL;
 	const gchar* _tmp0_;
 	const gchar* _tmp1_;
 	GQuark _tmp3_ = 0U;
-	g_return_val_if_fail (media_db != NULL, NULL);
 	g_return_val_if_fail (parent != NULL, NULL);
 	g_return_val_if_fail (id != NULL, NULL);
 	g_return_val_if_fail (title != NULL, NULL);
@@ -247,9 +244,9 @@ static RygelMediaItem* rygel_media_export_object_factory_real_get_item (RygelMed
 }
 
 
-RygelMediaItem* rygel_media_export_object_factory_get_item (RygelMediaExportObjectFactory* self, RygelMediaExportMediaCache* media_db, RygelMediaContainer* parent, const gchar* id, const gchar* title, const gchar* upnp_class) {
+RygelMediaItem* rygel_media_export_object_factory_get_item (RygelMediaExportObjectFactory* self, RygelMediaContainer* parent, const gchar* id, const gchar* title, const gchar* upnp_class) {
 	g_return_val_if_fail (self != NULL, NULL);
-	return RYGEL_MEDIA_EXPORT_OBJECT_FACTORY_GET_CLASS (self)->get_item (self, media_db, parent, id, title, upnp_class);
+	return RYGEL_MEDIA_EXPORT_OBJECT_FACTORY_GET_CLASS (self)->get_item (self, parent, id, title, upnp_class);
 }
 
 
diff --git a/src/media-export/rygel-media-export-object-factory.h b/src/media-export/rygel-media-export-object-factory.h
index 6478c99..35d868a 100644
--- a/src/media-export/rygel-media-export-object-factory.h
+++ b/src/media-export/rygel-media-export-object-factory.h
@@ -51,13 +51,11 @@ struct _RygelMediaExportObjectFactory {
 struct _RygelMediaExportObjectFactoryClass {
   GObjectClass parent_class;
   RygelMediaExportDBContainer* (* get_container) (RygelMediaExportObjectFactory *self,
-                                                  RygelMediaExportMediaCache    *media_db,
                                                   const gchar                   *id,
                                                   const gchar                   *title,
                                                   guint                          child_count,
                                                   const gchar                   *uri);
   RygelMediaItem* (* get_item) (RygelMediaExportObjectFactory *self,
-                                RygelMediaExportMediaCache    *media_db,
                                 RygelMediaContainer           *parent,
                                 const gchar                   *id,
                                 const gchar                   *title,
@@ -69,7 +67,6 @@ rygel_media_export_object_factory_get_type (void) G_GNUC_CONST;
 
 RygelMediaExportDBContainer *
 rygel_media_export_object_factory_get_container (RygelMediaExportObjectFactory* self,
-                                                 RygelMediaExportMediaCache* media_db,
                                                  const gchar* id,
                                                  const gchar* title,
                                                  guint child_count,
@@ -77,7 +74,6 @@ rygel_media_export_object_factory_get_container (RygelMediaExportObjectFactory*
 
 RygelMediaItem *
 rygel_media_export_object_factory_get_item (RygelMediaExportObjectFactory *self,
-                                            RygelMediaExportMediaCache    *media_db,
                                             RygelMediaContainer           *parent,
                                             const gchar                   *id,
                                             const gchar                   *title,



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