2023-02-22 16:09:43 +00:00
|
|
|
import type { Env } from 'wildebeest/backend/src/types/env'
|
|
|
|
import d1 from './d1'
|
2023-03-01 09:30:35 +00:00
|
|
|
import neon from './neon'
|
2023-02-22 16:09:43 +00:00
|
|
|
|
|
|
|
export interface Result<T = unknown> {
|
|
|
|
results?: T[]
|
|
|
|
success: boolean
|
|
|
|
error?: string
|
|
|
|
meta: any
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface Database {
|
|
|
|
prepare(query: string): PreparedStatement
|
|
|
|
dump(): Promise<ArrayBuffer>
|
|
|
|
batch<T = unknown>(statements: PreparedStatement[]): Promise<Result<T>[]>
|
|
|
|
exec<T = unknown>(query: string): Promise<Result<T>>
|
2023-02-28 16:51:38 +00:00
|
|
|
qb: QueryBuilder
|
2023-02-22 16:09:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface PreparedStatement {
|
|
|
|
bind(...values: any[]): PreparedStatement
|
|
|
|
first<T = unknown>(colName?: string): Promise<T>
|
|
|
|
run<T = unknown>(): Promise<Result<T>>
|
|
|
|
all<T = unknown>(): Promise<Result<T>>
|
|
|
|
raw<T = unknown>(): Promise<T[]>
|
|
|
|
}
|
|
|
|
|
2023-02-28 16:51:38 +00:00
|
|
|
export interface QueryBuilder {
|
|
|
|
jsonExtract(obj: string, prop: string): string
|
|
|
|
jsonExtractIsNull(obj: string, prop: string): string
|
|
|
|
set(array: string): string
|
|
|
|
epoch(): string
|
2023-03-01 09:20:59 +00:00
|
|
|
insertOrIgnore(q: string): string
|
2023-02-28 16:51:38 +00:00
|
|
|
}
|
|
|
|
|
2023-03-01 09:30:35 +00:00
|
|
|
export async function getDatabase(env: Pick<Env, 'DATABASE' | 'NEON_DATABASE_URL'>): Promise<Database> {
|
|
|
|
if (env.NEON_DATABASE_URL !== undefined) {
|
|
|
|
return neon(env)
|
|
|
|
}
|
|
|
|
|
2023-02-22 16:09:43 +00:00
|
|
|
return d1(env)
|
|
|
|
}
|