discord-bot/db/db.ts

41 lines
No EOL
1.4 KiB
TypeScript

import { sql as pgsql } from "bun";
import { Database as SQLiteDB } from "bun:sqlite";
const dbType = process.env.DB_TYPE;
const sqlite = () => {
const db = new SQLiteDB(process.env.DB_URL || ":memory:");
function toSql(strings: TemplateStringsArray, values: any[]) {
let sql = strings[0] || "";
for (let i = 0; i < values.length; i++) {
sql += "?" + (strings[i + 1] || "");
}
return sql;
}
return {
all: async <T extends any[]>(strings: TemplateStringsArray, ...params: any[]) => {
const sql = toSql(strings, params);
return db.query(sql).all(...params) as T;
},
get: async <T>(strings: TemplateStringsArray, ...params: any[]) => {
const sql = toSql(strings, params);
return db.query(sql).get(...params) as T;
},
run: async <T>(strings: TemplateStringsArray, ...params: any[]) => {
const sql = toSql(strings, params);
return db.query(sql).run(...params) as T;
},
};
};
const postgres = () => {
return {
all: async <T>(strings: TemplateStringsArray, ...values: any[]) => await pgsql(strings, ...values) as T,
get: async <T>(strings: TemplateStringsArray, ...values: any[]) => (await pgsql(strings, ...values))[0] as T,
run: async <T>(strings: TemplateStringsArray, ...values: any[]) => await pgsql(strings, ...values) as T,
};
};
export const db = dbType === "sqlite" ? sqlite() : postgres();