From ba571e89d5a4f78002498f5026112beb8c280d09 Mon Sep 17 00:00:00 2001 From: David ALLIX Date: Tue, 26 Nov 2024 20:38:55 +0100 Subject: [PATCH] Add verbose option to D1 adapter --- src/adapters/d1Adapter.ts | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/adapters/d1Adapter.ts b/src/adapters/d1Adapter.ts index fc23eed..ad06c2b 100644 --- a/src/adapters/d1Adapter.ts +++ b/src/adapters/d1Adapter.ts @@ -3,7 +3,10 @@ import type { SchemQlAdapter } from '@/schemql' import type { D1Database } from '@cloudflare/workers-types' export class D1Adapter implements SchemQlAdapter { - public constructor(private db: D1Database) {} + public constructor( + private db: D1Database, + private options = { verbose: false } + ) {} public queryAll = | undefined = Record | undefined>( sql: string @@ -15,6 +18,10 @@ export class D1Adapter implements SchemQlAdapter { try { const arrParams = params ? paramsOrder.map((key) => params[key]) : [] const { results } = await stmt.bind(...arrParams).all() + if (this.options.verbose) { + this.logSql(anonymousSql, arrParams) + } + return results } catch (e: any) { throw SchemQlAdapterError.createFromD1(e) @@ -31,7 +38,12 @@ export class D1Adapter implements SchemQlAdapter { return async (params?: TParams) => { try { const arrParams = params ? paramsOrder.map((key) => params[key]) : [] - return (await stmt.bind(...arrParams).first()) ?? undefined + const result = (await stmt.bind(...arrParams).first()) ?? undefined + if (this.options.verbose) { + this.logSql(anonymousSql, arrParams) + } + + return result } catch (e: any) { throw SchemQlAdapterError.createFromD1(e) } @@ -73,6 +85,16 @@ export class D1Adapter implements SchemQlAdapter { return { sql: anonymousSql, paramsOrder } } + + private logSql = (sql: string, arrParams: string[]) => { + const stringParams = arrParams.map((param) => + typeof param === 'string' ? `'${param}'` : param === null ? 'NULL' : param + ) + + let paramIndex = 0 + const interpolatedSql = sql.replace(/\?/g, () => stringParams[paramIndex++] ?? '?') + console.log(`\n${interpolatedSql}\n`) + } } export class SchemQlAdapterError extends BaseAdapterError {