[rygel-gst-0-10-plugins] Partial cleanup of RygelMediaExportMediaCache.



commit 34316dfeb12caa4ec0a2f2cf47593e3d4d10125c
Author: Krzesimir Nowak <krnowak openismus com>
Date:   Fri Feb 1 14:37:43 2013 +0100

    Partial cleanup of RygelMediaExportMediaCache.

 src/media-export/rygel-media-export-media-cache.c | 6410 +++++++++------------
 1 files changed, 2766 insertions(+), 3644 deletions(-)
---
diff --git a/src/media-export/rygel-media-export-media-cache.c b/src/media-export/rygel-media-export-media-cache.c
index fc3996f..21af856 100644
--- a/src/media-export/rygel-media-export-media-cache.c
+++ b/src/media-export/rygel-media-export-media-cache.c
@@ -55,21 +55,21 @@ typedef struct _RygelMediaExportExistsCacheEntry RygelMediaExportExistsCacheEntr
 #define _g_string_free0(var) ((var == NULL) ? NULL : (var = (g_string_free (var, TRUE), NULL)))
 
 typedef enum  {
-	RYGEL_MEDIA_EXPORT_OBJECT_TYPE_CONTAINER,
-	RYGEL_MEDIA_EXPORT_OBJECT_TYPE_ITEM
+  RYGEL_MEDIA_EXPORT_OBJECT_TYPE_CONTAINER,
+  RYGEL_MEDIA_EXPORT_OBJECT_TYPE_ITEM
 } RygelMediaExportObjectType;
 
 struct _RygelMediaExportExistsCacheEntry {
-	gint64 mtime;
-	gint64 size;
+  gint64 mtime;
+  gint64 size;
 };
 
 
 struct _RygelMediaExportMediaCachePrivate {
-	RygelMediaExportDatabase* db;
-	RygelMediaExportObjectFactory* factory;
-	RygelMediaExportSQLFactory* sql;
-	GeeHashMap* exists_cache;
+  RygelMediaExportDatabase* db;
+  RygelMediaExportObjectFactory* factory;
+  RygelMediaExportSQLFactory* sql;
+  GeeHashMap* exists_cache;
 };
 
 static RygelMediaExportMediaCache* rygel_media_export_media_cache_instance = NULL;
@@ -79,10 +79,9 @@ RygelMediaExportExistsCacheEntry* rygel_media_export_exists_cache_entry_dup (con
 void rygel_media_export_exists_cache_entry_free (RygelMediaExportExistsCacheEntry* self);
 #define RYGEL_MEDIA_EXPORT_MEDIA_CACHE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), RYGEL_MEDIA_EXPORT_TYPE_MEDIA_CACHE, RygelMediaExportMediaCachePrivate))
 enum  {
-	RYGEL_MEDIA_EXPORT_MEDIA_CACHE_DUMMY_PROPERTY
+  RYGEL_MEDIA_EXPORT_MEDIA_CACHE_DUMMY_PROPERTY
 };
 
-static RygelMediaExportMediaCache* rygel_media_export_media_cache_construct (GType object_type, GError** error);
 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);
@@ -93,8 +92,7 @@ static RygelMediaObject* rygel_media_export_media_cache_get_object_from_statemen
 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 guint rygel_media_export_media_cache_modify_limit (RygelMediaExportMediaCache* self, guint max_count);
-static GValue* _g_value_dup (GValue* self);
+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 gboolean rygel_media_export_media_cache_create_schema (RygelMediaExportMediaCache* self);
@@ -117,7 +115,7 @@ our_g_value_array_new (void)
   return array;
 }
 
-#define our_g_array_index(a, i) (g_array_index ((a), GValue, (i)))
+#define our_g_value_array_index(a, i) (g_array_index ((a), GValue, (i)))
 
 static void
 our_g_value_clear (GValue *value) {
@@ -128,3776 +126,2900 @@ our_g_value_clear (GValue *value) {
   }
 }
 
-GType rygel_media_export_object_type_get_type (void) {
-	static volatile gsize rygel_media_export_object_type_type_id__volatile = 0;
-	if (g_once_init_enter (&rygel_media_export_object_type_type_id__volatile)) {
-		static const GEnumValue values[] = {{RYGEL_MEDIA_EXPORT_OBJECT_TYPE_CONTAINER, "RYGEL_MEDIA_EXPORT_OBJECT_TYPE_CONTAINER", "container"}, {RYGEL_MEDIA_EXPORT_OBJECT_TYPE_ITEM, "RYGEL_MEDIA_EXPORT_OBJECT_TYPE_ITEM", "item"}, {0, NULL, NULL}};
-		GType rygel_media_export_object_type_type_id;
-		rygel_media_export_object_type_type_id = g_enum_register_static ("RygelMediaExportObjectType", values);
-		g_once_init_leave (&rygel_media_export_object_type_type_id__volatile, rygel_media_export_object_type_type_id);
-	}
-	return rygel_media_export_object_type_type_id__volatile;
-}
+RygelMediaExportExistsCacheEntry *
+rygel_media_export_exists_cache_entry_dup (const RygelMediaExportExistsCacheEntry* self) {
+  RygelMediaExportExistsCacheEntry *dup;
 
+  dup = g_new0 (RygelMediaExportExistsCacheEntry, 1);
+  memcpy (dup, self, sizeof (RygelMediaExportExistsCacheEntry));
+  return dup;
+}
 
-RygelMediaExportExistsCacheEntry* rygel_media_export_exists_cache_entry_dup (const RygelMediaExportExistsCacheEntry* self) {
-	RygelMediaExportExistsCacheEntry* dup;
-	dup = g_new0 (RygelMediaExportExistsCacheEntry, 1);
-	memcpy (dup, self, sizeof (RygelMediaExportExistsCacheEntry));
-	return dup;
+void
+rygel_media_export_exists_cache_entry_free (RygelMediaExportExistsCacheEntry *self) {
+  g_free (self);
 }
 
+GType
+rygel_media_export_exists_cache_entry_get_type (void) {
+  static volatile gsize rygel_media_export_exists_cache_entry_type_id__volatile = 0;
+
+  if (g_once_init_enter (&rygel_media_export_exists_cache_entry_type_id__volatile)) {
+    GType rygel_media_export_exists_cache_entry_type_id = g_boxed_type_register_static ("RygelMediaExportExistsCacheEntry",
+											(GBoxedCopyFunc) rygel_media_export_exists_cache_entry_dup,
+											(GBoxedFreeFunc) rygel_media_export_exists_cache_entry_free);
+    g_once_init_leave (&rygel_media_export_exists_cache_entry_type_id__volatile, rygel_media_export_exists_cache_entry_type_id);
+  }
 
-void rygel_media_export_exists_cache_entry_free (RygelMediaExportExistsCacheEntry* self) {
-	g_free (self);
+  return rygel_media_export_exists_cache_entry_type_id__volatile;
 }
 
+RygelMediaExportMediaCache*
+rygel_media_export_media_cache_new (GError **error) {
+  RygelMediaExportMediaCache *self;
+  RygelMediaExportMediaCachePrivate *priv;
+  GError *inner_error;
+
+  self = RYGEL_MEDIA_EXPORT_MEDIA_CACHE (g_object_new (RYGEL_MEDIA_EXPORT_TYPE_MEDIA_CACHE, NULL));
+  priv = self->priv;
+
+  priv->sql = rygel_media_export_sql_factory_new ();
+  inner_error = NULL;
+  rygel_media_export_media_cache_open_db (self, "media-export-gst-0-10", &inner_error);
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    g_object_unref (self);
+    return NULL;
+  }
+  priv->factory = rygel_media_export_object_factory_new ();
+  g_object_unref (self->priv->factory);
+  rygel_media_export_media_cache_get_exists_cache (self, &inner_error);
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    g_object_unref (self);
+    return NULL;
+  }
 
-GType rygel_media_export_exists_cache_entry_get_type (void) {
-	static volatile gsize rygel_media_export_exists_cache_entry_type_id__volatile = 0;
-	if (g_once_init_enter (&rygel_media_export_exists_cache_entry_type_id__volatile)) {
-		GType rygel_media_export_exists_cache_entry_type_id;
-		rygel_media_export_exists_cache_entry_type_id = g_boxed_type_register_static ("RygelMediaExportExistsCacheEntry", (GBoxedCopyFunc) rygel_media_export_exists_cache_entry_dup, (GBoxedFreeFunc) rygel_media_export_exists_cache_entry_free);
-		g_once_init_leave (&rygel_media_export_exists_cache_entry_type_id__volatile, rygel_media_export_exists_cache_entry_type_id);
-	}
-	return rygel_media_export_exists_cache_entry_type_id__volatile;
+  return self;
 }
 
+gchar *
+rygel_media_export_media_cache_get_id (GFile *file) {
+  gchar* result = NULL;
+  gchar* uri;
 
-static RygelMediaExportMediaCache* rygel_media_export_media_cache_construct (GType object_type, GError** error) {
-	RygelMediaExportMediaCache * self = NULL;
-	RygelMediaExportSQLFactory* _tmp0_;
-	RygelMediaExportObjectFactory* _tmp1_;
-	GError * _inner_error_ = NULL;
-	self = (RygelMediaExportMediaCache*) g_object_new (object_type, NULL);
-	_tmp0_ = rygel_media_export_sql_factory_new ();
-	self->priv->sql = _tmp0_;
-	rygel_media_export_media_cache_open_db (self, "media-export", &_inner_error_);
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		g_object_unref (self);
-		return NULL;
-	}
-	_tmp1_ = rygel_media_export_object_factory_new ();
-	g_object_unref (self->priv->factory);
-	self->priv->factory = _tmp1_;
-	rygel_media_export_media_cache_get_exists_cache (self, &_inner_error_);
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		g_object_unref (self);
-		return NULL;
-	}
-	return self;
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  uri = g_file_get_uri (file);
+  result = g_compute_checksum_for_string (G_CHECKSUM_MD5, uri, -1);
+  g_free (uri);
+  return result;
 }
 
+RygelMediaExportMediaCache *
+rygel_media_export_media_cache_get_default (GError **error) {
+  if (!rygel_media_export_media_cache_instance) {
+    GError *inner_error = NULL;
+    RygelMediaExportMediaCache* cache = rygel_media_export_media_cache_new (&inner_error);
+
+    if (inner_error) {
+      g_propagate_error (error, inner_error);
+      return NULL;
+    }
+    rygel_media_export_media_cache_instance = cache;
+  }
 
-RygelMediaExportMediaCache*
-rygel_media_export_media_cache_new (GError** error) {
-	return rygel_media_export_media_cache_construct (RYGEL_MEDIA_EXPORT_TYPE_MEDIA_CACHE, 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);
+}
 
-gchar* rygel_media_export_media_cache_get_id (GFile* file) {
-	gchar* result = NULL;
-	GFile* _tmp0_;
-	gchar* _tmp1_ = NULL;
-	gchar* _tmp2_;
-	gchar* _tmp3_ = NULL;
-	gchar* _tmp4_;
-	g_return_val_if_fail (file != NULL, NULL);
-	_tmp0_ = file;
-	_tmp1_ = g_file_get_uri (_tmp0_);
-	_tmp2_ = _tmp1_;
-	_tmp3_ = g_compute_checksum_for_string (G_CHECKSUM_MD5, _tmp2_, (gsize) (-1));
-	_tmp4_ = _tmp3_;
-	g_free (_tmp2_);
-	result = _tmp4_;
-	return result;
+void
+rygel_media_export_media_cache_remove_by_id (RygelMediaExportMediaCache  *self,
+					     const gchar                 *id,
+					     GError                     **error) {
+  GValue value = G_VALUE_INIT;
+  RygelMediaExportMediaCachePrivate *priv;
+  GError *inner_error;
+
+  g_return_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self));
+  g_return_if_fail (id != NULL);
+
+  priv = self->priv;
+  g_value_init (&value, G_TYPE_STRING);
+  g_value_set_string (&value, id);
+
+  inner_error = NULL;
+  rygel_media_export_database_exec (priv->db,
+				    rygel_media_export_sql_factory_make (priv->sql,
+									 RYGEL_MEDIA_EXPORT_SQL_STRING_DELETE),
+				    &value,
+				    1,
+				    &inner_error);
+  g_value_unset (&value);
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+  }
 }
 
+void
+rygel_media_export_media_cache_remove_object (RygelMediaExportMediaCache  *self,
+					      RygelMediaObject            *object,
+					      GError                     **error) {
+  GError *inner_error;
 
-RygelMediaExportMediaCache* rygel_media_export_media_cache_get_default (GError** error) {
-	RygelMediaExportMediaCache* result = NULL;
-	RygelMediaExportMediaCache* _tmp0_;
-	RygelMediaExportMediaCache* _tmp3_;
-	RygelMediaExportMediaCache* _tmp4_;
-	GError * _inner_error_ = NULL;
-	_tmp0_ = rygel_media_export_media_cache_instance;
-	if (_tmp0_ == NULL) {
-		RygelMediaExportMediaCache* _tmp1_;
-		RygelMediaExportMediaCache* _tmp2_;
-		_tmp1_ = rygel_media_export_media_cache_new (&_inner_error_);
-		_tmp2_ = _tmp1_;
-		if (_inner_error_ != NULL) {
-			g_propagate_error (error, _inner_error_);
-			return NULL;
-		}
-		g_object_unref (rygel_media_export_media_cache_instance);
-		rygel_media_export_media_cache_instance = _tmp2_;
-	}
-	_tmp3_ = rygel_media_export_media_cache_instance;
-	_tmp4_ = g_object_ref (_tmp3_);
-	result = _tmp4_;
-	return result;
-}
+  g_return_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self));
+  g_return_if_fail (RYGEL_IS_MEDIA_OBJECT (object));
 
+  inner_error = NULL;
+  rygel_media_export_media_cache_remove_by_id (self, rygel_media_object_get_id (object), &inner_error);
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+  }
+}
 
-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_save_container (RygelMediaExportMediaCache  *self,
+					       RygelMediaContainer         *container,
+					       GError                     **error) {
+  GError *inner_error;
+  RygelMediaExportMediaCachePrivate *priv;
+
+  g_return_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self));
+  g_return_if_fail (RYGEL_IS_MEDIA_CONTAINER (container));
+
+  priv = self->priv;
+  inner_error = NULL;
+  rygel_media_export_database_begin (priv->db, &inner_error);
+  if (inner_error) {
+    goto out;
+  }
+  rygel_media_export_media_cache_create_object (self, RYGEL_MEDIA_OBJECT (container), &inner_error);
+  if (inner_error) {
+    goto out;
+  }
+  rygel_media_export_database_commit (priv->db, &inner_error);
+ out:
+  if (inner_error) {
+    rygel_media_export_database_rollback (priv->db);
+    g_propagate_error (error, inner_error);
+  }
 }
 
+void
+rygel_media_export_media_cache_save_item (RygelMediaExportMediaCache  *self,
+					  RygelMediaItem              *item,
+					  GError                     **error) {
+  GError *inner_error;
+  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;
+  inner_error = NULL;
+  rygel_media_export_database_begin (priv->db, &inner_error);
+  if (inner_error) {
+    goto out;
+  }
+  rygel_media_export_media_cache_save_metadata (self, item, &inner_error);
+  if (inner_error) {
+    goto out;
+  }
+  rygel_media_export_media_cache_create_object (self, RYGEL_MEDIA_OBJECT (item), &inner_error);
+  if (inner_error) {
+    goto out;
+  }
+  rygel_media_export_database_commit (priv->db, &inner_error);
+ out:
+  if (inner_error) {
+    g_warning (_("Failed to add item with ID %s: %s"),
+	       rygel_media_object_get_id (RYGEL_MEDIA_OBJECT (item)),
+	       inner_error->message);
+    rygel_media_export_database_rollback (priv->db);
+    g_propagate_error (error, inner_error);
+  }
+}
 
