@@ -2,13 +2,31 @@ import Database from 'better-sqlite3'
22import { drizzle as drizzleSqlite } from 'drizzle-orm/better-sqlite3'
33import { sql } from 'drizzle-orm'
44import { drizzle as drizzlePostgres } from 'drizzle-orm/node-postgres'
5+ import { mkdirSync } from 'node:fs'
6+ import { dirname , isAbsolute , resolve } from 'node:path'
57import { Pool } from 'pg'
68import { envVariables } from '../env'
79import { dbInitializationStatements } from './init'
810
11+ const isInMemorySqlitePath = ( sqlitePath : string ) => {
12+ return sqlitePath === ':memory:' || sqlitePath . startsWith ( 'file::memory:' )
13+ }
14+
15+ const ensureSqliteFilePath = ( sqlitePath : string ) => {
16+ if ( isInMemorySqlitePath ( sqlitePath ) || sqlitePath . startsWith ( 'file:' ) ) {
17+ return sqlitePath
18+ }
19+
20+ const resolvedPath = isAbsolute ( sqlitePath )
21+ ? sqlitePath
22+ : resolve ( process . cwd ( ) , sqlitePath )
23+ mkdirSync ( dirname ( resolvedPath ) , { recursive : true } )
24+ return resolvedPath
25+ }
26+
927const sqliteClient =
1028 envVariables . dbDriver === 'sqlite'
11- ? new Database ( envVariables . dbFilePath )
29+ ? new Database ( ensureSqliteFilePath ( envVariables . dbFilePath ) )
1230 : null
1331
1432const postgresClient =
@@ -42,7 +60,7 @@ export const backupDatabase = async (backupFilePath: string) => {
4260 if ( envVariables . dbDriver !== 'sqlite' ) {
4361 throw new Error ( 'Database backup is supported only with sqlite driver' )
4462 }
45- await sqliteClient ! . backup ( backupFilePath )
63+ await sqliteClient ! . backup ( ensureSqliteFilePath ( backupFilePath ) )
4664}
4765
4866export const resetDatabaseForTests = async ( ) => {
0 commit comments