[rygel] core: use index on Object.parent
- From: Zeeshan Ali Khattak <zeeshanak src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [rygel] core: use index on Object.parent
- Date: Sat, 24 Oct 2009 14:08:28 +0000 (UTC)
commit 93258df36c8c9f82a07c5f05e052da63a619bc3b
Author: Jens Georg <mail jensge org>
Date: Wed Sep 30 17:53:37 2009 +0200
core: use index on Object.parent
src/rygel/rygel-database.vala | 8 ++++----
src/rygel/rygel-media-db.vala | 31 ++++++++++++++++++++++++++-----
2 files changed, 30 insertions(+), 9 deletions(-)
---
diff --git a/src/rygel/rygel-database.vala b/src/rygel/rygel-database.vala
index 84e6407..01d675e 100644
--- a/src/rygel/rygel-database.vala
+++ b/src/rygel/rygel-database.vala
@@ -142,10 +142,10 @@ internal class Rygel.Database : Object {
return this.db.changes ();
}
- /**
- * Create a GLib.Value containing a null-pointer
- * This is used to bind a parameter in a statement with bind_null
- */
+ public void analyze () {
+ this.db.exec ("ANALYZE");
+ }
+
public GLib.Value get_null () {
GLib.Value v = GLib.Value (typeof (void *));
v.set_pointer (null);
diff --git a/src/rygel/rygel-media-db.vala b/src/rygel/rygel-media-db.vala
index 63253a8..69f0300 100644
--- a/src/rygel/rygel-media-db.vala
+++ b/src/rygel/rygel-media-db.vala
@@ -43,13 +43,12 @@ public enum Rygel.MediaDBObjectType {
public class Rygel.MediaDB : Object {
private Database db;
private MediaDBObjectFactory factory;
- private const string schema_version = "4";
+ private const string schema_version = "5";
private const string SCHEMA_STRING =
"CREATE TABLE Schema_Info (version TEXT NOT NULL); " +
"CREATE TABLE Object_Type (id INTEGER PRIMARY KEY, " +
"desc TEXT NOT NULL);" +
- "CREATE TABLE Meta_Data (id INTEGER PRIMARY KEY AUTOINCREMENT, " +
- "size INTEGER NOT NULL, " +
+ "CREATE TABLE Meta_Data (size INTEGER NOT NULL, " +
"mime_type TEXT NOT NULL, " +
"duration INTEGER, " +
"width INTEGER, " +
@@ -103,6 +102,10 @@ public class Rygel.MediaDB : Object {
"DELETE FROM Uri WHERE Uri.object_fk = OLD.upnp_id;" +
"END;";
+ private const string CREATE_INDICES_STRING =
+ "CREATE INDEX idx_parent on Object(parent);" +
+ "CREATE INDEX idx_uri on Uri(object_fk)";
+
private const string INSERT_META_DATA_STRING =
"INSERT INTO Meta_Data " +
@@ -207,15 +210,28 @@ public class Rygel.MediaDB : Object {
private void update_v3_v4 () {
try {
- GLib.Value[] values = { schema_version };
db.begin ();
db.exec (UPDATE_V3_V4_STRING_1);
db.exec (UPDATE_V3_V4_STRING_2);
db.exec (UPDATE_V3_V4_STRING_3);
db.exec (UPDATE_V3_V4_STRING_4);
db.exec (CREATE_TRIGGER_STRING);
- db.exec ("UPDATE Schema_Info SET version = ?", values);
+ db.exec ("UPDATE Schema_Info SET version = '4'");
+ db.commit ();
+ } catch (DatabaseError err) {
+ db.rollback ();
+ warning ("Database upgrade failed: %s", err.message);
+ db = null;
+ }
+ }
+
+ private void update_v4_v5 () {
+ try {
+ db.begin ();
+ db.exec (CREATE_INDICES_STRING);
+ db.exec ("UPDATE Schema_Info SET version = '5'");
db.commit ();
+ db.analyze ();
} catch (DatabaseError err) {
db.rollback ();
warning ("Database upgrade failed: %s", err.message);
@@ -248,6 +264,9 @@ public class Rygel.MediaDB : Object {
case 3:
update_v3_v4 ();
break;
+ case 4:
+ update_v4_v5 ();
+ break;
default:
warning ("Cannot upgrade");
db = null;
@@ -496,7 +515,9 @@ public class Rygel.MediaDB : Object {
db.begin ();
db.exec (SCHEMA_STRING);
db.exec (CREATE_TRIGGER_STRING);
+ db.exec (CREATE_INDICES_STRING);
db.commit ();
+ db.analyze ();
return true;
} catch (Error err) {
warning ("Failed to create schema: %s", err.message);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]