-void rygel_media_export_media_cache_remove_by_id (RygelMediaExportMediaCache* self, const gchar* id, GError** error) {
-	const gchar* _tmp0_;
-	GValue _tmp1_ = {0};
-	GValue* _tmp2_ = NULL;
-	GValue* values;
-	gint values_length1;
-	RygelMediaExportDatabase* _tmp3_;
-	RygelMediaExportSQLFactory* _tmp4_;
-	const gchar* _tmp5_ = NULL;
-	GError * _inner_error_ = NULL;
-	g_return_if_fail (self != NULL);
-	g_return_if_fail (id != NULL);
-	_tmp0_ = id;
-	g_value_init (&_tmp1_, G_TYPE_STRING);
-	g_value_set_string (&_tmp1_, _tmp0_);
-	_tmp2_ = g_new0 (GValue, 1);
-	_tmp2_[0] = _tmp1_;
-	values = _tmp2_;
-	values_length1 = 1;
-	_tmp3_ = self->priv->db;
-	_tmp4_ = self->priv->sql;
-	_tmp5_ = rygel_media_export_sql_factory_make (_tmp4_, RYGEL_MEDIA_EXPORT_SQL_STRING_DELETE);
-	rygel_media_export_database_exec (_tmp3_, _tmp5_, values, values_length1, &_inner_error_);
-	if (_inner_error_ != NULL) {
-		if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-			g_propagate_error (error, _inner_error_);
-			values = (_vala_GValue_array_free (values, values_length1), NULL);
-			return;
-		} else {
-			values = (_vala_GValue_array_free (values, values_length1), 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_);
-			return;
-		}
-	}
-	values = (_vala_GValue_array_free (values, values_length1), NULL);
+RygelMediaObject *
+rygel_media_export_media_cache_get_object (RygelMediaExportMediaCache  *self,
+					   const gchar                 *object_id,
+					   GError                     **error) {
+  RygelMediaObject *parent;
+  RygelMediaExportDatabaseCursor *cursor;
+  GError *inner_error;
+  GValue value = G_VALUE_INIT;
+
+  g_return_val_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self), NULL);
+  g_return_val_if_fail (object_id != NULL, NULL);
+
+  g_value_init (&value, G_TYPE_STRING);
+  g_value_set_string (&value, object_id);
+  inner_error = NULL;
+  cursor = rygel_media_export_media_cache_exec_cursor (self, RYGEL_MEDIA_EXPORT_SQL_STRING_GET_OBJECT, &value, 1, &inner_error);
+  g_value_unset (&value);
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    return NULL;
+  }
+  parent = NULL;
+  while (rygel_media_export_database_cursor_has_next (cursor)) {
+    sqlite3_stmt* statement = rygel_media_export_database_cursor_next (cursor, &inner_error);
+    RygelMediaContainer *parent_container;
+    RygelMediaObject *object;
+
+    if (inner_error) {
+      g_object_unref (cursor);
+      g_propagate_error (error, inner_error);
+      return NULL;
+    }
+    if (parent) {
+      parent_container = RYGEL_MEDIA_CONTAINER (parent);
+    } else {
+      parent_container = NULL;
+    }
+    object = rygel_media_export_media_cache_get_object_from_statement (self, parent_container, statement);
+    rygel_media_object_set_parent_ref (object, parent_container);
+    if (parent) {
+      g_object_unref (parent);
+    }
+    object = parent;
+  }
+  g_object_unref (cursor);
+  return parent;
 }
 
+RygelMediaContainer *
+rygel_media_export_media_cache_get_container (RygelMediaExportMediaCache  *self,
+					      const gchar                 *container_id,
+					      GError                     **error) {
+  RygelMediaObject *object;
+  GError *inner_error;
+
+  g_return_val_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self), NULL);
+  g_return_val_if_fail (container_id != NULL, NULL);
+
+  inner_error = NULL;
+  object = rygel_media_export_media_cache_get_object (self, container_id, &inner_error);
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    return NULL;
+  }
+  if (object) {
+    if (!RYGEL_IS_MEDIA_CONTAINER (object)) {
+      g_set_error (error,
+		   RYGEL_MEDIA_EXPORT_MEDIA_CACHE_ERROR,
+		   RYGEL_MEDIA_EXPORT_MEDIA_CACHE_ERROR_INVALID_TYPE,
+		   "Object with id %s is not a MediaContainer",
+		   container_id);
+      g_object_unref (object);
+      return NULL;
+    }
+    return RYGEL_MEDIA_CONTAINER (object);
+  }
 
-void rygel_media_export_media_cache_remove_object (RygelMediaExportMediaCache* self, RygelMediaObject* object, GError** error) {
-	RygelMediaObject* _tmp0_;
-	const gchar* _tmp1_;
-	const gchar* _tmp2_;
-	GError * _inner_error_ = NULL;
-	g_return_if_fail (self != NULL);
-	g_return_if_fail (object != NULL);
-	_tmp0_ = object;
-	_tmp1_ = rygel_media_object_get_id (_tmp0_);
-	_tmp2_ = _tmp1_;
-	rygel_media_export_media_cache_remove_by_id (self, _tmp2_, &_inner_error_);
-	if (_inner_error_ != NULL) {
-		if ((_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) || (_inner_error_->domain == RYGEL_MEDIA_EXPORT_MEDIA_CACHE_ERROR)) {
-			g_propagate_error (error, _inner_error_);
-			return;
-		} 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;
-		}
-	}
+  g_object_unref (object);
+  return NULL;
 }
 
-void rygel_media_export_media_cache_save_container (RygelMediaExportMediaCache* self, RygelMediaContainer* container, GError** error) {
-	GError * _inner_error_ = NULL;
-	g_return_if_fail (self != NULL);
-	g_return_if_fail (container != NULL);
-	{
-		RygelMediaExportDatabase* _tmp0_;
-		RygelMediaContainer* _tmp1_;
-		RygelMediaExportDatabase* _tmp2_;
-		_tmp0_ = self->priv->db;
-		rygel_media_export_database_begin (_tmp0_, &_inner_error_);
-		if (_inner_error_ != NULL) {
-			if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-				goto __catch5_rygel_media_export_database_error;
-			}
-			g_critical ("file %s: line %d: unexpected 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;
-		}
-		_tmp1_ = container;
-		rygel_media_export_media_cache_create_object (self, (RygelMediaObject*) _tmp1_, &_inner_error_);
-		if (_inner_error_ != NULL) {
-			if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-				goto __catch5_rygel_media_export_database_error;
-			}
-			goto __finally5;
-		}
-		_tmp2_ = self->priv->db;
-		rygel_media_export_database_commit (_tmp2_, &_inner_error_);
-		if (_inner_error_ != NULL) {
-			if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-				goto __catch5_rygel_media_export_database_error;
-			}
-			g_critical ("file %s: line %d: unexpected 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;
-		}
-	}
-	goto __finally5;
-	__catch5_rygel_media_export_database_error:
-	{
-		GError* _error_ = NULL;
-		RygelMediaExportDatabase* _tmp3_;
-		GError* _tmp4_;
-		GError* _tmp5_;
-		_error_ = _inner_error_;
-		_inner_error_ = NULL;
-		_tmp3_ = self->priv->db;
-		rygel_media_export_database_rollback (_tmp3_);
-		_tmp4_ = _error_;
-		_tmp5_ = g_error_copy (_tmp4_);
-		_inner_error_ = _tmp5_;
-		g_error_free (_error_);
-		goto __finally5;
-	}
-	__finally5:
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		return;
-	}
+gint
+rygel_media_export_media_cache_get_child_count (RygelMediaExportMediaCache  *self,
+						const gchar                 *container_id,
+						GError                     **error) {
+  GValue value = G_VALUE_INIT;
+  GError *inner_error;
+  gint count;
+
+  g_return_val_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self), 0);
+  g_return_val_if_fail (container_id != NULL, 0);
+
+  g_value_init (&value, G_TYPE_STRING);
+  g_value_set_string (&value, container_id);
+  inner_error = NULL;
+  count = rygel_media_export_media_cache_query_value (self, RYGEL_MEDIA_EXPORT_SQL_STRING_CHILD_COUNT, &value, 1, &inner_error);
+  if (inner_error != NULL) {
+    g_propagate_error (error, inner_error);
+    return 0;
+  }
+  return count;
 }
 
+gboolean
+rygel_media_export_media_cache_exists (RygelMediaExportMediaCache  *self,
+				       GFile                       *file,
+				       gint64                      *timestamp,
+				       gint64                      *size,
+				       GError                     **error) {
+  gboolean result;
+  gchar *uri;
+  RygelMediaExportDatabaseCursor *cursor;
+  sqlite3_stmt *statement;
+  GError *inner_error;
+  RygelMediaExportMediaCachePrivate *priv;
+  GeeAbstractMap *abstract_exists_cache;
+  GValue value = G_VALUE_INIT;
+
+  g_return_val_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self), FALSE);
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+
+  priv = self->priv;
+  uri = g_file_get_uri (file);
+  abstract_exists_cache = GEE_ABSTRACT_MAP (priv->exists_cache);
+  if (gee_abstract_map_has_key (abstract_exists_cache, uri)) {
+    RygelMediaExportExistsCacheEntry *entry = (RygelMediaExportExistsCacheEntry *) gee_abstract_map_get (abstract_exists_cache, uri);
+
+    gee_abstract_map_unset (abstract_exists_cache, uri, NULL);
+    rygel_media_export_exists_cache_entry_free (entry);
+    g_free (uri);
+    if (timestamp) {
+      *timestamp = entry->mtime;
+    }
+    if (size) {
+      *size = entry->size;
+    }
+    return TRUE;
+  }
 
-void rygel_media_export_media_cache_save_item (RygelMediaExportMediaCache* self, RygelMediaItem* item, GError** error) {
-	GError * _inner_error_ = NULL;
-	g_return_if_fail (self != NULL);
-	g_return_if_fail (item != NULL);
-	{
-		RygelMediaExportDatabase* _tmp0_;
-		RygelMediaItem* _tmp1_;
-		RygelMediaItem* _tmp2_;
-		RygelMediaExportDatabase* _tmp3_;
-		_tmp0_ = self->priv->db;
-		rygel_media_export_database_begin (_tmp0_, &_inner_error_);
-		if (_inner_error_ != NULL) {
-			if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-				goto __catch6_rygel_media_export_database_error;
-			}
-			g_critical ("file %s: line %d: unexpected 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;
-		}
-		_tmp1_ = item;
-		rygel_media_export_media_cache_save_metadata (self, _tmp1_, &_inner_error_);
-		if (_inner_error_ != NULL) {
-			if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-				goto __catch6_rygel_media_export_database_error;
-			}
-			goto __finally6;
-		}
-		_tmp2_ = item;
-		rygel_media_export_media_cache_create_object (self, (RygelMediaObject*) _tmp2_, &_inner_error_);
-		if (_inner_error_ != NULL) {
-			if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-				goto __catch6_rygel_media_export_database_error;
-			}
-			goto __finally6;
-		}
-		_tmp3_ = self->priv->db;
-		rygel_media_export_database_commit (_tmp3_, &_inner_error_);
-		if (_inner_error_ != NULL) {
-			if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-				goto __catch6_rygel_media_export_database_error;
-			}
-			g_critical ("file %s: line %d: unexpected 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;
-		}
-	}
-	goto __finally6;
-	__catch6_rygel_media_export_database_error:
-	{
-		GError* _error_ = NULL;
-		const gchar* _tmp4_ = NULL;
-		RygelMediaItem* _tmp5_;
-		const gchar* _tmp6_;
-		const gchar* _tmp7_;
-		GError* _tmp8_;
-		const gchar* _tmp9_;
-		RygelMediaExportDatabase* _tmp10_;
-		GError* _tmp11_;
-		GError* _tmp12_;
-		_error_ = _inner_error_;
-		_inner_error_ = NULL;
-		_tmp4_ = _ ("Failed to add item with ID %s: %s");
-		_tmp5_ = item;
-		_tmp6_ = rygel_media_object_get_id ((RygelMediaObject*) _tmp5_);
-		_tmp7_ = _tmp6_;
-		_tmp8_ = _error_;
-		_tmp9_ = _tmp8_->message;
-		g_warning (_tmp4_, _tmp7_, _tmp9_);
-		_tmp10_ = self->priv->db;
-		rygel_media_export_database_rollback (_tmp10_);
-		_tmp11_ = _error_;
-		_tmp12_ = g_error_copy (_tmp11_);
-		_inner_error_ = _tmp12_;
-		g_error_free (_error_);
-		goto __finally6;
-	}
-	__finally6:
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		return;
-	}
-}
+  g_value_init (&value, G_TYPE_STRING);
+  g_value_take_string (&value, uri);
 
+  inner_error = NULL;
+  cursor = rygel_media_export_media_cache_exec_cursor (self, RYGEL_MEDIA_EXPORT_SQL_STRING_EXISTS, &value, 1, &inner_error);
+  g_value_unset (&value);
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    return FALSE;
+  }
+  statement = rygel_media_export_database_cursor_next (cursor, &inner_error);
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    g_object_unref (cursor);
+    return FALSE;
+  }
+  result = (sqlite3_column_int (statement, 0) == 1);
+  if (timestamp) {
+    *timestamp = sqlite3_column_int64 (statement , 1);
+  }
+  if (size) {
+    *size = sqlite3_column_int64 (statement, 2);
+  }
+  g_object_unref (cursor);
 
-RygelMediaObject* rygel_media_export_media_cache_get_object (RygelMediaExportMediaCache* self, const gchar* object_id, GError** error) {
-	RygelMediaObject* result = NULL;
-	const gchar* _tmp0_;
-	GValue _tmp1_ = {0};
-	GValue* _tmp2_ = NULL;
-	GValue* values;
-	gint values_length1;
-	RygelMediaObject* parent;
-	GValue* _tmp3_;
-	gint _tmp3__length1;
-	RygelMediaExportDatabaseCursor* _tmp4_ = NULL;
-	RygelMediaExportDatabaseCursor* cursor;
-	GError * _inner_error_ = NULL;
-	g_return_val_if_fail (self != NULL, NULL);
-	g_return_val_if_fail (object_id != NULL, NULL);
-	_tmp0_ = object_id;
-	g_value_init (&_tmp1_, G_TYPE_STRING);
-	g_value_set_string (&_tmp1_, _tmp0_);
-	_tmp2_ = g_new0 (GValue, 1);
-	_tmp2_[0] = _tmp1_;
-	values = _tmp2_;
-	values_length1 = 1;
-	parent = NULL;
-	_tmp3_ = values;
-	_tmp3__length1 = values_length1;
-	_tmp4_ = rygel_media_export_media_cache_exec_cursor (self, RYGEL_MEDIA_EXPORT_SQL_STRING_GET_OBJECT, _tmp3_, _tmp3__length1, &_inner_error_);
-	cursor = _tmp4_;
-	if (_inner_error_ != NULL) {
-		if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-			g_propagate_error (error, _inner_error_);
-			g_object_unref (parent);
-			values = (_vala_GValue_array_free (values, values_length1), NULL);
-			return NULL;
-		} else {
-			g_object_unref (parent);
-			values = (_vala_GValue_array_free (values, values_length1), 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_);
-			return NULL;
-		}
-	}
-	{
-		while (TRUE) {
-			gboolean _tmp8_ = FALSE;
-			sqlite3_stmt* _tmp10_ = NULL;
-			sqlite3_stmt* statement;
-			RygelMediaObject* _tmp11_;
-			RygelMediaContainer* _tmp12_;
-			RygelMediaContainer* parent_container;
-			RygelMediaContainer* _tmp13_;
-			sqlite3_stmt* _tmp14_;
-			RygelMediaObject* _tmp15_ = NULL;
-			RygelMediaObject* object;
-			RygelMediaObject* _tmp16_;
-			RygelMediaContainer* _tmp17_;
-			RygelMediaObject* _tmp18_;
-			RygelMediaObject* _tmp19_;
-			_tmp8_ = rygel_media_export_database_cursor_has_next (cursor);
-			if (!_tmp8_) {
-				break;
-			}
-			_tmp10_ = rygel_media_export_database_cursor_next (cursor, &_inner_error_);
-			statement = _tmp10_;
-			if (_inner_error_ != NULL) {
-				if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-					g_propagate_error (error, _inner_error_);
-					g_object_unref (cursor);
-					g_object_unref (parent);
-					values = (_vala_GValue_array_free (values, values_length1), NULL);
-					return NULL;
-				} else {
-					g_object_unref (cursor);
-					g_object_unref (parent);
-					values = (_vala_GValue_array_free (values, values_length1), 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_);
-					return NULL;
-				}
-			}
-			_tmp11_ = parent;
-			_tmp12_ = g_object_ref (G_TYPE_CHECK_INSTANCE_TYPE (_tmp11_, RYGEL_TYPE_MEDIA_CONTAINER) ? ((RygelMediaContainer*) _tmp11_) : NULL);
-			parent_container = _tmp12_;
-			_tmp13_ = parent_container;
-			_tmp14_ = statement;
-			_tmp15_ = rygel_media_export_media_cache_get_object_from_statement (self, _tmp13_, _tmp14_);
-			object = _tmp15_;
-			_tmp16_ = object;
-			_tmp17_ = parent_container;
-			rygel_media_object_set_parent_ref (_tmp16_, _tmp17_);
-			_tmp18_ = object;
-			_tmp19_ = g_object_ref (_tmp18_);
-			g_object_unref (parent);
-			parent = _tmp19_;
-			g_object_unref (object);
-			g_object_unref (parent_container);
-		}
-	}
-	result = parent;
-	g_object_unref (cursor);
-	values = (_vala_GValue_array_free (values, values_length1), NULL);
-	return result;
+  return result;
 }
 
