ionian/packages/server/src/database.ts

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();
}