27 lines
871 B
TypeScript
27 lines
871 B
TypeScript
/**
|
|
* Provides a raw better-sqlite3 Database instance for use in services that
|
|
* need direct SQL access (not via Drizzle ORM).
|
|
*/
|
|
import Database from 'better-sqlite3';
|
|
import { env } from '$env/dynamic/private';
|
|
import { loadSqliteVec } from './sqlite-vec';
|
|
|
|
let _client: Database.Database | null = null;
|
|
|
|
export function getClient(): Database.Database {
|
|
if (!_client) {
|
|
if (!env.DATABASE_URL) throw new Error('DATABASE_URL is not set');
|
|
_client = new Database(env.DATABASE_URL);
|
|
_client.pragma('journal_mode = WAL');
|
|
_client.pragma('foreign_keys = ON');
|
|
_client.pragma('busy_timeout = 5000');
|
|
_client.pragma('synchronous = NORMAL');
|
|
_client.pragma('cache_size = -65536');
|
|
_client.pragma('temp_store = MEMORY');
|
|
_client.pragma('mmap_size = 268435456');
|
|
_client.pragma('wal_autocheckpoint = 1000');
|
|
loadSqliteVec(_client);
|
|
}
|
|
return _client;
|
|
}
|