+RygelMediaObjects *
+rygel_media_export_media_cache_get_children (RygelMediaExportMediaCache  *self,
+					     RygelMediaContainer         *container,
+					     const gchar                 *sort_criteria,
+					     glong                        offset,
+					     glong                        max_count,
+					     GError                     **error) {
+  GeeAbstractCollection *abstract_children;
+  GValue values [] = {G_VALUE_INIT, G_VALUE_INIT, G_VALUE_INIT};
+  guint iter;
+  RygelMediaObjects *children;
+  gchar *sql;
+  gchar *sort_order;
+  RygelMediaExportDatabaseCursor *cursor;
+  GError *inner_error;
+  RygelMediaExportMediaCachePrivate *priv;
+
+  g_return_val_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self), NULL);
+  g_return_val_if_fail (RYGEL_IS_MEDIA_CONTAINER (container), NULL);
+  g_return_val_if_fail (sort_criteria != NULL, NULL);
+
+  g_value_init (&(values[0]), G_TYPE_STRING);
+  g_value_set_string (&(values[0]), rygel_media_object_get_id (RYGEL_MEDIA_OBJECT (container)));
+  g_value_init (&(values[1]), G_TYPE_LONG);
+  g_value_set_long (&(values[1]), offset);
+  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);
+  priv = self->priv;
+  sql = g_strdup_printf (rygel_media_export_sql_factory_make (priv->sql, RYGEL_MEDIA_EXPORT_SQL_STRING_GET_CHILDREN),
+			 sort_order);
+  g_free (sort_order);
+  inner_error = NULL;
+  cursor = rygel_media_export_database_exec_cursor (priv->db, sql, values, G_N_ELEMENTS (values), &inner_error);
+  g_free (sql);
+
+  for (iter = 0; iter < G_N_ELEMENTS (values); ++iter) {
+    g_value_unset (&(values[iter]));
+  }
 
-RygelMediaContainer* rygel_media_export_media_cache_get_container (RygelMediaExportMediaCache* self, const gchar* container_id, GError** error) {
-	RygelMediaContainer* result = NULL;
-	const gchar* _tmp0_;
-	RygelMediaObject* _tmp1_ = NULL;
-	RygelMediaObject* object;
-	gboolean _tmp2_ = FALSE;
-	RygelMediaObject* _tmp3_;
-	gboolean _tmp5_;
-	RygelMediaObject* _tmp8_;
-	RygelMediaContainer* _tmp9_;
-	GError * _inner_error_ = NULL;
-	g_return_val_if_fail (self != NULL, NULL);
-	g_return_val_if_fail (container_id != NULL, NULL);
-	_tmp0_ = container_id;
-	_tmp1_ = rygel_media_export_media_cache_get_object (self, _tmp0_, &_inner_error_);
-	object = _tmp1_;
-	if (_inner_error_ != NULL) {
-		if ((_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) || (_inner_error_->domain == RYGEL_MEDIA_EXPORT_MEDIA_CACHE_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;
-		}
-	}
-	_tmp3_ = object;
-	if (_tmp3_ != NULL) {
-		RygelMediaObject* _tmp4_;
-		_tmp4_ = object;
-		_tmp2_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, RYGEL_TYPE_MEDIA_CONTAINER);
-	} else {
-		_tmp2_ = FALSE;
-	}
-	_tmp5_ = _tmp2_;
-	if (_tmp5_) {
-		const gchar* _tmp6_;
-		GError* _tmp7_;
-		_tmp6_ = container_id;
-		_tmp7_ = g_error_new (RYGEL_MEDIA_EXPORT_MEDIA_CACHE_ERROR, RYGEL_MEDIA_EXPORT_MEDIA_CACHE_ERROR_INVALID_TYPE, "Object with id %s is " "not a MediaContainer", _tmp6_);
-		_inner_error_ = _tmp7_;
-		if ((_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) || (_inner_error_->domain == RYGEL_MEDIA_EXPORT_MEDIA_CACHE_ERROR)) {
-			g_propagate_error (error, _inner_error_);
-			g_object_unref (object);
-			return NULL;
-		} else {
-			g_object_unref (object);
-			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;
-		}
-	}
-	_tmp8_ = object;
-	_tmp9_ = g_object_ref (G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, RYGEL_TYPE_MEDIA_CONTAINER) ? ((RygelMediaContainer*) _tmp8_) : NULL);
-	result = _tmp9_;
-	g_object_unref (object);
-	return result;
-}
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    return NULL;
+  }
 
+  children = rygel_media_objects_new ();
+  abstract_children = GEE_ABSTRACT_COLLECTION (children);
+  {
+    while (rygel_media_export_database_cursor_has_next (cursor)) {
+      sqlite3_stmt *statement = rygel_media_export_database_cursor_next (cursor, &inner_error);
+      RygelMediaObject *object;
 
-gint rygel_media_export_media_cache_get_child_count (RygelMediaExportMediaCache* self, const gchar* container_id, GError** error) {
-	gint result = 0;
-	const gchar* _tmp0_;
-	GValue _tmp1_ = {0};
-	GValue* _tmp2_ = NULL;
-	GValue* values;
-	gint values_length1;
-	gint _tmp3_ = 0;
-	gint _tmp4_;
-	GError * _inner_error_ = NULL;
-	g_return_val_if_fail (self != NULL, 0);
-	g_return_val_if_fail (container_id != NULL, 0);
-	_tmp0_ = container_id;
-	g_value_init (&_tmp1_, G_TYPE_STRING);
-	g_value_set_string (&_tmp1_, _tmp0_);
-	_tmp2_ = g_new0 (GValue, 1);
-	_tmp2_[0] = _tmp1_;
-	values = _tmp2_;
-	values_length1 = 1;
-	_tmp3_ = rygel_media_export_media_cache_query_value (self, RYGEL_MEDIA_EXPORT_SQL_STRING_CHILD_COUNT, values, values_length1, &_inner_error_);
-	_tmp4_ = _tmp3_;
-	if (_inner_error_ != NULL) {
-		if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-			g_propagate_error (error, _inner_error_);
-			values = (_vala_GValue_array_free (values, values_length1), NULL);
-			return 0;
-		} else {
-			values = (_vala_GValue_array_free (values, values_length1), 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_);
-			return 0;
-		}
-	}
-	result = _tmp4_;
-	values = (_vala_GValue_array_free (values, values_length1), NULL);
-	return result;
+      if (inner_error) {
+	g_propagate_error (error, inner_error);
+	g_object_unref (cursor);
+	g_object_unref (children);
+	return NULL;
+      }
+      object = rygel_media_export_media_cache_get_object_from_statement (self, container, statement);
+      gee_abstract_collection_add (abstract_children, object);
+      rygel_media_object_set_parent_ref (object, container);
+      g_object_unref (object);
+    }
+  }
+  g_object_unref (cursor);
+  return children;
 }
 
+RygelMediaObjects *
+rygel_media_export_media_cache_get_objects_by_search_expression (RygelMediaExportMediaCache  *self,
+								 RygelSearchExpression       *expression,
+								 const gchar                 *container_id,
+								 const gchar                 *sort_criteria,
+								 guint                        offset,
+								 guint                        max_count,
+								 guint                       *total_matches,
+								 GError                     **error) {
+  guint matches;
+  RygelMediaObjects *objects;
+  GArray *args;
+  gchar *filter;
+  guint max_objects;
+  GError *inner_error;
+
+  g_return_val_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self), NULL);
+  g_return_val_if_fail (sort_criteria != NULL, NULL);
+
+  args = our_g_value_array_new ();
+  inner_error = NULL;
+  filter = rygel_media_export_media_cache_translate_search_expression (self, expression, args, "WHERE", &inner_error);
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    g_array_unref (args);
+    return NULL;
+  }
+  if (expression) {
+    gchar *ex_str = rygel_search_expression_to_string (expression);
 
-gboolean rygel_media_export_media_cache_exists (RygelMediaExportMediaCache* self, GFile* file, gint64* timestamp, gint64* size, GError** error) {
-	gint64 _vala_timestamp = 0LL;
-	gint64 _vala_size = 0LL;
-	gboolean result = FALSE;
-	GFile* _tmp0_;
-	gchar* _tmp1_ = NULL;
-	gchar* uri;
-	const gchar* _tmp2_;
-	GValue _tmp3_ = {0};
-	GValue* _tmp4_ = NULL;
-	GValue* values;
-	gint values_length1;
-	GeeHashMap* _tmp5_;
-	const gchar* _tmp6_;
-	gboolean _tmp7_ = FALSE;
-	GValue* _tmp17_;
-	gint _tmp17__length1;
-	RygelMediaExportDatabaseCursor* _tmp18_ = NULL;
-	RygelMediaExportDatabaseCursor* cursor;
-	RygelMediaExportDatabaseCursor* _tmp19_;
-	sqlite3_stmt* _tmp20_ = NULL;
-	sqlite3_stmt* statement;
-	sqlite3_stmt* _tmp21_;
-	gint64 _tmp22_ = 0LL;
-	sqlite3_stmt* _tmp23_;
-	gint64 _tmp24_ = 0LL;
-	sqlite3_stmt* _tmp25_;
-	gint _tmp26_ = 0;
-	GError * _inner_error_ = NULL;
-	g_return_val_if_fail (self != NULL, FALSE);
-	g_return_val_if_fail (file != NULL, FALSE);
-	_tmp0_ = file;
-	_tmp1_ = g_file_get_uri (_tmp0_);
-	uri = _tmp1_;
-	_tmp2_ = uri;
-	g_value_init (&_tmp3_, G_TYPE_STRING);
-	g_value_set_string (&_tmp3_, _tmp2_);
-	_tmp4_ = g_new0 (GValue, 1);
-	_tmp4_[0] = _tmp3_;
-	values = _tmp4_;
-	values_length1 = 1;
-	_tmp5_ = self->priv->exists_cache;
-	_tmp6_ = uri;
-	_tmp7_ = gee_abstract_map_has_key ((GeeAbstractMap*) _tmp5_, _tmp6_);
-	if (_tmp7_) {
-		GeeHashMap* _tmp8_;
-		const gchar* _tmp9_;
-		gpointer _tmp10_ = NULL;
-		RygelMediaExportExistsCacheEntry* entry;
-		GeeHashMap* _tmp11_;
-		const gchar* _tmp12_;
-		RygelMediaExportExistsCacheEntry* _tmp13_;
-		gint64 _tmp14_;
-		RygelMediaExportExistsCacheEntry* _tmp15_;
-		gint64 _tmp16_;
-		_tmp8_ = self->priv->exists_cache;
-		_tmp9_ = uri;
-		_tmp10_ = gee_abstract_map_get ((GeeAbstractMap*) _tmp8_, _tmp9_);
-		entry = (RygelMediaExportExistsCacheEntry*) _tmp10_;
-		_tmp11_ = self->priv->exists_cache;
-		_tmp12_ = uri;
-		gee_abstract_map_unset ((GeeAbstractMap*) _tmp11_, _tmp12_, NULL);
-		_tmp13_ = entry;
-		_tmp14_ = (*_tmp13_).mtime;
-		_vala_timestamp = _tmp14_;
-		_tmp15_ = entry;
-		_tmp16_ = (*_tmp15_).size;
-		_vala_size = _tmp16_;
-		result = TRUE;
-		_rygel_media_export_exists_cache_entry_free0 (entry);
-		values = (_vala_GValue_array_free (values, values_length1), NULL);
-		g_free (uri);
-		if (timestamp) {
-			*timestamp = _vala_timestamp;
-		}
-		if (size) {
-			*size = _vala_size;
-		}
-		return result;
-	}
-	_tmp17_ = values;
-	_tmp17__length1 = values_length1;
-	_tmp18_ = rygel_media_export_media_cache_exec_cursor (self, RYGEL_MEDIA_EXPORT_SQL_STRING_EXISTS, _tmp17_, _tmp17__length1, &_inner_error_);
-	cursor = _tmp18_;
-	if (_inner_error_ != NULL) {
-		if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-			g_propagate_error (error, _inner_error_);
-			values = (_vala_GValue_array_free (values, values_length1), NULL);
-			g_free (uri);
-			return FALSE;
-		} else {
-			values = (_vala_GValue_array_free (values, values_length1), NULL);
-			g_free (uri);
-			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 FALSE;
-		}
-	}
-	_tmp19_ = cursor;
-	_tmp20_ = rygel_media_export_database_cursor_next (_tmp19_, &_inner_error_);
-	statement = _tmp20_;
-	if (_inner_error_ != NULL) {
-		if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-			g_propagate_error (error, _inner_error_);
-			g_object_unref (cursor);
-			values = (_vala_GValue_array_free (values, values_length1), NULL);
-			g_free (uri);
-			return FALSE;
-		} else {
-			g_object_unref (cursor);
-			values = (_vala_GValue_array_free (values, values_length1), NULL);
-			g_free (uri);
-			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 FALSE;
-		}
-	}
-	_tmp21_ = statement;
-	_tmp22_ = sqlite3_column_int64 (_tmp21_, 1);
-	_vala_timestamp = _tmp22_;
-	_tmp23_ = statement;
-	_tmp24_ = sqlite3_column_int64 (_tmp23_, 2);
-	_vala_size = _tmp24_;
-	_tmp25_ = statement;
-	_tmp26_ = sqlite3_column_int (_tmp25_, 0);
-	result = _tmp26_ == 1;
-	g_object_unref (cursor);
-	values = (_vala_GValue_array_free (values, values_length1), NULL);
-	g_free (uri);
-	if (timestamp) {
-		*timestamp = _vala_timestamp;
-	}
-	if (size) {
-		*size = _vala_size;
-	}
-	return result;
+    g_debug ("Original search: %s", ex_str);
+    g_free (ex_str);
+    g_debug ("Parsed search expression: %s", filter);
+  }
+  max_objects = rygel_media_export_media_cache_modify_limit (max_count);
+  matches = (guint) rygel_media_export_media_cache_get_object_count_by_filter (self, filter, args, container_id, &inner_error);
+  if (inner_error != NULL) {
+    g_propagate_error (error, inner_error);
+    g_free (filter);
+    g_array_unref (args);
+    return NULL;
+  }
+  objects = rygel_media_export_media_cache_get_objects_by_filter (self,
+								  filter,
+								  args,
+								  container_id,
+								  sort_criteria,
+								  (glong) offset,
+								  (glong) max_objects,
+								  &inner_error);
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    g_free (filter);
+    g_array_unref (args);
+    return NULL;
+  }
+  g_free (filter);
+  g_array_unref (args);
+  if (total_matches) {
+    *total_matches = matches;
+  }
+  return objects;
 }
 
