DB: add SQLite support
This commit is contained in:
@@ -1,15 +1,18 @@
|
|||||||
module db.db;
|
module db.db;
|
||||||
|
|
||||||
|
import std.json;
|
||||||
|
|
||||||
import slf4d;
|
import slf4d;
|
||||||
|
|
||||||
import ddbc.core;
|
import ddbc.core;
|
||||||
import hibernated.core;
|
import hibernated.core;
|
||||||
|
|
||||||
import db.types;
|
import db.types;
|
||||||
|
|
||||||
enum DBConnector {
|
enum DBConnector {
|
||||||
DB_MYSQL,
|
Mysql,
|
||||||
DB_PGSQL,
|
Postgres,
|
||||||
DB_SQLITE,
|
Sqlite,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct DBSettings {
|
struct DBSettings {
|
||||||
@@ -19,6 +22,39 @@ struct DBSettings {
|
|||||||
string username;
|
string username;
|
||||||
string password;
|
string password;
|
||||||
string dbname;
|
string dbname;
|
||||||
|
|
||||||
|
static DBSettings fromJson(JSONValue cfg) {
|
||||||
|
DBSettings settings;
|
||||||
|
|
||||||
|
with (settings) {
|
||||||
|
dbname = cfg["dbName"].str;
|
||||||
|
|
||||||
|
switch (cfg["connector"].str) {
|
||||||
|
case "postgresql":
|
||||||
|
connector = DBConnector.Postgres;
|
||||||
|
break;
|
||||||
|
case "sqlite":
|
||||||
|
connector = DBConnector.Sqlite;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new Exception("Database connector `" ~ cfg["connector"].str ~ "` not supported");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("host" in cfg)
|
||||||
|
host = cfg["host"].str;
|
||||||
|
|
||||||
|
if ("port" in cfg)
|
||||||
|
port = cast(ushort) cfg["port"].integer;
|
||||||
|
|
||||||
|
if ("username" in cfg)
|
||||||
|
username = cfg["username"].str;
|
||||||
|
|
||||||
|
if ("password" in cfg)
|
||||||
|
username = cfg["password"].str;
|
||||||
|
}
|
||||||
|
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class DB {
|
class DB {
|
||||||
@@ -40,7 +76,7 @@ class DB {
|
|||||||
Dialect dialect;
|
Dialect dialect;
|
||||||
|
|
||||||
switch (this.m_settings.connector) {
|
switch (this.m_settings.connector) {
|
||||||
case DBConnector.DB_PGSQL:
|
case DBConnector.Postgres:
|
||||||
debugF!"Using PGSQL driver";
|
debugF!"Using PGSQL driver";
|
||||||
|
|
||||||
import ddbc.drivers.pgsqlddbc;
|
import ddbc.drivers.pgsqlddbc;
|
||||||
@@ -55,6 +91,22 @@ class DB {
|
|||||||
dialect = new PGSQLDialect();
|
dialect = new PGSQLDialect();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case DBConnector.Sqlite:
|
||||||
|
debugF!"Using SQLite driver";
|
||||||
|
|
||||||
|
import ddbc.drivers.sqliteddbc;
|
||||||
|
|
||||||
|
driver = new SQLITEDriver();
|
||||||
|
url = this.m_settings.dbname;
|
||||||
|
|
||||||
|
static import std.file;
|
||||||
|
|
||||||
|
if (std.file.exists(url))
|
||||||
|
std.file.remove(url);
|
||||||
|
|
||||||
|
dialect = new SQLiteDialect();
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new Exception("Database connector not supported (yet)");
|
throw new Exception("Database connector not supported (yet)");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user