From 9728e832b18e8bbfcc0e011b5b1da9afe6021bf3 Mon Sep 17 00:00:00 2001 From: Marvin W Date: Sun, 23 Apr 2017 10:23:11 +0200 Subject: qlite/libdino: optimize db access --- qlite/src/database.vala | 5 ++++- qlite/src/table.vala | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) (limited to 'qlite') diff --git a/qlite/src/database.vala b/qlite/src/database.vala index 0427df16..cc46ee21 100644 --- a/qlite/src/database.vala +++ b/qlite/src/database.vala @@ -77,6 +77,9 @@ public class Database { meta_table.update().with(meta_name, "=", "version").set(meta_int_val, expected_version).perform(); } } + foreach (Table t in tables) { + t.post(); + } } internal int errcode() { @@ -136,7 +139,7 @@ public class Database { return statement; } - internal void exec(string sql) throws DatabaseError { + public void exec(string sql) throws DatabaseError { ensure_init(); if (db.exec(sql) != OK) { throw new DatabaseError.EXEC_ERROR(@"SQLite error: $(db.errcode()) - $(db.errmsg())"); diff --git a/qlite/src/table.vala b/qlite/src/table.vala index b4f2fee7..bd3fcc36 100644 --- a/qlite/src/table.vala +++ b/qlite/src/table.vala @@ -7,6 +7,7 @@ public class Table { public string name { get; private set; } protected Column[]? columns; private string constraints = ""; + private string[] post_statements = {}; public Table(Database db, string name) { this.db = db; @@ -32,6 +33,22 @@ public class Table { } } + public void add_post_statement(string stmt) { + post_statements += stmt; + } + + public void index(string index_name, Column[] columns, bool unique = false) { + string stmt = @"CREATE $(unique ? "UNIQUE" : "") INDEX IF NOT EXISTS $index_name ON $name ("; + bool first = true; + foreach (Column c in columns) { + if (!first) stmt += ", "; + stmt += c.name; + first = false; + } + stmt += ")"; + add_post_statement(stmt); + } + private void ensure_init() throws DatabaseError { if (columns == null) throw new DatabaseError.NOT_INITIALIZED(@"Table $name was not initialized, call init()"); } @@ -114,6 +131,12 @@ public class Table { db.exec(@"DROP TABLE _$(name)_$old_version"); } } + + internal void post() throws DatabaseError { + foreach (string stmt in post_statements) { + db.exec(stmt); + } + } } } \ No newline at end of file -- cgit v1.2.3-70-g09d2