-
-RygelMediaObjects* rygel_media_export_media_cache_get_children (RygelMediaExportMediaCache* self, RygelMediaContainer* container, const gchar* sort_criteria, glong offset, glong max_count, GError** error) {
-	RygelMediaObjects* result = NULL;
-	RygelMediaObjects* _tmp0_;
-	RygelMediaObjects* children;
-	RygelMediaContainer* _tmp1_;
-	const gchar* _tmp2_;
-	const gchar* _tmp3_;
-	GValue _tmp4_ = {0};
-	glong _tmp5_;
-	GValue _tmp6_ = {0};
-	glong _tmp7_;
-	GValue _tmp8_ = {0};
-	GValue* _tmp9_ = NULL;
-	GValue* values;
-	gint values_length1;
-	RygelMediaExportSQLFactory* _tmp10_;
-	const gchar* _tmp11_ = NULL;
-	gchar* _tmp12_;
-	gchar* sql;
-	const gchar* _tmp13_;
-	gchar* _tmp14_ = NULL;
-	gchar* sort_order;
-	RygelMediaExportDatabase* _tmp15_;
-	const gchar* _tmp16_;
-	const gchar* _tmp17_;
-	gchar* _tmp18_ = NULL;
-	gchar* _tmp19_;
-	GValue* _tmp20_;
-	gint _tmp20__length1;
-	RygelMediaExportDatabaseCursor* _tmp21_ = NULL;
-	RygelMediaExportDatabaseCursor* _tmp22_;
-	RygelMediaExportDatabaseCursor* cursor;
-	GError * _inner_error_ = NULL;
-	g_return_val_if_fail (self != NULL, NULL);
-	g_return_val_if_fail (container != NULL, NULL);
-	g_return_val_if_fail (sort_criteria != NULL, NULL);
-	_tmp0_ = rygel_media_objects_new ();
-	children = _tmp0_;
-	_tmp1_ = container;
-	_tmp2_ = rygel_media_object_get_id ((RygelMediaObject*) _tmp1_);
-	_tmp3_ = _tmp2_;
-	g_value_init (&_tmp4_, G_TYPE_STRING);
-	g_value_set_string (&_tmp4_, _tmp3_);
-	_tmp5_ = offset;
-	g_value_init (&_tmp6_, G_TYPE_LONG);
-	g_value_set_long (&_tmp6_, _tmp5_);
-	_tmp7_ = max_count;
-	g_value_init (&_tmp8_, G_TYPE_LONG);
-	g_value_set_long (&_tmp8_, _tmp7_);
-	_tmp9_ = g_new0 (GValue, 3);
-	_tmp9_[0] = _tmp4_;
-	_tmp9_[1] = _tmp6_;
-	_tmp9_[2] = _tmp8_;
-	values = _tmp9_;
-	values_length1 = 3;
-	_tmp10_ = self->priv->sql;
-	_tmp11_ = rygel_media_export_sql_factory_make (_tmp10_, RYGEL_MEDIA_EXPORT_SQL_STRING_GET_CHILDREN);
-	_tmp12_ = g_strdup (_tmp11_);
-	sql = _tmp12_;
-	_tmp13_ = sort_criteria;
-	_tmp14_ = rygel_media_export_media_cache_translate_sort_criteria (self, _tmp13_);
-	sort_order = _tmp14_;
-	_tmp15_ = self->priv->db;
-	_tmp16_ = sql;
-	_tmp17_ = sort_order;
-	_tmp18_ = g_strdup_printf (_tmp16_, _tmp17_);
-	_tmp19_ = _tmp18_;
-	_tmp20_ = values;
-	_tmp20__length1 = values_length1;
-	_tmp21_ = rygel_media_export_database_exec_cursor (_tmp15_, _tmp19_, _tmp20_, _tmp20__length1, &_inner_error_);
-	_tmp22_ = _tmp21_;
-	g_free (_tmp19_);
-	cursor = _tmp22_;
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		g_free (sort_order);
-		g_free (sql);
-		values = (_vala_GValue_array_free (values, values_length1), NULL);
-		g_object_unref (children);
-		return NULL;
-	}
-	{
-		while (TRUE) {
-			gboolean _tmp26_ = FALSE;
-			sqlite3_stmt* _tmp28_ = NULL;
-			sqlite3_stmt* statement;
-			RygelMediaObjects* _tmp29_;
-			RygelMediaContainer* _tmp30_;
-			sqlite3_stmt* _tmp31_;
-			RygelMediaObject* _tmp32_ = NULL;
-			RygelMediaObject* _tmp33_;
-			RygelMediaObjects* _tmp34_;
-			gpointer _tmp35_ = NULL;
-			RygelMediaObject* _tmp36_;
-			RygelMediaContainer* _tmp37_;
-			_tmp26_ = rygel_media_export_database_cursor_has_next (cursor);
-			if (!_tmp26_) {
-				break;
-			}
-			_tmp28_ = rygel_media_export_database_cursor_next (cursor, &_inner_error_);
-			statement = _tmp28_;
-			if (_inner_error_ != NULL) {
-				g_propagate_error (error, _inner_error_);
-				g_object_unref (cursor);
-				g_free (sort_order);
-				g_free (sql);
-				values = (_vala_GValue_array_free (values, values_length1), NULL);
-				g_object_unref (children);
-				return NULL;
-			}
-			_tmp29_ = children;
-			_tmp30_ = container;
-			_tmp31_ = statement;
-			_tmp32_ = rygel_media_export_media_cache_get_object_from_statement (self, _tmp30_, _tmp31_);
-			_tmp33_ = _tmp32_;
-			gee_abstract_collection_add ((GeeAbstractCollection*) _tmp29_, _tmp33_);
-			g_object_unref (_tmp33_);
-			_tmp34_ = children;
-			_tmp35_ = gee_list_last ((GeeList*) _tmp34_);
-			_tmp36_ = (RygelMediaObject*) _tmp35_;
-			_tmp37_ = container;
-			rygel_media_object_set_parent_ref (_tmp36_, _tmp37_);
-			g_object_unref (_tmp36_);
-		}
-	}
-	result = children;
-	g_object_unref (cursor);
-	g_free (sort_order);
-	g_free (sql);
-	values = (_vala_GValue_array_free (values, values_length1), NULL);
-	return result;
+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,
+								      const gchar                 *container_id,
+								      GError                     **error) {
+  glong count;
+  GArray *args;
+  gchar *filter;
+  GError *inner_error;
+  guint iter;
+
+  g_return_val_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self), 0);
+
+  args = our_g_value_array_new ();
+  inner_error = NULL;
+  filter = rygel_media_export_media_cache_translate_search_expression (self, expression, args, "WHERE", &inner_error);
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    g_array_unref (args);
+    return 0;
+  }
+  if (expression) {
+    gchar* ex_str = rygel_search_expression_to_string (expression);
 
-RygelMediaObjects* rygel_media_export_media_cache_get_objects_by_search_expression (RygelMediaExportMediaCache* self, RygelSearchExpression* expression, const gchar* container_id, const gchar* sort_criteria, guint offset, guint max_count, guint* total_matches, GError** error) {
-	guint _vala_total_matches = 0U;
-	RygelMediaObjects* result = NULL;
-	GArray *args;
-	RygelSearchExpression* _tmp1_;
-	gchar* _tmp3_ = NULL;
-	gchar* filter;
-	RygelSearchExpression* _tmp4_;
-	guint _tmp9_;
-	guint _tmp10_ = 0U;
-	guint max_objects;
-	const gchar* _tmp11_;
-	const gchar* _tmp13_;
-	glong _tmp14_ = 0L;
-	glong _tmp15_;
-	const gchar* _tmp16_;
-	const gchar* _tmp18_;
-	const gchar* _tmp19_;
-	guint _tmp20_;
-	guint _tmp21_;
-	RygelMediaObjects* _tmp22_ = NULL;
-	RygelMediaObjects* _tmp23_;
-	GError * _inner_error_ = NULL;
-	g_return_val_if_fail (self != NULL, NULL);
-	g_return_val_if_fail (sort_criteria != NULL, NULL);
-	args = our_g_value_array_new ();
-	_tmp1_ = expression;
-	_tmp3_ = rygel_media_export_media_cache_translate_search_expression (self, _tmp1_, args, "WHERE", &_inner_error_);
-	filter = _tmp3_;
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		g_array_unref (args);
-		return NULL;
-	}
-	_tmp4_ = expression;
-	if (_tmp4_ != NULL) {
-		RygelSearchExpression* _tmp5_;
-		gchar* _tmp6_ = NULL;
-		gchar* _tmp7_;
-		const gchar* _tmp8_;
-		_tmp5_ = expression;
-		_tmp6_ = rygel_search_expression_to_string (_tmp5_);
-		_tmp7_ = _tmp6_;
-		g_debug ("rygel-media-export-media-cache.vala:218: Original search: %s", _tmp7_);
-		g_free (_tmp7_);
-		_tmp8_ = filter;
-		g_debug ("rygel-media-export-media-cache.vala:219: Parsed search expression: %s", _tmp8_);
-	}
-	_tmp9_ = max_count;
-	_tmp10_ = rygel_media_export_media_cache_modify_limit (self, _tmp9_);
-	max_objects = _tmp10_;
-	_tmp11_ = filter;
-	_tmp13_ = container_id;
-	_tmp14_ = rygel_media_export_media_cache_get_object_count_by_filter (self, _tmp11_, args, _tmp13_, &_inner_error_);
-	_tmp15_ = _tmp14_;
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		g_free (filter);
-		g_array_unref (args);
-		return NULL;
-	}
-	_vala_total_matches = (guint) _tmp15_;
-	_tmp16_ = filter;
-	_tmp18_ = container_id;
-	_tmp19_ = sort_criteria;
-	_tmp20_ = offset;
-	_tmp21_ = max_objects;
-	_tmp22_ = rygel_media_export_media_cache_get_objects_by_filter (self, _tmp16_, args, _tmp18_, _tmp19_, (glong) _tmp20_, (glong) _tmp21_, &_inner_error_);
-	_tmp23_ = _tmp22_;
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		g_free (filter);
-		g_array_unref (args);
-		return NULL;
-	}
-	result = _tmp23_;
-	g_free (filter);
-	g_array_unref (args);
-	if (total_matches) {
-		*total_matches = _vala_total_matches;
-	}
-	return result;
+    g_debug ("Original search: %s", ex_str);
+    g_free (ex_str);
+    g_debug ("Parsed search expression: %s", filter);
+  }
+  for (iter = 0; iter < args->len; ++iter) {
+    GValue *value = &our_g_value_array_index (args, iter);
+    gchar *to_free;
+    const gchar *contents;
+
+    if (G_VALUE_HOLDS (value, G_TYPE_STRING)) {
+      contents = g_value_get_string (value);
+      to_free = NULL;
+    } else {
+      to_free = g_strdup_value_contents (value);
+      contents = to_free;
+    }
+
+    g_debug ("Arg %d: %s", iter, contents);
+    g_free (to_free);
+  }
+  count = rygel_media_export_media_cache_get_object_count_by_filter (self, filter, args, container_id, &inner_error);
+  g_free (filter);
+  g_array_unref (args);
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    return 0;
+  }
+  return count;
 }
 
 
-static GValue* _g_value_dup (GValue* self) {
-	return g_boxed_copy (G_TYPE_VALUE, self);
-}
+glong
+rygel_media_export_media_cache_get_object_count_by_filter (RygelMediaExportMediaCache  *self,
+							   const gchar                 *filter,
+							   GArray                      *args,
+							   const gchar                 *container_id,
+							   GError                     **error) {
+  glong count;
+  gchar *sql;
+  RygelMediaExportSQLString string_id;
+  GError *inner_error;
+  RygelMediaExportMediaCachePrivate *priv;
 
+  g_return_val_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self), 0);
+  g_return_val_if_fail (filter != NULL, 0);
+  g_return_val_if_fail (args != NULL, 0);
 
-static gpointer __g_value_dup0 (gpointer self) {
-	return self ? _g_value_dup (self) : NULL;
+  if (container_id) {
+    GValue v = G_VALUE_INIT;
+
+    g_value_init (&v, G_TYPE_STRING);
+    g_value_set_string (&v, container_id);
+    g_array_prepend_val (args, v);
+  }
+  g_debug ("Parameters to bind: %u", args->len);
+  if (container_id) {
+    string_id = RYGEL_MEDIA_EXPORT_SQL_STRING_GET_OBJECT_COUNT_BY_FILTER_WITH_ANCESTOR;
+  } else {
+    string_id = RYGEL_MEDIA_EXPORT_SQL_STRING_GET_OBJECT_COUNT_BY_FILTER;
+  }
+  priv = self->priv;
+  sql = g_strdup_printf (rygel_media_export_sql_factory_make (priv->sql, string_id), filter);
+  inner_error = NULL;
+  count = rygel_media_export_database_query_value (priv->db, sql, (GValue *) args->data, (gint) args->len, &inner_error);
+  g_free (sql);
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    return 0;
+  }
+  return count;
 }
 
+RygelMediaObjects *
+rygel_media_export_media_cache_get_objects_by_filter (RygelMediaExportMediaCache  *self,
+						      const gchar                 *filter,
+						      GArray                      *args,
+						      const gchar                 *container_id,
+						      const gchar                 *sort_criteria,
+						      glong                        offset,
+						      glong                        max_count,
+						      GError                     **error) {
+  RygelMediaExportSQLString string_id;
+  RygelMediaObjects *children;
+  GValue v;
+  RygelMediaContainer *parent;
+  gchar *sql;
+  gchar *sort_order;
+  RygelMediaExportDatabaseCursor *cursor;
+  GError *inner_error;
+  guint iter;
+  RygelMediaExportMediaCachePrivate *priv;
+
+  g_return_val_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self), NULL);
+  g_return_val_if_fail (filter != NULL, NULL);
+  g_return_val_if_fail (args != NULL, NULL);
+  g_return_val_if_fail (sort_criteria != NULL, NULL);
+
+  g_value_init (&v, G_TYPE_LONG);
+  g_value_set_long (&v, offset);
+  g_array_append_val (args, v);
+  our_g_value_clear (&v);
+  g_value_init (&v, G_TYPE_LONG);
+  g_value_set_long (&v, max_count);
+  g_array_append_val (args, v);
+  our_g_value_clear (&v);
+  parent = NULL;
+
+  g_debug ("Parameters to bind: %u", args->len);
+  for (iter = 0; iter < args->len; ++iter) {
+    GValue *value = &our_g_value_array_index (args, iter);
+    gchar *to_free;
+    const gchar *contents;
+
+    if (G_VALUE_HOLDS (value, G_TYPE_STRING)) {
+      contents = g_value_get_string (value);
+      to_free = NULL;
+    } else {
+      to_free = g_strdup_value_contents (value);
+      contents = to_free;
+    }
+
+    g_debug ("Arg %d: %s", iter, contents);
+    g_free (to_free);
+  }
 
-static void _vala_GValue_free (GValue* self) {
-	g_value_unset (self);
-	g_free (self);
-}
+  if (container_id) {
+    string_id = RYGEL_MEDIA_EXPORT_SQL_STRING_GET_OBJECTS_BY_FILTER_WITH_ANCESTOR;
+  } 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);
+  priv = self->priv;
+  sql = g_strdup_printf (rygel_media_export_sql_factory_make (priv->sql, string_id), filter, sort_order);
+  g_free (sort_order);
+  inner_error = NULL;
+  cursor = rygel_media_export_database_exec_cursor (priv->db, sql, (GValue *) args->data, (gint) args->len, &inner_error);
+  g_free (sql);
+  if (inner_error != NULL) {
+    g_propagate_error (error, inner_error);
+    return NULL;
+  }
 
+  parent = NULL;
+  children = rygel_media_objects_new ();
+
+  while (rygel_media_export_database_cursor_has_next (cursor)) {
+    sqlite3_stmt* statement = rygel_media_export_database_cursor_next (cursor, &inner_error);
+    const gchar *parent_id;
+
+    if (inner_error) {
+      g_propagate_error (error, inner_error);
+      g_object_unref (cursor);
+      g_object_unref (children);
+      return NULL;
+    }
+
+    parent_id = (const gchar *) sqlite3_column_text (statement, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_PARENT);
+    if (!parent || g_strcmp0 (parent_id, rygel_media_object_get_id (RYGEL_MEDIA_OBJECT (parent)))) {
+      parent = RYGEL_MEDIA_CONTAINER (rygel_media_export_null_container_new ());
+      rygel_media_object_set_id (RYGEL_MEDIA_OBJECT (parent), parent_id);
+    }
+    if (parent) {
+      RygelMediaObject *object = rygel_media_export_media_cache_get_object_from_statement (self, parent, statement);
+
+      gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (children), object);
+      rygel_media_object_set_parent_ref (object, parent);
+      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),
+		 parent_id);
+    }
+  }
 
