/* oxlint-disable */ import type * as Effect from "effect/Effect" import { applyEffectWrapper, type QueryEffectHKTBase } from "drizzle-orm/effect-core/query-effect" import { entityKind } from "drizzle-orm/entity" import { SQL, sql, type SQLWrapper } from "drizzle-orm/sql/sql" import type { SQLiteTable } from "drizzle-orm/sqlite-core/table" import type { SQLiteView } from "drizzle-orm/sqlite-core/view" import type { SQLiteEffectSession } from "./session" function buildSQLiteEmbeddedCount(source: SQLiteTable | SQLiteView | SQL | SQLWrapper, filters?: SQL) { return sql`(select count(*) from ${source}${sql.raw(" where ").if(filters)}${filters})` } function buildSQLiteCount(source: SQLiteTable | SQLiteView | SQL | SQLWrapper, filters?: SQL) { return sql`select count(*) from ${source}${sql.raw(" where ").if(filters)}${filters}` } export interface SQLiteEffectCountBuilder extends SQL, SQLWrapper, Effect.Effect {} export class SQLiteEffectCountBuilder extends SQL { static override readonly [entityKind]: string = "SQLiteEffectCountBuilder" private sql: SQL private session: SQLiteEffectSession constructor(params: { source: SQLiteTable | SQLiteView | SQL | SQLWrapper filters?: SQL session: SQLiteEffectSession }) { super(buildSQLiteEmbeddedCount(params.source, params.filters).queryChunks) this.session = params.session this.sql = buildSQLiteCount(params.source, params.filters) } execute(placeholderValues?: Record) { return this.session .prepareQuery<{ type: "async" execute: number run: unknown all: unknown get: unknown values: unknown }>(this.session.dialect.sqlToQuery(this.sql), undefined, "all", (rows) => { const v = rows[0]?.[0] if (typeof v === "number") return v return v ? Number(v) : 0 }) .execute(placeholderValues) } } applyEffectWrapper(SQLiteEffectCountBuilder)