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