-glong rygel_media_export_media_cache_get_object_count_by_search_expression (RygelMediaExportMediaCache* self, RygelSearchExpression* expression, const gchar* container_id, GError** error) {
-	glong result = 0L;
-	GArray *args;
-	RygelSearchExpression* _tmp1_;
-	gchar* _tmp3_ = NULL;
-	gchar* filter;
-	RygelSearchExpression* _tmp4_;
-	const gchar* _tmp29_;
-	const gchar* _tmp31_;
-	glong _tmp32_ = 0L;
-	glong _tmp33_;
-	GError * _inner_error_ = NULL;
-	g_return_val_if_fail (self != NULL, 0L);
-	args = our_g_value_array_new ();
-	_tmp1_ = expression;
-	_tmp3_ = rygel_media_export_media_cache_translate_search_expression (self, _tmp1_, args, "WHERE", &_inner_error_);
-	filter = _tmp3_;
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		g_array_unref (args);
-		return 0L;
-	}
-	_tmp4_ = expression;
-	if (_tmp4_ != NULL) {
-		RygelSearchExpression* _tmp5_;
-		gchar* _tmp6_ = NULL;
-		gchar* _tmp7_;
-		const gchar* _tmp8_;
-		_tmp5_ = expression;
-		_tmp6_ = rygel_search_expression_to_string (_tmp5_);
-		_tmp7_ = _tmp6_;
-		g_debug ("rygel-media-export-media-cache.vala:243: Original search: %s", _tmp7_);
-		g_free (_tmp7_);
-		_tmp8_ = filter;
-		g_debug ("rygel-media-export-media-cache.vala:244: Parsed search expression: %s", _tmp8_);
-	}
-	{
-		gint i;
-		i = 0;
-		{
-			gboolean _tmp9_;
-			_tmp9_ = TRUE;
-			while (TRUE) {
-				gboolean _tmp10_;
-				gint _tmp12_;
-				guint _tmp14_;
-				gint _tmp16_;
-				GValue* _tmp17_ = NULL;
-				GValue* _tmp18_;
-				GValue* arg;
-				gchar* _tmp19_ = NULL;
-				GValue* _tmp20_;
-				gboolean _tmp21_ = FALSE;
-				gint _tmp27_;
-				const gchar* _tmp28_;
-				_tmp10_ = _tmp9_;
-				if (!_tmp10_) {
-					gint _tmp11_;
-					_tmp11_ = i;
-					i = _tmp11_ + 1;
-				}
-				_tmp9_ = FALSE;
-				_tmp12_ = i;
-				_tmp14_ = args->len;
-				if (!(((guint) _tmp12_) < _tmp14_)) {
-					break;
-				}
-				_tmp16_ = i;
-				_tmp17_ = &our_g_array_index (args, (guint) _tmp16_);
-				_tmp18_ = __g_value_dup0 (_tmp17_);
-				arg = _tmp18_;
-				_tmp20_ = arg;
-				_tmp21_ = G_VALUE_HOLDS (_tmp20_, G_TYPE_STRING);
-				if (_tmp21_) {
-					GValue* _tmp22_;
-					const gchar* _tmp23_ = NULL;
-					gchar* _tmp24_;
-					_tmp22_ = arg;
-					_tmp23_ = g_value_get_string (_tmp22_);
-					_tmp24_ = g_strdup (_tmp23_);
-					g_free (_tmp19_);
-					_tmp19_ = _tmp24_;
-				} else {
-					GValue* _tmp25_;
-					gchar* _tmp26_ = NULL;
-					_tmp25_ = arg;
-					_tmp26_ = g_strdup_value_contents (_tmp25_);
-					g_free (_tmp19_);
-					_tmp19_ = _tmp26_;
-				}
-				_tmp27_ = i;
-				_tmp28_ = _tmp19_;
-				g_debug ("rygel-media-export-media-cache.vala:249: Arg %d: %s", _tmp27_, _tmp28_);
-				g_free (_tmp19_);
-				__vala_GValue_free0 (arg);
-			}
-		}
-	}
-	_tmp29_ = filter;
-	_tmp31_ = container_id;
-	_tmp32_ = rygel_media_export_media_cache_get_object_count_by_filter (self, _tmp29_, args, _tmp31_, &_inner_error_);
-	_tmp33_ = _tmp32_;
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		g_free (filter);
-		g_array_unref (args);
-		return 0L;
-	}
-	result = _tmp33_;
-	g_free (filter);
-	g_array_unref (args);
-	return result;
+  g_object_unref (cursor);
+  return children;
 }
 
+void
+rygel_media_export_media_cache_debug_statistics (RygelMediaExportMediaCache *self) {
+  GError *inner_error;
+  RygelMediaExportDatabaseCursor *cursor;
 
-glong rygel_media_export_media_cache_get_object_count_by_filter (RygelMediaExportMediaCache* self, const gchar* filter, GArray* args, const gchar* container_id, GError** error) {
-	glong result = 0L;
-	guint _tmp6_;
-	const gchar* pattern = NULL;
-	RygelMediaExportSQLString string_id = 0;
-	const gchar* _tmp7_;
-	RygelMediaExportSQLFactory* _tmp8_;
-	RygelMediaExportSQLString _tmp9_;
-	const gchar* _tmp10_ = NULL;
-	RygelMediaExportDatabase* _tmp11_;
-	const gchar* _tmp12_;
-	gchar* _tmp13_ = NULL;
-	gchar* _tmp14_;
-	GValue* _tmp16_;
-	gint _tmp16__length1;
-	gint _tmp17_ = 0;
-	gint _tmp18_;
-	gint _tmp19_;
-	GError * _inner_error_ = NULL;
-	g_return_val_if_fail (self != NULL, 0L);
-	g_return_val_if_fail (filter != NULL, 0L);
-	g_return_val_if_fail (args != NULL, 0L);
-	if (container_id != NULL) {
-		GValue v = G_VALUE_INIT;
-
-		g_value_init (&v, G_TYPE_STRING);
-		g_value_set_string (&v, container_id);
-		g_array_prepend_val (args, v);
-	}
-	_tmp6_ = args->len;
-	g_debug ("rygel-media-export-media-cache.vala:269: Parameters to bind: %u", _tmp6_);
-	_tmp7_ = container_id;
-	if (_tmp7_ != NULL) {
-		string_id = RYGEL_MEDIA_EXPORT_SQL_STRING_GET_OBJECT_COUNT_BY_FILTER_WITH_ANCESTOR;
-	} else {
-		string_id = RYGEL_MEDIA_EXPORT_SQL_STRING_GET_OBJECT_COUNT_BY_FILTER;
-	}
-	_tmp8_ = self->priv->sql;
-	_tmp9_ = string_id;
-	_tmp10_ = rygel_media_export_sql_factory_make (_tmp8_, _tmp9_);
-	pattern = _tmp10_;
-	_tmp11_ = self->priv->db;
-	_tmp12_ = filter;
-	_tmp13_ = g_strdup_printf (pattern, _tmp12_);
-	_tmp14_ = _tmp13_;
-	_tmp16_ = (GValue *) args->data;
-	_tmp16__length1 = (gint) args->len;
-	_tmp17_ = rygel_media_export_database_query_value (_tmp11_, _tmp14_, _tmp16_, _tmp16__length1, &_inner_error_);
-	_tmp18_ = _tmp17_;
-	g_free (_tmp14_);
-	_tmp19_ = _tmp18_;
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		return 0L;
-	}
-	result = (glong) _tmp19_;
-	return result;
-}
+  g_return_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self));
 
+  g_debug ("Database statistics:");
+  inner_error = NULL;
+  cursor = rygel_media_export_media_cache_exec_cursor (self, RYGEL_MEDIA_EXPORT_SQL_STRING_STATISTICS, NULL, 0, &inner_error);
+  if (inner_error != NULL) {
+    goto out;
+  }
 
-RygelMediaObjects* rygel_media_export_media_cache_get_objects_by_filter (RygelMediaExportMediaCache* self, const gchar* filter, GArray* args, const gchar* container_id, const gchar* sort_criteria, glong offset, glong max_count, GError** error) {
-	RygelMediaObjects* result = NULL;
-	RygelMediaObjects* _tmp0_;
-	RygelMediaObjects* children;
-	glong _tmp1_;
-	GValue v;
-	RygelMediaContainer* parent;
-	guint _tmp10_;
-	const gchar* sql = NULL;
-	const gchar* _tmp31_;
-	const gchar* _tmp36_;
-	gchar* _tmp37_ = NULL;
-	gchar* sort_order;
-	RygelMediaExportDatabase* _tmp38_;
-	const gchar* _tmp39_;
-	const gchar* _tmp40_;
-	const gchar* _tmp41_;
-	gchar* _tmp42_ = NULL;
-	gchar* _tmp43_;
-	GValue* _tmp45_;
-	gint _tmp45__length1;
-	RygelMediaExportDatabaseCursor* _tmp46_ = NULL;
-	RygelMediaExportDatabaseCursor* _tmp47_;
-	RygelMediaExportDatabaseCursor* cursor;
-	GError * _inner_error_ = NULL;
-	g_return_val_if_fail (self != NULL, NULL);
-	g_return_val_if_fail (filter != NULL, NULL);
-	g_return_val_if_fail (args != NULL, NULL);
-	g_return_val_if_fail (sort_criteria != NULL, NULL);
-	_tmp0_ = rygel_media_objects_new ();
-	children = _tmp0_;
-	_tmp1_ = offset;
-	g_value_init (&v, G_TYPE_LONG);
-	g_value_set_long (&v, _tmp1_);
-	g_array_append_val (args, v);
-	our_g_value_clear (&v);
-	g_value_init (&v, G_TYPE_LONG);
-	g_value_set_long (&v, max_count);
-	g_array_append_val (args, v);
-	our_g_value_clear (&v);
-	parent = NULL;
-	_tmp10_ = args->len;
-	g_debug ("rygel-media-export-media-cache.vala:296: Parameters to bind: %u", _tmp10_);
-	{
-		gint i;
-		i = 0;
-		{
-			gboolean _tmp11_;
-			_tmp11_ = TRUE;
-			while (TRUE) {
-				gboolean _tmp12_;
-				gint _tmp14_;
-				guint _tmp16_;
-				gint _tmp18_;
-				GValue* _tmp19_ = NULL;
-				GValue* _tmp20_;
-				GValue* arg;
-				gchar* _tmp21_ = NULL;
-				GValue* _tmp22_;
-				gboolean _tmp23_ = FALSE;
-				gint _tmp29_;
-				const gchar* _tmp30_;
-				_tmp12_ = _tmp11_;
-				if (!_tmp12_) {
-					gint _tmp13_;
-					_tmp13_ = i;
-					i = _tmp13_ + 1;
-				}
-				_tmp11_ = FALSE;
-				_tmp14_ = i;
-				_tmp16_ = args->len;
-				if (!(((guint) _tmp14_) < _tmp16_)) {
-					break;
-				}
-				_tmp18_ = i;
-				_tmp19_ = &our_g_array_index (args, (guint) _tmp18_);
-				_tmp20_ = __g_value_dup0 (_tmp19_);
-				arg = _tmp20_;
-				_tmp22_ = arg;
-				_tmp23_ = G_VALUE_HOLDS (_tmp22_, G_TYPE_STRING);
-				if (_tmp23_) {
-					GValue* _tmp24_;
-					const gchar* _tmp25_ = NULL;
-					gchar* _tmp26_;
-					_tmp24_ = arg;
-					_tmp25_ = g_value_get_string (_tmp24_);
-					_tmp26_ = g_strdup (_tmp25_);
-					g_free (_tmp21_);
-					_tmp21_ = _tmp26_;
-				} else {
-					GValue* _tmp27_;
-					gchar* _tmp28_ = NULL;
-					_tmp27_ = arg;
-					_tmp28_ = g_strdup_value_contents (_tmp27_);
-					g_free (_tmp21_);
-					_tmp21_ = _tmp28_;
-				}
-				_tmp29_ = i;
-				_tmp30_ = _tmp21_;
-				g_debug ("rygel-media-export-media-cache.vala:299: Arg %d: %s", _tmp29_, _tmp30_);
-				g_free (_tmp21_);
-				__vala_GValue_free0 (arg);
-			}
-		}
-	}
-	_tmp31_ = container_id;
-	if (_tmp31_ != NULL) {
-		RygelMediaExportSQLFactory* _tmp32_;
-		const gchar* _tmp33_ = NULL;
-		_tmp32_ = self->priv->sql;
-		_tmp33_ = rygel_media_export_sql_factory_make (_tmp32_, RYGEL_MEDIA_EXPORT_SQL_STRING_GET_OBJECTS_BY_FILTER_WITH_ANCESTOR);
-		sql = _tmp33_;
-	} else {
-		RygelMediaExportSQLFactory* _tmp34_;
-		const gchar* _tmp35_ = NULL;
-		_tmp34_ = self->priv->sql;
-		_tmp35_ = rygel_media_export_sql_factory_make (_tmp34_, RYGEL_MEDIA_EXPORT_SQL_STRING_GET_OBJECTS_BY_FILTER);
-		sql = _tmp35_;
-	}
-	_tmp36_ = sort_criteria;
-	_tmp37_ = rygel_media_export_media_cache_translate_sort_criteria (self, _tmp36_);
-	sort_order = _tmp37_;
-	_tmp38_ = self->priv->db;
-	_tmp39_ = sql;
-	_tmp40_ = filter;
-	_tmp41_ = sort_order;
-	_tmp42_ = g_strdup_printf (_tmp39_, _tmp40_, _tmp41_);
-	_tmp43_ = _tmp42_;
-	_tmp45_ = (GValue *) args->data;
-	_tmp45__length1 = (gint) args->len;
-	_tmp46_ = rygel_media_export_database_exec_cursor (_tmp38_, _tmp43_, _tmp45_, _tmp45__length1, &_inner_error_);
-	_tmp47_ = _tmp46_;
-	g_free (_tmp43_);
-	cursor = _tmp47_;
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		g_free (sort_order);
-		g_object_unref (parent);
-		g_object_unref (children);
-		return NULL;
-	}
-	{
-		while (TRUE) {
-			gboolean _tmp51_ = FALSE;
-			sqlite3_stmt* _tmp53_ = NULL;
-			sqlite3_stmt* statement;
-			sqlite3_stmt* _tmp54_;
-			const gchar* _tmp55_ = NULL;
-			const gchar* parent_id;
-			gboolean _tmp56_ = FALSE;
-			RygelMediaContainer* _tmp57_;
-			gboolean _tmp62_;
-			RygelMediaContainer* _tmp66_;
-			_tmp51_ = rygel_media_export_database_cursor_has_next (cursor);
-			if (!_tmp51_) {
-				break;
-			}
-			_tmp53_ = rygel_media_export_database_cursor_next (cursor, &_inner_error_);
-			statement = _tmp53_;
-			if (_inner_error_ != NULL) {
-				g_propagate_error (error, _inner_error_);
-				g_object_unref (cursor);
-				g_free (sort_order);
-				g_object_unref (parent);
-				g_object_unref (children);
-				return NULL;
-			}
-			_tmp54_ = statement;
-			_tmp55_ = (const gchar *) sqlite3_column_text (_tmp54_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_PARENT);
-			parent_id = _tmp55_;
-			_tmp57_ = parent;
-			if (_tmp57_ == NULL) {
-				_tmp56_ = TRUE;
-			} else {
-				const gchar* _tmp58_;
-				RygelMediaContainer* _tmp59_;
-				const gchar* _tmp60_;
-				const gchar* _tmp61_;
-				_tmp58_ = parent_id;
-				_tmp59_ = parent;
-				_tmp60_ = rygel_media_object_get_id ((RygelMediaObject*) _tmp59_);
-				_tmp61_ = _tmp60_;
-				_tmp56_ = g_strcmp0 (_tmp58_, _tmp61_) != 0;
-			}
-			_tmp62_ = _tmp56_;
-			if (_tmp62_) {
-				RygelMediaExportNullContainer* _tmp63_;
-				RygelMediaContainer* _tmp64_;
-				const gchar* _tmp65_;
-				_tmp63_ = rygel_media_export_null_container_new ();
-				g_object_unref (parent);
-				parent = (RygelMediaContainer*) _tmp63_;
-				_tmp64_ = parent;
-				_tmp65_ = parent_id;
-				rygel_media_object_set_id ((RygelMediaObject*) _tmp64_, _tmp65_);
-			}
-			_tmp66_ = parent;
-			if (_tmp66_ != NULL) {
-				RygelMediaObjects* _tmp67_;
-				RygelMediaContainer* _tmp68_;
-				sqlite3_stmt* _tmp69_;
-				RygelMediaObject* _tmp70_ = NULL;
-				RygelMediaObject* _tmp71_;
-				RygelMediaObjects* _tmp72_;
-				gpointer _tmp73_ = NULL;
-				RygelMediaObject* _tmp74_;
-				RygelMediaContainer* _tmp75_;
-				_tmp67_ = children;
-				_tmp68_ = parent;
-				_tmp69_ = statement;
-				_tmp70_ = rygel_media_export_media_cache_get_object_from_statement (self, _tmp68_, _tmp69_);
-				_tmp71_ = _tmp70_;
-				gee_abstract_collection_add ((GeeAbstractCollection*) _tmp67_, _tmp71_);
-				g_object_unref (_tmp71_);
-				_tmp72_ = children;
-				_tmp73_ = gee_list_last ((GeeList*) _tmp72_);
-				_tmp74_ = (RygelMediaObject*) _tmp73_;
-				_tmp75_ = parent;
-				rygel_media_object_set_parent_ref (_tmp74_, _tmp75_);
-				g_object_unref (_tmp74_);
-			} else {
-				sqlite3_stmt* _tmp76_;
-				const gchar* _tmp77_ = NULL;
-				const gchar* _tmp78_;
-				_tmp76_ = statement;
-				_tmp77_ = (const gchar *) sqlite3_column_text (_tmp76_, (gint) RYGEL_MEDIA_EXPORT_DETAIL_COLUMN_ID);
-				_tmp78_ = parent_id;
-				g_warning ("Inconsistent database: item %s " "has no parent %s", _tmp77_, _tmp78_);
-			}
-		}
-	}
-	result = children;
-	g_object_unref (cursor);
-	g_free (sort_order);
-	g_object_unref (parent);
-	return result;
+  while (rygel_media_export_database_cursor_has_next (cursor)) {
+    sqlite3_stmt *statement = rygel_media_export_database_cursor_next (cursor, &inner_error);
+
+    if (inner_error) {
+      g_object_unref (cursor);
+      goto out;
+    }
+    g_debug ("%s: %d",
+	     (const gchar *) sqlite3_column_text (statement, 0),
+	     sqlite3_column_int (statement, 1));
+  }
+  g_object_unref (cursor);
+ out:
+  if (inner_error) {
+    g_error_free (inner_error);
+  }
 }
 
 
