import { config } from "../config"; import { Sqlite } from "./Sqlite"; import { Mysql } from "./Mysql"; import { Postgres } from "./Postgres"; import { IDatabase } from "./IDatabase"; let db: IDatabase; let privateDB: IDatabase; if (config.mysql) { db = new Mysql(config.mysql); privateDB = new Mysql(config.privateMysql); } else if (config.postgres) { db = new Postgres({ dbSchemaFileName: config.dbSchema, dbSchemaFolder: config.schemaFolder, fileNamePrefix: "sponsorTimes", readOnly: config.readOnly, createDbIfNotExists: config.createDatabaseIfNotExist, postgres: { user: config.postgres?.user, host: config.postgres?.host, database: "sponsorTimes", password: config.postgres?.password, port: config.postgres?.port, } }); privateDB = new Postgres({ dbSchemaFileName: config.privateDBSchema, dbSchemaFolder: config.schemaFolder, fileNamePrefix: "private", readOnly: config.readOnly, createDbIfNotExists: config.createDatabaseIfNotExist, postgres: { user: config.postgres?.user, host: config.postgres?.host, database: "privateDB", password: config.postgres?.password, port: config.postgres?.port, } }); } else { db = new Sqlite({ dbPath: config.db, dbSchemaFileName: config.dbSchema, dbSchemaFolder: config.schemaFolder, fileNamePrefix: "sponsorTimes", readOnly: config.readOnly, createDbIfNotExists: config.createDatabaseIfNotExist, enableWalCheckpointNumber: !config.readOnly && config.mode === "production" }); privateDB = new Sqlite({ dbPath: config.privateDB, dbSchemaFileName: config.privateDBSchema, dbSchemaFolder: config.schemaFolder, fileNamePrefix: "private", readOnly: config.readOnly, createDbIfNotExists: config.createDatabaseIfNotExist, enableWalCheckpointNumber: false }); } async function initDb(): Promise { await db.init(); await privateDB.init(); if (db instanceof Sqlite) { // Attach private db to main db (db as Sqlite).attachDatabase(config.privateDB, "privateDB"); } } export { db, privateDB, initDb, };