44 lines
No EOL
1.1 KiB
TypeScript
44 lines
No EOL
1.1 KiB
TypeScript
import { Kysely } from "kysely";
|
|
import { getKysely } from "./db/kysely.ts";
|
|
|
|
export async function connectDB() {
|
|
const kysely = getKysely();
|
|
|
|
let tries = 0;
|
|
for (;;) {
|
|
try {
|
|
console.log("try to connect db");
|
|
await kysely.selectNoFrom(eb=> eb.val(1).as("dummy")).execute();
|
|
console.log("connect success");
|
|
} catch (err) {
|
|
if (tries < 3) {
|
|
tries++;
|
|
console.error(`connection fail ${err} retry...`);
|
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
continue;
|
|
}
|
|
throw err;
|
|
}
|
|
break;
|
|
}
|
|
return kysely;
|
|
}
|
|
|
|
async function checkTableExists(kysely: Kysely<any>, table: string) {
|
|
const result = await kysely.selectFrom("sqlite_master").where("type", "=", "table").where("name", "=", table).executeTakeFirst();
|
|
return result !== undefined;
|
|
}
|
|
|
|
export async function migrateDB() {
|
|
const kysely = getKysely();
|
|
let version_number = 0;
|
|
// is schema_migration exists?
|
|
const hasTable = await checkTableExists(kysely, "schema_migration");
|
|
if (!hasTable) {
|
|
// migrate from 0
|
|
// create schema_migration
|
|
}
|
|
|
|
const version = await kysely.selectFrom("schema_migration").executeTakeFirst();
|
|
|
|
} |