-void rygel_media_export_media_cache_debug_statistics (RygelMediaExportMediaCache* self) {
-	GError * _inner_error_ = NULL;
-	g_return_if_fail (self != NULL);
-	{
-		RygelMediaExportDatabaseCursor* _tmp0_ = NULL;
-		RygelMediaExportDatabaseCursor* cursor;
-		g_debug ("rygel-media-export-media-cache.vala:339: Database statistics:");
-		_tmp0_ = rygel_media_export_media_cache_exec_cursor (self, RYGEL_MEDIA_EXPORT_SQL_STRING_STATISTICS, NULL, 0, &_inner_error_);
-		cursor = _tmp0_;
-		if (_inner_error_ != NULL) {
-			goto __catch7_g_error;
-		}
-		{
-			while (TRUE) {
-				gboolean _tmp4_ = FALSE;
-				sqlite3_stmt* _tmp6_ = NULL;
-				sqlite3_stmt* statement;
-				sqlite3_stmt* _tmp7_;
-				const gchar* _tmp8_ = NULL;
-				sqlite3_stmt* _tmp9_;
-				gint _tmp10_ = 0;
-				_tmp4_ = rygel_media_export_database_cursor_has_next (cursor);
-				if (!_tmp4_) {
-					break;
-				}
-				_tmp6_ = rygel_media_export_database_cursor_next (cursor, &_inner_error_);
-				statement = _tmp6_;
-				if (_inner_error_ != NULL) {
-					g_object_unref (cursor);
-					goto __catch7_g_error;
-				}
-				_tmp7_ = statement;
-				_tmp8_ = (const gchar *) sqlite3_column_text (_tmp7_, 0);
-				_tmp9_ = statement;
-				_tmp10_ = sqlite3_column_int (_tmp9_, 1);
-				g_debug ("rygel-media-export-media-cache.vala:342: %s: %d", _tmp8_, _tmp10_);
-			}
-		}
-		g_object_unref (cursor);
-	}
-	goto __finally7;
-	__catch7_g_error:
-	{
-		GError* _error_ = NULL;
-		_error_ = _inner_error_;
-		_inner_error_ = NULL;
-		g_error_free (_error_);
-	}
-	__finally7:
-	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_);
-		return;
-	}
-}
+GeeArrayList *
+rygel_media_export_media_cache_get_child_ids (RygelMediaExportMediaCache  *self,
+					      const gchar                 *container_id,
+					      GError                     **error) {
+  GeeArrayList *children;
+  GeeAbstractCollection *abstract_children;
+  GValue value = G_VALUE_INIT;
+  RygelMediaExportDatabaseCursor *cursor;
+  GError *inner_error;
 
+  g_return_val_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self), NULL);
+  g_return_val_if_fail (container_id != NULL, NULL);
 
-GeeArrayList* rygel_media_export_media_cache_get_child_ids (RygelMediaExportMediaCache* self, const gchar* container_id, GError** error) {
-	GeeArrayList* result = NULL;
-	GeeArrayList* _tmp0_;
-	GeeArrayList* children;
-	const gchar* _tmp1_;
-	GValue _tmp2_ = {0};
-	GValue* _tmp3_ = NULL;
-	GValue* values;
-	gint values_length1;
-	GValue* _tmp4_;
-	gint _tmp4__length1;
-	RygelMediaExportDatabaseCursor* _tmp5_ = NULL;
-	RygelMediaExportDatabaseCursor* cursor;
-	GError * _inner_error_ = NULL;
-	g_return_val_if_fail (self != NULL, NULL);
-	g_return_val_if_fail (container_id != NULL, NULL);
-	_tmp0_ = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL, NULL, NULL);
-	children = _tmp0_;
-	_tmp1_ = container_id;
-	g_value_init (&_tmp2_, G_TYPE_STRING);
-	g_value_set_string (&_tmp2_, _tmp1_);
-	_tmp3_ = g_new0 (GValue, 1);
-	_tmp3_[0] = _tmp2_;
-	values = _tmp3_;
-	values_length1 = 1;
-	_tmp4_ = values;
-	_tmp4__length1 = values_length1;
-	_tmp5_ = rygel_media_export_media_cache_exec_cursor (self, RYGEL_MEDIA_EXPORT_SQL_STRING_CHILD_IDS, _tmp4_, _tmp4__length1, &_inner_error_);
-	cursor = _tmp5_;
-	if (_inner_error_ != NULL) {
-		if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-			g_propagate_error (error, _inner_error_);
-			values = (_vala_GValue_array_free (values, values_length1), NULL);
-			g_object_unref (children);
-			return NULL;
-		} else {
-			values = (_vala_GValue_array_free (values, values_length1), NULL);
-			g_object_unref (children);
-			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;
-		}
-	}
-	{
-		while (TRUE) {
-			gboolean _tmp9_ = FALSE;
-			sqlite3_stmt* _tmp11_ = NULL;
-			sqlite3_stmt* statement;
-			GeeArrayList* _tmp12_;
-			sqlite3_stmt* _tmp13_;
-			const gchar* _tmp14_ = NULL;
-			_tmp9_ = rygel_media_export_database_cursor_has_next (cursor);
-			if (!_tmp9_) {
-				break;
-			}
-			_tmp11_ = rygel_media_export_database_cursor_next (cursor, &_inner_error_);
-			statement = _tmp11_;
-			if (_inner_error_ != NULL) {
-				if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-					g_propagate_error (error, _inner_error_);
-					g_object_unref (cursor);
-					values = (_vala_GValue_array_free (values, values_length1), NULL);
-					g_object_unref (children);
-					return NULL;
-				} else {
-					g_object_unref (cursor);
-					values = (_vala_GValue_array_free (values, values_length1), NULL);
-					g_object_unref (children);
-					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;
-				}
-			}
-			_tmp12_ = children;
-			_tmp13_ = statement;
-			_tmp14_ = (const gchar *) sqlite3_column_text (_tmp13_, 0);
-			gee_abstract_collection_add ((GeeAbstractCollection*) _tmp12_, _tmp14_);
-		}
-	}
-	result = children;
-	g_object_unref (cursor);
-	values = (_vala_GValue_array_free (values, values_length1), NULL);
-	return result;
-}
+  g_value_init (&value, G_TYPE_STRING);
+  g_value_set_string (&value, container_id);
 
+  inner_error = NULL;
+  cursor = rygel_media_export_media_cache_exec_cursor (self, RYGEL_MEDIA_EXPORT_SQL_STRING_CHILD_IDS, &value, 1, &inner_error);
+  g_value_unset (&value);
 
-GeeList* rygel_media_export_media_cache_get_meta_data_column_by_filter (RygelMediaExportMediaCache* self, const gchar* column, const gchar* filter, GArray* args, glong offset, glong max_count, GError** error) {
-	GeeList* result = NULL;
-	glong _tmp0_;
-	GValue v;
-	GeeArrayList* _tmp8_;
-	GeeArrayList* data;
-	RygelMediaExportSQLFactory* _tmp9_;
-	const gchar* _tmp10_ = NULL;
-	const gchar* sql;
-	RygelMediaExportDatabase* _tmp11_;
-	const gchar* _tmp12_;
-	const gchar* _tmp13_;
-	const gchar* _tmp14_;
-	gchar* _tmp15_ = NULL;
-	gchar* _tmp16_;
-	GValue* _tmp18_;
-	gint _tmp18__length1;
-	RygelMediaExportDatabaseCursor* _tmp19_ = NULL;
-	RygelMediaExportDatabaseCursor* _tmp20_;
-	RygelMediaExportDatabaseCursor* cursor;
-	GError * _inner_error_ = NULL;
-	g_return_val_if_fail (self != NULL, NULL);
-	g_return_val_if_fail (column != NULL, NULL);
-	g_return_val_if_fail (filter != NULL, NULL);
-	g_return_val_if_fail (args != NULL, NULL);
-	_tmp0_ = offset;
-	g_value_init (&v, G_TYPE_LONG);
-	g_value_set_long (&v, _tmp0_);
-	g_array_append_val (args, v);
-	our_g_value_clear (&v);
-	g_value_init (&v, G_TYPE_LONG);
-	g_value_set_long (&v, max_count);
-	g_array_append_val (args, v);
-	our_g_value_clear (&v);
-	_tmp8_ = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL, NULL, NULL);
-	data = _tmp8_;
-	_tmp9_ = self->priv->sql;
-	_tmp10_ = rygel_media_export_sql_factory_make (_tmp9_, RYGEL_MEDIA_EXPORT_SQL_STRING_GET_META_DATA_COLUMN);
-	sql = _tmp10_;
-	_tmp11_ = self->priv->db;
-	_tmp12_ = sql;
-	_tmp13_ = column;
-	_tmp14_ = filter;
-	_tmp15_ = g_strdup_printf (_tmp12_, _tmp13_, _tmp14_);
-	_tmp16_ = _tmp15_;
-	_tmp18_ = (GValue *) args->data;
-	_tmp18__length1 = (gint) args->len;
-	_tmp19_ = rygel_media_export_database_exec_cursor (_tmp11_, _tmp16_, _tmp18_, _tmp18__length1, &_inner_error_);
-	_tmp20_ = _tmp19_;
-	g_free (_tmp16_);
-	cursor = _tmp20_;
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		g_object_unref (data);
-		return NULL;
-	}
-	{
-		while (TRUE) {
-			gboolean _tmp24_ = FALSE;
-			sqlite3_stmt* _tmp26_ = NULL;
-			sqlite3_stmt* statement;
-			GeeArrayList* _tmp27_;
-			sqlite3_stmt* _tmp28_;
-			const gchar* _tmp29_ = NULL;
-			_tmp24_ = rygel_media_export_database_cursor_has_next (cursor);
-			if (!_tmp24_) {
-				break;
-			}
-			_tmp26_ = rygel_media_export_database_cursor_next (cursor, &_inner_error_);
-			statement = _tmp26_;
-			if (_inner_error_ != NULL) {
-				g_propagate_error (error, _inner_error_);
-				g_object_unref (cursor);
-				g_object_unref (data);
-				return NULL;
-			}
-			_tmp27_ = data;
-			_tmp28_ = statement;
-			_tmp29_ = (const gchar *) sqlite3_column_text (_tmp28_, 0);
-			gee_abstract_collection_add ((GeeAbstractCollection*) _tmp27_, _tmp29_);
-		}
-	}
-	result = (GeeList*) data;
-	g_object_unref (cursor);
-	return result;
-}
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    return NULL;
+  }
 
+  children = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL, NULL, NULL);
+  abstract_children = GEE_ABSTRACT_COLLECTION (children);
 
-GeeList* rygel_media_export_media_cache_get_object_attribute_by_search_expression (RygelMediaExportMediaCache* self, const gchar* attribute, RygelSearchExpression* expression, glong offset, guint max_count, GError** error) {
-	GeeList* result = NULL;
-	GArray* args;
-	RygelSearchExpression* _tmp1_;
-	gchar* _tmp3_ = NULL;
-	gchar* filter;
-	const gchar* _tmp4_;
-	const gchar* _tmp5_;
-	gchar* _tmp6_ = NULL;
-	gchar* column;
-	guint _tmp7_;
-	guint _tmp8_ = 0U;
-	guint max_objects;
-	const gchar* _tmp9_;
-	const gchar* _tmp10_;
-	glong _tmp12_;
-	guint _tmp13_;
-	GeeList* _tmp14_ = NULL;
-	GeeList* _tmp15_;
-	GError * _inner_error_ = NULL;
-	g_return_val_if_fail (self != NULL, NULL);
-	g_return_val_if_fail (attribute != NULL, NULL);
-	args = our_g_value_array_new ();
-	_tmp1_ = expression;
-	_tmp3_ = rygel_media_export_media_cache_translate_search_expression (self, _tmp1_, args, "AND", &_inner_error_);
-	filter = _tmp3_;
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		g_array_unref (args);
-		return NULL;
-	}
-	_tmp4_ = filter;
-	g_debug ("rygel-media-export-media-cache.vala:397: Parsed filter: %s", _tmp4_);
-	_tmp5_ = attribute;
-	_tmp6_ = rygel_media_export_media_cache_map_operand_to_column (self, _tmp5_, NULL, &_inner_error_);
-	column = _tmp6_;
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		g_free (filter);
-		g_array_unref (args);
-		return NULL;
-	}
-	_tmp7_ = max_count;
-	_tmp8_ = rygel_media_export_media_cache_modify_limit (self, _tmp7_);
-	max_objects = _tmp8_;
-	_tmp9_ = column;
-	_tmp10_ = filter;
-	_tmp12_ = offset;
-	_tmp13_ = max_objects;
-	_tmp14_ = rygel_media_export_media_cache_get_meta_data_column_by_filter (self, _tmp9_, _tmp10_, args, _tmp12_, (glong) _tmp13_, &_inner_error_);
-	_tmp15_ = _tmp14_;
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		g_free (column);
-		g_free (filter);
-		g_array_unref (args);
-		return NULL;
-	}
-	result = _tmp15_;
-	g_free (column);
-	g_free (filter);
-	g_array_unref (args);
-	return result;
+  while (rygel_media_export_database_cursor_has_next (cursor)) {
+    sqlite3_stmt* statement = rygel_media_export_database_cursor_next (cursor, &inner_error);
+
+    if (inner_error) {
+      g_propagate_error (error, inner_error);
+      g_object_unref (children);
+      g_object_unref (cursor);
+      return NULL;
+    }
+    gee_abstract_collection_add (abstract_children, sqlite3_column_text (statement, 0));
+  }
+  g_object_unref (cursor);
+  return children;
 }
 
+GeeList *
+rygel_media_export_media_cache_get_meta_data_column_by_filter (RygelMediaExportMediaCache  *self,
+							       const gchar                 *column,
+							       const gchar                 *filter,
+							       GArray                      *args,
+							       glong                        offset,
+							       glong                        max_count,
+							       GError                     **error) {
+  GValue v = G_VALUE_INIT;
+  GeeArrayList *data;
+  GeeAbstractCollection *abstract_data;
+  gchar *sql;
+  RygelMediaExportDatabaseCursor *cursor;
+  GError *inner_error;
+  RygelMediaExportMediaCachePrivate *priv;
+
+  g_return_val_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self), NULL);
+  g_return_val_if_fail (column != NULL, NULL);
+  g_return_val_if_fail (filter != NULL, NULL);
+  g_return_val_if_fail (args != NULL, NULL);
+
+  g_value_init (&v, G_TYPE_LONG);
+  g_value_set_long (&v, offset);
+  g_array_append_val (args, v);
+  our_g_value_clear (&v);
+  g_value_init (&v, G_TYPE_LONG);
+  g_value_set_long (&v, max_count);
+  g_array_append_val (args, v);
+  our_g_value_clear (&v);
+
+  priv = self->priv;
+  sql = g_strdup_printf (rygel_media_export_sql_factory_make (priv->sql, RYGEL_MEDIA_EXPORT_SQL_STRING_GET_META_DATA_COLUMN),
+			 column,
+			 filter);
+  inner_error = NULL;
+  cursor = rygel_media_export_database_exec_cursor (priv->db, sql, (GValue *) args->data, (gint) args->len, &inner_error);
+  g_free (sql);
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    return NULL;
+  }
 
-void rygel_media_export_media_cache_flag_object (RygelMediaExportMediaCache* self, GFile* file, const gchar* flag, GError** error) {
-	const gchar* _tmp0_;
-	GValue _tmp1_ = {0};
-	GFile* _tmp2_;
-	gchar* _tmp3_ = NULL;
-	GValue _tmp4_ = {0};
-	GValue* _tmp5_ = NULL;
-	GValue* args;
-	gint args_length1;
-	RygelMediaExportDatabase* _tmp6_;
-	GError * _inner_error_ = NULL;
-	g_return_if_fail (self != NULL);
-	g_return_if_fail (file != NULL);
-	g_return_if_fail (flag != NULL);
-	_tmp0_ = flag;
-	g_value_init (&_tmp1_, G_TYPE_STRING);
-	g_value_set_string (&_tmp1_, _tmp0_);
-	_tmp2_ = file;
-	_tmp3_ = g_file_get_uri (_tmp2_);
-	g_value_init (&_tmp4_, G_TYPE_STRING);
-	g_value_take_string (&_tmp4_, _tmp3_);
-	_tmp5_ = g_new0 (GValue, 2);
-	_tmp5_[0] = _tmp1_;
-	_tmp5_[1] = _tmp4_;
-	args = _tmp5_;
-	args_length1 = 2;
-	_tmp6_ = self->priv->db;
-	rygel_media_export_database_exec (_tmp6_, "UPDATE Object SET flags = ? WHERE uri = ?", args, args_length1, &_inner_error_);
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		args = (_vala_GValue_array_free (args, args_length1), NULL);
-		return;
-	}
-	args = (_vala_GValue_array_free (args, args_length1), NULL);
+  data = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL, NULL, NULL);
+  abstract_data = GEE_ABSTRACT_COLLECTION (data);
+  while (rygel_media_export_database_cursor_has_next (cursor)) {
+    sqlite3_stmt *statement = rygel_media_export_database_cursor_next (cursor, &inner_error);
+
+    if (inner_error != NULL) {
+      g_propagate_error (error, inner_error);
+      g_object_unref (cursor);
+      g_object_unref (data);
+      return NULL;
+    }
+    gee_abstract_collection_add (abstract_data, sqlite3_column_text (statement, 0));
+  }
+  g_object_unref (cursor);
+
+  return GEE_LIST (data);
 }
 
+GeeList *
+rygel_media_export_media_cache_get_object_attribute_by_search_expression (RygelMediaExportMediaCache  *self,
+									  const gchar                 *attribute,
+									  RygelSearchExpression       *expression,
+									  glong                        offset,
+									  guint                        max_count,
+									  GError                     **error) {
+  GeeList *attributes;
+  GArray *args;
+  gchar *filter;
+  gchar *column;
+  guint max_objects;
+  GError *inner_error;
+
+  g_return_val_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self), NULL);
+  g_return_val_if_fail (attribute != NULL, NULL);
+
+  args = our_g_value_array_new ();
+  inner_error = NULL;
+  filter = rygel_media_export_media_cache_translate_search_expression (self, 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);
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    g_free (filter);
+    g_array_unref (args);
+    return NULL;
+  }
+  max_objects = rygel_media_export_media_cache_modify_limit (max_count);
+  attributes = rygel_media_export_media_cache_get_meta_data_column_by_filter (self, column, filter, args, offset, (glong) max_objects, &inner_error);
+  g_free (column);
+  g_free (filter);
+  g_array_unref (args);
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    return NULL;
+  }
+  return attributes;
+}
 
-GeeList* rygel_media_export_media_cache_get_flagged_uris (RygelMediaExportMediaCache* self, const gchar* flag, GError** error) {
-	GeeList* result = NULL;
-	GeeArrayList* _tmp0_;
-	GeeArrayList* uris;
-	static const char query[] = "SELECT uri FROM object WHERE flags = ?";
-	const gchar* _tmp1_;
-	GValue _tmp2_ = {0};
-	GValue* _tmp3_ = NULL;
-	GValue* args;
-	gint args_length1;
-	RygelMediaExportDatabase* _tmp4_;
-	GValue* _tmp5_;
-	gint _tmp5__length1;
-	RygelMediaExportDatabaseCursor* _tmp6_ = NULL;
-	RygelMediaExportDatabaseCursor* cursor;
-	GError * _inner_error_ = NULL;
-	g_return_val_if_fail (self != NULL, NULL);
-	g_return_val_if_fail (flag != NULL, NULL);
-	_tmp0_ = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL, NULL, NULL);
-	uris = _tmp0_;
-	_tmp1_ = flag;
-	g_value_init (&_tmp2_, G_TYPE_STRING);
-	g_value_set_string (&_tmp2_, _tmp1_);
-	_tmp3_ = g_new0 (GValue, 1);
-	_tmp3_[0] = _tmp2_;
-	args = _tmp3_;
-	args_length1 = 1;
-	_tmp4_ = self->priv->db;
-	_tmp5_ = args;
-	_tmp5__length1 = args_length1;
-	_tmp6_ = rygel_media_export_database_exec_cursor (_tmp4_, query, _tmp5_, _tmp5__length1, &_inner_error_);
-	cursor = _tmp6_;
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		args = (_vala_GValue_array_free (args, args_length1), NULL);
-		g_object_unref (uris);
-		return NULL;
-	}
-	{
-		while (TRUE) {
-			gboolean _tmp10_ = FALSE;
-			sqlite3_stmt* _tmp12_ = NULL;
-			sqlite3_stmt* statement;
-			GeeArrayList* _tmp13_;
-			sqlite3_stmt* _tmp14_;
-			const gchar* _tmp15_ = NULL;
-			_tmp10_ = rygel_media_export_database_cursor_has_next (cursor);
-			if (!_tmp10_) {
-				break;
-			}
-			_tmp12_ = rygel_media_export_database_cursor_next (cursor, &_inner_error_);
-			statement = _tmp12_;
-			if (_inner_error_ != NULL) {
-				g_propagate_error (error, _inner_error_);
-				g_object_unref (cursor);
-				args = (_vala_GValue_array_free (args, args_length1), NULL);
-				g_object_unref (uris);
-				return NULL;
-			}
-			_tmp13_ = uris;
-			_tmp14_ = statement;
-			_tmp15_ = (const gchar *) sqlite3_column_text (_tmp14_, 0);
-			gee_abstract_collection_add ((GeeAbstractCollection*) _tmp13_, _tmp15_);
-		}
-	}
-	result = (GeeList*) uris;
-	g_object_unref (cursor);
-	args = (_vala_GValue_array_free (args, args_length1), NULL);
-	return result;
+void
+rygel_media_export_media_cache_flag_object (RygelMediaExportMediaCache  *self,
+					    GFile                       *file,
+					    const gchar                 *flag,
+					    GError                     **error) {
+  GValue values[] = {G_VALUE_INIT, G_VALUE_INIT};
+  guint iter;
+  GError *inner_error;
+  RygelMediaExportMediaCachePrivate *priv;
+
+  g_return_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self));
+  g_return_if_fail (G_IS_FILE (file));
+  g_return_if_fail (flag != NULL);
+
+  g_value_init (&(values[0]), G_TYPE_STRING);
+  g_value_set_string (&(values[0]), flag);
+  g_value_init (&(values[1]), G_TYPE_STRING);
+  g_value_take_string (&(values[1]), g_file_get_uri (file));
+
+  inner_error = NULL;
+  priv = self->priv;
+  rygel_media_export_database_exec (priv->db, "UPDATE Object SET flags = ? WHERE uri = ?", 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);
+  }
 }
 
+GeeList *
+rygel_media_export_media_cache_get_flagged_uris (RygelMediaExportMediaCache  *self,
+						 const gchar                 *flag,
+						 GError                     **error) {
+  GValue value = G_VALUE_INIT;
+  GeeArrayList *uris;
+  GeeAbstractCollection *abstract_uris;
+  RygelMediaExportDatabaseCursor *cursor;
+  GError *inner_error;
+  RygelMediaExportMediaCachePrivate *priv;
+
+  g_return_val_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self), NULL);
+  g_return_val_if_fail (flag != NULL, NULL);
+
+  g_value_init (&value, G_TYPE_STRING);
+  g_value_set_string (&value, flag);
+
+  inner_error = NULL;
+  priv = self->priv;
+  cursor = rygel_media_export_database_exec_cursor (priv->db, "SELECT uri FROM object WHERE flags = ?", &value, 1, &inner_error);
+  g_value_unset (&value);
+  if (inner_error != NULL) {
+    g_propagate_error (error, inner_error);
+    return NULL;
+  }
 
-static void rygel_media_export_media_cache_get_exists_cache (RygelMediaExportMediaCache* self, GError** error) {
-	GeeHashMap* _tmp0_;
-	RygelMediaExportDatabaseCursor* _tmp1_ = NULL;
-	RygelMediaExportDatabaseCursor* cursor;
-	GError * _inner_error_ = NULL;
-	g_return_if_fail (self != NULL);
-	_tmp0_ = gee_hash_map_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, RYGEL_MEDIA_EXPORT_TYPE_EXISTS_CACHE_ENTRY, (GBoxedCopyFunc) rygel_media_export_exists_cache_entry_dup, (GDestroyNotify) rygel_media_export_exists_cache_entry_free, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-	g_object_unref (self->priv->exists_cache);
-	self->priv->exists_cache = _tmp0_;
-	_tmp1_ = rygel_media_export_media_cache_exec_cursor (self, RYGEL_MEDIA_EXPORT_SQL_STRING_EXISTS_CACHE, NULL, 0, &_inner_error_);
-	cursor = _tmp1_;
-	if (_inner_error_ != NULL) {
-		if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-			g_propagate_error (error, _inner_error_);
-			return;
-		} 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;
-		}
-	}
-	{
-		while (TRUE) {
-			gboolean _tmp5_ = FALSE;
-			sqlite3_stmt* _tmp7_ = NULL;
-			sqlite3_stmt* statement;
-			RygelMediaExportExistsCacheEntry entry = {0};
-			sqlite3_stmt* _tmp8_;
-			gint64 _tmp9_ = 0LL;
-			sqlite3_stmt* _tmp10_;
-			gint64 _tmp11_ = 0LL;
-			GeeHashMap* _tmp12_;
-			sqlite3_stmt* _tmp13_;
-			const gchar* _tmp14_ = NULL;
-			RygelMediaExportExistsCacheEntry _tmp15_;
-			_tmp5_ = rygel_media_export_database_cursor_has_next (cursor);
-			if (!_tmp5_) {
-				break;
-			}
-			_tmp7_ = rygel_media_export_database_cursor_next (cursor, &_inner_error_);
-			statement = _tmp7_;
-			if (_inner_error_ != NULL) {
-				if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-					g_propagate_error (error, _inner_error_);
-					g_object_unref (cursor);
-					return;
-				} else {
-					g_object_unref (cursor);
-					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;
-				}
-			}
-			memset (&entry, 0, sizeof (RygelMediaExportExistsCacheEntry));
-			_tmp8_ = statement;
-			_tmp9_ = sqlite3_column_int64 (_tmp8_, 1);
-			entry.mtime = _tmp9_;
-			_tmp10_ = statement;
-			_tmp11_ = sqlite3_column_int64 (_tmp10_, 0);
-			entry.size = _tmp11_;
-			_tmp12_ = self->priv->exists_cache;
-			_tmp13_ = statement;
-			_tmp14_ = (const gchar *) sqlite3_column_text (_tmp13_, 2);
-			_tmp15_ = entry;
-			gee_abstract_map_set ((GeeAbstractMap*) _tmp12_, _tmp14_, &_tmp15_);
-		}
-	}
-	g_object_unref (cursor);
+  uris = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL, NULL, NULL);
+  abstract_uris = GEE_ABSTRACT_COLLECTION (uris);
+  while (rygel_media_export_database_cursor_has_next (cursor)) {
+    sqlite3_stmt *statement = rygel_media_export_database_cursor_next (cursor, &inner_error);
+
+    if (inner_error) {
+      g_propagate_error (error, inner_error);
+      g_object_unref (cursor);
+      g_object_unref (uris);
+      return NULL;
+    }
+    gee_abstract_collection_add (abstract_uris, sqlite3_column_text (statement, 0));
+  }
+  g_object_unref (cursor);
+  return GEE_LIST (uris);
 }
 
+static void
+rygel_media_export_media_cache_get_exists_cache (RygelMediaExportMediaCache  *self,
+						 GError                     **error) {
+  RygelMediaExportDatabaseCursor *cursor;
+  GError *inner_error;
+  RygelMediaExportMediaCachePrivate *priv;
+  GeeAbstractMap *abstract_cache;
+
+  g_return_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self));
+
+  inner_error = NULL;
+  cursor = rygel_media_export_media_cache_exec_cursor (self, RYGEL_MEDIA_EXPORT_SQL_STRING_EXISTS_CACHE, NULL, 0, &inner_error);
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    return;
+  }
+  priv = self->priv;
+  priv->exists_cache = gee_hash_map_new (G_TYPE_STRING,
+					 (GBoxedCopyFunc) g_strdup,
+					 g_free,
+					 RYGEL_MEDIA_EXPORT_TYPE_EXISTS_CACHE_ENTRY,
+					 (GBoxedCopyFunc) rygel_media_export_exists_cache_entry_dup,
+					 (GDestroyNotify) rygel_media_export_exists_cache_entry_free,
+					 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+  abstract_cache = GEE_ABSTRACT_MAP (priv->exists_cache);
+  while (rygel_media_export_database_cursor_has_next (cursor)) {
+    sqlite3_stmt *statement = rygel_media_export_database_cursor_next (cursor, &inner_error);
+    RygelMediaExportExistsCacheEntry entry;
+
+    if (inner_error) {
+      g_propagate_error (error, inner_error);
+      g_object_unref (cursor);
+      return;
+    }
+    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);
+  }
+  g_object_unref (cursor);
+}
 
-static guint rygel_media_export_media_cache_modify_limit (RygelMediaExportMediaCache* self, guint max_count) {
-	guint result = 0U;
-	guint _tmp0_;
-	g_return_val_if_fail (self != NULL, 0U);
-	_tmp0_ = max_count;
-	if (_tmp0_ == ((guint) 0)) {
-		result = (guint) (-1);
-		return result;
-	} else {
-		guint _tmp1_;
-		_tmp1_ = max_count;
-		result = _tmp1_;
-		return result;
-	}
+static guint
+rygel_media_export_media_cache_modify_limit (guint max_count) {
+  if (max_count) {
+    return max_count;
+  } else {
+    return (guint) -1;
+  }
 }
 
+static void
+rygel_media_export_media_cache_open_db (RygelMediaExportMediaCache  *self,
+					const gchar                 *name,
+					GError                     **error) {
+  RygelMediaExportMediaCacheUpgrader *upgrader;
+  gboolean needs_update;
+  gint old_version;
+  gint current_version;
+  GError *inner_error;
+  RygelMediaExportMediaCachePrivate *priv;
+
+  g_return_if_fail (RYGEL_MEDIA_EXPORT_IS_MEDIA_CACHE (self));
+  g_return_if_fail (name != NULL);
+
+  inner_error = NULL;
+  priv = self->priv;
+  priv->db = rygel_media_export_database_new (name, &inner_error);
+  if (inner_error) {
+    g_propagate_error (error, inner_error);
+    return;
+  }
 
-static void rygel_media_export_media_cache_open_db (RygelMediaExportMediaCache* self, const gchar* name, GError** error) {
-	const gchar* _tmp0_;
-	RygelMediaExportDatabase* _tmp1_;
-	RygelMediaExportDatabase* _tmp2_;
-	gint old_version;
-	gint _tmp3_ = 0;
-	gint current_version;
-	GError * _inner_error_ = NULL;
-	g_return_if_fail (self != NULL);
-	g_return_if_fail (name != NULL);
-	_tmp0_ = name;
-	_tmp1_ = rygel_media_export_database_new (_tmp0_, &_inner_error_);
-	_tmp2_ = _tmp1_;
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		return;
-	}
-	if (self->priv->db) {
-	  g_object_unref (self->priv->db);
-	}
-	self->priv->db = _tmp2_;
-	old_version = -1;
-	_tmp3_ = atoi (RYGEL_MEDIA_EXPORT_SQL_FACTORY_SCHEMA_VERSION);
-	current_version = _tmp3_;
-	{
-		RygelMediaExportDatabase* _tmp4_;
-		RygelMediaExportSQLFactory* _tmp5_;
-		RygelMediaExportMediaCacheUpgrader* _tmp6_;
-		RygelMediaExportMediaCacheUpgrader* upgrader;
-		RygelMediaExportMediaCacheUpgrader* _tmp7_;
-		gint _tmp8_ = 0;
-		gboolean _tmp9_ = FALSE;
-		gboolean _tmp10_;
-		RygelMediaExportMediaCacheUpgrader* _tmp19_;
-		_tmp4_ = self->priv->db;
-		_tmp5_ = self->priv->sql;
-		_tmp6_ = rygel_media_export_media_cache_upgrader_new (_tmp4_, _tmp5_);
-		upgrader = _tmp6_;
-		_tmp7_ = upgrader;
-		_tmp9_ = rygel_media_export_media_cache_upgrader_needs_upgrade (_tmp7_, &_tmp8_, &_inner_error_);
-		old_version = _tmp8_;
-		_tmp10_ = _tmp9_;
-		if (_inner_error_ != NULL) {
-			g_object_unref (upgrader);
-			if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-				goto __catch8_rygel_media_export_database_error;
-			}
-			goto __finally8;
-		}
-		if (_tmp10_) {
-			RygelMediaExportMediaCacheUpgrader* _tmp11_;
-			gint _tmp12_;
-			_tmp11_ = upgrader;
-			_tmp12_ = old_version;
-			rygel_media_export_media_cache_upgrader_upgrade (_tmp11_, _tmp12_);
-		} else {
-			gint _tmp13_;
-			gint _tmp14_;
-			_tmp13_ = old_version;
-			_tmp14_ = current_version;
-			if (_tmp13_ == _tmp14_) {
-				RygelMediaExportMediaCacheUpgrader* _tmp15_;
-				_tmp15_ = upgrader;
-				rygel_media_export_media_cache_upgrader_fix_schema (_tmp15_, &_inner_error_);
-				if (_inner_error_ != NULL) {
-					g_object_unref (upgrader);
-					if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-						goto __catch8_rygel_media_export_database_error;
-					}
-					goto __finally8;
-				}
-			} else {
-				gint _tmp16_;
-				gint _tmp17_;
-				GError* _tmp18_;
-				_tmp16_ = old_version;
-				_tmp17_ = current_version;
-				g_warning ("The version \"%d\" of the detected database" " is newer than our supported version \"%d\"", _tmp16_, _tmp17_);
-				g_object_unref (self->priv->db);
-				self->priv->db = NULL;
-				_tmp18_ = g_error_new_literal (RYGEL_MEDIA_EXPORT_MEDIA_CACHE_ERROR, RYGEL_MEDIA_EXPORT_MEDIA_CACHE_ERROR_GENERAL_ERROR, "Database format" " not supported");
-				_inner_error_ = _tmp18_;
-				g_object_unref (upgrader);
-				if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-					goto __catch8_rygel_media_export_database_error;
-				}
-				goto __finally8;
-			}
-		}
-		_tmp19_ = upgrader;
-		rygel_media_export_media_cache_upgrader_ensure_indices (_tmp19_);
-		g_object_unref (upgrader);
-	}
-	goto __finally8;
-	__catch8_rygel_media_export_database_error:
-	{
-		GError* _error_ = NULL;
-		_error_ = _inner_error_;
-		_inner_error_ = NULL;
-		g_debug ("rygel-media-export-media-cache.vala:471: %s", "Could not find schema version;" " checking for empty database...");
-		{
-			RygelMediaExportDatabase* _tmp20_;
-			gint _tmp21_ = 0;
-			gint rows;
-			gint _tmp22_;
-			_tmp20_ = self->priv->db;
-			_tmp21_ = rygel_media_export_database_query_value (_tmp20_, "SELECT count(type) FROM " "sqlite_master WHERE rowid=1", NULL, 0, &_inner_error_);
-			rows = _tmp21_;
-			if (_inner_error_ != NULL) {
-				if (_inner_error_->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
-					goto __catch9_rygel_media_export_database_error;
-				}
-				g_error_free (_error_);
-				g_critical ("file %s: line %d: unexpected 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;
-			}
-			_tmp22_ = rows;
-			if (_tmp22_ == 0) {
-				gboolean _tmp23_ = FALSE;
-				g_debug ("rygel-media-export-media-cache.vala:477: Empty database, creating new " \
-"schema version %s", RYGEL_MEDIA_EXPORT_SQL_FACTORY_SCHEMA_VERSION);
-				_tmp23_ = rygel_media_export_media_cache_create_schema (self);
-				if (!_tmp23_) {
-					g_object_unref (self->priv->db);
-					self->priv->db = NULL;
-					g_error_free (_error_);
-					return;
-				}
-			} else {
-				g_warning ("rygel-media-export-media-cache.vala:485: Incompatible schema... cannot" \
-" proceed");
-				g_object_unref (self->priv->db);
-				self->priv->db = NULL;
-				g_error_free (_error_);
-				return;
-			}
-		}
-		goto __finally9;
-		__catch9_rygel_media_export_database_error:
-		{
-			GError* _error_ = NULL;
-			GError* _tmp24_;
-			const gchar* _tmp25_;
-			GError* _tmp26_;
-			_error_ = _inner_error_;
-			_inner_error_ = NULL;
-			_tmp24_ = _error_;
-			_tmp25_ = _tmp24_->message;
-			g_warning ("rygel-media-export-media-cache.vala:491: Something weird going on: %s", _tmp25_);
-			g_object_unref (self->priv->db);
-			self->priv->db = NULL;
-			_tmp26_ = g_error_new_literal (RYGEL_MEDIA_EXPORT_MEDIA_CACHE_ERROR, RYGEL_MEDIA_EXPORT_MEDIA_CACHE_ERROR_GENERAL_ERROR, "Invalid database");
-			_inner_error_ = _tmp26_;
-			g_error_free (_error_);
-			goto __finally9;
-		}
-		__finally9:
-		if (_inner_error_ != NULL) {
-			g_error_free (_error_);
-			goto __finally8;
-		}
-		g_error_free (_error_);
-	}
-	__finally8:
-	if (_inner_error_ != NULL) {
-		g_propagate_error (error, _inner_error_);
-		return;
-	}
+  old_version = -1;
+  current_version = atoi (RYGEL_MEDIA_EXPORT_SQL_FACTORY_SCHEMA_VERSION);
+
+  upgrader = rygel_media_export_media_cache_upgrader_new (priv->db, priv->sql);
+  needs_update = rygel_media_export_media_cache_upgrader_needs_upgrade (upgrader, &old_version, &inner_error);
+  if (inner_error) {
+    g_object_unref (upgrader);
+    goto out;
+  }
+
+  if (needs_update) {
+    rygel_media_export_media_cache_upgrader_upgrade (upgrader, old_version);
+  } else if (old_version == current_version) {
+    rygel_media_export_media_cache_upgrader_fix_schema (upgrader, &inner_error);
+    if (inner_error) {
+      g_object_unref (upgrader);
+      goto out;
+    }
+  } else {
+    g_warning ("The version \"%d\" of the detected database is newer than our supported version \"%d\"",
+	       old_version,
+	       current_version);
+    g_object_unref (priv->db);
+    priv->db = NULL;
+    g_set_error_literal (error,
+			 RYGEL_MEDIA_EXPORT_MEDIA_CACHE_ERROR,
+			 RYGEL_MEDIA_EXPORT_MEDIA_CACHE_ERROR_GENERAL_ERROR,
+			 "Database format not supported");
+    g_object_unref (upgrader);
+    return;
+  }
+  rygel_media_export_media_cache_upgrader_ensure_indices (upgrader);
+  g_object_unref (upgrader);
+ out:
+  if (inner_error) {
+    gint rows;
+
+    if (inner_error->domain != RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
+      g_propagate_error (error, inner_error);
+      return;
+    }
+    g_debug ("Could not find schema version; checking for empty database...");
+    rows = rygel_media_export_database_query_value (priv->db, "SELECT count(type) FROM sqlite_master WHERE rowid=1", NULL, 0, &inner_error);
+    if (inner_error) {
+      if (inner_error->domain == RYGEL_MEDIA_EXPORT_DATABASE_ERROR) {
+	goto db_error;
+      }
+      g_propagate_error (error, inner_error);
+      return;
+    }
+    if (!rows) {
+      g_debug ("Empty database, creating new schema version %s", RYGEL_MEDIA_EXPORT_SQL_FACTORY_SCHEMA_VERSION);
+      if (!rygel_media_export_media_cache_create_schema (self)) {
+	g_object_unref (priv->db);
+	priv->db = NULL;
+	return;
+      }
+    } else {
+      g_warning ("Incompatible schema... cannot proceed");
+      g_object_unref (priv->db);
+      self->priv->db = NULL;
+      return;
+    }
+  db_error:
+    if (inner_error) {
+      g_warning ("Something weird going on: %s", inner_error->message);
+      g_error_free (inner_error);
+      g_object_unref (priv->db);
+      priv->db = NULL;
+      g_set_error_literal (error,
+			   RYGEL_MEDIA_EXPORT_MEDIA_CACHE_ERROR,
+			   RYGEL_MEDIA_EXPORT_MEDIA_CACHE_ERROR_GENERAL_ERROR,
+			   "Invalid database");
+    }
+  }
 }
 
 
 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);
-		}
-		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);
-		}
-		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) {
-		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);
+  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);
+    }
+    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);
+    }
+    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) {
+    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) {
-	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)) {
-		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;
-	} 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_);
-	} 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) {
-		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;
+  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)) {
+    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;
+  } 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_);
+  } 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) {
+    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.
-     *
-     * If schema creation fails, schema will be rolled back
-     * completely.
-     *
-     * @returns: true on success, false on failure
-     */
+ * Create the current schema.
+ *
+ * If schema creation fails, schema will be rolled back
+ * completely.
+ *
+ * @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;
-	}
-	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_);
-		return FALSE;
-	}
-	result = FALSE;
-	return result;
+  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;
+  }
+  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);
+    return FALSE;
+  }
+  result = FALSE;
+  return result;
 }
 
 
 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 (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;
-		}
-		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;
-		}
-		default:
-		{
-			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);
-		}
-	}
-	result = object;
-	return result;
+  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 (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;
+    }
+  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;
+    }
+  default:
+    {
+      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);
+    }
+  }
+  result = object;
+  return result;
 }
 
 
 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);
-	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_object_unref (visual_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);
+  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_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;
-	gchar* filter;
-	const gchar* _tmp5_;
-	const gchar* _tmp6_;
-	gchar* _tmp7_ = NULL;
-	GError * _inner_error_ = NULL;
-	g_return_val_if_fail (self != NULL, NULL);
-	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) {
-		g_propagate_error (error, _inner_error_);
-		return NULL;
-	}
-	_tmp5_ = prefix;
-	_tmp6_ = filter;
-	_tmp7_ = g_strdup_printf (" %s %s", _tmp5_, _tmp6_);
-	result = _tmp7_;
-	g_free (filter);
-	return result;
+  gchar* result = NULL;
+  RygelSearchExpression* _tmp0_;
+  RygelSearchExpression* _tmp2_;
+  gchar* _tmp4_ = NULL;
+  gchar* filter;
+  const gchar* _tmp5_;
+  const gchar* _tmp6_;
+  gchar* _tmp7_ = NULL;
+  GError * inner_error = NULL;
+  g_return_val_if_fail (self != NULL, NULL);
+  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) {
+    g_propagate_error (error, inner_error);
+    return NULL;
+  }
+  _tmp5_ = prefix;
+  _tmp6_ = filter;
+  _tmp7_ = g_strdup_printf (" %s %s", _tmp5_, _tmp6_);
+  result = _tmp7_;
+  g_free (filter);
+  return result;
 }
 
 
 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) {
-			g_propagate_error (error, _inner_error_);
-			return NULL;
-		}
-		result = _tmp6_;
-		return result;
-	} 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) {
-			g_propagate_error (error, _inner_error_);
-			return NULL;
-		}
-		result = _tmp10_;
-		return result;
-	}
+  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) {
+      g_propagate_error (error, inner_error);
+      return NULL;
+    }
+    result = _tmp6_;
+    return result;
+  } 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) {
+      g_propagate_error (error, inner_error);
+      return NULL;
+    }
+    result = _tmp10_;
+    return result;
+  }
 }
 
 
 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 (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) {
-		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) {
-		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);
-	g_free (right_sql_string);
-	g_free (left_sql_string);
-	return result;
+  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 (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) {
+    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) {
+    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);
+  g_free (right_sql_string);
+  g_free (left_sql_string);
+  return result;
 }
 
 
 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;
-	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_;
-	} else {
-		gchar* _tmp23_;
-		_tmp23_ = g_strdup ("");
-		g_free (_vala_collate);
-		_vala_collate = _tmp23_;
-	}
-	result = column;
-	if (collate) {
-		*collate = _vala_collate;
-	} else {
-		g_free (_vala_collate);
-	}
-	return result;
+  gchar* _vala_collate = NULL;
+  gchar* result = NULL;
+  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_;
+  } else {
+    gchar* _tmp23_;
+    _tmp23_ = g_strdup ("");
+    g_free (_vala_collate);
+    _vala_collate = _tmp23_;
+  }
+  result = column;
+  if (collate) {
+    *collate = _vala_collate;
+  } else {
+    g_free (_vala_collate);
+  }
+  return result;
 }
 
 
 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 (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) {
-		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;
-		}
-		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;
-		}
-		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;
-		}
-	}
-	_tmp40_ = v;
-	if (_tmp40_ != NULL) {
-		g_array_append_val (args, *v);
-	}
-	_tmp44_ = operator;
-	_tmp45_ = rygel_media_export_sql_operator_to_string (_tmp44_);
-	result = _tmp45_;
-	g_object_unref (operator);
-	g_free (column);
-	g_free (collate);
-	__vala_GValue_free0 (v);
-	return result;
+  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 (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) {
+    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;
+    }
+  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;
+    }
+  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;
+    }
+  }
+  _tmp40_ = v;
+  if (_tmp40_ != NULL) {
+    g_array_append_val (args, *v);
+  }
+  _tmp44_ = operator;
+  _tmp45_ = rygel_media_export_sql_operator_to_string (_tmp44_);
+  result = _tmp45_;
+  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;
+  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;
 }
 
 
 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;
-		}
-	}
-	result = _tmp6_;
-	return result;
+  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;
+    }
+  }
+  result = _tmp6_;
+  return result;
 }
 
 
 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;
+  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;
 }
 
 
 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;
+  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;
 }
 
 
 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* 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_;
+      {
 	{
-		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);
-			}
-		}
-	}
-	_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;
+	  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);
+      }
+    }
+  }
+  _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;
 }
 
 
 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;
+  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;
 }
 
 
 static void rygel_media_export_media_cache_init (RygelMediaExportMediaCache * self) {
-	self->priv = RYGEL_MEDIA_EXPORT_MEDIA_CACHE_GET_PRIVATE (self);
+  self->priv = RYGEL_MEDIA_EXPORT_MEDIA_CACHE_GET_PRIVATE (self);
 }
 
 
@@ -3933,30 +3055,30 @@ static void rygel_media_export_media_cache_dispose (GObject *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]);
-			}
-		}
-	}
+  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);
+  _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;
+  int length;
+  length = 0;
+  if (array) {
+    while (((gpointer*) array)[length]) {
+      length++;
+    }
+  }
+  return length;
 }



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