prisma-sql 1.44.0 → 1.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/builder/shared/constants.ts","../src/utils/normalize-value.ts","../src/sql-builder-dialect.ts","../src/builder/shared/validators/type-guards.ts","../src/builder/shared/errors.ts","../src/builder/shared/model-field-cache.ts","../src/builder/shared/validators/sql-validators.ts","../src/builder/shared/sql-utils.ts","../src/builder/joins.ts","../src/builder/shared/int-like.ts","../src/builder/shared/dynamic-params.ts","../src/builder/shared/order-by-utils.ts","../src/builder/pagination.ts","../src/builder/where/operators-scalar.ts","../src/builder/where/operators-array.ts","../src/builder/where/operators-json.ts","../src/builder/where/relations.ts","../src/builder/shared/validators/field-validators.ts","../src/builder/where/builder.ts","../src/builder/shared/alias-generator.ts","../src/builder/shared/param-store.ts","../src/builder/shared/state.ts","../src/builder/where.ts","../src/builder/select/fields.ts","../src/builder/select/includes.ts","../src/builder/select/assembly.ts","../src/builder/select.ts","../src/builder/aggregates.ts","../src/sql-generator.ts","../src/result-transformers.ts","../src/utils/s3-fifo.ts","../src/query-cache.ts","../src/index.ts"],"names":["i","s","isDynamicParameter","extractDynamicName","e","c","v","placeholder","COMPARISON_OPS","base","clause","selectExpr","sql","safeAlias","parts","baseSelect","normalizeOrderByInput","normalizeFinalParams","normalizeLogicalValue","assertScalarField","buildLogicalClause","convertDMMFToModels","node","result","generateSQL"],"mappings":"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","file":"index.cjs","sourcesContent":["export const SQL_SEPARATORS = Object.freeze({\n FIELD_LIST: ', ',\n CONDITION_AND: ' AND ',\n CONDITION_OR: ' OR ',\n ORDER_BY: ', ',\n} as const)\n\nexport const SQL_RESERVED_WORDS = new Set([\n 'select',\n 'from',\n 'where',\n 'and',\n 'or',\n 'not',\n 'in',\n 'like',\n 'between',\n 'order',\n 'by',\n 'group',\n 'having',\n 'limit',\n 'offset',\n 'join',\n 'inner',\n 'left',\n 'right',\n 'outer',\n 'on',\n 'as',\n 'table',\n 'column',\n 'index',\n 'user',\n 'users',\n 'values',\n 'update',\n 'insert',\n 'delete',\n 'create',\n 'drop',\n 'alter',\n 'truncate',\n 'grant',\n 'revoke',\n 'exec',\n 'execute',\n 'union',\n 'intersect',\n 'except',\n 'case',\n 'when',\n 'then',\n 'else',\n 'end',\n 'null',\n 'true',\n 'false',\n 'is',\n 'exists',\n 'all',\n 'any',\n 'some',\n])\n\nexport const SQL_KEYWORDS = SQL_RESERVED_WORDS\n\nexport const DEFAULT_WHERE_CLAUSE = '1=1' as const\n\nexport const SPECIAL_FIELDS = Object.freeze({\n ID: 'id',\n} as const)\n\nexport const SQL_TEMPLATES = Object.freeze({\n PUBLIC_SCHEMA: 'public',\n WHERE: 'WHERE',\n SELECT: 'SELECT',\n FROM: 'FROM',\n ORDER_BY: 'ORDER BY',\n GROUP_BY: 'GROUP BY',\n HAVING: 'HAVING',\n LIMIT: 'LIMIT',\n OFFSET: 'OFFSET',\n COUNT_ALL: 'COUNT(*)',\n AS: 'AS',\n DISTINCT_ON: 'DISTINCT ON',\n IS_NULL: 'IS NULL',\n IS_NOT_NULL: 'IS NOT NULL',\n LIKE: 'LIKE',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n} as const)\n\nexport const SCHEMA_PREFIXES = Object.freeze({\n INTERNAL: '@',\n COMMENT: '//',\n} as const)\n\nexport const Ops = Object.freeze({\n EQUALS: 'equals',\n NOT: 'not',\n GT: 'gt',\n GTE: 'gte',\n LT: 'lt',\n LTE: 'lte',\n IN: 'in',\n NOT_IN: 'notIn',\n CONTAINS: 'contains',\n STARTS_WITH: 'startsWith',\n ENDS_WITH: 'endsWith',\n HAS: 'has',\n HAS_SOME: 'hasSome',\n HAS_EVERY: 'hasEvery',\n IS_EMPTY: 'isEmpty',\n PATH: 'path',\n STRING_CONTAINS: 'string_contains',\n STRING_STARTS_WITH: 'string_starts_with',\n STRING_ENDS_WITH: 'string_ends_with',\n} as const)\n\nexport const LogicalOps = Object.freeze({\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n} as const)\n\nexport const RelationFilters = Object.freeze({\n SOME: 'some',\n EVERY: 'every',\n NONE: 'none',\n} as const)\n\nexport const Modes = Object.freeze({\n INSENSITIVE: 'insensitive',\n DEFAULT: 'default',\n} as const)\n\nexport const Wildcards: Readonly<Record<string, (v: string) => string>> =\n Object.freeze({\n [Ops.CONTAINS]: (v: string) => `%${v}%`,\n [Ops.STARTS_WITH]: (v: string) => `${v}%`,\n [Ops.ENDS_WITH]: (v: string) => `%${v}`,\n })\n\nexport const REGEX_CACHE = {\n PARAM_PLACEHOLDER: /\\$(\\d+)/g,\n VALID_IDENTIFIER: /^[a-z_][a-z0-9_]*$/,\n} as const\n\nexport const LIMITS = Object.freeze({\n MAX_QUERY_DEPTH: 50,\n MAX_ARRAY_SIZE: 10000,\n MAX_STRING_LENGTH: 10000,\n} as const)\n","export function normalizeValue(value: unknown): unknown {\n if (value instanceof Date) {\n return value.toISOString()\n }\n\n if (Array.isArray(value)) {\n return value.map(normalizeValue)\n }\n\n return value\n}\n","import { normalizeValue } from './utils/normalize-value'\n\nexport type SqlDialect = 'postgres' | 'sqlite'\n\nlet globalDialect: SqlDialect = 'postgres'\n\nexport function setGlobalDialect(dialect: SqlDialect): void {\n if (dialect !== 'postgres' && dialect !== 'sqlite') {\n throw new Error(\n `Invalid dialect: ${dialect}. Must be 'postgres' or 'sqlite'`,\n )\n }\n globalDialect = dialect\n}\n\nexport function getGlobalDialect(): SqlDialect {\n return globalDialect\n}\n\nfunction assertNonEmpty(value: string, name: string): void {\n if (!value || value.trim().length === 0) {\n throw new Error(`${name} is required and cannot be empty`)\n }\n}\n\nexport function arrayContains(\n column: string,\n value: string,\n arrayType: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'arrayContains column')\n assertNonEmpty(value, 'arrayContains value')\n\n if (dialect === 'postgres') {\n return `${column} @> ARRAY[${value}]::${arrayType}`\n }\n\n return `EXISTS (SELECT 1 FROM json_each(${column}) WHERE value = ${value})`\n}\n\nexport function arrayOverlaps(\n column: string,\n value: string,\n arrayType: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'arrayOverlaps column')\n assertNonEmpty(value, 'arrayOverlaps value')\n\n if (dialect === 'postgres') {\n return `${column} && ${value}::${arrayType}`\n }\n\n return `EXISTS (\n SELECT 1 FROM json_each(${column}) AS col\n JOIN json_each(${value}) AS val\n WHERE col.value = val.value\n )`\n}\n\nexport function arrayContainsAll(\n column: string,\n value: string,\n arrayType: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'arrayContainsAll column')\n assertNonEmpty(value, 'arrayContainsAll value')\n\n if (dialect === 'postgres') {\n return `${column} @> ${value}::${arrayType}`\n }\n\n return `NOT EXISTS (\n SELECT 1 FROM json_each(${value}) AS val\n WHERE NOT EXISTS (\n SELECT 1 FROM json_each(${column}) AS col\n WHERE col.value = val.value\n )\n )`\n}\n\nexport function arrayIsEmpty(column: string, dialect: SqlDialect): string {\n assertNonEmpty(column, 'arrayIsEmpty column')\n\n if (dialect === 'postgres') {\n return `(${column} IS NULL OR array_length(${column}, 1) IS NULL)`\n }\n return `(${column} IS NULL OR json_array_length(${column}) = 0)`\n}\n\nexport function arrayIsNotEmpty(column: string, dialect: SqlDialect): string {\n assertNonEmpty(column, 'arrayIsNotEmpty column')\n\n if (dialect === 'postgres') {\n return `(${column} IS NOT NULL AND array_length(${column}, 1) IS NOT NULL)`\n }\n return `(${column} IS NOT NULL AND json_array_length(${column}) > 0)`\n}\n\nexport function arrayEquals(\n column: string,\n value: string,\n arrayType: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'arrayEquals column')\n assertNonEmpty(value, 'arrayEquals value')\n\n if (dialect === 'postgres') {\n return `${column} = ${value}::${arrayType}`\n }\n\n return `json(${column}) = json(${value})`\n}\n\nexport function caseInsensitiveLike(\n column: string,\n pattern: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'caseInsensitiveLike column')\n assertNonEmpty(pattern, 'caseInsensitiveLike pattern')\n\n if (dialect === 'postgres') {\n return `${column} ILIKE ${pattern}`\n }\n\n return `LOWER(${column}) LIKE LOWER(${pattern})`\n}\n\nexport function caseInsensitiveEquals(\n column: string,\n value: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'caseInsensitiveEquals column')\n assertNonEmpty(value, 'caseInsensitiveEquals value')\n\n return `LOWER(${column}) = LOWER(${value})`\n}\n\nexport function jsonExtractText(\n column: string,\n path: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'jsonExtractText column')\n assertNonEmpty(path, 'jsonExtractText path')\n\n if (dialect === 'postgres') {\n const p = String(path).trim()\n const pathExpr = /^\\$\\d+$/.test(p) ? `${p}::text[]` : p\n return `${column}#>>${pathExpr}`\n }\n\n return `json_extract(${column}, ${path})`\n}\n\nexport function jsonExtractNumeric(\n column: string,\n path: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'jsonExtractNumeric column')\n assertNonEmpty(path, 'jsonExtractNumeric path')\n\n if (dialect === 'postgres') {\n const p = String(path).trim()\n const pathExpr = /^\\$\\d+$/.test(p) ? `${p}::text[]` : p\n return `(${column}#>>${pathExpr})::numeric`\n }\n return `CAST(json_extract(${column}, ${path}) AS REAL)`\n}\n\nexport function jsonToText(column: string, dialect: SqlDialect): string {\n assertNonEmpty(column, 'jsonToText column')\n\n if (dialect === 'postgres') {\n return `${column}::text`\n }\n return column\n}\n\nexport function inArray(\n column: string,\n value: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'inArray column')\n assertNonEmpty(value, 'inArray value')\n\n if (dialect === 'postgres') {\n return `${column} = ANY(${value})`\n }\n\n return `${column} IN (SELECT value FROM json_each(${value}))`\n}\n\nexport function notInArray(\n column: string,\n value: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'notInArray column')\n assertNonEmpty(value, 'notInArray value')\n\n if (dialect === 'postgres') {\n return `${column} != ALL(${value})`\n }\n\n return `${column} NOT IN (SELECT value FROM json_each(${value}))`\n}\n\nexport function getArrayType(prismaType: string, dialect: SqlDialect): string {\n if (!prismaType || prismaType.length === 0) {\n return dialect === 'sqlite' ? 'TEXT' : 'text[]'\n }\n\n if (dialect === 'sqlite') {\n return 'TEXT'\n }\n\n const baseType = prismaType.replace(/\\[\\]|\\?/g, '')\n\n switch (baseType) {\n case 'String':\n return 'text[]'\n case 'Int':\n return 'integer[]'\n case 'Float':\n return 'double precision[]'\n case 'Decimal':\n return 'numeric[]'\n case 'Boolean':\n return 'boolean[]'\n case 'BigInt':\n return 'bigint[]'\n case 'DateTime':\n return 'timestamptz[]'\n default:\n return `\"${baseType}\"[]`\n }\n}\n\nexport function jsonAgg(content: string, dialect: SqlDialect): string {\n assertNonEmpty(content, 'jsonAgg content')\n\n if (dialect === 'postgres') {\n return `json_agg(${content})`\n }\n\n return `json_group_array(${content})`\n}\n\nexport function jsonBuildObject(pairs: string, dialect: SqlDialect): string {\n const safePairs = (pairs ?? '').trim()\n\n if (dialect === 'postgres') {\n return safePairs.length > 0\n ? `json_build_object(${safePairs})`\n : `json_build_object()`\n }\n\n return safePairs.length > 0 ? `json_object(${safePairs})` : `json_object()`\n}\n\nexport function prepareArrayParam(\n value: unknown[],\n dialect: SqlDialect,\n): unknown {\n if (!Array.isArray(value)) {\n throw new Error('prepareArrayParam requires array value')\n }\n\n if (dialect === 'postgres') {\n return value.map(normalizeValue)\n }\n return JSON.stringify(value)\n}\n","// packages/generator/src/optimizer/builder/shared/validators/type-guards.ts\n\n/**\n * Type Guards and Checks\n * Pure type checking with no business logic\n */\n\n// ═══════════════════════════════════════════════════════════════\n// Basic Type Guards\n// ═══════════════════════════════════════════════════════════════\n\nexport function isNotNullish<T>(\n value: T | null | undefined,\n): value is NonNullable<T> {\n return value !== null && value !== undefined\n}\n\nexport function isNonEmptyString(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0\n}\n\nexport function isEmptyString(value: unknown): boolean {\n return typeof value === 'string' && value.trim().length === 0\n}\n\nexport function isNonEmptyArray<T>(value: unknown): value is T[] {\n return Array.isArray(value) && value.length > 0\n}\n\nexport function isEmptyArray(value: unknown): boolean {\n return Array.isArray(value) && value.length === 0\n}\n\nexport function isPlainObject(val: unknown): val is Record<string, unknown> {\n if (!isNotNullish(val)) return false\n if (Array.isArray(val)) return false\n if (typeof val !== 'object') return false\n return Object.prototype.toString.call(val) === '[object Object]'\n}\n\nexport function hasProperty<K extends string>(\n obj: unknown,\n key: K,\n): obj is Record<K, unknown> {\n return isPlainObject(obj) && key in obj\n}\n\n// ═══════════════════════════════════════════════════════════════\n// Prisma Type Checks\n// ═══════════════════════════════════════════════════════════════\n\nexport function isArrayType(t: string | undefined): boolean {\n if (!isNotNullish(t)) return false\n const normalized = t.replace(/\\?$/, '')\n return normalized.endsWith('[]')\n}\n\nexport function isJsonType(t: string | undefined): boolean {\n return isNotNullish(t) && (t === 'Json' || t === 'Json?')\n}\n\n// ═══════════════════════════════════════════════════════════════\n// Content Validation\n// ═══════════════════════════════════════════════════════════════\n\nexport function hasValidContent(sql: string): boolean {\n return isNotNullish(sql) && sql.trim().length > 0\n}\n\nexport function hasRequiredKeywords(sql: string): boolean {\n const upper = sql.toUpperCase()\n const hasSelect = upper.includes('SELECT')\n const hasFrom = upper.includes('FROM')\n return hasSelect && hasFrom && upper.indexOf('SELECT') < upper.indexOf('FROM')\n}\n","import { ErrorContext } from './types'\nimport { isNonEmptyArray, isNotNullish } from './validators/type-guards'\n\ntype SqlBuilderErrorCode =\n | 'FIELD_NOT_FOUND'\n | 'INVALID_OPERATOR'\n | 'INVALID_VALUE'\n | 'RELATION_ERROR'\n | 'PARAM_ERROR'\n | 'SQL_ERROR'\n | 'VALIDATION_ERROR'\n | 'CRITICAL'\n\nclass SqlBuilderError extends Error {\n public readonly code: SqlBuilderErrorCode\n public readonly context?: ErrorContext\n\n constructor(\n message: string,\n code: SqlBuilderErrorCode,\n context?: ErrorContext,\n ) {\n super(message)\n this.name = 'SqlBuilderError'\n this.code = code\n this.context = context\n }\n}\n\nexport function createError(\n message: string,\n ctx: ErrorContext,\n code: SqlBuilderErrorCode = 'VALIDATION_ERROR',\n): SqlBuilderError {\n const parts = [message]\n\n if (isNonEmptyArray(ctx.path)) {\n parts.push(`Path: ${ctx.path.join('.')}`)\n }\n\n if (isNotNullish(ctx.modelName)) {\n parts.push(`Model: ${ctx.modelName}`)\n }\n\n if (isNonEmptyArray(ctx.availableFields)) {\n parts.push(`Available fields: ${ctx.availableFields.join(', ')}`)\n }\n\n return new SqlBuilderError(parts.join('\\n'), code, ctx)\n}\n","import { Model } from '../../types'\n\nconst SCALAR_SET_CACHE = new WeakMap<Model, Set<string>>()\nconst RELATION_SET_CACHE = new WeakMap<Model, Set<string>>()\n\nexport function getScalarFieldSet(model: Model): Set<string> {\n const cached = SCALAR_SET_CACHE.get(model)\n if (cached) return cached\n\n const s = new Set<string>()\n for (const f of model.fields) if (!f.isRelation) s.add(f.name)\n SCALAR_SET_CACHE.set(model, s)\n return s\n}\n\nexport function getRelationFieldSet(model: Model): Set<string> {\n const cached = RELATION_SET_CACHE.get(model)\n if (cached) return cached\n\n const s = new Set<string>()\n for (const f of model.fields) if (f.isRelation) s.add(f.name)\n RELATION_SET_CACHE.set(model, s)\n return s\n}\n\nconst COLUMN_MAP_CACHE = new WeakMap<Model, Map<string, string>>()\n\nexport function getColumnMap(model: Model): Map<string, string> {\n const cached = COLUMN_MAP_CACHE.get(model)\n if (cached) return cached\n\n const map = new Map<string, string>()\n for (const f of model.fields) {\n if (!f.isRelation) {\n map.set(f.name, f.dbName || f.name)\n }\n }\n\n COLUMN_MAP_CACHE.set(model, map)\n return map\n}","import { DEFAULT_WHERE_CLAUSE, REGEX_CACHE, SQL_KEYWORDS } from '../constants'\nimport {\n isNotNullish,\n isNonEmptyString,\n hasValidContent,\n hasRequiredKeywords,\n} from './type-guards'\nimport { SqlDialect } from '../../../sql-builder-dialect'\nimport { ParamMap } from '@dee-wan/schema-parser'\n\nexport function isValidWhereClause(clause: string): boolean {\n return (\n isNotNullish(clause) &&\n clause.trim().length > 0 &&\n clause !== DEFAULT_WHERE_CLAUSE\n )\n}\n\nexport function isEmptyWhere(\n where: Record<string, unknown> | null | undefined,\n): boolean {\n if (!isNotNullish(where)) return true\n return Object.keys(where).length === 0\n}\n\nexport function validateSelectQuery(sql: string): void {\n if (!hasValidContent(sql)) {\n throw new Error('CRITICAL: Generated empty SQL query')\n }\n\n if (!hasRequiredKeywords(sql)) {\n throw new Error(\n `CRITICAL: Invalid SQL structure. SQL: ${sql.substring(0, 100)}...`,\n )\n }\n}\n\nfunction sqlPreview(sql: string): string {\n return `${sql.substring(0, 100)}...`\n}\n\ntype PlaceholderScan = {\n count: number\n min: number\n max: number\n seen: Uint8Array\n}\n\ntype ParseResult = {\n next: number\n num: number\n ok: boolean\n}\n\nfunction parseDollarNumber(sql: string, start: number, n: number): ParseResult {\n let i = start\n let num = 0\n let hasDigit = false\n\n while (i < n) {\n const c = sql.charCodeAt(i)\n if (c < 48 || c > 57) break\n hasDigit = true\n num = num * 10 + (c - 48)\n i++\n }\n\n if (!hasDigit || num <= 0) return { next: i, num: 0, ok: false }\n return { next: i, num, ok: true }\n}\n\nfunction scanDollarPlaceholders(\n sql: string,\n markUpTo: number,\n): PlaceholderScan {\n const seen = new Uint8Array(markUpTo + 1)\n let count = 0\n let min = Number.POSITIVE_INFINITY\n let max = 0\n\n const n = sql.length\n let i = 0\n\n while (i < n) {\n if (sql.charCodeAt(i) !== 36) {\n i++\n continue\n }\n\n const { next, num, ok } = parseDollarNumber(sql, i + 1, n)\n i = next\n if (!ok) continue\n\n count++\n if (num < min) min = num\n if (num > max) max = num\n if (num <= markUpTo) seen[num] = 1\n }\n\n return { count, min, max, seen }\n}\n\nfunction assertNoGaps(\n scan: PlaceholderScan,\n rangeMin: number,\n rangeMax: number,\n sql: string,\n): void {\n for (let k = rangeMin; k <= rangeMax; k++) {\n if (scan.seen[k] !== 1) {\n throw new Error(\n `CRITICAL: Parameter mismatch - SQL is missing placeholder $${k}. ` +\n `Placeholders must cover ${rangeMin}..${rangeMax} with no gaps. SQL: ${sqlPreview(sql)}`,\n )\n }\n }\n}\n\nexport function validateParamConsistency(\n sql: string,\n params: readonly unknown[],\n): void {\n const paramLen = params.length\n\n if (paramLen === 0) {\n if (sql.indexOf('$') === -1) return\n }\n\n const scan = scanDollarPlaceholders(sql, paramLen)\n\n if (scan.count === 0) {\n if (paramLen !== 0) {\n throw new Error(\n `CRITICAL: Parameter mismatch - SQL has no placeholders but ${paramLen} params provided.`,\n )\n }\n return\n }\n\n if (scan.max !== paramLen) {\n throw new Error(\n `CRITICAL: Parameter mismatch - SQL max placeholder is $${scan.max} but ${paramLen} params provided. ` +\n `This will cause SQL execution to fail. SQL: ${sqlPreview(sql)}`,\n )\n }\n\n assertNoGaps(scan, 1, scan.max, sql)\n}\n\nexport function needsQuoting(id: string): boolean {\n if (!isNonEmptyString(id)) return true\n\n const isKeyword = SQL_KEYWORDS.has(id.toLowerCase())\n if (isKeyword) return true\n\n const isValidIdentifier = REGEX_CACHE.VALID_IDENTIFIER.test(id)\n return !isValidIdentifier\n}\n\nexport function validateParamConsistencyFragment(\n sql: string,\n params: readonly unknown[],\n): void {\n const paramLen = params.length\n const scan = scanDollarPlaceholders(sql, paramLen)\n\n if (scan.max === 0) return\n\n if (scan.max > paramLen) {\n throw new Error(\n `CRITICAL: Parameter mismatch - SQL references $${scan.max} but only ${paramLen} params provided. SQL: ${sqlPreview(sql)}`,\n )\n }\n\n assertNoGaps(scan, scan.min, scan.max, sql)\n}\n\nfunction assertOrThrow(condition: unknown, message: string): asserts condition {\n if (!condition) throw new Error(message)\n}\n\nfunction dialectPlaceholderPrefix(dialect: SqlDialect): string {\n return dialect === 'sqlite' ? '?' : '$'\n}\n\nfunction parseSqlitePlaceholderIndices(sql: string): {\n indices: number[]\n sawNumbered: boolean\n sawAnonymous: boolean\n} {\n const re = /\\?(?:(\\d+))?/g\n const indices: number[] = []\n let anonCount = 0\n let sawNumbered = false\n let sawAnonymous = false\n\n for (const m of sql.matchAll(re)) {\n const n = m[1]\n if (n) {\n sawNumbered = true\n indices.push(parseInt(n, 10))\n } else {\n sawAnonymous = true\n anonCount += 1\n indices.push(anonCount)\n }\n }\n\n return { indices, sawNumbered, sawAnonymous }\n}\n\nfunction parseDollarPlaceholderIndices(sql: string): number[] {\n const re = /\\$(\\d+)/g\n const indices: number[] = []\n for (const m of sql.matchAll(re)) indices.push(parseInt(m[1], 10))\n return indices\n}\n\nfunction getPlaceholderIndices(\n sql: string,\n dialect: SqlDialect,\n): { indices: number[]; sawNumbered: boolean; sawAnonymous: boolean } {\n if (dialect === 'sqlite') return parseSqlitePlaceholderIndices(sql)\n return {\n indices: parseDollarPlaceholderIndices(sql),\n sawNumbered: false,\n sawAnonymous: false,\n }\n}\n\nfunction maxIndex(indices: readonly number[]): number {\n return indices.length > 0 ? Math.max(...indices) : 0\n}\n\nfunction ensureNoMixedSqlitePlaceholders(\n sawNumbered: boolean,\n sawAnonymous: boolean,\n): void {\n assertOrThrow(\n !(sawNumbered && sawAnonymous),\n `CRITICAL: Mixed sqlite placeholders ('?' and '?NNN') are not supported.`,\n )\n}\n\nfunction ensurePlaceholderMaxMatchesMappingsLength(\n max: number,\n mappingsLength: number,\n dialect: SqlDialect,\n): void {\n assertOrThrow(\n max === mappingsLength,\n `CRITICAL: SQL placeholder max mismatch - max is ${dialectPlaceholderPrefix(dialect)}${max}, but mappings length is ${mappingsLength}.`,\n )\n}\n\nfunction ensureSequentialPlaceholders(\n placeholders: ReadonlySet<number>,\n max: number,\n dialect: SqlDialect,\n): void {\n const prefix = dialectPlaceholderPrefix(dialect)\n for (let i = 1; i <= max; i++) {\n assertOrThrow(\n placeholders.has(i),\n `CRITICAL: Missing SQL placeholder ${prefix}${i} - placeholders must be sequential 1..${max}.`,\n )\n }\n}\n\nfunction validateMappingIndex(mapping: ParamMap, max: number): void {\n assertOrThrow(\n Number.isInteger(mapping.index) &&\n mapping.index >= 1 &&\n mapping.index <= max,\n `CRITICAL: ParamMapping index ${mapping.index} out of range 1..${max}.`,\n )\n}\n\nfunction ensureUniqueMappingIndex(\n mappingIndices: Set<number>,\n index: number,\n dialect: SqlDialect,\n): void {\n assertOrThrow(\n !mappingIndices.has(index),\n `CRITICAL: Duplicate ParamMapping index ${index} - each placeholder index must map to exactly one ParamMap.`,\n )\n mappingIndices.add(index)\n}\n\nfunction ensureMappingIndexExistsInSql(\n placeholders: ReadonlySet<number>,\n index: number,\n): void {\n assertOrThrow(\n placeholders.has(index),\n `CRITICAL: ParamMapping index ${index} not found in SQL placeholders.`,\n )\n}\n\nfunction validateMappingValueShape(mapping: ParamMap): void {\n assertOrThrow(\n !(mapping.dynamicName !== undefined && mapping.value !== undefined),\n `CRITICAL: ParamMap ${mapping.index} has both dynamicName and value`,\n )\n\n assertOrThrow(\n !(mapping.dynamicName === undefined && mapping.value === undefined),\n `CRITICAL: ParamMap ${mapping.index} has neither dynamicName nor value`,\n )\n}\n\nfunction ensureMappingsCoverAllIndices(\n mappingIndices: ReadonlySet<number>,\n max: number,\n dialect: SqlDialect,\n): void {\n const prefix = dialectPlaceholderPrefix(dialect)\n for (let i = 1; i <= max; i++) {\n assertOrThrow(\n mappingIndices.has(i),\n `CRITICAL: Missing ParamMap for placeholder ${prefix}${i} - mappings must cover 1..${max} with no gaps.`,\n )\n }\n}\n\nfunction validateMappingsAgainstPlaceholders(\n mappings: readonly ParamMap[],\n placeholders: ReadonlySet<number>,\n max: number,\n dialect: SqlDialect,\n): void {\n const mappingIndices = new Set<number>()\n\n for (const mapping of mappings) {\n validateMappingIndex(mapping, max)\n ensureUniqueMappingIndex(mappingIndices, mapping.index, dialect)\n ensureMappingIndexExistsInSql(placeholders, mapping.index)\n validateMappingValueShape(mapping)\n }\n\n ensureMappingsCoverAllIndices(mappingIndices, max, dialect)\n}\n\nexport function validateSqlPositions(\n sql: string,\n mappings: readonly ParamMap[],\n dialect: SqlDialect,\n): void {\n const { indices, sawNumbered, sawAnonymous } = getPlaceholderIndices(\n sql,\n dialect,\n )\n\n if (dialect === 'sqlite') {\n ensureNoMixedSqlitePlaceholders(sawNumbered, sawAnonymous)\n }\n\n const placeholders = new Set(indices)\n\n if (placeholders.size === 0 && mappings.length === 0) return\n\n const max = maxIndex(indices)\n\n ensurePlaceholderMaxMatchesMappingsLength(max, mappings.length, dialect)\n ensureSequentialPlaceholders(placeholders, max, dialect)\n validateMappingsAgainstPlaceholders(mappings, placeholders, max, dialect)\n}\n","import { SqlDialect } from '../../sql-builder-dialect'\nimport { needsQuoting } from './validators/sql-validators'\nimport { isEmptyString, isNotNullish } from './validators/type-guards'\nimport type { Model } from '../../types'\nimport { getColumnMap } from './model-field-cache'\n\nconst NUL = String.fromCharCode(0)\n\nfunction containsControlChars(s: string): boolean {\n return s.includes(NUL) || s.includes('\\n') || s.includes('\\r')\n}\n\nfunction assertNoControlChars(label: string, s: string): void {\n if (containsControlChars(s)) {\n throw new Error(\n `${label} contains invalid characters: ${JSON.stringify(s)}`,\n )\n }\n}\n\nfunction isIdentCharCode(c: number): boolean {\n return (\n (c >= 48 && c <= 57) ||\n (c >= 65 && c <= 90) ||\n (c >= 97 && c <= 122) ||\n c === 95\n )\n}\n\nfunction isIdentStartCharCode(c: number): boolean {\n return (c >= 65 && c <= 90) || (c >= 97 && c <= 122) || c === 95\n}\n\nfunction parseQuotedPart(input: string, start: number): number {\n const n = input.length\n let i = start + 1\n let sawAny = false\n\n while (i < n) {\n const c = input.charCodeAt(i)\n if (c === 34) {\n const next = i + 1\n if (next < n && input.charCodeAt(next) === 34) {\n sawAny = true\n i += 2\n continue\n }\n if (!sawAny) {\n throw new Error(\n `tableName/tableRef has empty quoted identifier part: ${JSON.stringify(input)}`,\n )\n }\n return i + 1\n }\n if (c === 10 || c === 13 || c === 0) {\n throw new Error(\n `tableName/tableRef contains invalid characters: ${JSON.stringify(input)}`,\n )\n }\n sawAny = true\n i++\n }\n\n throw new Error(\n `tableName/tableRef has unterminated quoted identifier: ${JSON.stringify(input)}`,\n )\n}\n\nfunction parseUnquotedPart(input: string, start: number): number {\n const n = input.length\n let i = start\n\n if (i >= n) {\n throw new Error(`tableName/tableRef is invalid: ${JSON.stringify(input)}`)\n }\n\n const c0 = input.charCodeAt(i)\n if (!isIdentStartCharCode(c0)) {\n throw new Error(\n `tableName/tableRef must use identifiers (or quoted identifiers). Got: ${JSON.stringify(input)}`,\n )\n }\n i++\n\n while (i < n) {\n const c = input.charCodeAt(i)\n if (c === 46) break\n if (!isIdentCharCode(c)) {\n throw new Error(\n `tableName/tableRef contains invalid identifier characters: ${JSON.stringify(input)}`,\n )\n }\n i++\n }\n\n return i\n}\n\nfunction assertSafeQualifiedName(tableRef: string): void {\n const raw = String(tableRef)\n const trimmed = raw.trim()\n\n if (trimmed.length === 0) {\n throw new Error('tableName/tableRef is required and cannot be empty')\n }\n\n if (raw !== trimmed) {\n throw new Error(\n `tableName/tableRef must not contain leading/trailing whitespace: ${JSON.stringify(raw)}`,\n )\n }\n\n assertNoControlChars('tableName/tableRef', trimmed)\n\n for (let i = 0; i < trimmed.length; i++) {\n const c = trimmed.charCodeAt(i)\n if (c === 9 || c === 11 || c === 12 || c === 32) {\n throw new Error(\n `tableName/tableRef must not contain whitespace: ${JSON.stringify(trimmed)}`,\n )\n }\n if (c === 59) {\n throw new Error(\n `tableName/tableRef must not contain ';': ${JSON.stringify(trimmed)}`,\n )\n }\n if (c === 40 || c === 41) {\n throw new Error(\n `tableName/tableRef must not contain parentheses: ${JSON.stringify(trimmed)}`,\n )\n }\n }\n\n let i = 0\n const n = trimmed.length\n let parts = 0\n\n while (i < n) {\n const c = trimmed.charCodeAt(i)\n if (c === 46) {\n throw new Error(\n `tableName/tableRef has empty identifier part: ${JSON.stringify(trimmed)}`,\n )\n }\n\n if (c === 34) {\n i = parseQuotedPart(trimmed, i)\n } else {\n i = parseUnquotedPart(trimmed, i)\n }\n\n parts++\n if (parts > 2) {\n throw new Error(\n `tableName/tableRef must be 'table' or 'schema.table' (max 2 parts). Got: ${JSON.stringify(trimmed)}`,\n )\n }\n\n if (i === n) break\n\n if (trimmed.charCodeAt(i) !== 46) {\n throw new Error(\n `tableName/tableRef is invalid: ${JSON.stringify(trimmed)}`,\n )\n }\n i++\n\n if (i === n) {\n throw new Error(\n `tableName/tableRef cannot end with '.': ${JSON.stringify(trimmed)}`,\n )\n }\n }\n}\n\nexport function quote(id: string): string {\n if (isEmptyString(id)) {\n throw new Error('quote: identifier is required and cannot be empty')\n }\n\n if (containsControlChars(id)) {\n throw new Error(\n `quote: identifier contains invalid characters: ${JSON.stringify(id)}`,\n )\n }\n\n if (needsQuoting(id)) {\n return `\"${id.replace(/\"/g, '\"\"')}\"`\n }\n\n return id\n}\n\nexport function resolveColumnName(\n model: Model | undefined,\n fieldName: string,\n): string {\n if (!model) return fieldName\n const columnMap = getColumnMap(model)\n return columnMap.get(fieldName) || fieldName\n}\n\nexport function quoteColumn(\n model: Model | undefined,\n fieldName: string,\n): string {\n return quote(resolveColumnName(model, fieldName))\n}\n\nexport function col(alias: string, field: string, model?: Model): string {\n if (isEmptyString(alias)) {\n throw new Error('col: alias is required and cannot be empty')\n }\n\n if (isEmptyString(field)) {\n throw new Error('col: field is required and cannot be empty')\n }\n\n const columnName = resolveColumnName(model, field)\n return `${alias}.${quote(columnName)}`\n}\n\nexport function colWithAlias(\n alias: string,\n field: string,\n model?: Model,\n): string {\n if (isEmptyString(alias)) {\n throw new Error('colWithAlias: alias is required and cannot be empty')\n }\n\n if (isEmptyString(field)) {\n throw new Error('colWithAlias: field is required and cannot be empty')\n }\n\n const columnName = resolveColumnName(model, field)\n const columnRef = `${alias}.${quote(columnName)}`\n\n if (columnName !== field) {\n return `${columnRef} AS ${quote(field)}`\n }\n\n return columnRef\n}\n\nexport function sqlStringLiteral(value: string): string {\n if (containsControlChars(value)) {\n throw new Error('sqlStringLiteral: value contains invalid characters')\n }\n return `'${value.replace(/'/g, \"''\")}'`\n}\n\nexport function buildTableReference(\n schemaName: string,\n tableName: string,\n dialect?: SqlDialect,\n): string {\n if (isEmptyString(tableName)) {\n throw new Error(\n 'buildTableReference: tableName is required and cannot be empty',\n )\n }\n\n if (containsControlChars(tableName)) {\n throw new Error(\n 'buildTableReference: tableName contains invalid characters',\n )\n }\n\n const d = dialect ?? 'postgres'\n if (d === 'sqlite') {\n return quote(tableName)\n }\n\n if (isEmptyString(schemaName)) {\n throw new Error(\n 'buildTableReference: schemaName is required and cannot be empty',\n )\n }\n\n if (containsControlChars(schemaName)) {\n throw new Error(\n 'buildTableReference: schemaName contains invalid characters',\n )\n }\n\n const safeSchema = schemaName.replace(/\"/g, '\"\"')\n const safeTable = tableName.replace(/\"/g, '\"\"')\n return `\"${safeSchema}\".\"${safeTable}\"`\n}\n\nexport function assertSafeAlias(alias: string): void {\n const a = String(alias)\n if (a.trim().length === 0) {\n throw new Error('alias is required and cannot be empty')\n }\n if (containsControlChars(a) || a.includes(';')) {\n throw new Error(`alias contains unsafe characters: ${JSON.stringify(a)}`)\n }\n if (!/^[A-Za-z_]\\w*$/.test(a)) {\n throw new Error(\n `alias must be a simple identifier, got: ${JSON.stringify(a)}`,\n )\n }\n}\n\nexport function assertSafeTableRef(tableRef: string): void {\n assertSafeQualifiedName(tableRef)\n}\n\nexport function normalizeKeyList(input: unknown): string[] {\n if (!isNotNullish(input)) return []\n\n if (Array.isArray(input)) {\n const out: string[] = []\n for (const v of input) {\n const s = String(v).trim()\n if (s.length > 0) out.push(s)\n }\n return out\n }\n\n if (typeof input === 'string') {\n const raw = input.trim()\n if (raw.length === 0) return []\n if (raw.includes(',')) {\n return raw\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0)\n }\n return [raw]\n }\n\n const s = String(input).trim()\n return s.length > 0 ? [s] : []\n}","import { Model, Field } from '../types'\nimport { SPECIAL_FIELDS } from './shared/constants'\nimport { createError } from './shared/errors'\nimport { getRelationFieldSet } from './shared/model-field-cache'\nimport { quoteColumn, normalizeKeyList } from './shared/sql-utils'\nimport { isNotNullish } from './shared/validators/type-guards'\n\nexport function isRelationField(fieldName: string, model: Model): boolean {\n return getRelationFieldSet(model).has(fieldName)\n}\n\nexport function isValidRelationField(field: Field | undefined): field is Field {\n if (!isNotNullish(field)) return false\n if (!field.isRelation) return false\n if (\n !isNotNullish(field.relatedModel) ||\n field.relatedModel.trim().length === 0\n )\n return false\n\n const fk = normalizeKeyList((field as any).foreignKey)\n if (fk.length === 0) return false\n\n const refsRaw = (field as any).references\n const refs = normalizeKeyList(refsRaw)\n\n if (refs.length === 0) return false\n if (refs.length !== fk.length) return false\n\n return true\n}\n\nfunction getReferenceFieldNames(\n field: Field,\n foreignKeyCount: number,\n): string[] {\n const refsRaw = (field as any).references\n const refs = normalizeKeyList(refsRaw)\n\n if (refs.length === 0) {\n if (foreignKeyCount === 1) return [SPECIAL_FIELDS.ID]\n return []\n }\n\n if (refs.length !== foreignKeyCount) return []\n return refs\n}\n\nexport function joinCondition(\n field: Field,\n parentModel: Model,\n childModel: Model,\n parentAlias: string,\n childAlias: string,\n): string {\n const fkFields = normalizeKeyList((field as any).foreignKey)\n\n if (fkFields.length === 0) {\n throw createError(\n `Relation '${field.name}' is missing foreignKey. This indicates a schema parsing error. Relations must specify fields/references.`,\n { field: field.name },\n )\n }\n\n const refFields = getReferenceFieldNames(field, fkFields.length)\n\n if (refFields.length !== fkFields.length) {\n throw createError(\n `Relation '${field.name}' is missing references (or references count does not match foreignKey count). This is required to support non-id and composite keys.`,\n { field: field.name },\n )\n }\n\n const parts: string[] = []\n\n for (let i = 0; i < fkFields.length; i++) {\n const fk = fkFields[i]\n const ref = refFields[i]\n\n const left = field.isForeignKeyLocal\n ? `${childAlias}.${quoteColumn(childModel, ref)}`\n : `${childAlias}.${quoteColumn(childModel, fk)}`\n const right = field.isForeignKeyLocal\n ? `${parentAlias}.${quoteColumn(parentModel, fk)}`\n : `${parentAlias}.${quoteColumn(parentModel, ref)}`\n\n parts.push(`${left} = ${right}`)\n }\n\n return parts.length === 1 ? parts[0] : `(${parts.join(' AND ')})`\n}\n\nexport function getModelByName(\n schemas: Model[],\n name: string,\n): Model | undefined {\n return schemas.find((m) => m.name === name)\n}\n","import { isDynamicParameter } from '@dee-wan/schema-parser'\nimport { isNotNullish } from './validators/type-guards'\n\ntype NormalizeIntLikeOptions = {\n min?: number\n max?: number\n allowZero?: boolean\n}\n\nexport function normalizeIntLike(\n name: string,\n v: unknown,\n opts: NormalizeIntLikeOptions = {},\n): number | string | undefined {\n if (!isNotNullish(v)) return undefined\n if (isDynamicParameter(v)) return v as string\n\n if (typeof v !== 'number' || !Number.isFinite(v) || !Number.isInteger(v)) {\n throw new Error(`${name} must be an integer`)\n }\n\n const min = opts.min ?? 0\n const allowZero = opts.allowZero ?? true\n\n if (!allowZero && v === 0) {\n throw new Error(`${name} must be > 0`)\n }\n if (v < min) {\n throw new Error(`${name} must be >= ${min}`)\n }\n\n if (typeof opts.max === 'number' && v > opts.max) {\n throw new Error(`${name} must be <= ${opts.max}`)\n }\n\n return v\n}\n","import { extractDynamicName, isDynamicParameter } from '@dee-wan/schema-parser'\nimport { ParamStore } from './param-store'\n\nfunction scopeName(scope: string, dynamicName: string): string {\n const s = String(scope).trim()\n const dn = String(dynamicName).trim()\n if (s.length === 0) return dn\n return `${s}:${dn}`\n}\n\nexport function addAutoScoped(\n params: ParamStore,\n value: unknown,\n scope: string,\n): string {\n if (isDynamicParameter(value)) {\n const dn = extractDynamicName(value as string)\n return params.add(undefined, scopeName(scope, dn))\n }\n return params.add(value)\n}\n","import { isNotNullish, isPlainObject } from './validators/type-guards'\n\ntype OrderByObject = Record<string, unknown>\ntype OrderByArray = Array<Record<string, unknown>>\n\nexport type OrderByType =\n | OrderByObject\n | OrderByArray\n | string\n | null\n | undefined\n\ntype OrderByDirection = 'asc' | 'desc'\ntype OrderByNulls = 'first' | 'last'\ntype OrderBySortObject = { sort: OrderByDirection; nulls?: OrderByNulls }\ntype NormalizedOrderByValue = OrderByDirection | OrderBySortObject\ntype NormalizedOrderBy = Array<Record<string, NormalizedOrderByValue>>\ntype ParseOrderByValue = (\n v: unknown,\n field?: string,\n) => { direction: OrderByDirection; nulls?: OrderByNulls }\n\nconst flipNulls = (v: unknown): unknown => {\n const s = String(v).toLowerCase()\n if (s === 'first') return 'last'\n if (s === 'last') return 'first'\n return v\n}\n\nconst flipSortString = (v: unknown): unknown => {\n if (typeof v !== 'string') return v\n const s = v.toLowerCase()\n if (s === 'asc') return 'desc'\n if (s === 'desc') return 'asc'\n return v\n}\n\nconst getNextSort = (sortRaw: unknown): unknown => {\n if (typeof sortRaw !== 'string') return sortRaw\n\n const s = sortRaw.toLowerCase()\n if (s === 'asc') return 'desc'\n if (s === 'desc') return 'asc'\n return sortRaw\n}\n\nconst flipObjectSort = (\n obj: Record<string, unknown>,\n): Record<string, unknown> => {\n const sortRaw = obj.sort\n const out: Record<string, unknown> = { ...obj, sort: getNextSort(sortRaw) }\n\n const nullsRaw = obj.nulls\n if (typeof nullsRaw === 'string') {\n out.nulls = flipNulls(nullsRaw)\n }\n\n return out\n}\n\nconst flipValue = (v: unknown): unknown => {\n if (typeof v === 'string') return flipSortString(v)\n if (isPlainObject(v)) return flipObjectSort(v)\n return v\n}\n\nconst assertSingleFieldObject = (item: unknown): [string, unknown] => {\n if (!isPlainObject(item)) {\n throw new Error('orderBy array entries must be objects')\n }\n\n const entries = Object.entries(item)\n if (entries.length !== 1) {\n throw new Error('orderBy array entries must have exactly one field')\n }\n\n return entries[0]\n}\n\nconst flipOrderByArray = (orderBy: unknown[]): { [x: string]: unknown }[] => {\n return orderBy.map((item) => {\n const [k, v] = assertSingleFieldObject(item)\n return { [k]: flipValue(v) }\n })\n}\n\nconst flipOrderByObject = (\n orderBy: Record<string, unknown>,\n): Record<string, unknown> => {\n const out: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(orderBy)) {\n out[k] = flipValue(v)\n }\n return out\n}\n\nexport function reverseOrderByInput(orderBy: unknown): OrderByType {\n if (!isNotNullish(orderBy)) return orderBy\n\n if (Array.isArray(orderBy)) {\n return flipOrderByArray(orderBy)\n }\n\n if (isPlainObject(orderBy)) {\n return flipOrderByObject(orderBy)\n }\n\n throw new Error('orderBy must be an object or array of objects')\n}\n\nconst normalizePairs = (\n pairs: Array<[string, unknown]>,\n parseValue: ParseOrderByValue,\n): NormalizedOrderBy => {\n return pairs.map(([field, rawValue]) => {\n const parsed = parseValue(rawValue, field)\n return {\n [field]:\n parsed.nulls !== undefined\n ? { sort: parsed.direction, nulls: parsed.nulls }\n : parsed.direction,\n }\n })\n}\n\nexport function normalizeOrderByInput(\n orderBy: unknown,\n parseValue: ParseOrderByValue,\n): NormalizedOrderBy {\n if (!isNotNullish(orderBy)) return []\n\n if (Array.isArray(orderBy)) {\n const pairs = orderBy.map(assertSingleFieldObject)\n return normalizePairs(pairs, parseValue)\n }\n\n if (isPlainObject(orderBy)) {\n return normalizePairs(Object.entries(orderBy), parseValue)\n }\n\n throw new Error('orderBy must be an object or array of objects')\n}\n","import { PrismaQueryArgs, Model } from '../types'\nimport { SQL_SEPARATORS, SQL_TEMPLATES } from './shared/constants'\nimport { col, quote } from './shared/sql-utils'\nimport { ParamStore } from './shared/param-store'\nimport { SqlDialect, getGlobalDialect } from '../sql-builder-dialect'\nimport {\n isNotNullish,\n isNonEmptyString,\n isPlainObject,\n} from './shared/validators/type-guards'\nimport { normalizeIntLike } from './shared/int-like'\nimport { addAutoScoped } from './shared/dynamic-params'\nimport { isDynamicParameter } from '@dee-wan/schema-parser'\nimport { normalizeOrderByInput } from './shared/order-by-utils'\n\ntype OrderByDirection = 'asc' | 'desc'\ntype NullsPosition = 'first' | 'last'\n\ntype OrderByEntry = {\n field: string\n direction: OrderByDirection\n nulls?: NullsPosition\n}\n\ntype IntOrDynamic = number | string\ntype MaybeIntOrDynamic = IntOrDynamic | undefined\n\ntype SkipTakeReadResult = {\n hasSkip: boolean\n hasTake: boolean\n skipVal: MaybeIntOrDynamic\n takeVal: MaybeIntOrDynamic\n}\n\nconst MAX_LIMIT_OFFSET = 2147483647\n\nfunction parseDirectionRaw(raw: unknown, errorLabel: string): OrderByDirection {\n const s = String(raw).toLowerCase()\n if (s === 'asc' || s === 'desc') return s\n throw new Error(`Invalid ${errorLabel}: ${raw}`)\n}\n\nfunction parseNullsRaw(\n raw: unknown,\n errorLabel: string,\n): NullsPosition | undefined {\n if (!isNotNullish(raw)) return undefined\n const s = String(raw).toLowerCase()\n if (s === 'first' || s === 'last') return s\n throw new Error(`Invalid ${errorLabel}: ${raw}`)\n}\n\nfunction requireOrderByObject(\n v: unknown,\n errorPrefix: string,\n): Record<string, unknown> {\n if (!isPlainObject(v) || !('sort' in v)) {\n throw new Error(`${errorPrefix} must be 'asc' | 'desc' or { sort, nulls? }`)\n }\n return v\n}\n\nfunction assertAllowedOrderByKeys(\n obj: Record<string, unknown>,\n fieldName?: string,\n): void {\n const allowed = new Set(['sort', 'nulls'])\n for (const k of Object.keys(obj)) {\n if (!allowed.has(k)) {\n throw new Error(\n fieldName\n ? `Unsupported orderBy key '${k}' for field '${fieldName}'`\n : `Unsupported orderBy key '${k}'`,\n )\n }\n }\n}\n\nexport function parseOrderByValue(\n v: unknown,\n fieldName?: string,\n): { direction: OrderByDirection; nulls?: NullsPosition } {\n const errorPrefix = fieldName ? `orderBy for '${fieldName}'` : 'orderBy value'\n\n if (typeof v === 'string') {\n return { direction: parseDirectionRaw(v, `${errorPrefix} direction`) }\n }\n\n const obj = requireOrderByObject(v, errorPrefix)\n\n const direction = parseDirectionRaw(obj.sort, `${errorPrefix}.sort`)\n const nulls = parseNullsRaw(obj.nulls, `${errorPrefix}.nulls`)\n\n assertAllowedOrderByKeys(obj, fieldName)\n\n return { direction, nulls }\n}\n\nfunction normalizeFiniteInteger(name: string, v: unknown): number {\n if (typeof v !== 'number' || !Number.isFinite(v) || !Number.isInteger(v)) {\n throw new Error(`${name} must be an integer`)\n }\n return v\n}\n\nfunction normalizeNonNegativeInt(name: string, v: unknown): IntOrDynamic {\n if (isDynamicParameter(v)) return v as string\n\n const n = normalizeFiniteInteger(name, v)\n\n if (n < 0) {\n throw new Error(`${name} must be >= 0`)\n }\n if (n > MAX_LIMIT_OFFSET) {\n throw new Error(`${name} must be <= ${MAX_LIMIT_OFFSET}`)\n }\n return n\n}\n\nfunction hasNonNullishProp(\n v: unknown,\n key: 'skip' | 'take',\n): v is Record<string, unknown> {\n return isPlainObject(v) && key in v && isNotNullish((v as any)[key])\n}\n\nfunction normalizeIntegerOrDynamic(name: 'take', v: unknown): IntOrDynamic {\n if (isDynamicParameter(v)) return v as string\n return normalizeFiniteInteger(name, v)\n}\n\nexport function readSkipTake(relArgs: unknown): SkipTakeReadResult {\n const hasSkip = hasNonNullishProp(relArgs, 'skip')\n const hasTake = hasNonNullishProp(relArgs, 'take')\n\n if (!hasSkip && !hasTake) {\n return {\n hasSkip: false,\n hasTake: false,\n skipVal: undefined,\n takeVal: undefined,\n }\n }\n\n const obj = relArgs\n\n const skipVal = hasSkip\n ? normalizeNonNegativeInt('skip', obj.skip)\n : undefined\n const takeVal = hasTake\n ? normalizeIntegerOrDynamic('take', obj.take)\n : undefined\n\n return { hasSkip, hasTake, skipVal, takeVal }\n}\n\nfunction buildOrderByFragment(\n entries: OrderByEntry[],\n alias: string,\n dialect: SqlDialect,\n model?: Model,\n): string {\n if (entries.length === 0) return ''\n\n const out: string[] = []\n\n for (const e of entries) {\n const dir = e.direction.toUpperCase()\n const c = col(alias, e.field, model)\n\n if (dialect === 'postgres') {\n const nulls = isNotNullish(e.nulls)\n ? ` NULLS ${e.nulls.toUpperCase()}`\n : ''\n out.push(`${c} ${dir}${nulls}`)\n continue\n }\n\n if (isNotNullish(e.nulls)) {\n const isNullExpr = `(${c} IS NULL)`\n const nullRankDir = e.nulls === 'first' ? 'DESC' : 'ASC'\n out.push(`${isNullExpr} ${nullRankDir}`)\n out.push(`${c} ${dir}`)\n continue\n }\n\n out.push(`${c} ${dir}`)\n }\n\n return out.join(SQL_SEPARATORS.ORDER_BY)\n}\n\nfunction defaultNullsFor(\n dialect: SqlDialect,\n direction: OrderByDirection,\n): NullsPosition {\n if (dialect === 'postgres') {\n return direction === 'asc' ? 'last' : 'first'\n }\n return direction === 'asc' ? 'first' : 'last'\n}\n\nfunction ensureCursorFieldsInOrder(\n orderEntries: OrderByEntry[],\n cursorEntries: Array<[string, unknown]>,\n): OrderByEntry[] {\n const existing = new Map<string, OrderByEntry>()\n for (const e of orderEntries) existing.set(e.field, e)\n\n const out: OrderByEntry[] = [...orderEntries]\n\n for (const [field] of cursorEntries) {\n if (!existing.has(field)) {\n out.push({ field, direction: 'asc' })\n existing.set(field, out[out.length - 1])\n }\n }\n\n return out\n}\n\nfunction buildCursorFilterParts(\n cursor: Record<string, unknown>,\n cursorAlias: string,\n params: ParamStore,\n model?: Model,\n): {\n whereSql: string\n placeholdersByField: Map<string, string>\n} {\n const entries = Object.entries(cursor)\n if (entries.length === 0) {\n throw new Error('cursor must have at least one field')\n }\n\n const placeholdersByField = new Map<string, string>()\n const parts: string[] = []\n\n for (const [field, value] of entries) {\n const c = `${cursorAlias}.${quote(model ? String(col('', field, model)).slice(1) : field)}`\n if (value === null) {\n parts.push(`${c} IS NULL`)\n continue\n }\n const ph = addAutoScoped(params, value, `cursor.filter.${field}`)\n placeholdersByField.set(field, ph)\n parts.push(`${c} = ${ph}`)\n }\n\n return {\n whereSql: parts.length === 1 ? parts[0] : `(${parts.join(' AND ')})`,\n placeholdersByField,\n }\n}\n\nfunction cursorValueExpr(\n tableName: string,\n cursorAlias: string,\n cursorWhereSql: string,\n field: string,\n model?: Model,\n): string {\n const colName = model\n ? String(col(cursorAlias, field, model))\n .split('.')\n .slice(1)\n .join('.')\n : quote(field)\n return `(SELECT ${cursorAlias}.${colName} ${SQL_TEMPLATES.FROM} ${tableName} ${cursorAlias} ${SQL_TEMPLATES.WHERE} ${cursorWhereSql} ${SQL_TEMPLATES.LIMIT} 1)`\n}\n\nfunction buildCursorRowExistsExpr(\n tableName: string,\n cursorAlias: string,\n cursorWhereSql: string,\n): string {\n return `EXISTS (${SQL_TEMPLATES.SELECT} 1 ${SQL_TEMPLATES.FROM} ${tableName} ${cursorAlias} ${SQL_TEMPLATES.WHERE} ${cursorWhereSql} ${SQL_TEMPLATES.LIMIT} 1)`\n}\n\nfunction buildCursorEqualityExpr(\n columnExpr: string,\n valueExpr: string,\n): string {\n return `((${valueExpr} IS NULL AND ${columnExpr} IS NULL) OR (${valueExpr} IS NOT NULL AND ${columnExpr} = ${valueExpr}))`\n}\n\nfunction buildCursorInequalityExpr(\n columnExpr: string,\n direction: OrderByDirection,\n nulls: NullsPosition,\n valueExpr: string,\n): string {\n const op = direction === 'asc' ? '>' : '<'\n\n if (nulls === 'first') {\n return `(CASE WHEN ${valueExpr} IS NULL THEN (${columnExpr} IS NOT NULL) ELSE (${columnExpr} ${op} ${valueExpr}) END)`\n }\n\n return `(CASE WHEN ${valueExpr} IS NULL THEN 0=1 ELSE ((${columnExpr} ${op} ${valueExpr}) OR (${columnExpr} IS NULL)) END)`\n}\n\nfunction buildOuterCursorMatch(\n cursor: Record<string, unknown>,\n outerAlias: string,\n placeholdersByField: Map<string, string>,\n params: ParamStore,\n model?: Model,\n): string {\n const parts: string[] = []\n\n for (const [field, value] of Object.entries(cursor)) {\n const c = col(outerAlias, field, model)\n if (value === null) {\n parts.push(`${c} IS NULL`)\n continue\n }\n\n const existing = placeholdersByField.get(field)\n if (typeof existing === 'string' && existing.length > 0) {\n parts.push(`${c} = ${existing}`)\n continue\n }\n\n const ph = addAutoScoped(params, value, `cursor.outerMatch.${field}`)\n parts.push(`${c} = ${ph}`)\n }\n\n return parts.length === 1 ? parts[0] : `(${parts.join(' AND ')})`\n}\n\nfunction buildOrderEntries(orderBy: unknown): OrderByEntry[] {\n const normalized = normalizeOrderByInput(orderBy, parseOrderByValue)\n const entries: OrderByEntry[] = []\n\n for (const item of normalized) {\n for (const [field, value] of Object.entries(item)) {\n if (typeof value === 'string') {\n entries.push({ field, direction: value as OrderByDirection })\n } else {\n entries.push({\n field,\n direction: value.sort,\n nulls: value.nulls,\n })\n }\n }\n }\n\n return entries\n}\n\nexport function buildCursorCondition(\n cursor: Record<string, unknown>,\n orderBy: unknown,\n tableName: string,\n alias: string,\n params: ParamStore,\n dialect?: SqlDialect,\n model?: Model,\n): string {\n const d = dialect ?? getGlobalDialect()\n\n const cursorEntries = Object.entries(cursor)\n if (cursorEntries.length === 0) {\n throw new Error('cursor must have at least one field')\n }\n\n const cursorAlias = '__tp_cursor_src'\n const { whereSql: cursorWhereSql, placeholdersByField } =\n buildCursorFilterParts(cursor, cursorAlias, params, model)\n\n let orderEntries = buildOrderEntries(orderBy)\n\n if (orderEntries.length === 0) {\n orderEntries = cursorEntries.map(([field]) => ({\n field,\n direction: 'asc' as OrderByDirection,\n }))\n } else {\n orderEntries = ensureCursorFieldsInOrder(orderEntries, cursorEntries)\n }\n\n const existsExpr = buildCursorRowExistsExpr(\n tableName,\n cursorAlias,\n cursorWhereSql,\n )\n\n const outerCursorMatch = buildOuterCursorMatch(\n cursor,\n alias,\n placeholdersByField,\n params,\n model,\n )\n\n const orClauses: string[] = []\n\n for (let level = 0; level < orderEntries.length; level++) {\n const andParts: string[] = []\n\n for (let i = 0; i < level; i++) {\n const e = orderEntries[i]\n const c = col(alias, e.field, model)\n const v = cursorValueExpr(\n tableName,\n cursorAlias,\n cursorWhereSql,\n e.field,\n model,\n )\n andParts.push(buildCursorEqualityExpr(c, v))\n }\n\n const e = orderEntries[level]\n const c = col(alias, e.field, model)\n const v = cursorValueExpr(\n tableName,\n cursorAlias,\n cursorWhereSql,\n e.field,\n model,\n )\n const nulls = e.nulls ?? defaultNullsFor(d, e.direction)\n andParts.push(buildCursorInequalityExpr(c, e.direction, nulls, v))\n\n orClauses.push(`(${andParts.join(SQL_SEPARATORS.CONDITION_AND)})`)\n }\n\n const exclusive = orClauses.join(SQL_SEPARATORS.CONDITION_OR)\n return `(${existsExpr} ${SQL_SEPARATORS.CONDITION_AND} ((${exclusive})${SQL_SEPARATORS.CONDITION_OR}(${outerCursorMatch})))`\n}\n\nexport function buildOrderBy(\n orderBy: unknown,\n alias: string,\n dialect?: SqlDialect,\n model?: Model,\n): string {\n const entries = buildOrderEntries(orderBy)\n if (entries.length === 0) return ''\n\n const d = dialect ?? getGlobalDialect()\n return buildOrderByFragment(entries, alias, d, model)\n}\n\nexport function buildOrderByClause(\n args: PrismaQueryArgs,\n alias: string,\n dialect?: SqlDialect,\n model?: Model,\n): string {\n if (!isNotNullish(args.orderBy)) return ''\n\n const result = buildOrderBy(args.orderBy, alias, dialect, model)\n\n if (!isNonEmptyString(result)) {\n throw new Error(\n 'buildOrderByClause: orderBy specified but produced empty result',\n )\n }\n\n return result\n}\n\nfunction normalizeTakeLike(v: unknown): MaybeIntOrDynamic {\n const n = normalizeIntLike('take', v, {\n min: Number.MIN_SAFE_INTEGER,\n max: MAX_LIMIT_OFFSET,\n allowZero: true,\n })\n if (typeof n === 'number') {\n if (n === 0) return 0\n }\n return n as MaybeIntOrDynamic\n}\n\nexport function normalizeSkipLike(v: unknown): MaybeIntOrDynamic {\n return normalizeIntLike('skip', v, {\n min: 0,\n max: MAX_LIMIT_OFFSET,\n allowZero: true,\n }) as MaybeIntOrDynamic\n}\n\nexport function getPaginationParams(\n method: string,\n args: PrismaQueryArgs,\n): {\n take?: IntOrDynamic\n skip?: IntOrDynamic\n cursor?: Record<string, unknown>\n} {\n if (method === 'findMany') {\n return {\n take: normalizeTakeLike(args.take),\n skip: normalizeSkipLike(args.skip),\n cursor: args.cursor,\n }\n }\n\n if (method === 'findFirst') {\n const skip = normalizeSkipLike(args.skip)\n return { take: 1, skip: skip ?? 0 }\n }\n\n if (method === 'findUnique') {\n return { take: 1, skip: 0 }\n }\n\n return {}\n}\n","import { isDynamicParameter } from '@dee-wan/schema-parser'\nimport {\n caseInsensitiveLike,\n caseInsensitiveEquals,\n inArray,\n notInArray,\n prepareArrayParam,\n SqlDialect,\n} from '../../sql-builder-dialect'\nimport { Ops, Modes, SQL_TEMPLATES, Wildcards } from '../shared/constants'\nimport { createError } from '../shared/errors'\nimport { ParamStore } from '../shared/param-store'\nimport { isNotNullish, isPlainObject } from '../shared/validators/type-guards'\n\nexport function buildNotComposite(\n expr: string,\n val: Record<string, unknown>,\n params: ParamStore,\n dialect: SqlDialect,\n buildOp: (\n expr: string,\n op: string,\n subVal: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n ) => string,\n separator: string,\n): string {\n const entries = Object.entries(val).filter(\n ([k, v]) => k !== 'mode' && v !== undefined,\n )\n if (entries.length === 0) return ''\n\n const clauses: string[] = []\n for (const [subOp, subVal] of entries) {\n const sub = buildOp(expr, subOp, subVal, params, dialect)\n if (sub && sub.trim().length > 0) clauses.push(`(${sub})`)\n }\n\n if (clauses.length === 0) return ''\n if (clauses.length === 1) return `${SQL_TEMPLATES.NOT} ${clauses[0]}`\n return `${SQL_TEMPLATES.NOT} (${clauses.join(separator)})`\n}\n\nexport function buildScalarOperator(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n mode?: 'insensitive' | 'default',\n fieldType?: string,\n dialect?: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (val === null) {\n return handleNullValue(expr, op)\n }\n\n if (op === Ops.NOT && isPlainObject(val)) {\n return handleNotOperator(expr, val, params, mode, fieldType, dialect)\n }\n\n if (op === Ops.NOT) {\n const placeholder = params.addAuto(val)\n return `${expr} <> ${placeholder}`\n }\n\n if (\n op === Ops.EQUALS &&\n mode === Modes.INSENSITIVE &&\n isNotNullish(dialect)\n ) {\n const placeholder = params.addAuto(val)\n return caseInsensitiveEquals(expr, placeholder, dialect)\n }\n\n const STRING_LIKE_OPS = new Set([\n Ops.CONTAINS,\n Ops.STARTS_WITH,\n Ops.ENDS_WITH,\n ])\n\n if (STRING_LIKE_OPS.has(op as any)) {\n if (!isNotNullish(dialect)) {\n throw createError(`Like operators require a SQL dialect`, {\n operator: op,\n })\n }\n return handleLikeOperator(expr, op, val, params, mode, dialect)\n }\n\n if (op === Ops.IN || op === Ops.NOT_IN) {\n if (!isNotNullish(dialect)) {\n throw createError(`IN operators require a SQL dialect`, { operator: op })\n }\n return handleInOperator(expr, op, val, params, dialect)\n }\n\n return handleComparisonOperator(expr, op, val, params)\n}\n\nfunction handleNullValue(expr: string, op: string): string {\n if (op === Ops.EQUALS) return `${expr} ${SQL_TEMPLATES.IS_NULL}`\n if (op === Ops.NOT) return `${expr} ${SQL_TEMPLATES.IS_NOT_NULL}`\n throw createError(`Operator '${op}' doesn't support null`, { operator: op })\n}\n\nfunction normalizeMode(v: unknown): 'insensitive' | 'default' | undefined {\n if (v === Modes.INSENSITIVE) return Modes.INSENSITIVE\n if (v === Modes.DEFAULT) return Modes.DEFAULT\n return undefined\n}\n\nfunction handleNotOperator(\n expr: string,\n val: Record<string, unknown>,\n params: ParamStore,\n outerMode?: 'insensitive' | 'default',\n fieldType?: string,\n dialect?: SqlDialect,\n): string {\n const innerMode = normalizeMode(val.mode)\n const effectiveMode = innerMode ?? outerMode\n\n return buildNotComposite(\n expr,\n val,\n params,\n dialect!,\n (e, subOp, subVal, p, d) =>\n buildScalarOperator(e, subOp, subVal, p, effectiveMode, fieldType, d),\n ` ${SQL_TEMPLATES.AND} `,\n )\n}\n\nfunction buildDynamicLikePattern(\n op: string,\n placeholder: string,\n dialect: SqlDialect,\n): string {\n if (dialect === 'postgres') {\n switch (op) {\n case Ops.CONTAINS:\n return `('%' || ${placeholder} || '%')`\n case Ops.STARTS_WITH:\n return `(${placeholder} || '%')`\n case Ops.ENDS_WITH:\n return `('%' || ${placeholder})`\n default:\n return placeholder\n }\n }\n\n switch (op) {\n case Ops.CONTAINS:\n return `('%' || ${placeholder} || '%')`\n case Ops.STARTS_WITH:\n return `(${placeholder} || '%')`\n case Ops.ENDS_WITH:\n return `('%' || ${placeholder})`\n default:\n return placeholder\n }\n}\n\nfunction handleLikeOperator(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n mode: 'insensitive' | 'default' | undefined,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (isDynamicParameter(val)) {\n const placeholder = params.addAuto(val)\n const patternExpr = buildDynamicLikePattern(op, placeholder, dialect)\n\n if (mode === Modes.INSENSITIVE) {\n return caseInsensitiveLike(expr, patternExpr, dialect)\n }\n\n return `${expr} ${SQL_TEMPLATES.LIKE} ${patternExpr}`\n }\n\n const placeholder = params.add(Wildcards[op](String(val)))\n\n if (mode === Modes.INSENSITIVE) {\n return caseInsensitiveLike(expr, placeholder, dialect)\n }\n\n return `${expr} ${SQL_TEMPLATES.LIKE} ${placeholder}`\n}\n\nfunction handleInOperator(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (isDynamicParameter(val)) {\n const placeholder = params.addAuto(val)\n return op === Ops.IN\n ? inArray(expr, placeholder, dialect)\n : notInArray(expr, placeholder, dialect)\n }\n\n if (!Array.isArray(val)) {\n throw createError(`IN operators require array value`, {\n operator: op,\n value: val,\n })\n }\n\n if (val.length === 0) {\n return op === Ops.IN ? '0=1' : '1=1'\n }\n\n const paramValue = prepareArrayParam(val as unknown[], dialect)\n const placeholder = params.add(paramValue)\n\n return op === Ops.IN\n ? inArray(expr, placeholder, dialect)\n : notInArray(expr, placeholder, dialect)\n}\n\nfunction handleComparisonOperator(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n): string {\n if (val === undefined) return ''\n\n const COMPARISON_OPS: Record<string, string> = {\n [Ops.EQUALS]: '=',\n [Ops.GT]: '>',\n [Ops.GTE]: '>=',\n [Ops.LT]: '<',\n [Ops.LTE]: '<=',\n }\n\n const sqlOp = COMPARISON_OPS[op]\n if (!sqlOp) {\n throw createError(`Unsupported scalar operator: ${op}`, { operator: op })\n }\n\n const placeholder = params.addAuto(val)\n return `${expr} ${sqlOp} ${placeholder}`\n}\n","import { isDynamicParameter } from '@dee-wan/schema-parser'\nimport {\n arrayContains,\n arrayOverlaps,\n arrayContainsAll,\n arrayIsEmpty,\n arrayIsNotEmpty,\n arrayEquals,\n getArrayType,\n prepareArrayParam,\n SqlDialect,\n} from '../../sql-builder-dialect'\nimport {\n LIMITS,\n Ops,\n SQL_TEMPLATES,\n SQL_TEMPLATES as T,\n} from '../shared/constants'\nimport { createError } from '../shared/errors'\nimport { ParamStore } from '../shared/param-store'\nimport { isEmptyArray, isPlainObject } from '../shared/validators/type-guards'\n\nfunction buildArrayParam(\n val: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n): string {\n if (isDynamicParameter(val)) {\n return params.addAuto(val)\n }\n\n if (!Array.isArray(val)) {\n throw createError(`Array operation requires array value`, { value: val })\n }\n\n const paramValue = prepareArrayParam(val as unknown[], dialect)\n return params.add(paramValue)\n}\n\nexport function buildArrayOperator(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n fieldType: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (val === null) {\n if (op === Ops.EQUALS) return `${expr} ${SQL_TEMPLATES.IS_NULL}`\n if (op === Ops.NOT) return `${expr} ${SQL_TEMPLATES.IS_NOT_NULL}`\n }\n\n const cast = getArrayType(fieldType, dialect)\n\n if (op === Ops.EQUALS) {\n return handleArrayEquals(expr, val, params, cast, dialect)\n }\n\n if (op === Ops.NOT) {\n return handleArrayNot(expr, val, params, cast, dialect)\n }\n\n switch (op) {\n case Ops.HAS:\n return handleArrayHas(expr, val, params, cast, dialect)\n case Ops.HAS_SOME:\n return handleArrayHasSome(expr, val, params, cast, dialect)\n case Ops.HAS_EVERY:\n return handleArrayHasEvery(expr, val, params, cast, dialect)\n case Ops.IS_EMPTY:\n return handleArrayIsEmpty(expr, val, dialect)\n default:\n throw createError(`Unknown array operator: ${op}`, { operator: op })\n }\n}\n\nfunction handleArrayEquals(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (isEmptyArray(val)) {\n return arrayIsEmpty(expr, dialect)\n }\n\n const placeholder = buildArrayParam(val, params, dialect)\n return arrayEquals(expr, placeholder, cast, dialect)\n}\n\nfunction handleArrayNot(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n let target: unknown = val\n\n if (isPlainObject(val)) {\n const entries = Object.entries(val).filter(([, v]) => v !== undefined)\n if (entries.length === 1 && entries[0][0] === Ops.EQUALS) {\n target = entries[0][1]\n } else {\n throw createError(`Array NOT only supports { equals: ... } shape`, {\n operator: Ops.NOT,\n value: val,\n })\n }\n }\n\n if (target === null) {\n return `${expr} ${SQL_TEMPLATES.IS_NOT_NULL}`\n }\n\n if (isEmptyArray(target)) {\n return arrayIsNotEmpty(expr, dialect)\n }\n\n const placeholder = buildArrayParam(target, params, dialect)\n return `${T.NOT} (${arrayEquals(expr, placeholder, cast, dialect)})`\n}\n\nfunction handleArrayHas(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (val === null) {\n throw createError(`has requires scalar value`, {\n operator: Ops.HAS,\n value: val,\n })\n }\n\n if (!isDynamicParameter(val) && Array.isArray(val)) {\n throw createError(`has requires scalar value (single element), not array`, {\n operator: Ops.HAS,\n value: val,\n })\n }\n\n if (isPlainObject(val)) {\n throw createError(`has requires scalar value`, {\n operator: Ops.HAS,\n value: val,\n })\n }\n\n const placeholder = params.addAuto(val)\n return arrayContains(expr, placeholder, cast, dialect)\n}\n\nfunction handleArrayHasSome(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (isDynamicParameter(val)) {\n const placeholder = params.addAuto(val)\n return arrayOverlaps(expr, placeholder, cast, dialect)\n }\n\n if (!Array.isArray(val)) {\n throw createError(`hasSome requires array value`, {\n operator: Ops.HAS_SOME,\n value: val,\n })\n }\n\n if (val.length > LIMITS.MAX_ARRAY_SIZE) {\n throw createError(\n `Array too large (${val.length} elements, max ${LIMITS.MAX_ARRAY_SIZE})`,\n { operator: Ops.HAS_SOME, value: `[${val.length} items]` },\n )\n }\n\n if (val.length === 0) return '0=1'\n\n const paramValue = prepareArrayParam(val as unknown[], dialect)\n const placeholder = params.add(paramValue)\n return arrayOverlaps(expr, placeholder, cast, dialect)\n}\n\nfunction handleArrayHasEvery(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n const placeholder = buildArrayParam(val, params, dialect)\n return arrayContainsAll(expr, placeholder, cast, dialect)\n}\n\nfunction handleArrayIsEmpty(\n expr: string,\n val: unknown,\n dialect: SqlDialect,\n): string {\n if (typeof val !== 'boolean') {\n throw createError(`isEmpty requires boolean value`, {\n operator: Ops.IS_EMPTY,\n value: val,\n })\n }\n\n return val === true\n ? arrayIsEmpty(expr, dialect)\n : arrayIsNotEmpty(expr, dialect)\n}\n","import {\n jsonExtractText,\n jsonExtractNumeric,\n jsonToText,\n caseInsensitiveLike,\n SqlDialect,\n} from '../../sql-builder-dialect'\nimport { LIMITS, Ops, SQL_TEMPLATES } from '../shared/constants'\nimport { createError } from '../shared/errors'\nimport { ParamStore } from '../shared/param-store'\nimport { isNotNullish, isPlainObject } from '../shared/validators/type-guards'\n\nconst SAFE_JSON_PATH_SEGMENT = /^[a-zA-Z_]\\w*$/\n\nfunction validateJsonPathSegments(segments: string[]): void {\n for (const segment of segments) {\n if (typeof segment !== 'string') {\n throw createError('JSON path segments must be strings', {\n operator: Ops.PATH,\n value: segment,\n })\n }\n\n if (!SAFE_JSON_PATH_SEGMENT.test(segment)) {\n throw createError(\n `Invalid JSON path segment: '${segment}'. Must be alphanumeric with underscores, starting with letter or underscore.`,\n { operator: Ops.PATH, value: segment },\n )\n }\n }\n}\n\nexport function buildJsonOperator(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (op === Ops.PATH && isPlainObject(val) && 'path' in val) {\n return handleJsonPath(expr, val, params, dialect)\n }\n\n const jsonWildcards: Record<string, (v: string) => string> = {\n [Ops.STRING_CONTAINS]: (v) => `%${v}%`,\n [Ops.STRING_STARTS_WITH]: (v) => `${v}%`,\n [Ops.STRING_ENDS_WITH]: (v) => `%${v}`,\n }\n\n if (op in jsonWildcards) {\n return handleJsonWildcard(expr, op, val, params, jsonWildcards, dialect)\n }\n\n throw createError(`Unsupported JSON operator: ${op}`, { operator: op })\n}\n\nfunction handleJsonPath(\n expr: string,\n val: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n): string {\n const v = val as {\n path: string[]\n equals?: unknown\n gt?: unknown\n gte?: unknown\n lt?: unknown\n lte?: unknown\n }\n\n if (!Array.isArray(v.path)) {\n throw createError('JSON path must be an array', { operator: Ops.PATH })\n }\n\n if (v.path.length === 0) {\n throw createError('JSON path cannot be empty', { operator: Ops.PATH })\n }\n\n validateJsonPathSegments(v.path)\n\n const pathExpr =\n dialect === 'sqlite'\n ? params.add(`$.${v.path.join('.')}`)\n : params.add(v.path)\n\n const rawOps: [string, unknown][] = [\n ['=', v.equals],\n ['>', v.gt],\n ['>=', v.gte],\n ['<', v.lt],\n ['<=', v.lte],\n ]\n\n const ops: [string, unknown][] = rawOps.filter(\n ([, value]) => value !== undefined,\n )\n\n if (ops.length === 0) {\n throw createError('JSON path query missing comparison operator', {\n operator: Ops.PATH,\n })\n }\n\n const parts: string[] = []\n\n for (const [sqlOp, value] of ops) {\n if (value === null) {\n const base = jsonExtractText(expr, pathExpr, dialect)\n parts.push(`${base} ${SQL_TEMPLATES.IS_NULL}`)\n continue\n }\n\n const valPh = params.add(value)\n const base =\n typeof value === 'number'\n ? jsonExtractNumeric(expr, pathExpr, dialect)\n : jsonExtractText(expr, pathExpr, dialect)\n parts.push(`${base} ${sqlOp} ${valPh}`)\n }\n\n return parts.length === 1 ? parts[0] : `(${parts.join(' AND ')})`\n}\n\nfunction handleJsonWildcard(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n wildcards: Record<string, (v: string) => string>,\n dialect: SqlDialect,\n): string {\n if (!isNotNullish(val)) {\n throw createError(`JSON string operator requires non-null value`, {\n operator: op,\n value: val,\n })\n }\n\n if (isPlainObject(val) || Array.isArray(val)) {\n throw createError(`JSON string operator requires scalar value`, {\n operator: op,\n value: val,\n })\n }\n\n const strVal = String(val)\n if (strVal.length > LIMITS.MAX_STRING_LENGTH) {\n throw createError(\n `String too long (${strVal.length} chars, max ${LIMITS.MAX_STRING_LENGTH})`,\n { operator: op },\n )\n }\n\n const placeholder = params.add(wildcards[op](strVal))\n const jsonText = jsonToText(expr, dialect)\n return caseInsensitiveLike(jsonText, placeholder, dialect)\n}\n","import { isValidRelationField, joinCondition } from '../joins'\nimport {\n SQL_TEMPLATES,\n RelationFilters,\n SQL_SEPARATORS,\n DEFAULT_WHERE_CLAUSE,\n} from '../shared/constants'\nimport { createError } from '../shared/errors'\nimport {\n buildTableReference,\n normalizeKeyList,\n quote,\n} from '../shared/sql-utils'\nimport { BuildContext, QueryResult } from '../shared/types'\nimport { isNotNullish, isPlainObject } from '../shared/validators/type-guards'\nimport { Field, Model } from '../../types'\n\nexport interface IWhereBuilder {\n build(where: Record<string, unknown>, ctx: BuildContext): QueryResult\n}\n\ntype ToOneFilterKey = 'is' | 'isNot'\n\ntype RelationFilterArgs = {\n fieldName: string\n value: Record<string, unknown>\n ctx: BuildContext\n whereBuilder: IWhereBuilder\n field: Field\n relModel: Model\n relTable: string\n relAlias: string\n join: string\n}\n\nconst NO_JOINS: readonly string[] = Object.freeze([] as string[])\n\nfunction isListRelation(fieldType: unknown): boolean {\n return typeof fieldType === 'string' && fieldType.endsWith('[]')\n}\n\nfunction buildToOneNullCheck(\n field: Field,\n parentAlias: string,\n relTable: string,\n relAlias: string,\n join: string,\n wantNull: boolean,\n): string {\n const isLocal = field.isForeignKeyLocal === true\n\n const fkFields = normalizeKeyList(field.foreignKey)\n if (isLocal) {\n if (fkFields.length === 0) {\n throw createError(`Relation '${field.name}' is missing foreignKey`, {\n field: field.name,\n })\n }\n\n const parts = fkFields.map((fk) => {\n const safe = fk.replace(/\"/g, '\"\"')\n const expr = `${parentAlias}.\"${safe}\"`\n return wantNull\n ? `${expr} ${SQL_TEMPLATES.IS_NULL}`\n : `${expr} ${SQL_TEMPLATES.IS_NOT_NULL}`\n })\n\n if (parts.length === 1) return parts[0]\n return wantNull ? `(${parts.join(' OR ')})` : `(${parts.join(' AND ')})`\n }\n\n const existsSql = `EXISTS (${SQL_TEMPLATES.SELECT} 1 ${SQL_TEMPLATES.FROM} ${relTable} ${relAlias} ${SQL_TEMPLATES.WHERE} ${join})`\n return wantNull ? `${SQL_TEMPLATES.NOT} ${existsSql}` : existsSql\n}\n\nfunction buildToOneExistsMatch(\n relTable: string,\n relAlias: string,\n join: string,\n sub: QueryResult,\n): string {\n const joins = sub.joins.length > 0 ? ` ${sub.joins.join(' ')}` : ''\n return `EXISTS (${SQL_TEMPLATES.SELECT} 1 ${SQL_TEMPLATES.FROM} ${relTable} ${relAlias}${joins} ${SQL_TEMPLATES.WHERE} ${join} ${SQL_TEMPLATES.AND} ${sub.clause})`\n}\n\nfunction buildToOneNotExistsMatch(\n relTable: string,\n relAlias: string,\n join: string,\n sub: QueryResult,\n): string {\n const joins = sub.joins.length > 0 ? ` ${sub.joins.join(' ')}` : ''\n return `${SQL_TEMPLATES.NOT} EXISTS (${SQL_TEMPLATES.SELECT} 1 ${SQL_TEMPLATES.FROM} ${relTable} ${relAlias}${joins} ${SQL_TEMPLATES.WHERE} ${join} ${SQL_TEMPLATES.AND} ${sub.clause})`\n}\n\nfunction buildListRelationFilters(args: RelationFilterArgs): QueryResult {\n const {\n fieldName,\n value,\n ctx,\n whereBuilder,\n relModel,\n relTable,\n relAlias,\n join,\n } = args\n\n // OPTIMIZATION: Check for LEFT JOIN opportunity for \"none\" filters\n const noneValue = value[RelationFilters.NONE]\n if (noneValue !== undefined && noneValue !== null) {\n const sub = whereBuilder.build(noneValue as Record<string, unknown>, {\n ...ctx,\n alias: relAlias,\n model: relModel,\n path: [...ctx.path, fieldName, RelationFilters.NONE],\n isSubquery: true,\n depth: ctx.depth + 1,\n })\n\n // Use LEFT JOIN + IS NULL for simple \"none\" filters (10x+ faster)\n // Only safe for top-level queries where we can add joins\n const isEmptyFilter =\n isPlainObject(noneValue) &&\n Object.keys(noneValue as Record<string, unknown>).length === 0\n const canOptimize =\n !ctx.isSubquery &&\n isEmptyFilter &&\n sub.clause === DEFAULT_WHERE_CLAUSE &&\n sub.joins.length === 0\n\n if (canOptimize) {\n // Find a reliable field to check for NULL (prefer required fields, fallback to id)\n const checkField =\n relModel.fields.find(\n (f) => !f.isRelation && f.isRequired && f.name !== 'id',\n ) || relModel.fields.find((f) => !f.isRelation && f.name === 'id')\n\n if (checkField) {\n const leftJoinSql = `LEFT JOIN ${relTable} ${relAlias} ON ${join}`\n const whereClause = `${relAlias}.${quote(checkField.name)} IS NULL`\n\n return Object.freeze({\n clause: whereClause,\n joins: [leftJoinSql] as readonly string[],\n })\n }\n }\n }\n\n // Standard NOT EXISTS approach (fallback for complex filters or subqueries)\n const filters: Array<{\n key:\n | typeof RelationFilters.SOME\n | typeof RelationFilters.EVERY\n | typeof RelationFilters.NONE\n wrap: (c: string, j: string) => string\n }> = [\n {\n key: RelationFilters.SOME,\n wrap: (c, j) =>\n `EXISTS (${SQL_TEMPLATES.SELECT} 1 ${SQL_TEMPLATES.FROM} ${relTable} ${relAlias}${j} ${SQL_TEMPLATES.WHERE} ${join} ${SQL_TEMPLATES.AND} ${c})`,\n },\n {\n key: RelationFilters.EVERY,\n wrap: (c, j) =>\n `${SQL_TEMPLATES.NOT} EXISTS (${SQL_TEMPLATES.SELECT} 1 ${SQL_TEMPLATES.FROM} ${relTable} ${relAlias}${j} ${SQL_TEMPLATES.WHERE} ${join} ${SQL_TEMPLATES.AND} ${SQL_TEMPLATES.NOT} (${c}))`,\n },\n {\n key: RelationFilters.NONE,\n wrap: (c, j) => {\n // OPTIMIZATION: Skip redundant \"AND 1=1\" when no filter conditions\n const condition =\n c === DEFAULT_WHERE_CLAUSE ? '' : ` ${SQL_TEMPLATES.AND} ${c}`\n return `${SQL_TEMPLATES.NOT} EXISTS (${SQL_TEMPLATES.SELECT} 1 ${SQL_TEMPLATES.FROM} ${relTable} ${relAlias}${j} ${SQL_TEMPLATES.WHERE} ${join}${condition})`\n },\n },\n ]\n\n const clauses: string[] = []\n\n for (const { key, wrap } of filters) {\n const raw = value[key]\n if (raw === undefined || raw === null) continue\n\n const sub = whereBuilder.build(raw as Record<string, unknown>, {\n ...ctx,\n alias: relAlias,\n model: relModel,\n path: [...ctx.path, fieldName, key],\n isSubquery: true,\n depth: ctx.depth + 1,\n })\n\n const j = sub.joins.length > 0 ? ` ${sub.joins.join(' ')}` : ''\n clauses.push(wrap(sub.clause, j))\n }\n\n if (clauses.length === 0) {\n throw createError(\n `List relation '${fieldName}' requires one of { some, every, none }`,\n { field: fieldName, path: ctx.path, modelName: ctx.model.name },\n )\n }\n\n return Object.freeze({\n clause: clauses.join(SQL_SEPARATORS.CONDITION_AND),\n joins: NO_JOINS,\n })\n}\n\nfunction buildToOneRelationFilters(args: RelationFilterArgs): QueryResult {\n const {\n fieldName,\n value,\n ctx,\n whereBuilder,\n field,\n relModel,\n relTable,\n relAlias,\n join,\n } = args\n\n const hasSomeEveryNone =\n isNotNullish(value[RelationFilters.SOME]) ||\n isNotNullish(value[RelationFilters.EVERY]) ||\n isNotNullish(value[RelationFilters.NONE])\n\n if (hasSomeEveryNone) {\n throw createError(\n `To-one relation '${fieldName}' does not support { some, every, none }; use { is, isNot }`,\n { field: fieldName, path: ctx.path, modelName: ctx.model.name },\n )\n }\n\n const hasIs = Object.prototype.hasOwnProperty.call(value, 'is')\n const hasIsNot = Object.prototype.hasOwnProperty.call(value, 'isNot')\n\n let filterKey: ToOneFilterKey\n let filterVal: unknown\n\n if (hasIs) {\n filterKey = 'is'\n filterVal = value.is\n } else if (hasIsNot) {\n filterKey = 'isNot'\n filterVal = value.isNot\n } else {\n filterKey = 'is'\n filterVal = value\n }\n\n if (filterVal === undefined) {\n return Object.freeze({\n clause: DEFAULT_WHERE_CLAUSE,\n joins: NO_JOINS,\n })\n }\n\n if (filterVal === null) {\n const wantNull = filterKey === 'is'\n const clause = buildToOneNullCheck(\n field,\n ctx.alias,\n relTable,\n relAlias,\n join,\n wantNull,\n )\n return Object.freeze({\n clause,\n joins: NO_JOINS,\n })\n }\n\n if (!isPlainObject(filterVal)) {\n throw createError(\n `Relation '${fieldName}' filter must be an object or null`,\n {\n field: fieldName,\n path: ctx.path,\n modelName: ctx.model.name,\n value: filterVal,\n },\n )\n }\n\n const sub = whereBuilder.build(filterVal, {\n ...ctx,\n alias: relAlias,\n model: relModel,\n path: [...ctx.path, fieldName, filterKey],\n isSubquery: true,\n depth: ctx.depth + 1,\n })\n\n const clause =\n filterKey === 'is'\n ? buildToOneExistsMatch(relTable, relAlias, join, sub)\n : buildToOneNotExistsMatch(relTable, relAlias, join, sub)\n\n return Object.freeze({\n clause,\n joins: NO_JOINS,\n })\n}\n\nfunction ensureRelationFilterObject(\n fieldName: string,\n value: Record<string, unknown>,\n ctx: BuildContext,\n): void {\n if (!isPlainObject(value)) {\n throw createError(`Relation filter '${fieldName}' must be an object`, {\n path: [...ctx.path, fieldName],\n field: fieldName,\n modelName: ctx.model.name,\n value,\n })\n }\n}\n\nfunction buildRelation(\n fieldName: string,\n value: Record<string, unknown>,\n ctx: BuildContext,\n whereBuilder: IWhereBuilder,\n): QueryResult {\n const field = ctx.model.fields.find((f) => f.name === fieldName)\n\n if (!isValidRelationField(field)) {\n throw createError(`Invalid relation '${fieldName}'`, {\n field: fieldName,\n path: ctx.path,\n modelName: ctx.model.name,\n })\n }\n\n const relModel = ctx.schemaModels.find((m) => m.name === field.relatedModel)\n if (!isNotNullish(relModel)) {\n throw createError(\n `Related model '${field.relatedModel}' not found in schema. ` +\n `Available models: ${ctx.schemaModels.map((m) => m.name).join(', ')}`,\n {\n field: fieldName,\n path: ctx.path,\n modelName: ctx.model.name,\n },\n )\n }\n\n const relTable = buildTableReference(\n SQL_TEMPLATES.PUBLIC_SCHEMA,\n relModel.tableName,\n ctx.dialect,\n )\n const relAlias = ctx.aliasGen.next(fieldName)\n const join = joinCondition(field, ctx.model, relModel, ctx.alias, relAlias)\n\n const args: RelationFilterArgs = {\n fieldName,\n value,\n ctx,\n whereBuilder,\n field,\n relModel,\n relTable,\n relAlias,\n join,\n }\n\n if (isListRelation(field.type)) return buildListRelationFilters(args)\n return buildToOneRelationFilters(args)\n}\n\nexport function buildTopLevelRelation(\n fieldName: string,\n value: Record<string, unknown>,\n ctx: BuildContext,\n whereBuilder: IWhereBuilder,\n): QueryResult {\n ensureRelationFilterObject(fieldName, value, ctx)\n return buildRelation(fieldName, value, ctx, whereBuilder)\n}\n\nexport function buildNestedRelation(\n fieldName: string,\n value: Record<string, unknown>,\n ctx: BuildContext,\n whereBuilder: IWhereBuilder,\n): QueryResult {\n return buildTopLevelRelation(fieldName, value, ctx, whereBuilder)\n}\n","// packages/generator/src/optimizer/builder/shared/validators/field-validators.ts\n\n/**\n * Field and Model Validation\n * Validates fields exist on models and operators are valid\n */\n\nimport { Model, Field } from '../../../types'\nimport { Ops } from '../constants'\nimport { createError } from '../errors'\nimport { isNotNullish, isArrayType, isJsonType } from './type-guards'\n\n// ═══════════════════════════════════════════════════════════════\n// Field Existence\n// ═══════════════════════════════════════════════════════════════\n\nexport function assertFieldExists(\n name: string,\n model: Model,\n path: readonly string[],\n): Field {\n const field = model.fields.find((f) => f.name === name)\n if (!isNotNullish(field)) {\n throw createError(`Field '${name}' does not exist on '${model.name}'`, {\n field: name,\n path,\n modelName: model.name,\n availableFields: model.fields.map((f) => f.name),\n })\n }\n return field\n}\n\n// ═══════════════════════════════════════════════════════════════\n// Operator Validation\n// ═══════════════════════════════════════════════════════════════\n\nexport function assertValidOperator(\n fieldName: string,\n op: string,\n fieldType: string | undefined,\n path: readonly string[],\n modelName: string,\n): void {\n if (!isNotNullish(fieldType)) return\n\n const ARRAY_OPS = new Set([\n Ops.HAS,\n Ops.HAS_SOME,\n Ops.HAS_EVERY,\n Ops.IS_EMPTY,\n ])\n const JSON_OPS = new Set([\n Ops.PATH,\n Ops.STRING_CONTAINS,\n Ops.STRING_STARTS_WITH,\n Ops.STRING_ENDS_WITH,\n ])\n\n const isArrayOp = ARRAY_OPS.has(op as any)\n const isFieldArray = isArrayType(fieldType)\n const arrayOpMismatch = isArrayOp && !isFieldArray\n\n if (arrayOpMismatch) {\n throw createError(`'${op}' requires array field, got '${fieldType}'`, {\n operator: op,\n field: fieldName,\n path,\n modelName,\n })\n }\n\n const isJsonOp = JSON_OPS.has(op as any)\n const isFieldJson = isJsonType(fieldType)\n const jsonOpMismatch = isJsonOp && !isFieldJson\n\n if (jsonOpMismatch) {\n throw createError(`'${op}' requires JSON field, got '${fieldType}'`, {\n operator: op,\n field: fieldName,\n path,\n modelName,\n })\n }\n}","import { isRelationField } from '../joins'\nimport { buildScalarOperator } from './operators-scalar'\nimport { buildArrayOperator } from './operators-array'\nimport { buildJsonOperator } from './operators-json'\nimport {\n buildTopLevelRelation,\n buildNestedRelation,\n IWhereBuilder,\n} from './relations'\nimport {\n DEFAULT_WHERE_CLAUSE,\n LogicalOps,\n SQL_SEPARATORS,\n SQL_TEMPLATES,\n Ops,\n} from '../shared/constants'\nimport { createError } from '../shared/errors'\nimport { col } from '../shared/sql-utils'\nimport { BuildContext, QueryResult } from '../shared/types'\nimport {\n assertFieldExists,\n assertValidOperator,\n} from '../shared/validators/field-validators'\nimport {\n isEmptyWhere,\n isValidWhereClause,\n} from '../shared/validators/sql-validators'\nimport {\n isNonEmptyArray,\n isArrayType,\n isJsonType,\n isPlainObject,\n} from '../shared/validators/type-guards'\n\ntype LogicalOperator = 'AND' | 'OR' | 'NOT'\n\nclass WhereBuilder implements IWhereBuilder {\n build(where: Record<string, unknown>, ctx: BuildContext): QueryResult {\n if (!isPlainObject(where)) {\n throw createError('where must be an object', {\n path: ctx.path,\n modelName: ctx.model.name,\n })\n }\n return buildWhereInternal(where, ctx, this)\n }\n}\n\nconst MAX_QUERY_DEPTH = 50\nconst EMPTY_JOINS: readonly string[] = Object.freeze([])\n\nexport const whereBuilderInstance = new WhereBuilder()\n\nfunction freezeResult(\n clause: string,\n joins: readonly string[] = EMPTY_JOINS,\n): QueryResult {\n return Object.freeze({ clause, joins })\n}\n\nfunction dedupePreserveOrder(items: readonly string[]): readonly string[] {\n if (items.length <= 1) return Object.freeze([...items])\n const seen = new Set<string>()\n const out: string[] = []\n for (const s of items) {\n if (!seen.has(s)) {\n seen.add(s)\n out.push(s)\n }\n }\n return Object.freeze(out)\n}\n\nfunction appendResult(\n result: QueryResult,\n clauses: string[],\n allJoins: string[],\n): void {\n if (isValidWhereClause(result.clause)) clauses.push(result.clause)\n if (isNonEmptyArray(result.joins)) allJoins.push(...result.joins)\n}\n\nfunction asLogicalOperator(key: string): LogicalOperator | null {\n if (key === LogicalOps.AND) return 'AND'\n if (key === LogicalOps.OR) return 'OR'\n if (key === LogicalOps.NOT) return 'NOT'\n return null\n}\n\nfunction nextContext(ctx: BuildContext): BuildContext {\n return { ...ctx, depth: ctx.depth + 1 }\n}\n\nfunction buildRelationFilter(\n fieldName: string,\n value: Record<string, unknown>,\n ctx: BuildContext,\n builder: IWhereBuilder,\n): QueryResult {\n const ctx2 = nextContext(ctx)\n if (ctx.isSubquery) {\n return buildNestedRelation(fieldName, value, ctx2, builder)\n }\n return buildTopLevelRelation(fieldName, value, ctx2, builder)\n}\n\nfunction buildWhereEntry(\n key: string,\n value: unknown,\n ctx: BuildContext,\n builder: IWhereBuilder,\n): QueryResult {\n const op = asLogicalOperator(key)\n if (op) return buildLogical(op, value, ctx, builder)\n\n if (isRelationField(key, ctx.model)) {\n if (!isPlainObject(value)) {\n throw createError(`Relation filter '${key}' must be an object`, {\n path: [...ctx.path, key],\n field: key,\n modelName: ctx.model.name,\n value,\n })\n }\n return buildRelationFilter(key, value, ctx, builder)\n }\n\n return buildScalarField(key, value, ctx)\n}\n\nfunction buildWhereInternal(\n where: Record<string, unknown>,\n ctx: BuildContext,\n builder: IWhereBuilder,\n): QueryResult {\n if (ctx.depth > MAX_QUERY_DEPTH) {\n throw createError(\n `Query nesting too deep (max ${MAX_QUERY_DEPTH} levels). This usually indicates a circular reference.`,\n { path: ctx.path, modelName: ctx.model.name },\n )\n }\n\n if (isEmptyWhere(where)) {\n return freezeResult(DEFAULT_WHERE_CLAUSE, EMPTY_JOINS)\n }\n\n const allJoins: string[] = []\n const clauses: string[] = []\n\n for (const [key, value] of Object.entries(where)) {\n if (value === undefined) continue\n const result = buildWhereEntry(key, value, ctx, builder)\n appendResult(result, clauses, allJoins)\n }\n\n const finalClause =\n clauses.length > 0\n ? clauses.join(SQL_SEPARATORS.CONDITION_AND)\n : DEFAULT_WHERE_CLAUSE\n\n return freezeResult(finalClause, dedupePreserveOrder(allJoins))\n}\n\nfunction normalizeLogicalValue(\n operator: LogicalOperator,\n value: unknown,\n ctx: BuildContext,\n): Record<string, unknown>[] {\n if (Array.isArray(value)) {\n const out: Record<string, unknown>[] = []\n for (let i = 0; i < value.length; i++) {\n const v = value[i]\n if (v === undefined) continue\n if (!isPlainObject(v)) {\n throw createError(`${operator} entries must be objects`, {\n path: [...ctx.path, operator, String(i)],\n modelName: ctx.model.name,\n value: v,\n })\n }\n out.push(v)\n }\n return out\n }\n\n if (isPlainObject(value)) {\n return [value]\n }\n\n throw createError(`${operator} must be an object or array of objects`, {\n path: [...ctx.path, operator],\n modelName: ctx.model.name,\n value,\n })\n}\n\nfunction collectLogicalParts(\n operator: LogicalOperator,\n conditions: Record<string, unknown>[],\n ctx: BuildContext,\n builder: IWhereBuilder,\n): { joins: readonly string[]; clauses: readonly string[] } {\n const allJoins: string[] = []\n const clauses: string[] = []\n\n for (let i = 0; i < conditions.length; i++) {\n const result = builder.build(conditions[i], {\n ...ctx,\n path: [...ctx.path, operator, String(i)],\n depth: ctx.depth + 1,\n })\n\n if (isNonEmptyArray(result.joins)) allJoins.push(...result.joins)\n\n if (result.clause && result.clause !== DEFAULT_WHERE_CLAUSE) {\n clauses.push(`(${result.clause})`)\n }\n }\n\n return {\n joins: dedupePreserveOrder(allJoins),\n clauses: Object.freeze(clauses),\n }\n}\n\nfunction buildLogicalClause(\n operator: LogicalOperator,\n clauses: readonly string[],\n): string {\n if (clauses.length === 0) return DEFAULT_WHERE_CLAUSE\n\n if (operator === 'NOT') {\n if (clauses.length === 1) return `${SQL_TEMPLATES.NOT} ${clauses[0]}`\n return `${SQL_TEMPLATES.NOT} (${clauses.join(SQL_SEPARATORS.CONDITION_AND)})`\n }\n\n return clauses.join(` ${operator} `)\n}\n\nfunction buildLogical(\n operator: LogicalOperator,\n value: unknown,\n ctx: BuildContext,\n builder: IWhereBuilder,\n): QueryResult {\n const conditions = normalizeLogicalValue(operator, value, ctx)\n\n if (conditions.length === 0) {\n const clause = operator === 'OR' ? '0=1' : DEFAULT_WHERE_CLAUSE\n return freezeResult(clause, EMPTY_JOINS)\n }\n\n const { joins, clauses } = collectLogicalParts(\n operator,\n conditions,\n ctx,\n builder,\n )\n const clause = buildLogicalClause(operator, clauses)\n return freezeResult(clause, joins)\n}\n\nfunction buildScalarField(\n fieldName: string,\n value: unknown,\n ctx: BuildContext,\n): QueryResult {\n const field = assertFieldExists(fieldName, ctx.model, ctx.path)\n const expr = col(ctx.alias, fieldName, ctx.model)\n\n if (value === null) {\n return freezeResult(`${expr} ${SQL_TEMPLATES.IS_NULL}`, EMPTY_JOINS)\n }\n\n if (isPlainObject(value)) {\n const mode = value.mode as 'insensitive' | 'default' | undefined\n const ops = Object.entries(value).filter(\n ([k, v]) => k !== 'mode' && v !== undefined,\n )\n\n if (ops.length === 0) {\n return freezeResult(DEFAULT_WHERE_CLAUSE, EMPTY_JOINS)\n }\n\n const parts: string[] = []\n for (const [op, val] of ops) {\n assertValidOperator(fieldName, op, field.type, ctx.path, ctx.model.name)\n const clause = buildOperator(expr, op, val, ctx, mode, field.type)\n if (isValidWhereClause(clause)) parts.push(clause)\n }\n\n const clause =\n parts.length > 0\n ? parts.join(SQL_SEPARATORS.CONDITION_AND)\n : DEFAULT_WHERE_CLAUSE\n\n return freezeResult(clause, EMPTY_JOINS)\n }\n\n const clause = buildOperator(\n expr,\n Ops.EQUALS,\n value,\n ctx,\n undefined,\n field.type,\n )\n return freezeResult(clause || DEFAULT_WHERE_CLAUSE, EMPTY_JOINS)\n}\n\nfunction buildOperator(\n expr: string,\n op: string,\n val: unknown,\n ctx: BuildContext,\n mode?: 'insensitive' | 'default',\n fieldType?: string,\n): string {\n if (fieldType && isArrayType(fieldType)) {\n return buildArrayOperator(expr, op, val, ctx.params, fieldType, ctx.dialect)\n }\n\n if (fieldType && isJsonType(fieldType)) {\n const JSON_OPS = new Set([\n Ops.PATH,\n Ops.STRING_CONTAINS,\n Ops.STRING_STARTS_WITH,\n Ops.STRING_ENDS_WITH,\n ])\n\n if (JSON_OPS.has(op as any)) {\n return buildJsonOperator(expr, op, val, ctx.params, ctx.dialect)\n }\n }\n\n return buildScalarOperator(\n expr,\n op,\n val,\n ctx.params,\n mode,\n fieldType,\n ctx.dialect,\n )\n}\n","import { AliasGenerator } from './types'\nimport { SQL_KEYWORDS } from './constants'\n\nfunction toSafeSqlIdentifier(input: string): string {\n const raw = String(input)\n const cleaned = raw.replace(/\\W/g, '_')\n const startsOk = /^[a-zA-Z_]/.test(cleaned)\n const base = startsOk ? cleaned : `_${cleaned}`\n const fallback = base.length > 0 ? base : '_t'\n const lowered = fallback.toLowerCase()\n return SQL_KEYWORDS.has(lowered) ? `_${lowered}` : lowered\n}\n\nexport function createAliasGenerator(\n maxAliases: number = 10000,\n): AliasGenerator {\n let counter = 0\n const usedAliases = new Set<string>()\n\n return {\n next(baseName: string): string {\n if (usedAliases.size >= maxAliases) {\n throw new Error(\n `Alias generator exceeded maximum of ${maxAliases} aliases. ` +\n `This indicates a query complexity issue or potential infinite loop.`,\n )\n }\n\n const base = toSafeSqlIdentifier(baseName)\n\n const suffix = `_${counter}`\n const maxLen = 63\n const baseMax = Math.max(1, maxLen - suffix.length)\n const trimmedBase = base.length > baseMax ? base.slice(0, baseMax) : base\n\n const alias = `${trimmedBase}${suffix}`\n counter += 1\n\n if (usedAliases.has(alias)) {\n throw new Error(\n `CRITICAL: Duplicate alias '${alias}' at counter=${counter}. ` +\n `This indicates a bug in alias generation logic.`,\n )\n }\n usedAliases.add(alias)\n\n return alias\n },\n }\n}\n","import {\n extractDynamicName,\n isDynamicParameter,\n ParamMap,\n} from '@dee-wan/schema-parser'\nimport { normalizeValue } from '../../utils/normalize-value'\n\nexport interface ParamStore {\n add(value: unknown, dynamicName?: string): string\n addAuto(value: unknown): string\n snapshot(): ParamSnapshot\n readonly index: number\n}\n\ninterface ParamSnapshot {\n readonly index: number\n readonly params: readonly unknown[]\n readonly mappings: readonly ParamMap[]\n}\n\nconst MAX_PARAM_INDEX = Number.MAX_SAFE_INTEGER - 1000\n\nfunction assertSameLength(\n params: readonly unknown[],\n mappings: readonly ParamMap[],\n): void {\n if (params.length !== mappings.length) {\n throw new Error(\n `CRITICAL: State corruption - params=${params.length}, mappings=${mappings.length}`,\n )\n }\n}\n\nfunction assertValidNextIndex(index: number): void {\n if (!Number.isInteger(index) || index < 1) {\n throw new Error(`CRITICAL: Index must be integer >= 1, got ${index}`)\n }\n}\n\nfunction assertNextIndexMatches(\n mappingsLength: number,\n nextIndex: number,\n): void {\n const expected = mappingsLength + 1\n if (nextIndex !== expected) {\n throw new Error(\n `CRITICAL: Next index mismatch - expected ${expected}, got ${nextIndex}`,\n )\n }\n}\n\nfunction assertSequentialIndex(actual: number, expected: number): void {\n if (actual !== expected) {\n throw new Error(\n `CRITICAL: Indices must be sequential from 1..N. Expected ${expected}, got ${actual}`,\n )\n }\n}\n\nfunction assertExactlyOneOfDynamicOrValue(m: ParamMap): void {\n const hasDynamic = typeof m.dynamicName === 'string'\n const hasStatic = m.value !== undefined\n\n if (hasDynamic === hasStatic) {\n throw new Error(\n `CRITICAL: ParamMap ${m.index} must have exactly one of dynamicName or value`,\n )\n }\n}\n\nfunction normalizeDynamicNameOrThrow(\n dynamicName: string,\n index: number,\n): string {\n const dn = dynamicName.trim()\n if (dn.length === 0) {\n throw new Error(`CRITICAL: dynamicName cannot be empty (index=${index})`)\n }\n return dn\n}\n\nfunction assertUniqueDynamicName(dn: string, seen: Set<string>): void {\n if (seen.has(dn)) {\n throw new Error(`CRITICAL: Duplicate dynamic param name in mappings: ${dn}`)\n }\n seen.add(dn)\n}\n\nfunction validateMappingEntry(\n m: ParamMap,\n expectedIndex: number,\n seenDynamic: Set<string>,\n): void {\n assertSequentialIndex(m.index, expectedIndex)\n assertExactlyOneOfDynamicOrValue(m)\n\n if (typeof m.dynamicName === 'string') {\n const dn = normalizeDynamicNameOrThrow(m.dynamicName, m.index)\n assertUniqueDynamicName(dn, seenDynamic)\n }\n}\n\nfunction validateMappings(mappings: readonly ParamMap[]): void {\n const seenDynamic = new Set<string>()\n for (let i = 0; i < mappings.length; i++) {\n validateMappingEntry(mappings[i], i + 1, seenDynamic)\n }\n}\n\nfunction validateState(\n params: readonly unknown[],\n mappings: readonly ParamMap[],\n index: number,\n): void {\n assertSameLength(params, mappings)\n assertValidNextIndex(index)\n\n if (mappings.length === 0) return\n\n validateMappings(mappings)\n assertNextIndexMatches(mappings.length, index)\n}\n\nfunction createStoreInternal(\n startIndex: number,\n initialParams: unknown[] = [],\n initialMappings: ParamMap[] = [],\n): ParamStore {\n let index = startIndex\n const params: unknown[] = [...initialParams]\n const mappings: ParamMap[] = [...initialMappings]\n const dynamicNameToIndex = new Map<string, number>()\n\n for (const m of initialMappings) {\n if (typeof m.dynamicName === 'string') {\n dynamicNameToIndex.set(m.dynamicName.trim(), m.index)\n }\n }\n\n function assertCanAdd(): void {\n if (index > MAX_PARAM_INDEX) {\n throw new Error(\n `CRITICAL: Cannot add param - would overflow MAX_SAFE_INTEGER. Current index: ${index}`,\n )\n }\n }\n\n function normalizeDynamicName(dynamicName: string): string {\n const dn = dynamicName.trim()\n if (dn.length === 0) {\n throw new Error('CRITICAL: dynamicName cannot be empty')\n }\n return dn\n }\n\n function format(position: number): string {\n return `$${position}`\n }\n\n function addDynamic(dynamicName: string): string {\n const dn = normalizeDynamicName(dynamicName)\n const existing = dynamicNameToIndex.get(dn)\n if (existing !== undefined) {\n return format(existing)\n }\n\n const position = index\n dynamicNameToIndex.set(dn, position)\n params.push(undefined)\n mappings.push({ index: position, dynamicName: dn })\n index++\n return format(position)\n }\n\n function addStatic(value: unknown): string {\n const position = index\n const normalizedValue = normalizeValue(value)\n params.push(normalizedValue)\n mappings.push({ index: position, value: normalizedValue })\n index++\n return format(position)\n }\n\n function add(value: unknown, dynamicName?: string): string {\n assertCanAdd()\n return dynamicName === undefined\n ? addStatic(value)\n : addDynamic(dynamicName)\n }\n\n function addAuto(value: unknown): string {\n if (isDynamicParameter(value)) {\n const dynamicName = extractDynamicName(value as string)\n return add(undefined, dynamicName)\n }\n return add(value)\n }\n\n function snapshot(): ParamSnapshot {\n return Object.freeze({\n index,\n params: Object.freeze([...params]),\n mappings: Object.freeze([...mappings]),\n })\n }\n\n return {\n add,\n addAuto,\n snapshot,\n get index() {\n return index\n },\n }\n}\n\nexport function createParamStore(startIndex = 1): ParamStore {\n if (!Number.isInteger(startIndex) || startIndex < 1) {\n throw new Error(`Start index must be integer >= 1, got ${startIndex}`)\n }\n\n if (startIndex > MAX_PARAM_INDEX) {\n throw new Error(\n `Start index too high (${startIndex}), risk of overflow at MAX_SAFE_INTEGER`,\n )\n }\n\n return createStoreInternal(startIndex)\n}\n\nexport function createParamStoreFrom(\n existingParams: readonly unknown[],\n existingMappings: readonly ParamMap[],\n nextIndex: number,\n): ParamStore {\n validateState([...existingParams], [...existingMappings], nextIndex)\n return createStoreInternal(\n nextIndex,\n [...existingParams],\n [...existingMappings],\n )\n}\n","// packages/generator/src/optimizer/builder/shared/state.ts\n\nimport { DEFAULT_WHERE_CLAUSE } from './constants'\nimport { WhereClauseResult } from './types'\nimport { ParamStore } from './param-store'\n\nexport function toPublicResult(\n clause: string,\n joins: readonly string[],\n params: ParamStore,\n): WhereClauseResult {\n const snapshot = params.snapshot()\n\n return Object.freeze({\n clause: clause || DEFAULT_WHERE_CLAUSE,\n joins: Object.freeze([...joins]),\n params: snapshot.params,\n paramMappings: snapshot.mappings,\n nextParamIndex: snapshot.index,\n })\n}\n","import { SqlDialect, getGlobalDialect } from '../sql-builder-dialect'\nimport { Model } from '../types'\nimport { whereBuilderInstance } from './where/builder'\nimport { createAliasGenerator } from './shared/alias-generator'\nimport { createParamStore, ParamStore } from './shared/param-store'\nimport { toPublicResult } from './shared/state'\nimport { WhereClauseResult, BuildContext } from './shared/types'\nimport {\n validateParamConsistency,\n validateParamConsistencyFragment,\n} from './shared/validators/sql-validators'\n\ninterface BuildWhereOptions {\n alias: string\n model: Model\n schemaModels?: Model[]\n path?: string[]\n params?: ParamStore\n isSubquery?: boolean\n aliasGen?: any\n dialect?: SqlDialect\n}\n\nexport function buildWhereClause(\n where: Record<string, unknown>,\n options: BuildWhereOptions,\n): WhereClauseResult {\n const dialect = options.dialect || getGlobalDialect()\n const params = options.params ?? createParamStore()\n\n const ctx: BuildContext = {\n alias: options.alias,\n model: options.model,\n schemaModels: options.schemaModels ?? [],\n path: options.path ?? [],\n isSubquery: options.isSubquery ?? false,\n aliasGen: options.aliasGen ?? createAliasGenerator(),\n dialect,\n params,\n depth: 0,\n }\n\n const result = whereBuilderInstance.build(where, ctx)\n const publicResult = toPublicResult(result.clause, result.joins, params)\n\n if (!options.isSubquery) {\n const nums = [...publicResult.clause.matchAll(/\\$(\\d+)/g)].map((m) =>\n parseInt(m[1], 10),\n )\n if (nums.length > 0) {\n const min = Math.min(...nums)\n if (min === 1) {\n validateParamConsistency(publicResult.clause, publicResult.params)\n } else {\n validateParamConsistencyFragment(\n publicResult.clause,\n publicResult.params,\n )\n }\n }\n }\n\n return publicResult\n}\n","import { Model } from '../../types'\nimport { SCHEMA_PREFIXES, SQL_SEPARATORS } from '../shared/constants'\nimport {\n getScalarFieldSet,\n getRelationFieldSet,\n} from '../shared/model-field-cache'\nimport { col, colWithAlias, sqlStringLiteral } from '../shared/sql-utils'\nimport {\n hasProperty,\n isNotNullish,\n isNonEmptyArray,\n isPlainObject,\n} from '../shared/validators/type-guards'\n\ntype SelectEntry = readonly [string, unknown]\n\nfunction toSelectEntries(select: Record<string, unknown>): SelectEntry[] {\n const out: SelectEntry[] = []\n for (const [k, v] of Object.entries(select)) {\n if (v !== false && v !== undefined) out.push([k, v])\n }\n return out\n}\n\nfunction validateSelectKeys(\n entries: readonly SelectEntry[],\n scalarSet: ReadonlySet<string>,\n relationSet: ReadonlySet<string>,\n): void {\n const unknown: string[] = []\n for (const [k] of entries) {\n if (k === '_count') continue\n if (!scalarSet.has(k) && !relationSet.has(k)) unknown.push(k)\n }\n if (unknown.length > 0) {\n throw new Error(`Select contains unknown fields: ${unknown.join(', ')}`)\n }\n}\n\nfunction analyzeSelectEntries(\n entries: readonly SelectEntry[],\n scalarSet: ReadonlySet<string>,\n relationSet: ReadonlySet<string>,\n): {\n scalarSelected: string[]\n hasRelationSelection: boolean\n hasCount: boolean\n} {\n const scalarSelected: string[] = []\n let hasRelationSelection = false\n let hasCount = false\n\n for (const [k, v] of entries) {\n if (k === '_count') {\n hasCount = true\n continue\n }\n if (relationSet.has(k)) hasRelationSelection = true\n if (scalarSet.has(k) && v === true) scalarSelected.push(k)\n }\n\n return { scalarSelected, hasRelationSelection, hasCount }\n}\n\nfunction buildDefaultScalarFields(model: Model, alias: string): string[] {\n const excludedPrefixes = [\n SCHEMA_PREFIXES.INTERNAL,\n SCHEMA_PREFIXES.COMMENT,\n ] as const\n\n const out: string[] = []\n for (const f of model.fields) {\n if (f.isRelation) continue\n const excluded = excludedPrefixes.some((p) => f.name.startsWith(p))\n if (!excluded) out.push(colWithAlias(alias, f.name, model))\n }\n\n if (!isNonEmptyArray(out)) {\n throw new Error(`Model ${model.name} has no selectable fields`)\n }\n\n return out\n}\n\nexport function buildSelectFields(\n args: { select?: Record<string, boolean | unknown> },\n model: Model,\n alias: string,\n): string {\n const scalarSet = getScalarFieldSet(model)\n const relationSet = getRelationFieldSet(model)\n\n if (!isNotNullish(args.select)) {\n return buildDefaultScalarFields(model, alias).join(\n SQL_SEPARATORS.FIELD_LIST,\n )\n }\n\n const entries = toSelectEntries(args.select)\n validateSelectKeys(entries, scalarSet, relationSet)\n\n const { scalarSelected, hasRelationSelection, hasCount } =\n analyzeSelectEntries(entries, scalarSet, relationSet)\n\n const fields = scalarSelected.map((field) =>\n colWithAlias(alias, field, model),\n )\n\n if (!isNonEmptyArray(fields)) {\n if (hasRelationSelection) return ''\n if (!hasCount) {\n throw new Error('Select must have at least one scalar field set to true')\n }\n }\n\n return fields.join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nfunction buildAllScalarParts(model: Model, alias: string): string[] {\n const scalarFields = model.fields.filter((f) => !f.isRelation)\n if (!isNonEmptyArray(scalarFields)) {\n throw new Error(`Model ${model.name} has no scalar fields`)\n }\n\n const parts: string[] = []\n for (const field of scalarFields) {\n parts.push(\n `${sqlStringLiteral(field.name)}, ${col(alias, field.name, model)}`,\n )\n }\n return parts\n}\n\nfunction validateRelationSelectKeys(\n entries: readonly SelectEntry[],\n scalarNames: ReadonlySet<string>,\n relationNames: ReadonlySet<string>,\n): void {\n const unknown: string[] = []\n for (const [k] of entries) {\n if (!scalarNames.has(k) && !relationNames.has(k)) unknown.push(k)\n }\n if (unknown.length > 0) {\n throw new Error(`Select contains unknown fields: ${unknown.join(', ')}`)\n }\n}\n\nfunction buildSelectedScalarParts(\n entries: readonly SelectEntry[],\n scalarNames: ReadonlySet<string>,\n alias: string,\n model: Model,\n): string[] {\n const parts: string[] = []\n for (const [key, value] of entries) {\n if (!scalarNames.has(key)) continue\n if (value === true) {\n parts.push(`${sqlStringLiteral(key)}, ${col(alias, key, model)}`)\n }\n }\n return parts\n}\n\nexport function buildRelationSelect(\n relArgs: unknown,\n relModel: Model,\n relAlias: string,\n): string {\n if (relArgs === true) {\n return buildAllScalarParts(relModel, relAlias).join(\n SQL_SEPARATORS.FIELD_LIST,\n )\n }\n\n if (isPlainObject(relArgs) && hasProperty(relArgs, 'select')) {\n const sel = (relArgs as { select: Record<string, unknown> }).select\n if (!isPlainObject(sel)) {\n throw new Error(\n `Relation select must be an object for model ${relModel.name}`,\n )\n }\n\n const scalarNames = new Set(\n relModel.fields.filter((f) => !f.isRelation).map((f) => f.name),\n )\n const relationNames = new Set(\n relModel.fields.filter((f) => f.isRelation).map((f) => f.name),\n )\n\n const entries = toSelectEntries(sel)\n validateRelationSelectKeys(entries, scalarNames, relationNames)\n\n return buildSelectedScalarParts(\n entries,\n scalarNames,\n relAlias,\n relModel,\n ).join(SQL_SEPARATORS.FIELD_LIST)\n }\n\n return buildAllScalarParts(relModel, relAlias).join(SQL_SEPARATORS.FIELD_LIST)\n}\n","import { joinCondition, isValidRelationField } from '../joins'\nimport { buildOrderBy, readSkipTake } from '../pagination'\nimport { buildWhereClause } from '../where'\nimport { jsonAgg, jsonBuildObject, SqlDialect } from '../../sql-builder-dialect'\nimport { buildRelationSelect } from './fields'\nimport { Model, PrismaQueryArgs, Field } from '../../types'\nimport { createAliasGenerator } from '../shared/alias-generator'\nimport { SQL_TEMPLATES, SQL_SEPARATORS } from '../shared/constants'\nimport {\n buildTableReference,\n quote,\n sqlStringLiteral,\n normalizeKeyList,\n} from '../shared/sql-utils'\nimport { ParamStore } from '../shared/param-store'\nimport { IncludeSpec, AliasGenerator } from '../shared/types'\nimport { isValidWhereClause } from '../shared/validators/sql-validators'\nimport {\n hasProperty,\n isNonEmptyArray,\n isNotNullish,\n isPlainObject,\n} from '../shared/validators/type-guards'\nimport { reverseOrderByInput } from '../shared/order-by-utils'\nimport { addAutoScoped } from '../shared/dynamic-params'\nimport { getRelationFieldSet } from '../shared/model-field-cache'\n\ntype DynamicInt = string\ntype IntOrDynamic = number | DynamicInt\ntype OptionalIntOrDynamic = IntOrDynamic | undefined\ntype OrderByInput = unknown\ntype IncludeSelectArgs = Pick<PrismaQueryArgs, 'include' | 'select'>\n\ninterface IncludeBuildContext {\n model: Model\n schemas: Model[]\n parentAlias: string\n aliasGen: AliasGenerator\n dialect: SqlDialect\n params: ParamStore\n}\n\nfunction getRelationTableReference(\n relModel: Model,\n dialect: SqlDialect,\n): string {\n return buildTableReference(\n SQL_TEMPLATES.PUBLIC_SCHEMA,\n relModel.tableName,\n dialect,\n )\n}\n\nfunction resolveRelationOrThrow(\n model: Model,\n schemas: readonly Model[],\n relName: string,\n): { field: Field; relModel: Model } {\n const field = model.fields.find((f) => f.name === relName)\n\n if (!isNotNullish(field)) {\n throw new Error(\n `Unknown relation '${relName}' on model ${model.name}. ` +\n `Available relation fields: ${model.fields\n .filter((f) => f.isRelation)\n .map((f) => f.name)\n .join(', ')}`,\n )\n }\n\n if (!isValidRelationField(field)) {\n throw new Error(\n `Invalid relation metadata for '${relName}' on model ${model.name}. ` +\n `This usually indicates a schema parsing error (missing foreignKey/references).`,\n )\n }\n\n const relModel = schemas.find((m) => m.name === field.relatedModel)\n if (!isNotNullish(relModel)) {\n throw new Error(\n `Relation '${relName}' on model ${model.name} references missing model '${field.relatedModel}'.`,\n )\n }\n\n return { field, relModel }\n}\n\nfunction relationEntriesFromArgs(\n args: IncludeSelectArgs,\n model: Model,\n): Array<[string, unknown]> {\n const relationSet = getRelationFieldSet(model)\n const out: Array<[string, unknown]> = []\n const seen = new Set<string>()\n\n const pushFrom = (src: unknown): void => {\n if (!isPlainObject(src)) return\n for (const [k, v] of Object.entries(src)) {\n if (v === false) continue\n if (!relationSet.has(k)) continue\n if (seen.has(k)) continue\n seen.add(k)\n out.push([k, v])\n }\n }\n\n pushFrom(args.include)\n pushFrom(args.select)\n\n return out\n}\n\nfunction assertScalarField(model: Model, fieldName: string): void {\n const f = model.fields.find((x) => x.name === fieldName)\n if (!f) {\n throw new Error(\n `orderBy references unknown field '${fieldName}' on model ${model.name}`,\n )\n }\n if (f.isRelation) {\n throw new Error(\n `orderBy does not support relation field '${fieldName}' on model ${model.name}`,\n )\n }\n}\n\nfunction validateOrderByDirection(fieldName: string, v: unknown): void {\n const s = String(v).toLowerCase()\n if (s !== 'asc' && s !== 'desc') {\n throw new Error(\n `Invalid orderBy direction for '${fieldName}': ${String(v)}`,\n )\n }\n}\n\nfunction validateOrderByObject(\n fieldName: string,\n v: Record<string, unknown>,\n): void {\n if (!('sort' in v)) {\n throw new Error(\n `orderBy for '${fieldName}' must be 'asc' | 'desc' or { sort, nulls? }`,\n )\n }\n\n validateOrderByDirection(fieldName, (v as any).sort)\n\n if ('nulls' in v && isNotNullish((v as any).nulls)) {\n const n = String((v as any).nulls).toLowerCase()\n if (n !== 'first' && n !== 'last') {\n throw new Error(\n `Invalid orderBy.nulls for '${fieldName}': ${String((v as any).nulls)}`,\n )\n }\n }\n\n const allowed = new Set(['sort', 'nulls'])\n for (const k of Object.keys(v)) {\n if (!allowed.has(k)) {\n throw new Error(`Unsupported orderBy key '${k}' for field '${fieldName}'`)\n }\n }\n}\n\nfunction normalizeOrderByFieldName(name: unknown): string {\n const fieldName = String(name).trim()\n if (fieldName.length === 0) {\n throw new Error('orderBy field name cannot be empty')\n }\n return fieldName\n}\n\nfunction requirePlainObjectForOrderByEntry(\n v: unknown,\n): Record<string, unknown> {\n if (typeof v !== 'object' || v === null || Array.isArray(v)) {\n throw new Error('orderBy array entries must be objects')\n }\n return v as Record<string, unknown>\n}\n\nfunction parseSingleFieldOrderByObject(\n obj: Record<string, unknown>,\n): [string, unknown] {\n const entries = Object.entries(obj)\n if (entries.length !== 1) {\n throw new Error('orderBy array entries must have exactly one field')\n }\n const fieldName = normalizeOrderByFieldName(entries[0][0])\n return [fieldName, entries[0][1]]\n}\n\nfunction parseOrderByArray(orderBy: unknown[]): Array<[string, unknown]> {\n return orderBy.map((item) =>\n parseSingleFieldOrderByObject(requirePlainObjectForOrderByEntry(item)),\n )\n}\n\nfunction parseOrderByObject(\n orderBy: Record<string, unknown>,\n): Array<[string, unknown]> {\n const out: Array<[string, unknown]> = []\n for (const [k, v] of Object.entries(orderBy)) {\n out.push([normalizeOrderByFieldName(k), v])\n }\n return out\n}\n\nfunction getOrderByEntries(orderBy: unknown): Array<[string, unknown]> {\n if (!isNotNullish(orderBy)) return []\n\n if (Array.isArray(orderBy)) {\n return parseOrderByArray(orderBy)\n }\n\n if (typeof orderBy === 'object' && orderBy !== null) {\n return parseOrderByObject(orderBy as Record<string, unknown>)\n }\n\n throw new Error('orderBy must be an object or array of objects')\n}\n\nfunction validateOrderByForModel(model: Model, orderBy: unknown): void {\n const entries = getOrderByEntries(orderBy)\n for (const [fieldName, v] of entries) {\n assertScalarField(model, fieldName)\n if (typeof v === 'string') {\n validateOrderByDirection(fieldName, v)\n continue\n }\n if (isPlainObject(v)) {\n validateOrderByObject(fieldName, v)\n continue\n }\n throw new Error(\n `orderBy for '${fieldName}' must be 'asc' | 'desc' or { sort, nulls? }`,\n )\n }\n}\n\nfunction appendLimitOffset(\n sql: string,\n dialect: SqlDialect,\n params: ParamStore,\n takeVal: IntOrDynamic | undefined,\n skipVal: IntOrDynamic | undefined,\n scope: string,\n): string {\n const hasTake = isNotNullish(takeVal)\n const hasSkip = isNotNullish(skipVal)\n\n if (dialect === 'sqlite' && !hasTake && hasSkip) {\n const skipPh = addAutoScoped(params, skipVal, `${scope}.skip`)\n return `${sql} ${SQL_TEMPLATES.LIMIT} -1 ${SQL_TEMPLATES.OFFSET} ${skipPh}`\n }\n\n if (hasTake) {\n const takePh = addAutoScoped(params, takeVal, `${scope}.take`)\n sql = `${sql} ${SQL_TEMPLATES.LIMIT} ${takePh}`\n }\n\n if (hasSkip) {\n const skipPh = addAutoScoped(params, skipVal, `${scope}.skip`)\n sql = `${sql} ${SQL_TEMPLATES.OFFSET} ${skipPh}`\n }\n\n return sql\n}\n\nfunction readWhereInput(relArgs: unknown): Record<string, unknown> {\n if (!isPlainObject(relArgs)) return {}\n if (!hasProperty(relArgs, 'where')) return {}\n const w = (relArgs as any).where\n return isPlainObject(w) ? w : {}\n}\n\nfunction readOrderByInput(relArgs: unknown): {\n hasOrderBy: boolean\n orderBy: OrderByInput\n} {\n if (!isPlainObject(relArgs)) return { hasOrderBy: false, orderBy: undefined }\n if (!('orderBy' in relArgs)) return { hasOrderBy: false, orderBy: undefined }\n return { hasOrderBy: true, orderBy: (relArgs as any).orderBy }\n}\n\nfunction extractRelationPaginationConfig(relArgs: unknown): {\n hasOrderBy: boolean\n orderBy: unknown\n hasSkip: boolean\n hasTake: boolean\n skipVal: OptionalIntOrDynamic\n takeVal: OptionalIntOrDynamic\n} {\n const { hasOrderBy, orderBy: rawOrderByInput } = readOrderByInput(relArgs)\n const {\n hasSkip,\n hasTake,\n skipVal,\n takeVal: rawTakeVal,\n } = readSkipTake(relArgs)\n\n return {\n hasOrderBy,\n orderBy: rawOrderByInput,\n hasSkip,\n hasTake,\n skipVal,\n takeVal: rawTakeVal,\n }\n}\n\nfunction maybeReverseNegativeTake(\n takeVal: OptionalIntOrDynamic,\n hasOrderBy: boolean,\n orderByInput: unknown,\n): { takeVal: OptionalIntOrDynamic; orderByInput: unknown } {\n if (typeof takeVal !== 'number') return { takeVal, orderByInput }\n if (takeVal >= 0) return { takeVal, orderByInput }\n if (!hasOrderBy) {\n throw new Error('Negative take requires orderBy for deterministic results')\n }\n return {\n takeVal: Math.abs(takeVal),\n orderByInput: reverseOrderByInput(orderByInput),\n }\n}\n\nfunction hasIdTiebreaker(orderByInput: unknown): boolean {\n const entries = Array.isArray(orderByInput) ? orderByInput : [orderByInput]\n return entries.some((entry) =>\n isPlainObject(entry)\n ? Object.prototype.hasOwnProperty.call(entry, 'id')\n : false,\n )\n}\n\nfunction modelHasScalarId(relModel: Model): boolean {\n const idField = relModel.fields.find((f) => f.name === 'id')\n return Boolean(idField && !idField.isRelation)\n}\n\nfunction addIdTiebreaker(orderByInput: unknown): unknown {\n if (Array.isArray(orderByInput)) return [...orderByInput, { id: 'asc' }]\n return [orderByInput, { id: 'asc' }]\n}\n\nfunction ensureDeterministicOrderBy(\n relModel: Model,\n hasOrderBy: boolean,\n orderByInput: unknown,\n hasPagination: boolean,\n): unknown {\n if (!hasPagination) {\n if (hasOrderBy && isNotNullish(orderByInput)) {\n validateOrderByForModel(relModel, orderByInput)\n }\n return orderByInput\n }\n\n if (!hasOrderBy) {\n return modelHasScalarId(relModel) ? { id: 'asc' } : orderByInput\n }\n\n if (isNotNullish(orderByInput)) {\n validateOrderByForModel(relModel, orderByInput)\n }\n\n if (!modelHasScalarId(relModel)) return orderByInput\n if (hasIdTiebreaker(orderByInput)) return orderByInput\n return addIdTiebreaker(orderByInput)\n}\n\nfunction buildSelectWithNestedIncludes(\n relArgs: unknown,\n relModel: Model,\n relAlias: string,\n ctx: IncludeBuildContext,\n): string {\n let relSelect = buildRelationSelect(relArgs, relModel, relAlias)\n\n const nestedIncludes = isPlainObject(relArgs)\n ? buildIncludeSqlInternal(\n relArgs as PrismaQueryArgs,\n relModel,\n ctx.schemas,\n relAlias,\n ctx.aliasGen,\n ctx.params,\n ctx.dialect,\n )\n : []\n\n if (isNonEmptyArray(nestedIncludes)) {\n const emptyJson = ctx.dialect === 'postgres' ? `'[]'::json` : `json('[]')`\n const nestedSelects = nestedIncludes\n .map((inc) =>\n inc.isOneToOne\n ? `${sqlStringLiteral(inc.name)}, (${inc.sql})`\n : `${sqlStringLiteral(inc.name)}, COALESCE((${inc.sql}), ${emptyJson})`,\n )\n .join(SQL_SEPARATORS.FIELD_LIST)\n\n relSelect =\n isNotNullish(relSelect) && relSelect.trim().length > 0\n ? `${relSelect}${SQL_SEPARATORS.FIELD_LIST}${nestedSelects}`\n : nestedSelects\n }\n\n if (!isNotNullish(relSelect) || relSelect.trim().length === 0) {\n throw new Error(\n `Select must include at least one field or nested relation for model ${relModel.name}`,\n )\n }\n\n return relSelect\n}\n\nfunction buildWhereParts(\n whereInput: Record<string, unknown>,\n relModel: Model,\n relAlias: string,\n ctx: IncludeBuildContext,\n): { joins: string; whereClause: string } {\n const whereResult = buildWhereClause(whereInput, {\n alias: relAlias,\n schemaModels: ctx.schemas,\n model: relModel,\n params: ctx.params,\n isSubquery: true,\n aliasGen: ctx.aliasGen,\n dialect: ctx.dialect,\n })\n\n const joins = whereResult.joins.join(' ')\n const whereClause = isValidWhereClause(whereResult.clause)\n ? ` ${SQL_TEMPLATES.AND} ${whereResult.clause}`\n : ''\n\n return { joins, whereClause }\n}\n\nfunction limitOneSql(\n sql: string,\n params: ParamStore,\n skipVal: OptionalIntOrDynamic,\n scope: string,\n): string {\n if (isNotNullish(skipVal)) {\n const skipPh = addAutoScoped(params, skipVal, `${scope}.skip`)\n return `${sql} ${SQL_TEMPLATES.LIMIT} 1 ${SQL_TEMPLATES.OFFSET} ${skipPh}`\n }\n return `${sql} ${SQL_TEMPLATES.LIMIT} 1`\n}\n\nfunction buildOrderBySql(\n finalOrderByInput: unknown,\n relAlias: string,\n dialect: SqlDialect,\n relModel: Model,\n): string {\n return isNotNullish(finalOrderByInput)\n ? buildOrderBy(finalOrderByInput, relAlias, dialect, relModel)\n : ''\n}\n\nfunction buildBaseSql(args: {\n selectExpr: string\n relTable: string\n relAlias: string\n joins: string\n joinPredicate: string\n whereClause: string\n}): string {\n return (\n `${SQL_TEMPLATES.SELECT} ${args.selectExpr} ` +\n `${SQL_TEMPLATES.FROM} ${args.relTable} ${args.relAlias} ${args.joins} ` +\n `${SQL_TEMPLATES.WHERE} ${args.joinPredicate}${args.whereClause}`\n )\n}\n\nfunction buildOneToOneIncludeSql(args: {\n relName: string\n relTable: string\n relAlias: string\n joins: string\n joinPredicate: string\n whereClause: string\n orderBySql: string\n relSelect: string\n takeVal: OptionalIntOrDynamic\n skipVal: OptionalIntOrDynamic\n ctx: IncludeBuildContext\n}): string {\n const objExpr = jsonBuildObject(args.relSelect, args.ctx.dialect)\n\n let sql = buildBaseSql({\n selectExpr: objExpr,\n relTable: args.relTable,\n relAlias: args.relAlias,\n joins: args.joins,\n joinPredicate: args.joinPredicate,\n whereClause: args.whereClause,\n })\n\n if (args.orderBySql) {\n sql += ` ${SQL_TEMPLATES.ORDER_BY} ${args.orderBySql}`\n }\n\n if (isNotNullish(args.takeVal)) {\n return appendLimitOffset(\n sql,\n args.ctx.dialect,\n args.ctx.params,\n args.takeVal,\n args.skipVal,\n `include.${args.relName}`,\n )\n }\n\n return limitOneSql(\n sql,\n args.ctx.params,\n args.skipVal,\n `include.${args.relName}`,\n )\n}\n\nfunction buildListIncludeSpec(args: {\n relName: string\n relTable: string\n relAlias: string\n joins: string\n joinPredicate: string\n whereClause: string\n orderBySql: string\n relSelect: string\n takeVal: OptionalIntOrDynamic\n skipVal: OptionalIntOrDynamic\n ctx: IncludeBuildContext\n}): IncludeSpec {\n const rowExpr = jsonBuildObject(args.relSelect, args.ctx.dialect)\n const noTake = !isNotNullish(args.takeVal)\n const noSkip = !isNotNullish(args.skipVal)\n\n if (args.ctx.dialect === 'postgres' && noTake && noSkip) {\n const selectExpr = args.orderBySql\n ? `json_agg(${rowExpr} ORDER BY ${args.orderBySql})`\n : `json_agg(${rowExpr})`\n\n const sql = buildBaseSql({\n selectExpr,\n relTable: args.relTable,\n relAlias: args.relAlias,\n joins: args.joins,\n joinPredicate: args.joinPredicate,\n whereClause: args.whereClause,\n })\n\n return Object.freeze({\n name: args.relName,\n sql,\n isOneToOne: false,\n })\n }\n\n const rowAlias = args.ctx.aliasGen.next(`${args.relName}_row`)\n\n let base = buildBaseSql({\n selectExpr: `${rowExpr} ${SQL_TEMPLATES.AS} row`,\n relTable: args.relTable,\n relAlias: args.relAlias,\n joins: args.joins,\n joinPredicate: args.joinPredicate,\n whereClause: args.whereClause,\n })\n\n if (args.orderBySql) {\n base += ` ${SQL_TEMPLATES.ORDER_BY} ${args.orderBySql}`\n }\n\n base = appendLimitOffset(\n base,\n args.ctx.dialect,\n args.ctx.params,\n args.takeVal,\n args.skipVal,\n `include.${args.relName}`,\n )\n\n const selectExpr = jsonAgg('row', args.ctx.dialect)\n const sql = `${SQL_TEMPLATES.SELECT} ${selectExpr} ${SQL_TEMPLATES.FROM} (${base}) ${rowAlias}`\n\n return Object.freeze({\n name: args.relName,\n sql,\n isOneToOne: false,\n })\n}\n\nfunction buildSingleInclude(\n relName: string,\n relArgs: unknown,\n field: Field,\n relModel: Model,\n ctx: IncludeBuildContext,\n): IncludeSpec {\n const relTable = getRelationTableReference(relModel, ctx.dialect)\n\n const relAlias = ctx.aliasGen.next(relName)\n const isList = typeof field.type === 'string' && field.type.endsWith('[]')\n const joinPredicate = joinCondition(\n field,\n ctx.model,\n relModel,\n ctx.parentAlias,\n relAlias,\n )\n\n const whereInput = readWhereInput(relArgs)\n const relSelect = buildSelectWithNestedIncludes(\n relArgs,\n relModel,\n relAlias,\n ctx,\n )\n const whereParts = buildWhereParts(whereInput, relModel, relAlias, ctx)\n\n const paginationConfig = extractRelationPaginationConfig(relArgs)\n\n if (\n !isList &&\n typeof paginationConfig.takeVal === 'number' &&\n paginationConfig.takeVal < 0\n ) {\n throw new Error('Negative take is only supported for list relations')\n }\n\n const adjusted = maybeReverseNegativeTake(\n paginationConfig.takeVal,\n paginationConfig.hasOrderBy,\n paginationConfig.orderBy,\n )\n const hasPagination = paginationConfig.hasSkip || paginationConfig.hasTake\n const finalOrderByInput = ensureDeterministicOrderBy(\n relModel,\n paginationConfig.hasOrderBy,\n adjusted.orderByInput,\n hasPagination,\n )\n\n const orderBySql = buildOrderBySql(\n finalOrderByInput,\n relAlias,\n ctx.dialect,\n relModel,\n )\n\n if (!isList) {\n const sql = buildOneToOneIncludeSql({\n relName,\n relTable,\n relAlias,\n joins: whereParts.joins,\n joinPredicate,\n whereClause: whereParts.whereClause,\n orderBySql,\n relSelect,\n takeVal: adjusted.takeVal,\n skipVal: paginationConfig.skipVal,\n ctx,\n })\n\n return Object.freeze({\n name: relName,\n sql,\n isOneToOne: true,\n })\n }\n\n return buildListIncludeSpec({\n relName,\n relTable,\n relAlias,\n joins: whereParts.joins,\n joinPredicate,\n whereClause: whereParts.whereClause,\n orderBySql,\n relSelect,\n takeVal: adjusted.takeVal,\n skipVal: paginationConfig.skipVal,\n ctx,\n })\n}\n\nfunction buildIncludeSqlInternal(\n args: IncludeSelectArgs,\n model: Model,\n schemas: Model[],\n parentAlias: string,\n aliasGen: AliasGenerator,\n params: ParamStore,\n dialect: SqlDialect,\n): IncludeSpec[] {\n const includes: IncludeSpec[] = []\n const entries = relationEntriesFromArgs(args, model)\n\n for (const [relName, relArgs] of entries) {\n if (relArgs === false) continue\n\n const resolved = resolveRelationOrThrow(model, schemas, relName)\n\n const include = buildSingleInclude(\n relName,\n relArgs,\n resolved.field,\n resolved.relModel,\n {\n model,\n schemas,\n parentAlias,\n aliasGen,\n dialect,\n params,\n },\n )\n\n includes.push(include)\n }\n\n return includes\n}\n\nexport function buildIncludeSql(\n args: PrismaQueryArgs,\n model: Model,\n schemas: Model[],\n parentAlias: string,\n params: ParamStore,\n dialect: SqlDialect,\n): IncludeSpec[] {\n const aliasGen = createAliasGenerator()\n return buildIncludeSqlInternal(\n args,\n model,\n schemas,\n parentAlias,\n aliasGen,\n params,\n dialect,\n )\n}\n\ninterface RelationCountBuild {\n joins: string[]\n jsonPairs: string\n}\n\nfunction resolveCountRelationOrThrow(\n relName: string,\n model: Model,\n schemas: readonly Model[],\n): { field: Field; relModel: Model } {\n const relationSet = getRelationFieldSet(model)\n if (!relationSet.has(relName)) {\n throw new Error(\n `_count.${relName} references unknown relation on model ${model.name}`,\n )\n }\n\n const field = model.fields.find((f) => f.name === relName)\n if (!field) {\n throw new Error(\n `_count.${relName} references unknown relation on model ${model.name}`,\n )\n }\n\n const relModel = schemas.find((m) => m.name === field.relatedModel)\n if (!relModel) {\n throw new Error(\n `Related model '${field.relatedModel}' not found for _count.${relName}`,\n )\n }\n\n return { field, relModel }\n}\n\nfunction groupByColForCount(field: Field, countAlias: string): string {\n const fkFields = normalizeKeyList((field as any).foreignKey)\n const refFields = normalizeKeyList((field as any).references)\n\n return field.isForeignKeyLocal\n ? `${countAlias}.${quote(refFields[0] || 'id')}`\n : `${countAlias}.${quote(fkFields[0])}`\n}\n\nfunction leftJoinOnForCount(\n field: Field,\n parentAlias: string,\n joinAlias: string,\n): string {\n const fkFields = normalizeKeyList((field as any).foreignKey)\n const refFields = normalizeKeyList((field as any).references)\n\n return field.isForeignKeyLocal\n ? `${joinAlias}.__fk = ${parentAlias}.${quote(fkFields[0])}`\n : `${joinAlias}.__fk = ${parentAlias}.${quote(refFields[0] || 'id')}`\n}\n\nfunction subqueryForCount(\n dialect: SqlDialect,\n relTable: string,\n countAlias: string,\n groupByCol: string,\n): string {\n return dialect === 'postgres'\n ? `(SELECT ${groupByCol} AS __fk, COUNT(*)::int AS __cnt FROM ${relTable} ${countAlias} GROUP BY ${groupByCol})`\n : `(SELECT ${groupByCol} AS __fk, COUNT(*) AS __cnt FROM ${relTable} ${countAlias} GROUP BY ${groupByCol})`\n}\n\nfunction buildCountJoinAndPair(args: {\n relName: string\n field: Field\n relModel: Model\n parentAlias: string\n dialect: SqlDialect\n}): { joinSql: string; pairSql: string } {\n const relTable = getRelationTableReference(args.relModel, args.dialect)\n\n const countAlias = `__tp_cnt_${args.relName}`\n const groupByCol = groupByColForCount(args.field, countAlias)\n const subquery = subqueryForCount(\n args.dialect,\n relTable,\n countAlias,\n groupByCol,\n )\n\n const joinAlias = `__tp_cnt_j_${args.relName}`\n const leftJoinOn = leftJoinOnForCount(args.field, args.parentAlias, joinAlias)\n\n return {\n joinSql: `LEFT JOIN ${subquery} ${joinAlias} ON ${leftJoinOn}`,\n pairSql: `${sqlStringLiteral(args.relName)}, COALESCE(${joinAlias}.__cnt, 0)`,\n }\n}\n\nexport function buildRelationCountSql(\n countSelect: Record<string, boolean>,\n model: Model,\n schemas: readonly Model[],\n parentAlias: string,\n _params: ParamStore,\n dialect: SqlDialect,\n): RelationCountBuild {\n const joins: string[] = []\n const pairs: string[] = []\n\n for (const [relName, shouldCount] of Object.entries(countSelect)) {\n if (!shouldCount) continue\n\n const resolved = resolveCountRelationOrThrow(relName, model, schemas)\n const built = buildCountJoinAndPair({\n relName,\n field: resolved.field,\n relModel: resolved.relModel,\n parentAlias,\n dialect,\n })\n\n joins.push(built.joinSql)\n pairs.push(built.pairSql)\n }\n\n return {\n joins,\n jsonPairs: pairs.join(SQL_SEPARATORS.FIELD_LIST),\n }\n}\n","import { isDynamicParameter } from '@dee-wan/schema-parser'\nimport { SQL_TEMPLATES, SQL_SEPARATORS } from '../shared/constants'\nimport { col, quote } from '../shared/sql-utils'\nimport { SelectQuerySpec, SqlResult } from '../shared/types'\nimport {\n validateSelectQuery,\n validateParamConsistency,\n} from '../shared/validators/sql-validators'\nimport {\n isNotNullish,\n isNonEmptyArray,\n isNonEmptyString,\n isPlainObject,\n} from '../shared/validators/type-guards'\nimport { addAutoScoped } from '../shared/dynamic-params'\nimport { jsonBuildObject } from '../../sql-builder-dialect'\nimport { buildRelationCountSql } from './includes'\nimport { normalizeValue } from '../../utils/normalize-value'\n\nconst SIMPLE_SELECT_RE_CACHE = new Map<string, RegExp>()\n\nfunction normalizeFinalParams(params: readonly unknown[]): unknown[] {\n return params.map(normalizeValue)\n}\n\nfunction joinNonEmpty(parts: string[], sep: string): string {\n return parts.filter((s) => s.trim().length > 0).join(sep)\n}\n\nfunction buildWhereSql(conditions: readonly string[]): string {\n if (!isNonEmptyArray(conditions)) return ''\n return ` ${SQL_TEMPLATES.WHERE} ${conditions.join(SQL_SEPARATORS.CONDITION_AND)}`\n}\n\nfunction buildJoinsSql(\n ...joinGroups: Array<readonly string[] | undefined>\n): string {\n const all: string[] = []\n for (const g of joinGroups) {\n if (isNonEmptyArray(g)) all.push(...g)\n }\n return all.length > 0 ? ` ${all.join(' ')}` : ''\n}\n\nfunction buildSelectList(baseSelect: string, extraCols: string): string {\n const base = baseSelect.trim()\n const extra = extraCols.trim()\n if (base && extra) return `${base}${SQL_SEPARATORS.FIELD_LIST}${extra}`\n return base || extra\n}\n\nfunction finalizeSql(\n sql: string,\n params: SelectQuerySpec['params'],\n): SqlResult {\n const snapshot = params.snapshot()\n validateSelectQuery(sql)\n validateParamConsistency(sql, snapshot.params)\n\n return Object.freeze({\n sql,\n params: normalizeFinalParams(snapshot.params),\n paramMappings: Object.freeze(snapshot.mappings),\n })\n}\n\nfunction parseSimpleScalarSelect(select: string, alias: string): string[] {\n const raw = select.trim()\n if (raw.length === 0) return []\n\n let re = SIMPLE_SELECT_RE_CACHE.get(alias)\n if (!re) {\n const safeAlias = alias.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n re = new RegExp(`^${safeAlias}\\\\.(?:\"([^\"]+)\"|([a-z_][a-z0-9_]*))$`, 'i')\n SIMPLE_SELECT_RE_CACHE.set(alias, re)\n }\n\n const parts = raw.split(SQL_SEPARATORS.FIELD_LIST)\n const names: string[] = []\n\n for (const part of parts) {\n const p = part.trim()\n const m = p.match(re)\n if (!m) {\n throw new Error(\n `sqlite distinct emulation requires scalar select fields to be simple columns. Got: ${p}`,\n )\n }\n const name = (m[1] ?? m[2] ?? '').trim()\n if (name.length === 0) {\n throw new Error(`Failed to parse selected column name from: ${p}`)\n }\n names.push(name)\n }\n\n return names\n}\n\nfunction replaceOrderByAlias(\n orderBy: string,\n fromAlias: string,\n outerAlias: string,\n): string {\n const needle = `${fromAlias}.`\n const replacement = `${outerAlias}.`\n return orderBy.split(needle).join(replacement)\n}\n\nfunction buildDistinctColumns(\n distinct: readonly string[],\n fromAlias: string,\n model?: any,\n): string {\n return distinct\n .map((f) => col(fromAlias, f, model))\n .join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nfunction buildOutputColumns(\n scalarNames: string[],\n includeNames: string[],\n hasCount: boolean,\n): string {\n const outputCols = [...scalarNames, ...includeNames]\n if (hasCount) {\n outputCols.push('_count')\n }\n\n const formatted = outputCols\n .map((n) => quote(n))\n .join(SQL_SEPARATORS.FIELD_LIST)\n\n if (!isNonEmptyString(formatted)) {\n throw new Error('distinct emulation requires at least one output column')\n }\n\n return formatted\n}\n\nfunction buildWindowOrder(args: {\n baseOrder: string\n idField: any\n fromAlias: string\n model?: any\n}): string {\n const { baseOrder, idField, fromAlias, model } = args\n\n const orderFields = baseOrder\n .split(SQL_SEPARATORS.ORDER_BY)\n .map((s) => s.trim().toLowerCase())\n\n const hasIdInOrder = orderFields.some(\n (f) =>\n f.startsWith(`${fromAlias}.id `) || f.startsWith(`${fromAlias}.\"id\" `),\n )\n\n if (hasIdInOrder) return baseOrder\n\n const idTiebreaker = idField ? `, ${col(fromAlias, 'id', model)} ASC` : ''\n return `${baseOrder}${idTiebreaker}`\n}\n\nfunction buildSqliteDistinctQuery(\n spec: SelectQuerySpec,\n selectWithIncludes: string,\n countJoins?: string[],\n): string {\n const { includes, from, whereClause, whereJoins, orderBy, distinct, model } =\n spec\n\n if (!isNotNullish(distinct) || !isNonEmptyArray(distinct)) {\n throw new Error('buildSqliteDistinctQuery requires distinct fields')\n }\n\n const scalarNames = parseSimpleScalarSelect(spec.select, from.alias)\n const includeNames = includes.map((i) => i.name)\n const hasCount = Boolean(spec.args?.select?._count)\n\n const outerSelectCols = buildOutputColumns(\n scalarNames,\n includeNames,\n hasCount,\n )\n const distinctCols = buildDistinctColumns([...distinct], from.alias, model)\n\n const fallbackOrder = [...distinct]\n .map((f) => `${col(from.alias, f, model)} ASC`)\n .join(SQL_SEPARATORS.FIELD_LIST)\n\n const idField = model.fields.find(\n (f: any) => f.name === 'id' && !f.isRelation,\n )\n const baseOrder = isNonEmptyString(orderBy) ? orderBy : fallbackOrder\n\n const windowOrder = buildWindowOrder({\n baseOrder,\n idField,\n fromAlias: from.alias,\n model,\n })\n\n const outerOrder = isNonEmptyString(orderBy)\n ? replaceOrderByAlias(orderBy, from.alias, `\"__tp_distinct\"`)\n : replaceOrderByAlias(fallbackOrder, from.alias, `\"__tp_distinct\"`)\n\n const joins = buildJoinsSql(whereJoins, countJoins)\n\n const conditions: string[] = []\n if (whereClause && whereClause !== '1=1') {\n conditions.push(whereClause)\n }\n const whereSql = buildWhereSql(conditions)\n\n const innerSelectList = selectWithIncludes.trim()\n const innerComma = innerSelectList.length > 0 ? SQL_SEPARATORS.FIELD_LIST : ''\n\n const inner =\n `${SQL_TEMPLATES.SELECT} ${innerSelectList}${innerComma}` +\n `ROW_NUMBER() OVER (PARTITION BY ${distinctCols} ORDER BY ${windowOrder}) ${SQL_TEMPLATES.AS} \"__tp_rn\" ` +\n `${SQL_TEMPLATES.FROM} ${from.table} ${from.alias}${joins}${whereSql}`\n\n const outer =\n `${SQL_TEMPLATES.SELECT} ${outerSelectCols} ` +\n `${SQL_TEMPLATES.FROM} (${inner}) ${SQL_TEMPLATES.AS} \"__tp_distinct\" ` +\n `${SQL_TEMPLATES.WHERE} \"__tp_rn\" = 1` +\n (isNonEmptyString(outerOrder)\n ? ` ${SQL_TEMPLATES.ORDER_BY} ${outerOrder}`\n : '')\n\n return outer\n}\n\nfunction buildIncludeColumns(spec: SelectQuerySpec): {\n includeCols: string\n selectWithIncludes: string\n countJoins: string[]\n} {\n const { select, includes, dialect, model, schemas, from, params } = spec\n const baseSelect = (select ?? '').trim()\n\n let countCols = ''\n let countJoins: string[] = []\n\n const countSelect = spec.args?.select?._count\n if (countSelect) {\n if (isPlainObject(countSelect) && 'select' in countSelect) {\n const countBuild = buildRelationCountSql(\n (countSelect as any).select,\n model,\n schemas,\n from.alias,\n params,\n dialect,\n )\n if (countBuild.jsonPairs) {\n countCols = `${jsonBuildObject(countBuild.jsonPairs, dialect)} ${SQL_TEMPLATES.AS} ${quote('_count')}`\n }\n countJoins = countBuild.joins\n }\n }\n\n const hasIncludes = isNonEmptyArray(includes)\n const hasCountCols = isNonEmptyString(countCols)\n\n if (!hasIncludes && !hasCountCols) {\n return { includeCols: '', selectWithIncludes: baseSelect, countJoins: [] }\n }\n\n const emptyJson = dialect === 'postgres' ? `'[]'::json` : `json('[]')`\n\n const includeCols = hasIncludes\n ? includes\n .map((inc) => {\n const expr = inc.isOneToOne\n ? `(${inc.sql})`\n : `COALESCE((${inc.sql}), ${emptyJson})`\n return `${expr} ${SQL_TEMPLATES.AS} ${quote(inc.name)}`\n })\n .join(SQL_SEPARATORS.FIELD_LIST)\n : ''\n\n const allCols = joinNonEmpty(\n [includeCols, countCols],\n SQL_SEPARATORS.FIELD_LIST,\n )\n const selectWithIncludes = buildSelectList(baseSelect, allCols)\n\n return { includeCols: allCols, selectWithIncludes, countJoins }\n}\n\nfunction appendPagination(sql: string, spec: SelectQuerySpec): string {\n const { method, pagination, params } = spec\n\n const isFindUniqueOrFirst = method === 'findUnique' || method === 'findFirst'\n if (isFindUniqueOrFirst) {\n const parts: string[] = [sql, SQL_TEMPLATES.LIMIT, '1']\n const hasSkip =\n isNotNullish(pagination.skip) &&\n (isDynamicParameter(pagination.skip) ||\n (typeof pagination.skip === 'number' && pagination.skip > 0)) &&\n method === 'findFirst'\n\n if (hasSkip) {\n const placeholder = addAutoScoped(\n params,\n pagination.skip,\n 'root.pagination.skip',\n )\n parts.push(SQL_TEMPLATES.OFFSET, placeholder)\n }\n return parts.join(' ')\n }\n\n const parts: string[] = [sql]\n\n if (isNotNullish(pagination.take)) {\n const placeholder = addAutoScoped(\n params,\n pagination.take,\n 'root.pagination.take',\n )\n parts.push(SQL_TEMPLATES.LIMIT, placeholder)\n }\n\n if (isNotNullish(pagination.skip)) {\n const placeholder = addAutoScoped(\n params,\n pagination.skip,\n 'root.pagination.skip',\n )\n parts.push(SQL_TEMPLATES.OFFSET, placeholder)\n }\n\n return parts.join(' ')\n}\n\nfunction hasWindowDistinct(spec: SelectQuerySpec): boolean {\n const d = spec.distinct\n return isNotNullish(d) && isNonEmptyArray(d)\n}\n\nfunction assertDistinctAllowed(\n method: SelectQuerySpec['method'],\n enabled: boolean,\n): void {\n if (enabled && method !== 'findMany') {\n throw new Error(\n 'distinct is only supported for findMany in this SQL builder',\n )\n }\n}\n\nfunction assertHasSelectFields(baseSelect: string, includeCols: string): void {\n if (!isNonEmptyString(baseSelect) && !isNonEmptyString(includeCols)) {\n throw new Error('SELECT requires at least one selected field or include')\n }\n}\n\nfunction withCountJoins(\n spec: SelectQuerySpec,\n countJoins: string[],\n whereJoins?: readonly string[],\n): SelectQuerySpec {\n return {\n ...spec,\n whereJoins: [...(whereJoins || []), ...(countJoins || [])],\n }\n}\n\nfunction buildPostgresDistinctOnClause(\n fromAlias: string,\n distinct?: readonly string[],\n model?: any,\n): string | null {\n if (!isNonEmptyArray(distinct)) return null\n const distinctCols = buildDistinctColumns([...distinct], fromAlias, model)\n return `${SQL_TEMPLATES.DISTINCT_ON} (${distinctCols})`\n}\n\nfunction pushJoinGroups(\n parts: string[],\n ...groups: Array<readonly string[] | undefined>\n): void {\n for (const g of groups) {\n if (isNonEmptyArray(g)) parts.push(g.join(' '))\n }\n}\n\nfunction buildConditions(\n whereClause?: string,\n cursorClause?: string,\n): string[] {\n const conditions: string[] = []\n if (whereClause && whereClause !== '1=1') conditions.push(whereClause)\n if (isNotNullish(cursorClause) && isNonEmptyString(cursorClause))\n conditions.push(cursorClause)\n return conditions\n}\n\nfunction pushWhere(parts: string[], conditions: string[]): void {\n if (!isNonEmptyArray(conditions)) return\n parts.push(SQL_TEMPLATES.WHERE, conditions.join(SQL_SEPARATORS.CONDITION_AND))\n}\n\nexport function constructFinalSql(spec: SelectQuerySpec): SqlResult {\n const {\n select,\n from,\n whereClause,\n whereJoins,\n orderBy,\n distinct,\n method,\n cursorClause,\n params,\n dialect,\n model,\n } = spec\n\n const useWindowDistinct = hasWindowDistinct(spec)\n assertDistinctAllowed(method, useWindowDistinct)\n\n const { includeCols, selectWithIncludes, countJoins } =\n buildIncludeColumns(spec)\n\n if (useWindowDistinct) {\n const baseSelect = (select ?? '').trim()\n assertHasSelectFields(baseSelect, includeCols)\n\n const spec2 = withCountJoins(spec, countJoins, whereJoins)\n let sql = buildSqliteDistinctQuery(spec2, selectWithIncludes).trim()\n sql = appendPagination(sql, spec)\n\n return finalizeSql(sql, params)\n }\n\n const parts: string[] = [SQL_TEMPLATES.SELECT]\n\n const distinctOn =\n dialect === 'postgres'\n ? buildPostgresDistinctOnClause(from.alias, distinct, model)\n : null\n if (distinctOn) parts.push(distinctOn)\n\n const baseSelect = (select ?? '').trim()\n const fullSelectList = buildSelectList(baseSelect, includeCols)\n if (!isNonEmptyString(fullSelectList)) {\n throw new Error('SELECT requires at least one selected field or include')\n }\n\n parts.push(fullSelectList)\n parts.push(SQL_TEMPLATES.FROM, from.table, from.alias)\n\n pushJoinGroups(parts, whereJoins, countJoins)\n\n const conditions = buildConditions(whereClause, cursorClause)\n pushWhere(parts, conditions)\n\n if (isNonEmptyString(orderBy)) parts.push(SQL_TEMPLATES.ORDER_BY, orderBy)\n\n let sql = parts.join(' ').trim()\n sql = appendPagination(sql, spec)\n\n return finalizeSql(sql, params)\n}\n","import { SqlDialect, getGlobalDialect } from '../sql-builder-dialect'\nimport { PrismaQueryArgs, Model } from '../types'\nimport {\n buildOrderByClause,\n getPaginationParams,\n buildCursorCondition,\n parseOrderByValue,\n} from './pagination'\nimport { constructFinalSql } from './select/assembly'\nimport { buildSelectFields } from './select/fields'\nimport { buildIncludeSql } from './select/includes'\nimport {\n reverseOrderByInput,\n normalizeOrderByInput as normalizeOrderByShared,\n} from './shared/order-by-utils'\nimport { createParamStoreFrom } from './shared/param-store'\nimport { assertSafeAlias, assertSafeTableRef } from './shared/sql-utils'\nimport { WhereClauseResult, SqlResult, SelectQuerySpec } from './shared/types'\nimport {\n isNotNullish,\n isNonEmptyArray,\n isPlainObject,\n} from './shared/validators/type-guards'\n\ntype OrderByValue =\n | 'asc'\n | 'desc'\n | { sort: 'asc' | 'desc'; nulls?: 'first' | 'last' }\n\ntype OrderByItem = Record<string, OrderByValue>\n\nfunction normalizeOrderByInput(\n orderBy: PrismaQueryArgs['orderBy'],\n): OrderByItem[] {\n return normalizeOrderByShared(orderBy, parseOrderByValue)\n}\n\nfunction normalizeDistinctFields(\n distinct: PrismaQueryArgs['distinct'],\n): string[] {\n if (!isNonEmptyArray(distinct)) return []\n return distinct\n .filter((f) => typeof f === 'string')\n .map((f) => f.trim())\n .filter((f) => f.length > 0)\n}\n\nfunction mapFirstOrderByByField(\n existing: OrderByItem[],\n): Map<string, OrderByItem> {\n const m = new Map<string, OrderByItem>()\n for (const obj of existing) {\n const field = Object.keys(obj)[0]\n if (field && !m.has(field)) m.set(field, obj)\n }\n return m\n}\n\nfunction buildPostgresDistinctOrderBy(\n distinctFields: string[],\n existing: OrderByItem[],\n): OrderByItem[] {\n const firstByField = mapFirstOrderByByField(existing)\n\n const next: OrderByItem[] = []\n for (const f of distinctFields) {\n next.push(firstByField.get(f) ?? { [f]: 'asc' })\n }\n\n const distinctSet = new Set(distinctFields)\n for (const obj of existing) {\n const field = Object.keys(obj)[0]\n if (!distinctSet.has(field)) next.push(obj)\n }\n\n return next\n}\n\nfunction applyPostgresDistinctOrderBy(\n args: PrismaQueryArgs,\n _model: Model,\n): PrismaQueryArgs {\n const distinctFields = normalizeDistinctFields(args.distinct)\n if (distinctFields.length === 0) return args\n if (!isNotNullish(args.orderBy)) return args\n\n const existing = normalizeOrderByInput(args.orderBy)\n if (existing.length === 0) return args\n\n return {\n ...args,\n orderBy: buildPostgresDistinctOrderBy(distinctFields, existing),\n }\n}\n\nfunction assertScalarFieldOnModel(\n model: Model,\n fieldName: string,\n ctx: string,\n): void {\n const f = model.fields.find((x) => x.name === fieldName)\n if (!f) {\n throw new Error(\n `${ctx} references unknown field '${fieldName}' on model ${model.name}`,\n )\n }\n if (f.isRelation) {\n throw new Error(\n `${ctx} does not support relation field '${fieldName}' on model ${model.name}`,\n )\n }\n}\n\nfunction validateDistinct(\n model: Model,\n distinct: PrismaQueryArgs['distinct'],\n): void {\n if (!isNotNullish(distinct) || !isNonEmptyArray(distinct)) return\n const seen = new Set<string>()\n for (const raw of distinct) {\n const f = String(raw).trim()\n if (f.length === 0) continue\n if (seen.has(f)) {\n throw new Error(`distinct must not contain duplicates (field: '${f}')`)\n }\n seen.add(f)\n assertScalarFieldOnModel(model, f, 'distinct')\n }\n}\n\nfunction validateOrderByValue(fieldName: string, v: unknown): void {\n parseOrderByValue(v, fieldName)\n}\n\nfunction validateOrderBy(\n model: Model,\n orderBy: PrismaQueryArgs['orderBy'],\n): void {\n if (!isNotNullish(orderBy)) return\n\n const items = normalizeOrderByInput(orderBy)\n if (items.length === 0) return\n\n for (const it of items) {\n const entries = Object.entries(it)\n const fieldName = String(entries[0][0]).trim()\n if (fieldName.length === 0) {\n throw new Error('orderBy field name cannot be empty')\n }\n assertScalarFieldOnModel(model, fieldName, 'orderBy')\n validateOrderByValue(fieldName, entries[0][1])\n }\n}\n\nfunction validateCursor(model: Model, cursor: unknown): void {\n if (!isNotNullish(cursor)) return\n if (!isPlainObject(cursor)) {\n throw new Error('cursor must be an object')\n }\n const entries = Object.entries(cursor)\n if (entries.length === 0) {\n throw new Error('cursor must have at least one field')\n }\n for (const [fieldName] of entries) {\n const f = String(fieldName).trim()\n if (f.length === 0) {\n throw new Error('cursor field name cannot be empty')\n }\n assertScalarFieldOnModel(model, f, 'cursor')\n }\n}\n\nfunction resolveDialect(dialect?: SqlDialect): SqlDialect {\n return dialect ?? getGlobalDialect()\n}\n\nfunction normalizeArgsForNegativeTake(\n method: string,\n args: PrismaQueryArgs,\n): PrismaQueryArgs {\n if (method !== 'findMany') return args\n if (typeof args.take !== 'number') return args\n if (!Number.isInteger(args.take)) return args\n if (args.take >= 0) return args\n\n if (!isNotNullish(args.orderBy)) {\n throw new Error('Negative take requires orderBy for deterministic results')\n }\n\n return {\n ...args,\n take: Math.abs(args.take),\n orderBy: reverseOrderByInput(args.orderBy),\n }\n}\n\nfunction normalizeArgsForDialect(\n dialect: SqlDialect,\n args: PrismaQueryArgs,\n model: Model,\n): PrismaQueryArgs {\n if (dialect !== 'postgres') return args\n return applyPostgresDistinctOrderBy(args, model)\n}\n\nfunction buildCursorClauseIfAny(input: {\n cursor: unknown\n orderBy: PrismaQueryArgs['orderBy']\n tableName: string\n alias: string\n params: ReturnType<typeof createParamStoreFrom>\n dialect: SqlDialect\n}): string | undefined {\n const { cursor, orderBy, tableName, alias, params, dialect } = input\n if (!isNotNullish(cursor)) return undefined\n return buildCursorCondition(\n cursor,\n orderBy,\n tableName,\n alias,\n params,\n dialect,\n )\n}\n\nfunction buildSelectSpec(input: {\n method: string\n normalizedArgs: PrismaQueryArgs\n model: Model\n schemas: Model[]\n tableName: string\n alias: string\n whereResult: WhereClauseResult\n dialect: SqlDialect\n}): SelectQuerySpec {\n const {\n method,\n normalizedArgs,\n model,\n schemas,\n tableName,\n alias,\n whereResult,\n dialect,\n } = input\n\n const selectFields = buildSelectFields(\n { select: normalizedArgs.select },\n model,\n alias,\n )\n\n const orderByClause = buildOrderByClause(\n normalizedArgs,\n alias,\n dialect,\n model,\n )\n const { take, skip, cursor } = getPaginationParams(method, normalizedArgs)\n\n const params = createParamStoreFrom(\n whereResult.params,\n whereResult.paramMappings,\n whereResult.nextParamIndex,\n )\n\n const includes = buildIncludeSql(\n normalizedArgs,\n model,\n schemas,\n alias,\n params,\n dialect,\n )\n\n const cursorClause = buildCursorClauseIfAny({\n cursor,\n orderBy: normalizedArgs.orderBy,\n tableName,\n alias,\n params,\n dialect,\n })\n\n return {\n select: selectFields,\n includes,\n from: { table: tableName, alias },\n whereClause: whereResult.clause,\n whereJoins: whereResult.joins,\n orderBy: orderByClause,\n pagination: { take, skip },\n distinct: normalizedArgs.distinct,\n method,\n cursorClause,\n params,\n dialect,\n model,\n schemas,\n args: normalizedArgs,\n }\n}\n\ntype BuildSelectSqlInput = {\n method: string\n args: PrismaQueryArgs\n model: Model\n schemas: Model[]\n from: { tableName: string; alias: string }\n whereResult: WhereClauseResult\n dialect?: SqlDialect\n}\n\nexport function buildSelectSql(input: BuildSelectSqlInput): SqlResult {\n const { method, args, model, schemas, from, whereResult, dialect } = input\n\n assertSafeAlias(from.alias)\n assertSafeTableRef(from.tableName)\n\n const dialectToUse = resolveDialect(dialect)\n\n const argsForSql = normalizeArgsForNegativeTake(method, args)\n const normalizedArgs = normalizeArgsForDialect(\n dialectToUse,\n argsForSql,\n model,\n )\n\n validateDistinct(model, normalizedArgs.distinct)\n validateOrderBy(model, normalizedArgs.orderBy)\n validateCursor(model, normalizedArgs.cursor)\n\n const spec = buildSelectSpec({\n method,\n normalizedArgs,\n model,\n schemas,\n tableName: from.tableName,\n alias: from.alias,\n whereResult,\n dialect: dialectToUse,\n })\n\n return constructFinalSql(spec)\n}\n","import { PrismaQueryArgs, Model } from '../types'\nimport {\n SQL_TEMPLATES,\n SQL_SEPARATORS,\n Ops,\n LogicalOps,\n} from './shared/constants'\nimport {\n assertSafeAlias,\n assertSafeTableRef,\n col,\n quote,\n} from './shared/sql-utils'\nimport { createParamStore, ParamStore } from './shared/param-store'\nimport { WhereClauseResult, SqlResult } from './shared/types'\nimport {\n isValidWhereClause,\n validateSelectQuery,\n validateParamConsistency,\n} from './shared/validators/sql-validators'\nimport {\n isNotNullish,\n isNonEmptyArray,\n isPlainObject,\n} from './shared/validators/type-guards'\nimport {\n SqlDialect,\n getGlobalDialect,\n inArray,\n notInArray,\n prepareArrayParam,\n} from '../sql-builder-dialect'\nimport { isDynamicParameter } from '@dee-wan/schema-parser'\nimport { normalizeSkipLike } from './pagination'\nimport { addAutoScoped } from './shared/dynamic-params'\nimport { buildNotComposite } from './where/operators-scalar'\nimport { normalizeValue } from '../utils/normalize-value'\n\ntype AggregateKey = '_count' | '_sum' | '_avg' | '_min' | '_max'\ntype LogicalKey = 'AND' | 'OR' | 'NOT'\ntype ScalarFieldInfo = { name: string; type: string; isRelation: boolean }\n\nconst MODEL_FIELD_CACHE = new WeakMap<Model, Map<string, ScalarFieldInfo>>()\nconst NUMERIC_TYPES = new Set(['Int', 'Float', 'Decimal', 'BigInt'])\nconst AGGREGATES: ReadonlyArray<[AggregateKey, string]> = [\n ['_sum', 'SUM'],\n ['_avg', 'AVG'],\n ['_min', 'MIN'],\n ['_max', 'MAX'],\n]\nconst COMPARISON_OPS: Record<string, string> = {\n [Ops.EQUALS]: '=',\n [Ops.NOT]: '<>',\n [Ops.GT]: '>',\n [Ops.GTE]: '>=',\n [Ops.LT]: '<',\n [Ops.LTE]: '<=',\n}\n\nfunction normalizeFinalParams(params: readonly unknown[]): unknown[] {\n return params.map(normalizeValue)\n}\n\nfunction getModelFieldMap(model: Model): Map<string, ScalarFieldInfo> {\n const cached = MODEL_FIELD_CACHE.get(model)\n if (cached) return cached\n\n const m = new Map<string, ScalarFieldInfo>()\n for (const f of model.fields) {\n m.set(f.name, { name: f.name, type: f.type, isRelation: !!f.isRelation })\n }\n MODEL_FIELD_CACHE.set(model, m)\n return m\n}\n\nfunction isTruthySelection(v: unknown): boolean {\n return v === true\n}\n\nfunction aggExprForField(\n aggKey: AggregateKey,\n field: string,\n alias: string,\n model?: Model,\n): string {\n if (aggKey === '_count') {\n return field === '_all' ? `COUNT(*)` : `COUNT(${col(alias, field, model)})`\n }\n if (field === '_all') {\n throw new Error(`'${aggKey}' does not support '_all'`)\n }\n if (aggKey === '_sum') return `SUM(${col(alias, field, model)})`\n if (aggKey === '_avg') return `AVG(${col(alias, field, model)})`\n if (aggKey === '_min') return `MIN(${col(alias, field, model)})`\n return `MAX(${col(alias, field, model)})`\n}\n\nfunction buildComparisonOp(op: string): string {\n const sqlOp = COMPARISON_OPS[op]\n if (!sqlOp) {\n throw new Error(`Unsupported HAVING operator: ${op}`)\n }\n return sqlOp\n}\n\nfunction addHavingParam(\n params: ParamStore,\n op: string,\n value: unknown,\n): string {\n return addAutoScoped(params, value, `having.${op}`)\n}\n\nfunction normalizeLogicalValue(\n operator: LogicalKey,\n value: unknown,\n): Record<string, unknown>[] {\n if (Array.isArray(value)) {\n const out: Record<string, unknown>[] = []\n for (const v of value) {\n if (!isPlainObject(v)) {\n throw new Error(`${operator} entries must be objects in HAVING`)\n }\n out.push(v)\n }\n return out\n }\n\n if (isPlainObject(value)) {\n return [value]\n }\n\n throw new Error(`${operator} must be an object or array of objects in HAVING`)\n}\n\nfunction assertScalarField(\n model: Model,\n fieldName: string,\n ctx: string,\n): { name: string; type: string } {\n const m = getModelFieldMap(model)\n const field = m.get(fieldName)\n if (!field) {\n throw new Error(\n `${ctx} references unknown field '${fieldName}' on model ${model.name}. ` +\n `Available fields: ${model.fields.map((f) => f.name).join(', ')}`,\n )\n }\n if (field.isRelation) {\n throw new Error(`${ctx} does not support relation field '${fieldName}'`)\n }\n return { name: field.name, type: field.type }\n}\n\nfunction assertAggregateFieldType(\n aggKey: AggregateKey,\n fieldType: string,\n fieldName: string,\n modelName: string,\n): void {\n const baseType = fieldType.replace(/\\[\\]|\\?/g, '')\n\n if (\n (aggKey === '_sum' || aggKey === '_avg') &&\n !NUMERIC_TYPES.has(baseType)\n ) {\n throw new Error(\n `Cannot use ${aggKey} on non-numeric field '${fieldName}' (type: ${fieldType}) on model ${modelName}`,\n )\n }\n}\n\nfunction buildNullComparison(expr: string, op: string): string {\n if (op === Ops.EQUALS) return `${expr} ${SQL_TEMPLATES.IS_NULL}`\n if (op === Ops.NOT) return `${expr} ${SQL_TEMPLATES.IS_NOT_NULL}`\n throw new Error(`Operator '${op}' doesn't support null in HAVING`)\n}\n\nfunction buildInComparison(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n): string {\n if (isDynamicParameter(val)) {\n const placeholder = addHavingParam(params, op, val)\n return op === Ops.IN\n ? inArray(expr, placeholder, dialect)\n : notInArray(expr, placeholder, dialect)\n }\n\n if (!Array.isArray(val)) {\n throw new Error(`HAVING '${op}' requires array value`)\n }\n\n if (val.length === 0) {\n return op === Ops.IN ? '0=1' : '1=1'\n }\n\n const paramValue = prepareArrayParam(val, dialect)\n const placeholder = params.add(paramValue)\n return op === Ops.IN\n ? inArray(expr, placeholder, dialect)\n : notInArray(expr, placeholder, dialect)\n}\n\nfunction buildBinaryComparison(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n): string {\n const sqlOp = buildComparisonOp(op)\n const placeholder = addHavingParam(params, op, val)\n return `${expr} ${sqlOp} ${placeholder}`\n}\n\nfunction buildSimpleComparison(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n): string {\n if (val === null) return buildNullComparison(expr, op)\n\n if (op === Ops.NOT && isPlainObject(val)) {\n return buildNotComposite(\n expr,\n val,\n params,\n dialect,\n buildSimpleComparison,\n SQL_SEPARATORS.CONDITION_AND,\n )\n }\n\n if (op === Ops.IN || op === Ops.NOT_IN) {\n return buildInComparison(expr, op, val, params, dialect)\n }\n\n return buildBinaryComparison(expr, op, val, params)\n}\n\nfunction isLogicalKey(key: string): key is LogicalKey {\n return (\n key === LogicalOps.AND || key === LogicalOps.OR || key === LogicalOps.NOT\n )\n}\n\nfunction isAggregateKey(key: string): key is AggregateKey {\n return (\n key === '_count' ||\n key === '_sum' ||\n key === '_avg' ||\n key === '_min' ||\n key === '_max'\n )\n}\n\nfunction negateClauses(subClauses: string[]): string {\n if (subClauses.length === 1) return `${SQL_TEMPLATES.NOT} ${subClauses[0]}`\n return `${SQL_TEMPLATES.NOT} (${subClauses.join(SQL_SEPARATORS.CONDITION_AND)})`\n}\n\nfunction combineLogical(key: LogicalKey, subClauses: string[]): string {\n if (key === LogicalOps.NOT) return negateClauses(subClauses)\n return subClauses.join(` ${key} `)\n}\n\nfunction buildLogicalClause(\n key: LogicalKey,\n value: unknown,\n alias: string,\n params: ParamStore,\n dialect: SqlDialect,\n model: Model,\n): string {\n const items = normalizeLogicalValue(key, value)\n const subClauses: string[] = []\n\n for (const it of items) {\n const c = buildHavingNode(it, alias, params, dialect, model)\n if (c && c !== '') subClauses.push(`(${c})`)\n }\n\n if (subClauses.length === 0) return ''\n return combineLogical(key, subClauses)\n}\n\nfunction buildHavingEntry(\n key: string,\n value: unknown,\n alias: string,\n params: ParamStore,\n dialect: SqlDialect,\n model: Model,\n): string[] {\n if (isLogicalKey(key)) {\n const logical = buildLogicalClause(\n key,\n value,\n alias,\n params,\n dialect,\n model,\n )\n return logical ? [logical] : []\n }\n\n if (isAggregateKey(key)) {\n return buildHavingForAggregateFirstShape(\n key,\n value,\n alias,\n params,\n dialect,\n model,\n )\n }\n\n return buildHavingForFieldFirstShape(\n key,\n value,\n alias,\n params,\n dialect,\n model,\n )\n}\n\nfunction buildHavingNode(\n node: Record<string, unknown>,\n alias: string,\n params: ParamStore,\n dialect: SqlDialect,\n model: Model,\n): string {\n const clauses: string[] = []\n\n for (const [key, value] of Object.entries(node)) {\n const built = buildHavingEntry(key, value, alias, params, dialect, model)\n for (const c of built) {\n if (c && c.trim().length > 0) clauses.push(c)\n }\n }\n\n return clauses.join(SQL_SEPARATORS.CONDITION_AND)\n}\n\nfunction assertHavingAggTarget(\n aggKey: AggregateKey,\n field: string,\n model: Model,\n): void {\n if (field === '_all') {\n if (aggKey !== '_count') {\n throw new Error(`HAVING '${aggKey}' does not support '_all'`)\n }\n return\n }\n\n const f = assertScalarField(model, field, 'HAVING')\n assertAggregateFieldType(aggKey, f.type, f.name, model.name)\n}\n\nfunction buildHavingOpsForExpr(\n expr: string,\n filter: Record<string, unknown>,\n params: ParamStore,\n dialect: SqlDialect,\n): string[] {\n const out: string[] = []\n for (const [op, val] of Object.entries(filter)) {\n if (op === 'mode') continue\n const built = buildSimpleComparison(expr, op, val, params, dialect)\n if (built && built.trim().length > 0) out.push(built)\n }\n return out\n}\n\nfunction buildHavingForAggregateFirstShape(\n aggKey: AggregateKey,\n target: unknown,\n alias: string,\n params: ParamStore,\n dialect: SqlDialect,\n model: Model,\n): string[] {\n if (!isPlainObject(target)) return []\n\n const out: string[] = []\n\n for (const [field, filter] of Object.entries(target)) {\n assertHavingAggTarget(aggKey, field, model)\n if (!isPlainObject(filter) || Object.keys(filter).length === 0) continue\n\n const expr = aggExprForField(aggKey, field, alias, model)\n out.push(...buildHavingOpsForExpr(expr, filter, params, dialect))\n }\n\n return out\n}\n\nfunction buildHavingForFieldFirstShape(\n fieldName: string,\n target: unknown,\n alias: string,\n params: ParamStore,\n dialect: SqlDialect,\n model: Model,\n): string[] {\n if (!isPlainObject(target)) return []\n\n const field = assertScalarField(model, fieldName, 'HAVING')\n const out: string[] = []\n const obj = target\n\n const keys: AggregateKey[] = ['_count', '_sum', '_avg', '_min', '_max']\n for (const aggKey of keys) {\n const aggFilter = obj[aggKey]\n if (!isPlainObject(aggFilter)) continue\n\n assertAggregateFieldType(aggKey, field.type, field.name, model.name)\n\n const entries = Object.entries(aggFilter)\n if (entries.length === 0) continue\n\n const expr = aggExprForField(aggKey, fieldName, alias, model)\n for (const [op, val] of entries) {\n if (op === 'mode') continue\n const built = buildSimpleComparison(expr, op, val, params, dialect)\n if (built && built.trim().length > 0) out.push(built)\n }\n }\n\n return out\n}\n\nfunction buildHavingClause(\n having: Record<string, unknown> | undefined,\n alias: string,\n params: ParamStore,\n model: Model,\n dialect?: SqlDialect,\n): string {\n if (!isNotNullish(having)) return ''\n\n const d = dialect ?? getGlobalDialect()\n if (!isPlainObject(having)) return ''\n\n return buildHavingNode(having, alias, params, d, model)\n}\n\nfunction normalizeCountArg(\n v: unknown,\n): Record<string, unknown> | true | undefined {\n if (!isNotNullish(v)) return undefined\n if (v === true) return true\n if (isPlainObject(v)) return v\n return undefined\n}\n\nfunction pushCountAllField(fields: string[]): void {\n fields.push(\n `${SQL_TEMPLATES.COUNT_ALL} ${SQL_TEMPLATES.AS} ${quote('_count._all')}`,\n )\n}\n\nfunction assertCountableScalarField(\n fieldMap: Map<string, ScalarFieldInfo>,\n model: Model,\n fieldName: string,\n): void {\n const field = fieldMap.get(fieldName)\n if (!field) {\n throw new Error(\n `Field '${fieldName}' does not exist on model ${model.name}`,\n )\n }\n if (field.isRelation) {\n throw new Error(\n `Cannot use _count on relation field '${fieldName}' on model ${model.name}`,\n )\n }\n}\n\nfunction pushCountField(\n fields: string[],\n alias: string,\n fieldName: string,\n model?: Model,\n): void {\n const outAlias = `_count.${fieldName}`\n fields.push(\n `COUNT(${col(alias, fieldName, model)}) ${SQL_TEMPLATES.AS} ${quote(outAlias)}`,\n )\n}\n\nfunction addCountFields(\n fields: string[],\n countArg: Record<string, unknown> | true | undefined,\n alias: string,\n model: Model,\n fieldMap: Map<string, ScalarFieldInfo>,\n): void {\n if (!isNotNullish(countArg)) return\n\n if (countArg === true) {\n pushCountAllField(fields)\n return\n }\n\n if (!isPlainObject(countArg)) return\n\n if (countArg._all === true) {\n pushCountAllField(fields)\n }\n\n const selected = Object.entries(countArg).filter(\n ([f, v]) => f !== '_all' && isTruthySelection(v),\n )\n\n for (const [f] of selected) {\n assertCountableScalarField(fieldMap, model, f)\n pushCountField(fields, alias, f, model)\n }\n}\n\nfunction getAggregateSelectionObject(\n args: PrismaQueryArgs,\n agg: AggregateKey,\n): Record<string, unknown> | undefined {\n const obj = (args as Record<string, unknown>)[agg]\n return isPlainObject(obj) ? obj : undefined\n}\n\nfunction assertAggregatableScalarField(\n fieldMap: Map<string, ScalarFieldInfo>,\n model: Model,\n agg: AggregateKey,\n fieldName: string,\n): ScalarFieldInfo {\n const field = fieldMap.get(fieldName)\n if (!field) {\n throw new Error(\n `Field '${fieldName}' does not exist on model ${model.name}`,\n )\n }\n if (field.isRelation) {\n throw new Error(\n `Cannot use ${agg} on relation field '${fieldName}' on model ${model.name}`,\n )\n }\n return field\n}\n\nfunction pushAggregateFieldSql(\n fields: string[],\n aggFn: string,\n alias: string,\n agg: AggregateKey,\n fieldName: string,\n model?: Model,\n): void {\n const outAlias = `${agg}.${fieldName}`\n fields.push(\n `${aggFn}(${col(alias, fieldName, model)}) ${SQL_TEMPLATES.AS} ${quote(outAlias)}`,\n )\n}\n\nfunction addAggregateFields(\n fields: string[],\n args: PrismaQueryArgs,\n alias: string,\n model: Model,\n fieldMap: Map<string, ScalarFieldInfo>,\n): void {\n for (const [agg, aggFn] of AGGREGATES) {\n const obj = getAggregateSelectionObject(args, agg)\n if (!obj) continue\n\n for (const [fieldName, selection] of Object.entries(obj)) {\n if (fieldName === '_all')\n throw new Error(`'${agg}' does not support '_all'`)\n if (!isTruthySelection(selection)) continue\n\n const field = assertAggregatableScalarField(\n fieldMap,\n model,\n agg,\n fieldName,\n )\n assertAggregateFieldType(agg, field.type, fieldName, model.name)\n pushAggregateFieldSql(fields, aggFn, alias, agg, fieldName, model)\n }\n }\n}\n\nfunction buildAggregateFields(\n args: PrismaQueryArgs,\n alias: string,\n model: Model,\n): string[] {\n const fields: string[] = []\n const fieldMap = getModelFieldMap(model)\n\n const countArg = normalizeCountArg(args._count)\n addCountFields(fields, countArg, alias, model, fieldMap)\n addAggregateFields(fields, args, alias, model, fieldMap)\n\n return fields\n}\n\nexport function buildAggregateSql(\n args: PrismaQueryArgs,\n whereResult: WhereClauseResult,\n tableName: string,\n alias: string,\n model: Model,\n): SqlResult {\n assertSafeAlias(alias)\n assertSafeTableRef(tableName)\n\n const aggFields = buildAggregateFields(args, alias, model)\n if (!isNonEmptyArray(aggFields)) {\n throw new Error('buildAggregateSql requires at least one aggregate field')\n }\n\n const selectClause = aggFields.join(SQL_SEPARATORS.FIELD_LIST)\n const whereClause = isValidWhereClause(whereResult.clause)\n ? `${SQL_TEMPLATES.WHERE} ${whereResult.clause}`\n : ''\n\n const sql = [\n SQL_TEMPLATES.SELECT,\n selectClause,\n SQL_TEMPLATES.FROM,\n tableName,\n alias,\n whereClause,\n ]\n .filter((x) => x && String(x).trim().length > 0)\n .join(' ')\n .trim()\n\n validateSelectQuery(sql)\n validateParamConsistency(sql, whereResult.params)\n\n return Object.freeze({\n sql,\n params: Object.freeze(normalizeFinalParams([...whereResult.params])),\n paramMappings: Object.freeze([...whereResult.paramMappings]),\n })\n}\n\nfunction assertGroupByBy(args: PrismaQueryArgs, model: Model): string[] {\n if (!isNotNullish(args.by) || !isNonEmptyArray(args.by)) {\n throw new Error('buildGroupBySql: by is required and cannot be empty')\n }\n\n const byFields = args.by.map((f: string) => String(f))\n const bySet = new Set(byFields)\n if (bySet.size !== byFields.length) {\n throw new Error('buildGroupBySql: by must not contain duplicates')\n }\n\n const modelFieldMap = getModelFieldMap(model)\n\n for (const f of byFields) {\n const field = modelFieldMap.get(f)\n if (!field) {\n throw new Error(\n `groupBy.by references unknown field '${f}' on model ${model.name}`,\n )\n }\n if (field.isRelation) {\n throw new Error(\n `groupBy.by does not support relation field '${f}' on model ${model.name}`,\n )\n }\n }\n\n return byFields\n}\n\nfunction buildGroupBySelectParts(\n args: PrismaQueryArgs,\n alias: string,\n model: Model,\n byFields: string[],\n): { groupCols: string[]; groupFields: string; selectFields: string } {\n const groupCols = byFields.map((f) => col(alias, f, model))\n const groupFields = groupCols.join(SQL_SEPARATORS.FIELD_LIST)\n\n const aggFields = buildAggregateFields(args, alias, model)\n const selectFields = isNonEmptyArray(aggFields)\n ? groupCols.concat(aggFields).join(SQL_SEPARATORS.FIELD_LIST)\n : groupCols.join(SQL_SEPARATORS.FIELD_LIST)\n\n return { groupCols, groupFields, selectFields }\n}\n\nfunction buildGroupByHaving(\n args: PrismaQueryArgs,\n alias: string,\n params: ParamStore,\n model: Model,\n dialect: SqlDialect,\n): string {\n if (!isNotNullish(args.having)) return ''\n if (!isPlainObject(args.having)) return ''\n\n const h = buildHavingClause(args.having, alias, params, model, dialect)\n if (!h || h.trim().length === 0) return ''\n return `${SQL_TEMPLATES.HAVING} ${h}`\n}\n\nexport function buildGroupBySql(\n args: PrismaQueryArgs,\n whereResult: WhereClauseResult,\n tableName: string,\n alias: string,\n model: Model,\n dialect?: SqlDialect,\n): SqlResult {\n assertSafeAlias(alias)\n assertSafeTableRef(tableName)\n\n const byFields = assertGroupByBy(args, model)\n\n const d = dialect ?? getGlobalDialect()\n const params = createParamStore(whereResult.nextParamIndex)\n\n const { groupFields, selectFields } = buildGroupBySelectParts(\n args,\n alias,\n model,\n byFields,\n )\n\n const havingClause = buildGroupByHaving(args, alias, params, model, d)\n\n const whereClause = isValidWhereClause(whereResult.clause)\n ? `${SQL_TEMPLATES.WHERE} ${whereResult.clause}`\n : ''\n\n const sql = [\n SQL_TEMPLATES.SELECT,\n selectFields,\n SQL_TEMPLATES.FROM,\n tableName,\n alias,\n whereClause,\n SQL_TEMPLATES.GROUP_BY,\n groupFields,\n havingClause,\n ]\n .filter((x) => x && String(x).trim().length > 0)\n .join(' ')\n .trim()\n\n const snapshot = params.snapshot()\n\n validateSelectQuery(sql)\n validateParamConsistency(sql, [...whereResult.params, ...snapshot.params])\n\n const mergedParams = [...whereResult.params, ...snapshot.params]\n\n return Object.freeze({\n sql,\n params: Object.freeze(normalizeFinalParams(mergedParams)),\n paramMappings: Object.freeze([\n ...whereResult.paramMappings,\n ...snapshot.mappings,\n ]),\n })\n}\n\nexport function buildCountSql(\n whereResult: WhereClauseResult,\n tableName: string,\n alias: string,\n skip?: number | string,\n dialect?: SqlDialect,\n): SqlResult {\n assertSafeAlias(alias)\n assertSafeTableRef(tableName)\n\n const d = dialect ?? getGlobalDialect()\n\n const whereClause = isValidWhereClause(whereResult.clause)\n ? `${SQL_TEMPLATES.WHERE} ${whereResult.clause}`\n : ''\n\n const params = createParamStore(whereResult.nextParamIndex)\n\n const baseSubSelect = [\n SQL_TEMPLATES.SELECT,\n '1',\n SQL_TEMPLATES.FROM,\n tableName,\n alias,\n whereClause,\n ]\n .filter((x) => x && String(x).trim().length > 0)\n .join(' ')\n .trim()\n\n const normalizedSkip = normalizeSkipLike(skip)\n const subSelect = applyCountSkip(baseSubSelect, normalizedSkip, params, d)\n\n const sql = [\n SQL_TEMPLATES.SELECT,\n SQL_TEMPLATES.COUNT_ALL,\n SQL_TEMPLATES.AS,\n quote('_count._all'),\n SQL_TEMPLATES.FROM,\n `(${subSelect})`,\n SQL_TEMPLATES.AS,\n `\"sub\"`,\n ]\n .filter((x) => x && String(x).trim().length > 0)\n .join(' ')\n .trim()\n\n validateSelectQuery(sql)\n\n const snapshot = params.snapshot()\n const mergedParams = [...whereResult.params, ...snapshot.params]\n\n validateParamConsistency(sql, mergedParams)\n\n return Object.freeze({\n sql,\n params: Object.freeze(normalizeFinalParams(mergedParams)),\n paramMappings: Object.freeze([\n ...whereResult.paramMappings,\n ...snapshot.mappings,\n ]),\n })\n}\n\nfunction applyCountSkip(\n subSelect: string,\n normalizedSkip: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n): string {\n const shouldApply =\n isDynamicParameter(normalizedSkip) ||\n (typeof normalizedSkip === 'number' && normalizedSkip > 0)\n\n if (!shouldApply) return subSelect\n\n const placeholder = addAutoScoped(params, normalizedSkip, 'count.skip')\n\n if (dialect === 'sqlite') {\n return `${subSelect} ${SQL_TEMPLATES.LIMIT} -1 ${SQL_TEMPLATES.OFFSET} ${placeholder}`\n }\n\n return `${subSelect} ${SQL_TEMPLATES.OFFSET} ${placeholder}`\n}\n","import { getModelByName } from './builder/joins'\nimport { buildSelectSql } from './builder/select'\nimport {\n buildAggregateSql,\n buildCountSql,\n buildGroupBySql,\n} from './builder/aggregates'\nimport { getGlobalDialect, SqlDialect } from './sql-builder-dialect'\nimport { buildWhereClause } from './builder/where'\nimport { buildTableReference } from './builder/shared/sql-utils'\nimport { SQL_TEMPLATES, SQL_RESERVED_WORDS } from './builder/shared/constants'\nimport { validateSqlPositions } from './builder/shared/validators/sql-validators'\nimport {\n ParamMap,\n DirectiveProps,\n convertDMMFToModels,\n} from '@dee-wan/schema-parser'\n\nexport interface SQLDirective {\n method: PrismaMethod\n sql: string\n staticParams: any[]\n dynamicKeys: string[]\n paramMappings: readonly ParamMap[]\n originalDirective: DirectiveProps\n}\n\ntype PrismaMethod =\n | 'findMany'\n | 'findFirst'\n | 'findUnique'\n | 'aggregate'\n | 'groupBy'\n | 'count'\n\nfunction safeAlias(input: string): string {\n const raw = String(input).toLowerCase()\n const cleaned = raw.replace(/[^a-z0-9_]/g, '_')\n const startsOk = /^[a-z_]/.test(cleaned)\n let base = startsOk ? cleaned : `_${cleaned}`\n base = base.length > 0 ? base : '_t'\n\n if (SQL_RESERVED_WORDS.has(base)) {\n base = `_${base}`\n }\n\n return base\n}\n\nfunction isPrismaMethod(v: unknown): v is PrismaMethod {\n return (\n v === 'findMany' ||\n v === 'findFirst' ||\n v === 'findUnique' ||\n v === 'aggregate' ||\n v === 'groupBy' ||\n v === 'count'\n )\n}\n\nfunction getMethodFromProcessed(processed: Record<string, any>): PrismaMethod {\n const maybe = processed?.method\n if (isPrismaMethod(maybe)) return maybe\n return 'findMany'\n}\n\nfunction buildSqlResult(args: {\n method: PrismaMethod\n processed: Record<string, any>\n whereResult: ReturnType<typeof buildWhereClause>\n tableName: string\n alias: string\n modelDef: any\n schemaModels: any\n dialect: SqlDialect\n}): { sql: string; paramMappings: readonly ParamMap[] } {\n const {\n method,\n processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n schemaModels,\n dialect,\n } = args\n\n if (method === 'aggregate') {\n return buildAggregateSql(processed, whereResult, tableName, alias, modelDef)\n }\n\n if (method === 'groupBy') {\n return buildGroupBySql(processed, whereResult, tableName, alias, modelDef)\n }\n\n if (method === 'count') {\n return buildCountSql(\n whereResult,\n tableName,\n alias,\n processed.skip as number,\n )\n }\n\n return buildSelectSql({\n method,\n args: processed,\n model: modelDef,\n schemas: schemaModels,\n from: { tableName, alias },\n whereResult,\n dialect,\n })\n}\n\nfunction normalizeSqlAndMappingsForDialect(\n sql: string,\n paramMappings: readonly ParamMap[],\n dialect: SqlDialect,\n): { sql: string; paramMappings: readonly ParamMap[] } {\n if (dialect !== 'sqlite') return { sql, paramMappings }\n\n const byIndex = new Map<number, ParamMap>()\n for (const m of paramMappings) byIndex.set(m.index, m)\n\n const placeholderPositions: number[] = []\n const normalizedSql = sql.replace(/\\$(\\d+)/g, (_, num) => {\n placeholderPositions.push(parseInt(num, 10))\n return '?'\n })\n\n const expandedMappings: ParamMap[] = placeholderPositions.map(\n (originalIndex, i) => {\n const originalMapping = byIndex.get(originalIndex)\n if (!originalMapping) {\n throw new Error(\n `CRITICAL: No mapping found for parameter $${originalIndex}`,\n )\n }\n return {\n index: i + 1,\n value: originalMapping.value,\n dynamicName: originalMapping.dynamicName,\n }\n },\n )\n\n return { sql: normalizedSql, paramMappings: expandedMappings }\n}\n\nfunction buildParamsFromMappings(mappings: readonly ParamMap[]): {\n staticParams: any[]\n dynamicKeys: string[]\n} {\n const sorted = [...mappings].sort((a, b) => a.index - b.index)\n\n return sorted.reduce(\n (acc, m) => {\n if (m.dynamicName !== undefined) {\n acc.dynamicKeys.push(m.dynamicName)\n return acc\n }\n if (m.value !== undefined) {\n acc.staticParams.push(m.value)\n return acc\n }\n throw new Error(\n `CRITICAL: ParamMap ${m.index} has neither dynamicName nor value`,\n )\n },\n { staticParams: [] as any[], dynamicKeys: [] as string[] },\n )\n}\n\nfunction resolveModelContext(directive: DirectiveProps): {\n schemaModels: any\n modelDef: any\n} {\n const { model, datamodel } = directive.context\n\n const schemaModels = convertDMMFToModels(datamodel)\n const modelDef = getModelByName(schemaModels, model.name)\n if (!modelDef) throw new Error(`Model ${model.name} not found in schema`)\n\n return { schemaModels, modelDef }\n}\n\nfunction buildMainTableAndAlias(args: { modelDef: any; dialect: SqlDialect }): {\n tableName: string\n alias: string\n} {\n const { modelDef, dialect } = args\n const baseName = modelDef.tableName || modelDef.name\n\n return {\n tableName: buildTableReference(\n SQL_TEMPLATES.PUBLIC_SCHEMA,\n baseName,\n dialect,\n ),\n alias: safeAlias(`${baseName}_main`),\n }\n}\n\nfunction buildMainWhere(args: {\n processed: Record<string, any>\n alias: string\n schemaModels: any\n modelDef: any\n dialect: SqlDialect\n}): ReturnType<typeof buildWhereClause> {\n const { processed, alias, schemaModels, modelDef, dialect } = args\n\n return buildWhereClause((processed.where || {}) as Record<string, unknown>, {\n alias,\n schemaModels,\n model: modelDef,\n path: ['where'],\n isSubquery: false,\n dialect,\n })\n}\n\nfunction buildAndNormalizeSql(args: {\n method: PrismaMethod\n processed: Record<string, any>\n whereResult: ReturnType<typeof buildWhereClause>\n tableName: string\n alias: string\n modelDef: any\n schemaModels: any\n dialect: SqlDialect\n}): { sql: string; paramMappings: readonly ParamMap[] } {\n const {\n method,\n processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n schemaModels,\n dialect,\n } = args\n\n const sqlResult = buildSqlResult({\n method,\n processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n schemaModels,\n dialect,\n })\n\n return normalizeSqlAndMappingsForDialect(\n sqlResult.sql,\n sqlResult.paramMappings,\n dialect,\n )\n}\n\nfunction finalizeDirective(args: {\n directive: DirectiveProps\n normalizedSql: string\n normalizedMappings: readonly ParamMap[]\n}): SQLDirective {\n const { directive, normalizedSql, normalizedMappings } = args\n\n validateSqlPositions(normalizedSql, normalizedMappings, getGlobalDialect())\n\n const { staticParams, dynamicKeys } =\n buildParamsFromMappings(normalizedMappings)\n\n return {\n method: directive.method as PrismaMethod,\n sql: normalizedSql,\n staticParams,\n dynamicKeys,\n paramMappings: normalizedMappings,\n originalDirective: directive,\n }\n}\n\nexport function generateSQL(directive: DirectiveProps): SQLDirective {\n const { query } = directive\n\n const { schemaModels, modelDef } = resolveModelContext(directive)\n\n const dialect = getGlobalDialect()\n\n const { tableName, alias } = buildMainTableAndAlias({ modelDef, dialect })\n\n const whereResult = buildMainWhere({\n processed: query.processed,\n alias,\n schemaModels,\n modelDef,\n dialect,\n })\n\n const method = directive.method as PrismaMethod\n\n const normalized = buildAndNormalizeSql({\n method,\n processed: query.processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n schemaModels,\n dialect,\n })\n\n return finalizeDirective({\n directive,\n normalizedSql: normalized.sql,\n normalizedMappings: normalized.paramMappings,\n })\n}\n","export type PrismaMethod =\n | 'findMany'\n | 'findFirst'\n | 'findUnique'\n | 'count'\n | 'aggregate'\n | 'groupBy'\n\nfunction parseAggregateValue(value: unknown): unknown {\n if (typeof value === 'string' && /^-?\\d+(\\.\\d+)?$/.test(value)) {\n return parseFloat(value)\n }\n return value\n}\n\nfunction transformGroupByResults(results: unknown[]): unknown[] {\n return results.map((row) => {\n const raw = row as Record<string, unknown>\n const parsed: any = {}\n\n for (const [key, value] of Object.entries(raw)) {\n const parts = key.split('.')\n if (parts.length === 2) {\n const [group, field] = parts\n if (!parsed[group]) parsed[group] = {}\n parsed[group][field] = parseAggregateValue(value)\n } else {\n parsed[key] = value\n }\n }\n\n return parsed\n })\n}\n\nfunction transformCountResults(results: unknown[]): number {\n const result = results[0] as any\n const count = result?.['_count._all'] || result?.count || 0\n return typeof count === 'string' ? parseInt(count, 10) : count\n}\n\nfunction transformAggregateResults(results: unknown[]): Record<string, any> {\n const raw = (results[0] || {}) as Record<string, unknown>\n const parsed: any = {}\n\n for (const [key, value] of Object.entries(raw)) {\n const parts = key.split('.')\n if (parts.length === 2) {\n const [group, field] = parts\n if (!parsed[group]) parsed[group] = {}\n parsed[group][field] = parseAggregateValue(value)\n } else {\n parsed[key] = value\n }\n }\n\n return parsed\n}\n\nexport const RESULT_TRANSFORMERS: Partial<\n Record<PrismaMethod, (results: unknown[]) => unknown>\n> = {\n findFirst: (results) => results[0] || null,\n findUnique: (results) => results[0] || null,\n count: transformCountResults,\n aggregate: transformAggregateResults,\n groupBy: transformGroupByResults,\n}\n\nexport function transformQueryResults(\n method: PrismaMethod,\n results: unknown[],\n): unknown {\n const transformer = RESULT_TRANSFORMERS[method]\n return transformer ? transformer(results) : results\n}\n","interface Node<K, V> {\n key: K;\n value: V;\n freq: number;\n queue: \"small\" | \"main\";\n prev: Node<K, V> | null;\n next: Node<K, V> | null;\n}\n\nfunction withDispose<T>(it: IterableIterator<T>): MapIterator<T> {\n const anyIt = it as any;\n if (anyIt[Symbol.dispose] === undefined) {\n anyIt[Symbol.dispose] = () => {};\n }\n return it as unknown as MapIterator<T>;\n}\n\nexport class BoundedCache<K, V> implements Map<K, V> {\n private map: Map<K, Node<K, V>> = new Map();\n private ghost: Set<K> = new Set();\n\n private smallHead: Node<K, V> | null = null;\n private smallTail: Node<K, V> | null = null;\n private smallSize = 0;\n\n private mainHead: Node<K, V> | null = null;\n private mainTail: Node<K, V> | null = null;\n private mainSize = 0;\n\n private readonly maxSize: number;\n private readonly smallLimit: number;\n private readonly mainLimit: number;\n private readonly ghostLimit: number;\n\n constructor(maxSize: number) {\n this.maxSize = maxSize;\n this.smallLimit = Math.max(1, Math.floor(maxSize * 0.1));\n this.mainLimit = maxSize - this.smallLimit;\n this.ghostLimit = this.mainLimit;\n }\n\n get size(): number {\n return this.map.size;\n }\n\n get(key: K): V | undefined {\n const node = this.map.get(key);\n if (!node) return undefined;\n\n node.freq = Math.min(node.freq + 1, 3);\n return node.value;\n }\n\n set(key: K, value: V): this {\n const existing = this.map.get(key);\n\n if (existing) {\n existing.value = value;\n return this;\n }\n\n if (this.ghost.has(key)) {\n this.ghost.delete(key);\n const node = this.createNode(key, value, \"main\");\n this.map.set(key, node);\n this.pushMain(node);\n\n if (this.mainSize > this.mainLimit) this.evictMain();\n return this;\n }\n\n const node = this.createNode(key, value, \"small\");\n this.map.set(key, node);\n this.pushSmall(node);\n\n if (this.size > this.maxSize) {\n if (this.smallSize > this.smallLimit) this.evictSmall();\n else this.evictMain();\n }\n\n return this;\n }\n\n has(key: K): boolean {\n return this.map.has(key);\n }\n\n delete(key: K): boolean {\n const node = this.map.get(key);\n if (!node) return false;\n\n this.map.delete(key);\n this.removeNode(node);\n return true;\n }\n\n clear(): void {\n this.map.clear();\n this.ghost.clear();\n this.smallHead = this.smallTail = null;\n this.mainHead = this.mainTail = null;\n this.smallSize = this.mainSize = 0;\n }\n\n keys(): MapIterator<K> {\n return withDispose(\n (function* (self: BoundedCache<K, V>) {\n for (const key of self.map.keys()) yield key;\n })(this),\n );\n }\n\n values(): MapIterator<V> {\n return withDispose(\n (function* (self: BoundedCache<K, V>) {\n for (const node of self.map.values()) yield node.value;\n })(this),\n );\n }\n\n entries(): MapIterator<[K, V]> {\n return withDispose(\n (function* (self: BoundedCache<K, V>) {\n for (const [key, node] of self.map.entries())\n yield [key, node.value] as [K, V];\n })(this),\n );\n }\n\n forEach(\n callbackfn: (value: V, key: K, map: Map<K, V>) => void,\n thisArg?: any,\n ): void {\n for (const [key, node] of this.map.entries()) {\n callbackfn.call(thisArg, node.value, key, this);\n }\n }\n\n [Symbol.iterator](): MapIterator<[K, V]> {\n return this.entries();\n }\n\n get [Symbol.toStringTag](): string {\n return \"BoundedCache\";\n }\n\n private createNode(key: K, value: V, queue: \"small\" | \"main\"): Node<K, V> {\n return { key, value, freq: 0, queue, prev: null, next: null };\n }\n\n private pushSmall(node: Node<K, V>): void {\n node.next = this.smallHead;\n node.prev = null;\n\n if (this.smallHead) this.smallHead.prev = node;\n else this.smallTail = node;\n\n this.smallHead = node;\n this.smallSize++;\n }\n\n private pushMain(node: Node<K, V>): void {\n node.next = this.mainHead;\n node.prev = null;\n\n if (this.mainHead) this.mainHead.prev = node;\n else this.mainTail = node;\n\n this.mainHead = node;\n this.mainSize++;\n }\n\n private popSmall(): Node<K, V> | null {\n if (!this.smallTail) return null;\n\n const node = this.smallTail;\n this.smallTail = node.prev;\n\n if (this.smallTail) this.smallTail.next = null;\n else this.smallHead = null;\n\n node.prev = null;\n node.next = null;\n this.smallSize--;\n return node;\n }\n\n private popMain(): Node<K, V> | null {\n if (!this.mainTail) return null;\n\n const node = this.mainTail;\n this.mainTail = node.prev;\n\n if (this.mainTail) this.mainTail.next = null;\n else this.mainHead = null;\n\n node.prev = null;\n node.next = null;\n this.mainSize--;\n return node;\n }\n\n private removeNode(node: Node<K, V>): void {\n this.unlinkNode(node);\n\n if (node.queue === \"small\") {\n if (node === this.smallHead) this.smallHead = node.next;\n if (node === this.smallTail) this.smallTail = node.prev;\n this.smallSize--;\n } else {\n if (node === this.mainHead) this.mainHead = node.next;\n if (node === this.mainTail) this.mainTail = node.prev;\n this.mainSize--;\n }\n\n node.prev = null;\n node.next = null;\n }\n\n private unlinkNode(node: Node<K, V>): void {\n if (node.prev) node.prev.next = node.next;\n if (node.next) node.next.prev = node.prev;\n }\n\n private shouldPromoteFromSmall(node: Node<K, V>): boolean {\n return node.freq > 1;\n }\n\n private shouldRetryInMain(node: Node<K, V>): boolean {\n return node.freq >= 1;\n }\n\n private promoteToMain(node: Node<K, V>): void {\n node.queue = \"main\";\n this.pushMain(node);\n }\n\n private addToGhost(key: K): void {\n this.ghost.add(key);\n\n if (this.ghost.size <= this.ghostLimit) return;\n\n const firstGhost = this.ghost.values().next().value;\n if (firstGhost !== undefined) this.ghost.delete(firstGhost);\n }\n\n private evictFromCache(node: Node<K, V>): void {\n this.map.delete(node.key);\n }\n\n private evictSmall(): void {\n while (this.smallSize > 0) {\n const node = this.popSmall();\n if (!node) return;\n\n if (this.shouldPromoteFromSmall(node)) {\n this.promoteToMain(node);\n\n if (this.mainSize > this.mainLimit) {\n this.evictMain();\n return;\n }\n\n continue;\n }\n\n this.evictFromCache(node);\n this.addToGhost(node.key);\n return;\n }\n }\n\n private evictMain(): void {\n while (this.mainSize > 0) {\n const node = this.popMain();\n if (!node) return;\n\n if (this.shouldRetryInMain(node)) {\n node.freq--;\n this.pushMain(node);\n continue;\n }\n\n this.evictFromCache(node);\n return;\n }\n }\n}\n\nexport function createBoundedCache<K, V>(maxSize: number): Map<K, V> {\n return new BoundedCache<K, V>(maxSize);\n}\n","import { ParamMap, isDynamicParameter } from '@dee-wan/schema-parser'\nimport type { Model } from './types'\nimport type { SqlDialect } from './sql-builder-dialect'\nimport { buildWhereClause } from './builder/where'\nimport { buildSelectSql } from './builder/select'\nimport {\n buildAggregateSql,\n buildCountSql,\n buildGroupBySql,\n} from './builder/aggregates'\nimport { buildTableReference } from './builder/shared/sql-utils'\nimport { SQL_TEMPLATES, SQL_RESERVED_WORDS } from './builder/shared/constants'\nimport { createBoundedCache } from './utils/s3-fifo'\n\nexport type PrismaMethod =\n | 'findMany'\n | 'findFirst'\n | 'findUnique'\n | 'count'\n | 'aggregate'\n | 'groupBy'\n\ninterface SqlResult {\n sql: string\n params: unknown[]\n}\n\nconst queryCache = createBoundedCache<string, string>(1000)\n\nfunction makeAlias(name: string): string {\n const base = name\n .toLowerCase()\n .replace(/[^a-z0-9_]/g, '_')\n .slice(0, 50)\n const safe = /^[a-z_]/.test(base) ? base : `_${base}`\n return SQL_RESERVED_WORDS.has(safe) ? `${safe}_t` : safe\n}\n\nfunction toSqliteParams(sql: string, params: readonly unknown[]): SqlResult {\n const reorderedParams: unknown[] = []\n let lastIndex = 0\n const parts: string[] = []\n\n for (let i = 0; i < sql.length; i++) {\n if (sql[i] === '$' && i + 1 < sql.length) {\n let num = 0\n let j = i + 1\n while (j < sql.length && sql[j] >= '0' && sql[j] <= '9') {\n num = num * 10 + (sql.charCodeAt(j) - 48)\n j++\n }\n\n if (j > i + 1) {\n parts.push(sql.substring(lastIndex, i))\n parts.push('?')\n reorderedParams.push(params[num - 1])\n i = j - 1\n lastIndex = j\n }\n }\n }\n\n parts.push(sql.substring(lastIndex))\n return { sql: parts.join(''), params: reorderedParams }\n}\n\nfunction canonicalizeQuery(\n modelName: string,\n method: PrismaMethod,\n args: Record<string, unknown>,\n): string {\n function normalize(obj: any): any {\n if (obj === null || obj === undefined) return obj\n\n if (obj instanceof Date) {\n return '__DATE_PARAM__'\n }\n\n if (Array.isArray(obj)) {\n return obj.map(normalize)\n }\n\n if (typeof obj === 'object') {\n const sorted: any = {}\n for (const key of Object.keys(obj).sort()) {\n const value = obj[key]\n sorted[key] = isDynamicParameter(value) ? '__DYN__' : normalize(value)\n }\n return sorted\n }\n\n return obj\n }\n\n const canonical = normalize(args)\n return `${modelName}:${method}:${JSON.stringify(canonical)}`\n}\n\nfunction buildSQLFull(\n model: Model,\n models: Model[],\n method: PrismaMethod,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult {\n const tableName = buildTableReference(\n SQL_TEMPLATES.PUBLIC_SCHEMA,\n model.tableName,\n dialect,\n )\n const alias = makeAlias(model.tableName)\n\n const whereResult = buildWhereClause(\n (args.where || {}) as Record<string, unknown>,\n {\n alias,\n schemaModels: models,\n model,\n path: ['where'],\n isSubquery: false,\n dialect,\n },\n )\n\n const withMethod = { ...args, method }\n let result: { sql: string; params: readonly unknown[] }\n\n switch (method) {\n case 'aggregate':\n result = buildAggregateSql(\n withMethod,\n whereResult,\n tableName,\n alias,\n model,\n )\n break\n case 'groupBy':\n result = buildGroupBySql(\n withMethod,\n whereResult,\n tableName,\n alias,\n model,\n dialect,\n )\n break\n case 'count':\n result = buildCountSql(\n whereResult,\n tableName,\n alias,\n args.skip as number,\n dialect,\n )\n break\n default:\n result = buildSelectSql({\n method,\n args: withMethod,\n model,\n schemas: models,\n from: { tableName, alias },\n whereResult,\n dialect,\n })\n }\n\n return dialect === 'sqlite'\n ? toSqliteParams(result.sql, result.params)\n : { sql: result.sql, params: [...result.params] }\n}\n\nexport function buildSQLWithCache(\n model: Model,\n models: Model[],\n method: PrismaMethod,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult {\n const cacheKey = canonicalizeQuery(model.name, method, args)\n const cachedSql = queryCache.get(cacheKey)\n\n if (cachedSql) {\n const result = buildSQLFull(model, models, method, args, dialect)\n return { sql: cachedSql, params: result.params }\n }\n\n const result = buildSQLFull(model, models, method, args, dialect)\n queryCache.set(cacheKey, result.sql)\n\n return result\n}\n\nexport { queryCache }\n","import {\n type Model,\n DirectiveProps,\n convertDMMFToModels,\n} from '@dee-wan/schema-parser'\nimport { DMMF } from '@prisma/generator-helper'\nimport { buildWhereClause } from './builder/where'\nimport { buildSelectSql } from './builder/select'\nimport {\n buildAggregateSql,\n buildCountSql,\n buildGroupBySql,\n} from './builder/aggregates'\nimport { buildTableReference } from './builder/shared/sql-utils'\nimport { SQL_TEMPLATES, SQL_RESERVED_WORDS } from './builder/shared/constants'\nimport { setGlobalDialect, SqlDialect } from './sql-builder-dialect'\nimport {\n generateSQL as generateSQLInternal,\n SQLDirective,\n} from './sql-generator'\nimport { transformQueryResults, type PrismaMethod } from './result-transformers'\nimport { buildSQLWithCache } from './query-cache'\n\ninterface SqlResult {\n sql: string\n params: unknown[]\n}\n\ninterface SpeedExtensionConfig {\n postgres?: any\n sqlite?: any\n models?: Model[]\n dmmf?: DMMF.Document\n debug?: boolean\n allowedModels?: string[]\n onQuery?: (info: QueryInfo) => void\n}\n\ninterface QueryInfo {\n model: string\n method: string\n sql: string\n params: unknown[]\n duration: number\n}\n\nconst ACCELERATED_METHODS = new Set<PrismaMethod>([\n 'findMany',\n 'findFirst',\n 'findUnique',\n 'count',\n 'aggregate',\n 'groupBy',\n])\n\nfunction makeAlias(name: string): string {\n const base = name\n .toLowerCase()\n .replace(/[^a-z0-9_]/g, '_')\n .slice(0, 50)\n const safe = /^[a-z_]/.test(base) ? base : `_${base}`\n return SQL_RESERVED_WORDS.has(safe) ? `${safe}_t` : safe\n}\n\nfunction toSqliteParams(sql: string, params: readonly unknown[]): SqlResult {\n const positions: number[] = []\n\n const converted = sql.replace(/\\$(\\d+)/g, (_, num) => {\n positions.push(parseInt(num, 10))\n return '?'\n })\n\n const reordered = positions.map((pos) => {\n const idx = pos - 1\n if (idx < 0 || idx >= params.length) {\n throw new Error(`Param $${pos} out of bounds (have ${params.length})`)\n }\n return params[idx]\n })\n\n return { sql: converted, params: reordered }\n}\n\nexport function buildSQL(\n model: Model,\n models: Model[],\n method: PrismaMethod,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult {\n return buildSQLWithCache(model, models, method, args, dialect)\n}\n\nasync function executePostgres(\n client: any,\n sql: string,\n params: unknown[],\n): Promise<unknown[]> {\n return await client.unsafe(sql, params as any[])\n}\n\nfunction executeSqlite(db: any, sql: string, params: unknown[]): unknown[] {\n const stmt = db.prepare(sql)\n\n if (sql.toUpperCase().includes('COUNT(*) AS')) {\n return [stmt.get(...params)]\n }\n\n return stmt.all(...params)\n}\n\ntype ExecuteWithTimingInput = {\n modelName: string\n method: PrismaMethod\n model: Model\n allModels: Model[]\n args: Record<string, unknown>\n dialect: SqlDialect\n debug: boolean\n executeQuery: (sql: string, params: unknown[]) => Promise<unknown[]>\n onQuery?: (info: QueryInfo) => void\n}\n\nasync function executeWithTiming(\n input: ExecuteWithTimingInput,\n): Promise<unknown[]> {\n const startTime = Date.now()\n\n const { sql, params } = buildSQL(\n input.model,\n input.allModels,\n input.method,\n input.args,\n input.dialect,\n )\n\n if (input.debug) {\n console.log(`[${input.dialect}] ${input.modelName}.${input.method}`)\n console.log('SQL:', sql)\n console.log('Params:', params)\n }\n\n const results = await input.executeQuery(sql, params)\n const duration = Date.now() - startTime\n\n input.onQuery?.({\n model: input.modelName,\n method: input.method,\n sql,\n params,\n duration,\n })\n\n return results\n}\n\nfunction resolveModelName(ctx: any): string {\n return ctx?.name || ctx?.$name\n}\n\nfunction isAllowedModel(\n allowedModels: string[] | undefined,\n modelName: string,\n): boolean {\n if (!allowedModels) return true\n return allowedModels.includes(modelName)\n}\n\nfunction getModelOrNull(\n modelMap: Map<string, Model>,\n modelName: string,\n): Model | null {\n return modelMap.get(modelName) ?? null\n}\n\nfunction fallbackToPrisma(\n ctx: any,\n modelName: string,\n method: PrismaMethod,\n args: any,\n) {\n return ctx.$parent[modelName][method](args)\n}\n\nfunction createExecuteQuery(client: any, dialect: SqlDialect) {\n return async (sql: string, params: unknown[]): Promise<unknown[]> => {\n if (dialect === 'postgres') {\n return await executePostgres(client, sql, params)\n }\n return executeSqlite(client, sql, params)\n }\n}\n\nfunction logAcceleratedError(\n debug: boolean,\n dialect: SqlDialect,\n modelName: string,\n method: PrismaMethod,\n error: unknown,\n) {\n if (!debug) return\n console.error(`[${dialect}] ${modelName}.${method} failed:`, error)\n}\n\ntype AccelerationDeps = {\n dialect: SqlDialect\n debug: boolean\n onQuery?: (info: QueryInfo) => void\n allowedModels?: string[]\n allModels: Model[]\n modelMap: Map<string, Model>\n executeQuery: (sql: string, params: unknown[]) => Promise<unknown[]>\n}\n\nfunction canAccelerate(\n deps: AccelerationDeps,\n modelName: string,\n method: PrismaMethod,\n): boolean {\n if (!ACCELERATED_METHODS.has(method)) return false\n if (!isAllowedModel(deps.allowedModels, modelName)) return false\n return deps.modelMap.has(modelName)\n}\n\nasync function runAccelerated(\n deps: AccelerationDeps,\n modelName: string,\n method: PrismaMethod,\n model: Model,\n args: any,\n): Promise<unknown> {\n const results = await executeWithTiming({\n modelName,\n method,\n model,\n allModels: deps.allModels,\n args: (args || {}) as Record<string, unknown>,\n dialect: deps.dialect,\n debug: deps.debug,\n executeQuery: deps.executeQuery,\n onQuery: deps.onQuery,\n })\n\n return transformQueryResults(method, results)\n}\n\nasync function handleMethodCall(\n ctx: any,\n method: PrismaMethod,\n args: any,\n deps: AccelerationDeps,\n): Promise<any> {\n const modelName = resolveModelName(ctx)\n\n if (!canAccelerate(deps, modelName, method)) {\n return fallbackToPrisma(ctx, modelName, method, args)\n }\n\n const model = getModelOrNull(deps.modelMap, modelName)\n if (!model) {\n return fallbackToPrisma(ctx, modelName, method, args)\n }\n\n try {\n return await runAccelerated(deps, modelName, method, model, args)\n } catch (error) {\n logAcceleratedError(deps.debug, deps.dialect, modelName, method, error)\n return fallbackToPrisma(ctx, modelName, method, args)\n }\n}\n\n/**\n * Runtime-only Prisma extension for SQL acceleration.\n *\n * ⚠️ RECOMMENDED: Use generated extension instead for zero overhead!\n *\n * @example\n * // RECOMMENDED: Generated extension (no models/dmmf needed)\n * import { speedExtension } from './generated/sql'\n * const prisma = new PrismaClient().$extends(\n * speedExtension({ postgres: sql })\n * )\n *\n * @example\n * // Runtime with pre-converted models\n * import { speedExtension } from 'prisma-sql'\n * import { MODELS } from './generated/sql'\n * const prisma = new PrismaClient().$extends(\n * speedExtension({ postgres: sql, models: MODELS })\n * )\n *\n * @example\n * // Runtime with DMMF (auto-converts on startup)\n * import { speedExtension } from 'prisma-sql'\n * import { Prisma } from '@prisma/client'\n * const prisma = new PrismaClient().$extends(\n * speedExtension({ postgres: sql, dmmf: Prisma.dmmf })\n * )\n */\nexport function speedExtension(config: SpeedExtensionConfig) {\n const {\n postgres,\n sqlite,\n models: providedModels,\n dmmf,\n debug = false,\n allowedModels,\n onQuery,\n } = config\n\n if (!postgres && !sqlite) {\n throw new Error('speedExtension requires either postgres or sqlite client')\n }\n\n if (postgres && sqlite) {\n throw new Error(\n 'speedExtension cannot use both postgres and sqlite clients',\n )\n }\n\n let models: Model[]\n\n if (providedModels) {\n models = providedModels\n } else if (dmmf) {\n models = convertDMMFToModels(dmmf.datamodel)\n } else {\n throw new Error(\n 'speedExtension requires either models or dmmf parameter.\\n\\n' +\n '⚠️ RECOMMENDED APPROACH:\\n' +\n ' Use the generated extension for zero runtime overhead:\\n\\n' +\n ' import { speedExtension } from \"./generated/sql\"\\n' +\n ' const prisma = new PrismaClient().$extends(\\n' +\n ' speedExtension({ postgres: sql })\\n' +\n ' )\\n\\n' +\n ' 1. Add generator to schema.prisma:\\n' +\n ' generator sql {\\n' +\n ' provider = \"prisma-sql-generator\"\\n' +\n ' }\\n\\n' +\n ' 2. Run: npx prisma generate\\n\\n' +\n ' 3. Import from generated file\\n\\n' +\n '❌ RUNTIME-ONLY MODE:\\n' +\n ' If you cannot use the generator, provide models or dmmf:\\n\\n' +\n ' import { speedExtension } from \"prisma-sql\"\\n' +\n ' import { MODELS } from \"./generated/sql\"\\n' +\n ' const prisma = new PrismaClient().$extends(\\n' +\n ' speedExtension({ postgres: sql, models: MODELS })\\n' +\n ' )\\n\\n' +\n ' Or with DMMF (auto-converts on startup):\\n\\n' +\n ' import { Prisma } from \"@prisma/client\"\\n' +\n ' const prisma = new PrismaClient().$extends(\\n' +\n ' speedExtension({ postgres: sql, dmmf: Prisma.dmmf })\\n' +\n ' )',\n )\n }\n\n if (!Array.isArray(models) || models.length === 0) {\n throw new Error('speedExtension: models array is empty or invalid')\n }\n\n const dialect: SqlDialect = postgres ? 'postgres' : 'sqlite'\n const client = postgres || sqlite\n\n setGlobalDialect(dialect)\n\n return (prisma: any) => {\n const modelMap = new Map(models.map((m) => [m.name, m]))\n const executeQuery = createExecuteQuery(client, dialect)\n\n const deps: AccelerationDeps = {\n dialect,\n debug,\n onQuery,\n allowedModels,\n allModels: models,\n modelMap,\n executeQuery,\n }\n\n const createMethodHandler = (method: PrismaMethod) => {\n return async function (this: any, args: any) {\n return handleMethodCall(this, method, args, deps)\n }\n }\n\n const methodHandlers: Record<string, any> = {}\n for (const method of ACCELERATED_METHODS) {\n methodHandlers[method] = createMethodHandler(method)\n }\n\n return prisma.$extends({\n name: 'prisma-sql-speed',\n\n client: {\n $original: prisma,\n },\n\n model: {\n $allModels: methodHandlers,\n },\n })\n }\n}\n\nfunction createToSQLFunction(\n models: Model[],\n dialect: SqlDialect,\n): (\n model: string,\n method: PrismaMethod,\n args?: Record<string, unknown>,\n) => SqlResult {\n if (!models || !Array.isArray(models) || models.length === 0) {\n throw new Error('createToSQL requires non-empty models array')\n }\n\n const modelMap = new Map(models.map((m) => [m.name, m]))\n\n setGlobalDialect(dialect)\n\n return function toSQL(\n model: string,\n method: PrismaMethod,\n args: Record<string, unknown> = {},\n ): SqlResult {\n const m = modelMap.get(model)\n if (!m) {\n throw new Error(\n `Model '${model}' not found. Available: ${[...modelMap.keys()].join(', ')}`,\n )\n }\n return buildSQL(m, models, method, args, dialect)\n }\n}\n\n/**\n * Create a SQL generator function from models.\n *\n * @example\n * import { createToSQL } from 'prisma-sql'\n * import { MODELS } from './generated/sql'\n *\n * const toSQL = createToSQL(MODELS, 'postgres')\n * const { sql, params } = toSQL('User', 'findMany', {\n * where: { status: 'ACTIVE' }\n * })\n */\nexport function createToSQL(\n modelsOrDmmf: Model[] | DMMF.Document,\n dialect: SqlDialect,\n) {\n const models = Array.isArray(modelsOrDmmf)\n ? modelsOrDmmf\n : convertDMMFToModels((modelsOrDmmf as DMMF.Document).datamodel)\n\n return createToSQLFunction(models, dialect)\n}\n\ninterface PrismaSQLConfig<TClient> {\n client: TClient\n models?: Model[]\n dmmf?: DMMF.Document\n dialect: SqlDialect\n execute: (\n client: TClient,\n sql: string,\n params: unknown[],\n ) => Promise<unknown[]>\n}\n\n/**\n * Create a Prisma SQL client for environments where extensions aren't supported.\n *\n * @example\n * import { createPrismaSQL } from 'prisma-sql'\n * import { MODELS } from './generated/sql'\n *\n * const prismaSQL = createPrismaSQL({\n * client: sql,\n * models: MODELS,\n * dialect: 'postgres',\n * execute: (client, sql, params) => client.unsafe(sql, params)\n * })\n *\n * const users = await prismaSQL.query('User', 'findMany', {\n * where: { status: 'ACTIVE' }\n * })\n */\nexport function createPrismaSQL<TClient>(config: PrismaSQLConfig<TClient>) {\n const { client, models: providedModels, dmmf, dialect, execute } = config\n\n let models: Model[]\n\n if (providedModels) {\n models = providedModels\n } else if (dmmf) {\n models = convertDMMFToModels(dmmf.datamodel)\n } else {\n throw new Error('createPrismaSQL requires either models or dmmf parameter')\n }\n\n if (!Array.isArray(models) || models.length === 0) {\n throw new Error('createPrismaSQL: models array is empty or invalid')\n }\n\n const toSQL = createToSQLFunction(models, dialect)\n\n async function query<T = unknown[]>(\n model: string,\n method: PrismaMethod,\n args: Record<string, unknown> = {},\n ): Promise<T> {\n const { sql, params } = toSQL(model, method, args)\n return execute(client, sql, params) as Promise<T>\n }\n\n return { toSQL, query, client }\n}\n\nexport function generateSQL(directive: DirectiveProps): SQLDirective {\n return generateSQLInternal(directive)\n}\n\nexport function generateAllSQL(directives: DirectiveProps[]): SQLDirective[] {\n const results: SQLDirective[] = []\n const errors: Array<{ directive: DirectiveProps; error: Error }> = []\n\n for (const directive of directives) {\n try {\n results.push(generateSQL(directive))\n } catch (error) {\n errors.push({\n directive,\n error: error instanceof Error ? error : new Error(String(error)),\n })\n }\n }\n\n if (errors.length > 0) {\n console.warn(\n `[generateAllSQL] ${errors.length} directive(s) failed SQL generation`,\n )\n for (const { directive, error } of errors) {\n console.warn(\n ` - ${directive.modelName}.${directive.method}: ${error.message}`,\n )\n }\n }\n\n return results\n}\n\nexport function generateSQLByModel(\n directives: DirectiveProps[],\n): Map<string, SQLDirective[]> {\n const byModel = new Map<string, SQLDirective[]>()\n\n for (const directive of directives) {\n const sql = generateSQL(directive)\n\n if (!byModel.has(directive.modelName)) {\n byModel.set(directive.modelName, [])\n }\n\n byModel.get(directive.modelName)!.push(sql)\n }\n\n return byModel\n}\n\nexport type {\n SpeedExtensionConfig,\n QueryInfo,\n SqlResult,\n PrismaMethod,\n PrismaSQLConfig,\n}\n\nexport type { SqlDialect, SQLDirective }\nexport { setGlobalDialect, getGlobalDialect } from './sql-builder-dialect'\nexport type { Model, Field, PrismaQueryArgs } from './types'\nexport { convertDMMFToModels } from '@dee-wan/schema-parser'\nexport { transformQueryResults }\n"]}
1
+ {"version":3,"sources":["../src/builder/shared/constants.ts","../src/utils/normalize-value.ts","../src/sql-builder-dialect.ts","../src/builder/shared/validators/type-guards.ts","../src/builder/shared/errors.ts","../src/builder/shared/model-field-cache.ts","../src/builder/shared/validators/sql-validators.ts","../src/builder/shared/sql-utils.ts","../src/builder/joins.ts","../src/builder/shared/int-like.ts","../src/builder/shared/dynamic-params.ts","../src/builder/shared/order-by-utils.ts","../src/builder/shared/order-by-determinism.ts","../src/builder/pagination.ts","../src/builder/where/operators-scalar.ts","../src/builder/where/operators-array.ts","../src/builder/where/operators-json.ts","../src/builder/where/relations.ts","../src/builder/shared/validators/field-validators.ts","../src/builder/where/builder.ts","../src/builder/shared/alias-generator.ts","../src/builder/shared/param-store.ts","../src/builder/shared/state.ts","../src/builder/where.ts","../src/builder/select/fields.ts","../src/builder/select/includes.ts","../src/builder/select/assembly.ts","../src/builder/shared/validators/field-assertions.ts","../src/builder/select.ts","../src/builder/shared/comparison-builder.ts","../src/builder/aggregates.ts","../src/sql-generator.ts","../src/result-transformers.ts","../src/utils/s3-fifo.ts","../src/query-cache.ts","../src/index.ts"],"names":["i","s","isDynamicParameter","extractDynamicName","e","c","v","placeholder","COMPARISON_OPS","base","clause","JSON_OPS","selectExpr","sql","parts","baseSelect","normalizeOrderByInput","normalizeLogicalValue","buildLogicalClause","convertDMMFToModels","node","result","generateSQL"],"mappings":"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","file":"index.cjs","sourcesContent":["export const SQL_SEPARATORS = Object.freeze({\n FIELD_LIST: ', ',\n CONDITION_AND: ' AND ',\n CONDITION_OR: ' OR ',\n ORDER_BY: ', ',\n} as const)\n\nexport const ALIAS_FORBIDDEN_KEYWORDS = new Set([\n 'select',\n 'from',\n 'where',\n 'having',\n 'order',\n 'group',\n 'limit',\n 'offset',\n 'join',\n 'inner',\n 'left',\n 'right',\n 'outer',\n 'cross',\n 'full',\n 'and',\n 'or',\n 'not',\n 'by',\n 'as',\n 'on',\n 'union',\n 'intersect',\n 'except',\n 'case',\n 'when',\n 'then',\n 'else',\n 'end',\n])\n\nexport const SQL_KEYWORDS = new Set([\n ...ALIAS_FORBIDDEN_KEYWORDS,\n 'user',\n 'users',\n 'table',\n 'column',\n 'index',\n 'values',\n 'in',\n 'like',\n 'between',\n 'is',\n 'exists',\n 'null',\n 'true',\n 'false',\n 'all',\n 'any',\n 'some',\n 'update',\n 'insert',\n 'delete',\n 'create',\n 'drop',\n 'alter',\n 'truncate',\n 'grant',\n 'revoke',\n 'exec',\n 'execute',\n])\n\nexport const SQL_RESERVED_WORDS = SQL_KEYWORDS\n\nexport const DEFAULT_WHERE_CLAUSE = '1=1' as const\n\nexport const SPECIAL_FIELDS = Object.freeze({\n ID: 'id',\n} as const)\n\nexport const SQL_TEMPLATES = Object.freeze({\n PUBLIC_SCHEMA: 'public',\n WHERE: 'WHERE',\n SELECT: 'SELECT',\n FROM: 'FROM',\n ORDER_BY: 'ORDER BY',\n GROUP_BY: 'GROUP BY',\n HAVING: 'HAVING',\n LIMIT: 'LIMIT',\n OFFSET: 'OFFSET',\n COUNT_ALL: 'COUNT(*)',\n AS: 'AS',\n DISTINCT_ON: 'DISTINCT ON',\n IS_NULL: 'IS NULL',\n IS_NOT_NULL: 'IS NOT NULL',\n LIKE: 'LIKE',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n} as const)\n\nexport const SCHEMA_PREFIXES = Object.freeze({\n INTERNAL: '@',\n COMMENT: '//',\n} as const)\n\nexport const Ops = Object.freeze({\n EQUALS: 'equals',\n NOT: 'not',\n GT: 'gt',\n GTE: 'gte',\n LT: 'lt',\n LTE: 'lte',\n IN: 'in',\n NOT_IN: 'notIn',\n CONTAINS: 'contains',\n STARTS_WITH: 'startsWith',\n ENDS_WITH: 'endsWith',\n HAS: 'has',\n HAS_SOME: 'hasSome',\n HAS_EVERY: 'hasEvery',\n IS_EMPTY: 'isEmpty',\n PATH: 'path',\n STRING_CONTAINS: 'string_contains',\n STRING_STARTS_WITH: 'string_starts_with',\n STRING_ENDS_WITH: 'string_ends_with',\n} as const)\n\nexport const LogicalOps = Object.freeze({\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n} as const)\n\nexport const RelationFilters = Object.freeze({\n SOME: 'some',\n EVERY: 'every',\n NONE: 'none',\n} as const)\n\nexport const Modes = Object.freeze({\n INSENSITIVE: 'insensitive',\n DEFAULT: 'default',\n} as const)\n\nexport const Wildcards: Readonly<Record<string, (v: string) => string>> =\n Object.freeze({\n [Ops.CONTAINS]: (v: string) => `%${v}%`,\n [Ops.STARTS_WITH]: (v: string) => `${v}%`,\n [Ops.ENDS_WITH]: (v: string) => `%${v}`,\n })\n\nexport const REGEX_CACHE = {\n PARAM_PLACEHOLDER: /\\$(\\d+)/g,\n VALID_IDENTIFIER: /^[a-z_][a-z0-9_]*$/,\n} as const\n\nexport const LIMITS = Object.freeze({\n MAX_QUERY_DEPTH: 50,\n MAX_ARRAY_SIZE: 10000,\n MAX_STRING_LENGTH: 10000,\n} as const)\n","const MAX_DEPTH = 20\n/**\n * Normalize values for SQL params.\n *\n * ⚠️ IMPORTANT: Keep in sync with generated code in src/code-emitter.ts\n * Changes here must be manually copied to the generateCode() template.\n */\nexport function normalizeValue(\n value: unknown,\n seen = new WeakSet<object>(),\n depth = 0,\n): unknown {\n if (depth > MAX_DEPTH) {\n throw new Error(`Max normalization depth exceeded (${MAX_DEPTH} levels)`)\n }\n if (value instanceof Date) {\n const t = value.getTime()\n if (!Number.isFinite(t)) {\n throw new Error('Invalid Date value in SQL params')\n }\n return value.toISOString()\n }\n if (typeof value === 'bigint') {\n return value.toString()\n }\n if (Array.isArray(value)) {\n const arrRef = value as unknown as object\n if (seen.has(arrRef)) {\n throw new Error('Circular reference in SQL params')\n }\n seen.add(arrRef)\n const out = value.map((v) => normalizeValue(v, seen, depth + 1))\n seen.delete(arrRef)\n return out\n }\n if (value && typeof value === 'object') {\n if (value instanceof Uint8Array) return value\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) return value\n const proto = Object.getPrototypeOf(value)\n const isPlain = proto === Object.prototype || proto === null\n if (!isPlain) return value\n const obj = value as Record<string, unknown>\n if (seen.has(obj)) {\n throw new Error('Circular reference in SQL params')\n }\n seen.add(obj)\n const out: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(obj)) {\n out[k] = normalizeValue(v, seen, depth + 1)\n }\n seen.delete(obj)\n return out\n }\n return value\n}\n","import { normalizeValue } from './utils/normalize-value'\n\nexport type SqlDialect = 'postgres' | 'sqlite'\n\nlet globalDialect: SqlDialect = 'postgres'\n\nexport function setGlobalDialect(dialect: SqlDialect): void {\n if (dialect !== 'postgres' && dialect !== 'sqlite') {\n throw new Error(\n `Invalid dialect: ${dialect}. Must be 'postgres' or 'sqlite'`,\n )\n }\n globalDialect = dialect\n}\n\nexport function getGlobalDialect(): SqlDialect {\n return globalDialect\n}\n\nfunction assertNonEmpty(value: string, name: string): void {\n if (!value || value.trim().length === 0) {\n throw new Error(`${name} is required and cannot be empty`)\n }\n}\n\nexport function arrayContains(\n column: string,\n value: string,\n arrayType: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'arrayContains column')\n assertNonEmpty(value, 'arrayContains value')\n\n if (dialect === 'postgres') {\n return `${column} @> ARRAY[${value}]::${arrayType}`\n }\n\n return `EXISTS (SELECT 1 FROM json_each(${column}) WHERE value = ${value})`\n}\n\nexport function arrayOverlaps(\n column: string,\n value: string,\n arrayType: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'arrayOverlaps column')\n assertNonEmpty(value, 'arrayOverlaps value')\n\n if (dialect === 'postgres') {\n return `${column} && ${value}::${arrayType}`\n }\n\n return `EXISTS (\n SELECT 1 FROM json_each(${column}) AS col\n JOIN json_each(${value}) AS val\n WHERE col.value = val.value\n )`\n}\n\nexport function arrayContainsAll(\n column: string,\n value: string,\n arrayType: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'arrayContainsAll column')\n assertNonEmpty(value, 'arrayContainsAll value')\n\n if (dialect === 'postgres') {\n return `${column} @> ${value}::${arrayType}`\n }\n\n return `NOT EXISTS (\n SELECT 1 FROM json_each(${value}) AS val\n WHERE NOT EXISTS (\n SELECT 1 FROM json_each(${column}) AS col\n WHERE col.value = val.value\n )\n )`\n}\n\nexport function arrayIsEmpty(column: string, dialect: SqlDialect): string {\n assertNonEmpty(column, 'arrayIsEmpty column')\n\n if (dialect === 'postgres') {\n return `(${column} IS NULL OR array_length(${column}, 1) IS NULL)`\n }\n return `(${column} IS NULL OR json_array_length(${column}) = 0)`\n}\n\nexport function arrayIsNotEmpty(column: string, dialect: SqlDialect): string {\n assertNonEmpty(column, 'arrayIsNotEmpty column')\n\n if (dialect === 'postgres') {\n return `(${column} IS NOT NULL AND array_length(${column}, 1) IS NOT NULL)`\n }\n return `(${column} IS NOT NULL AND json_array_length(${column}) > 0)`\n}\n\nexport function arrayEquals(\n column: string,\n value: string,\n arrayType: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'arrayEquals column')\n assertNonEmpty(value, 'arrayEquals value')\n\n if (dialect === 'postgres') {\n return `${column} = ${value}::${arrayType}`\n }\n\n return `json(${column}) = json(${value})`\n}\n\nexport function caseInsensitiveLike(\n column: string,\n pattern: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'caseInsensitiveLike column')\n assertNonEmpty(pattern, 'caseInsensitiveLike pattern')\n\n if (dialect === 'postgres') {\n return `${column} ILIKE ${pattern}`\n }\n\n return `LOWER(${column}) LIKE LOWER(${pattern})`\n}\n\nexport function caseInsensitiveEquals(\n column: string,\n value: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'caseInsensitiveEquals column')\n assertNonEmpty(value, 'caseInsensitiveEquals value')\n\n return `LOWER(${column}) = LOWER(${value})`\n}\n\nexport function jsonExtractText(\n column: string,\n path: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'jsonExtractText column')\n assertNonEmpty(path, 'jsonExtractText path')\n\n if (dialect === 'postgres') {\n const p = String(path).trim()\n const pathExpr = /^\\$\\d+$/.test(p) ? `${p}::text[]` : p\n return `${column}#>>${pathExpr}`\n }\n\n return `json_extract(${column}, ${path})`\n}\n\nexport function jsonExtractNumeric(\n column: string,\n path: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'jsonExtractNumeric column')\n assertNonEmpty(path, 'jsonExtractNumeric path')\n\n if (dialect === 'postgres') {\n const p = String(path).trim()\n const pathExpr = /^\\$\\d+$/.test(p) ? `${p}::text[]` : p\n return `(${column}#>>${pathExpr})::numeric`\n }\n return `CAST(json_extract(${column}, ${path}) AS REAL)`\n}\n\nexport function jsonToText(column: string, dialect: SqlDialect): string {\n assertNonEmpty(column, 'jsonToText column')\n\n if (dialect === 'postgres') {\n return `${column}::text`\n }\n return column\n}\n\nexport function inArray(\n column: string,\n value: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'inArray column')\n assertNonEmpty(value, 'inArray value')\n\n if (dialect === 'postgres') {\n return `${column} = ANY(${value})`\n }\n\n return `${column} IN (SELECT value FROM json_each(${value}))`\n}\n\nexport function notInArray(\n column: string,\n value: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'notInArray column')\n assertNonEmpty(value, 'notInArray value')\n\n if (dialect === 'postgres') {\n return `${column} != ALL(${value})`\n }\n\n return `${column} NOT IN (SELECT value FROM json_each(${value}))`\n}\n\nexport function getArrayType(prismaType: string, dialect: SqlDialect): string {\n if (!prismaType || prismaType.length === 0) {\n return dialect === 'sqlite' ? 'TEXT' : 'text[]'\n }\n\n if (dialect === 'sqlite') {\n return 'TEXT'\n }\n\n const baseType = prismaType.replace(/\\[\\]|\\?/g, '')\n\n switch (baseType) {\n case 'String':\n return 'text[]'\n case 'Int':\n return 'integer[]'\n case 'Float':\n return 'double precision[]'\n case 'Decimal':\n return 'numeric[]'\n case 'Boolean':\n return 'boolean[]'\n case 'BigInt':\n return 'bigint[]'\n case 'DateTime':\n return 'timestamptz[]'\n default:\n return `\"${baseType}\"[]`\n }\n}\n\nexport function jsonAgg(content: string, dialect: SqlDialect): string {\n assertNonEmpty(content, 'jsonAgg content')\n\n if (dialect === 'postgres') {\n return `json_agg(${content})`\n }\n\n return `json_group_array(${content})`\n}\n\nexport function jsonBuildObject(pairs: string, dialect: SqlDialect): string {\n const safePairs = (pairs ?? '').trim()\n\n if (dialect === 'postgres') {\n return safePairs.length > 0\n ? `json_build_object(${safePairs})`\n : `json_build_object()`\n }\n\n return safePairs.length > 0 ? `json_object(${safePairs})` : `json_object()`\n}\n\nexport function prepareArrayParam(\n value: unknown[],\n dialect: SqlDialect,\n): unknown {\n if (!Array.isArray(value)) {\n throw new Error('prepareArrayParam requires array value')\n }\n\n if (dialect === 'postgres') {\n return value.map((v) => normalizeValue(v))\n }\n return JSON.stringify(value)\n}\n","/**\n * Type Guards and Checks\n * Pure type checking with no business logic\n */\nexport function isNotNullish<T>(\n value: T | null | undefined,\n): value is NonNullable<T> {\n return value !== null && value !== undefined\n}\n\nexport function isNonEmptyString(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0\n}\n\nexport function isEmptyString(value: unknown): boolean {\n return typeof value === 'string' && value.trim().length === 0\n}\n\nexport function isNonEmptyArray<T>(value: unknown): value is T[] {\n return Array.isArray(value) && value.length > 0\n}\n\nexport function isEmptyArray(value: unknown): boolean {\n return Array.isArray(value) && value.length === 0\n}\n\nexport function isPlainObject(val: unknown): val is Record<string, unknown> {\n if (!isNotNullish(val)) return false\n if (Array.isArray(val)) return false\n if (typeof val !== 'object') return false\n return Object.prototype.toString.call(val) === '[object Object]'\n}\n\nexport function hasProperty<K extends string>(\n obj: unknown,\n key: K,\n): obj is Record<K, unknown> {\n return isPlainObject(obj) && key in obj\n}\n\nexport function isArrayType(t: string | undefined): boolean {\n if (!isNotNullish(t)) return false\n const normalized = t.replace(/\\?$/, '')\n return normalized.endsWith('[]')\n}\n\nexport function isJsonType(t: string | undefined): boolean {\n return isNotNullish(t) && (t === 'Json' || t === 'Json?')\n}\n\nexport function hasValidContent(sql: string): boolean {\n return isNotNullish(sql) && sql.trim().length > 0\n}\n\nexport function hasRequiredKeywords(sql: string): boolean {\n const upper = sql.toUpperCase()\n const hasSelect = upper.includes('SELECT')\n const hasFrom = upper.includes('FROM')\n return hasSelect && hasFrom && upper.indexOf('SELECT') < upper.indexOf('FROM')\n}\n","import { ErrorContext } from './types'\nimport { isNonEmptyArray, isNotNullish } from './validators/type-guards'\n\ntype SqlBuilderErrorCode =\n | 'FIELD_NOT_FOUND'\n | 'INVALID_OPERATOR'\n | 'INVALID_VALUE'\n | 'RELATION_ERROR'\n | 'PARAM_ERROR'\n | 'SQL_ERROR'\n | 'VALIDATION_ERROR'\n | 'CRITICAL'\n\nclass SqlBuilderError extends Error {\n public readonly code: SqlBuilderErrorCode\n public readonly context?: ErrorContext\n\n constructor(\n message: string,\n code: SqlBuilderErrorCode,\n context?: ErrorContext,\n ) {\n super(message)\n this.name = 'SqlBuilderError'\n this.code = code\n this.context = context\n }\n}\n\nexport function createError(\n message: string,\n ctx: ErrorContext,\n code: SqlBuilderErrorCode = 'VALIDATION_ERROR',\n): SqlBuilderError {\n const parts = [message]\n\n if (isNonEmptyArray(ctx.path)) {\n parts.push(`Path: ${ctx.path.join('.')}`)\n }\n\n if (isNotNullish(ctx.modelName)) {\n parts.push(`Model: ${ctx.modelName}`)\n }\n\n if (isNonEmptyArray(ctx.availableFields)) {\n parts.push(`Available fields: ${ctx.availableFields.join(', ')}`)\n }\n\n return new SqlBuilderError(parts.join('\\n'), code, ctx)\n}\n","import { Model } from '../../types'\n\ninterface FieldInfo {\n name: string\n dbName: string\n type: string\n isRelation: boolean\n isRequired: boolean\n}\n\ninterface CachedModelInfo {\n fieldInfo: Map<string, FieldInfo>\n scalarFields: Set<string>\n relationFields: Set<string>\n columnMap: Map<string, string>\n}\n\nconst MODEL_CACHE = new WeakMap<Model, CachedModelInfo>()\n\nfunction ensureFullCache(model: Model): CachedModelInfo {\n let cache = MODEL_CACHE.get(model)\n\n if (!cache) {\n const fieldInfo = new Map<string, FieldInfo>()\n const scalarFields = new Set<string>()\n const relationFields = new Set<string>()\n const columnMap = new Map<string, string>()\n\n for (const f of model.fields) {\n const info: FieldInfo = {\n name: f.name,\n dbName: f.dbName || f.name,\n type: f.type,\n isRelation: !!f.isRelation,\n isRequired: !!f.isRequired,\n }\n fieldInfo.set(f.name, info)\n\n if (info.isRelation) {\n relationFields.add(f.name)\n } else {\n scalarFields.add(f.name)\n columnMap.set(f.name, info.dbName)\n }\n }\n\n cache = { fieldInfo, scalarFields, relationFields, columnMap }\n MODEL_CACHE.set(model, cache)\n }\n\n return cache\n}\n\nexport function getFieldInfo(\n model: Model,\n fieldName: string,\n): FieldInfo | undefined {\n return ensureFullCache(model).fieldInfo.get(fieldName)\n}\n\nexport function getScalarFieldSet(model: Model): Set<string> {\n return ensureFullCache(model).scalarFields\n}\n\nexport function getRelationFieldSet(model: Model): Set<string> {\n return ensureFullCache(model).relationFields\n}\n\nexport function getColumnMap(model: Model): Map<string, string> {\n return ensureFullCache(model).columnMap\n}\n","import { DEFAULT_WHERE_CLAUSE, REGEX_CACHE, SQL_KEYWORDS } from '../constants'\nimport {\n isNotNullish,\n isNonEmptyString,\n hasValidContent,\n hasRequiredKeywords,\n} from './type-guards'\nimport { SqlDialect } from '../../../sql-builder-dialect'\n\nexport function isValidWhereClause(clause: string): boolean {\n return (\n isNotNullish(clause) &&\n clause.trim().length > 0 &&\n clause !== DEFAULT_WHERE_CLAUSE\n )\n}\n\nexport function isEmptyWhere(\n where: Record<string, unknown> | null | undefined,\n): boolean {\n if (!isNotNullish(where)) return true\n return Object.keys(where).length === 0\n}\n\nexport function validateSelectQuery(sql: string): void {\n if (!hasValidContent(sql)) {\n throw new Error('CRITICAL: Generated empty SQL query')\n }\n\n if (!hasRequiredKeywords(sql)) {\n throw new Error(\n `CRITICAL: Invalid SQL structure. SQL: ${sql.substring(0, 100)}...`,\n )\n }\n}\n\nfunction sqlPreview(sql: string): string {\n return `${sql.substring(0, 100)}...`\n}\n\ntype PlaceholderScan = {\n count: number\n min: number\n max: number\n seen: Uint8Array\n}\n\ntype ParseResult = {\n next: number\n num: number\n ok: boolean\n}\n\nfunction parseDollarNumber(sql: string, start: number, n: number): ParseResult {\n let i = start\n let num = 0\n let hasDigit = false\n\n while (i < n) {\n const c = sql.charCodeAt(i)\n if (c < 48 || c > 57) break\n hasDigit = true\n num = num * 10 + (c - 48)\n i++\n }\n\n if (!hasDigit || num <= 0) return { next: i, num: 0, ok: false }\n return { next: i, num, ok: true }\n}\n\nfunction scanDollarPlaceholders(\n sql: string,\n markUpTo: number,\n): PlaceholderScan {\n const seen = new Uint8Array(markUpTo + 1)\n let count = 0\n let min = Number.POSITIVE_INFINITY\n let max = 0\n\n const n = sql.length\n let i = 0\n\n while (i < n) {\n if (sql.charCodeAt(i) !== 36) {\n i++\n continue\n }\n\n const { next, num, ok } = parseDollarNumber(sql, i + 1, n)\n i = next\n if (!ok) continue\n\n count++\n if (num < min) min = num\n if (num > max) max = num\n if (num <= markUpTo) seen[num] = 1\n }\n\n return { count, min, max, seen }\n}\n\nfunction assertNoGapsDollar(\n scan: PlaceholderScan,\n rangeMin: number,\n rangeMax: number,\n sql: string,\n): void {\n for (let k = rangeMin; k <= rangeMax; k++) {\n if (scan.seen[k] !== 1) {\n throw new Error(\n `CRITICAL: Parameter mismatch - SQL is missing placeholder $${k}. ` +\n `Placeholders must cover ${rangeMin}..${rangeMax} with no gaps. SQL: ${sqlPreview(sql)}`,\n )\n }\n }\n}\n\nexport function validateParamConsistency(\n sql: string,\n params: readonly unknown[],\n): void {\n const paramLen = params.length\n\n if (paramLen === 0) {\n if (sql.indexOf('$') === -1) return\n }\n\n const scan = scanDollarPlaceholders(sql, paramLen)\n\n if (scan.count === 0) {\n if (paramLen !== 0) {\n throw new Error(\n `CRITICAL: Parameter mismatch - SQL has no placeholders but ${paramLen} params provided.`,\n )\n }\n return\n }\n\n if (scan.max !== paramLen) {\n throw new Error(\n `CRITICAL: Parameter mismatch - SQL max placeholder is $${scan.max} but ${paramLen} params provided. ` +\n `This will cause SQL execution to fail. SQL: ${sqlPreview(sql)}`,\n )\n }\n\n assertNoGapsDollar(scan, 1, scan.max, sql)\n}\n\nexport function needsQuoting(id: string): boolean {\n if (!isNonEmptyString(id)) return true\n\n const isKeyword = SQL_KEYWORDS.has(id.toLowerCase())\n if (isKeyword) return true\n\n const isValidIdentifier = REGEX_CACHE.VALID_IDENTIFIER.test(id)\n return !isValidIdentifier\n}\n\nexport function validateParamConsistencyFragment(\n sql: string,\n params: readonly unknown[],\n): void {\n const paramLen = params.length\n const scan = scanDollarPlaceholders(sql, paramLen)\n\n if (scan.max === 0) return\n\n if (scan.max > paramLen) {\n throw new Error(\n `CRITICAL: Parameter mismatch - SQL references $${scan.max} but only ${paramLen} params provided. SQL: ${sqlPreview(sql)}`,\n )\n }\n\n assertNoGapsDollar(scan, scan.min, scan.max, sql)\n}\n\nfunction assertOrThrow(condition: unknown, message: string): asserts condition {\n if (!condition) throw new Error(message)\n}\n\nfunction parseSqlitePlaceholderIndices(sql: string): {\n indices: number[]\n sawNumbered: boolean\n sawAnonymous: boolean\n} {\n const re = /\\?(?:(\\d+))?/g\n const indices: number[] = []\n let anonCount = 0\n let sawNumbered = false\n let sawAnonymous = false\n\n for (const m of sql.matchAll(re)) {\n const n = m[1]\n if (n) {\n sawNumbered = true\n indices.push(parseInt(n, 10))\n } else {\n sawAnonymous = true\n anonCount += 1\n indices.push(anonCount)\n }\n }\n\n return { indices, sawNumbered, sawAnonymous }\n}\n\nfunction parseDollarPlaceholderIndices(sql: string): number[] {\n const re = /\\$(\\d+)/g\n const indices: number[] = []\n for (const m of sql.matchAll(re)) indices.push(parseInt(m[1], 10))\n return indices\n}\n\nfunction maxIndex(indices: readonly number[]): number {\n return indices.length > 0 ? Math.max(...indices) : 0\n}\n\nfunction ensureSequentialIndices(\n seen: ReadonlySet<number>,\n max: number,\n prefix: string,\n): void {\n for (let i = 1; i <= max; i++) {\n assertOrThrow(\n seen.has(i),\n `CRITICAL: Missing SQL placeholder ${prefix}${i} - placeholders must be sequential 1..${max}.`,\n )\n }\n}\n\nfunction validateSqlitePlaceholders(\n sql: string,\n params: readonly unknown[],\n): void {\n const paramLen = params.length\n const { indices, sawNumbered, sawAnonymous } =\n parseSqlitePlaceholderIndices(sql)\n\n if (indices.length === 0) {\n if (paramLen !== 0) {\n throw new Error(\n `CRITICAL: Parameter mismatch - SQL has no sqlite placeholders but ${paramLen} params provided. SQL: ${sqlPreview(sql)}`,\n )\n }\n return\n }\n\n assertOrThrow(\n !(sawNumbered && sawAnonymous),\n `CRITICAL: Mixed sqlite placeholders ('?' and '?NNN') are not supported.`,\n )\n\n const max = maxIndex(indices)\n assertOrThrow(\n max === paramLen,\n `CRITICAL: SQL placeholder max mismatch - max is ?${max}, but params length is ${paramLen}. SQL: ${sqlPreview(sql)}`,\n )\n\n const set = new Set(indices)\n ensureSequentialIndices(set, max, '?')\n}\n\nfunction validateDollarPlaceholders(\n sql: string,\n params: readonly unknown[],\n): void {\n validateParamConsistency(sql, params)\n}\n\nfunction detectPlaceholderStyle(sql: string): {\n hasDollar: boolean\n hasSqliteQ: boolean\n} {\n const hasDollar = /\\$\\d+/.test(sql)\n const hasSqliteQ = /\\?(?:\\d+)?/.test(sql)\n return { hasDollar, hasSqliteQ }\n}\n\n/**\n * Dialect-aware consistency validator.\n * - postgres: enforces $1..$N (existing behavior)\n * - sqlite: supports either $1..$N OR ?/?NNN, but rejects mixing.\n */\nexport function validateParamConsistencyByDialect(\n sql: string,\n params: readonly unknown[],\n dialect: SqlDialect,\n): void {\n const { hasDollar, hasSqliteQ } = detectPlaceholderStyle(sql)\n\n if (dialect !== 'sqlite') {\n if (hasSqliteQ && !hasDollar) {\n throw new Error(\n `CRITICAL: Non-sqlite dialect query contains sqlite '?' placeholders. SQL: ${sqlPreview(sql)}`,\n )\n }\n return validateDollarPlaceholders(sql, params)\n }\n\n if (hasDollar && hasSqliteQ) {\n throw new Error(\n `CRITICAL: Mixed placeholder styles ($N and ?/ ?NNN) are not supported. SQL: ${sqlPreview(sql)}`,\n )\n }\n\n if (hasSqliteQ) return validateSqlitePlaceholders(sql, params)\n return validateDollarPlaceholders(sql, params)\n}\n","import { SqlDialect } from '../../sql-builder-dialect'\nimport { needsQuoting } from './validators/sql-validators'\nimport { isEmptyString, isNotNullish } from './validators/type-guards'\nimport type { Model } from '../../types'\nimport { getColumnMap } from './model-field-cache'\nimport { ALIAS_FORBIDDEN_KEYWORDS } from './constants'\n\nfunction containsControlChars(s: string): boolean {\n return /[\\u0000-\\u001F\\u007F]/.test(s)\n}\n\nfunction assertNoControlChars(label: string, s: string): void {\n if (containsControlChars(s)) {\n throw new Error(\n `${label} contains invalid characters: ${JSON.stringify(s)}`,\n )\n }\n}\n\nfunction isIdentCharCode(c: number): boolean {\n return (\n (c >= 48 && c <= 57) ||\n (c >= 65 && c <= 90) ||\n (c >= 97 && c <= 122) ||\n c === 95\n )\n}\n\nfunction isIdentStartCharCode(c: number): boolean {\n return (c >= 65 && c <= 90) || (c >= 97 && c <= 122) || c === 95\n}\n\nfunction parseQuotedPart(input: string, start: number): number {\n const n = input.length\n let i = start + 1\n let sawAny = false\n\n while (i < n) {\n const c = input.charCodeAt(i)\n if (c === 34) {\n const next = i + 1\n if (next < n && input.charCodeAt(next) === 34) {\n sawAny = true\n i += 2\n continue\n }\n if (!sawAny) {\n throw new Error(\n `tableName/tableRef has empty quoted identifier part: ${JSON.stringify(input)}`,\n )\n }\n return i + 1\n }\n if (c === 10 || c === 13 || c === 0) {\n throw new Error(\n `tableName/tableRef contains invalid characters: ${JSON.stringify(input)}`,\n )\n }\n sawAny = true\n i++\n }\n\n throw new Error(\n `tableName/tableRef has unterminated quoted identifier: ${JSON.stringify(input)}`,\n )\n}\n\nfunction parseUnquotedPart(input: string, start: number): number {\n const n = input.length\n let i = start\n\n if (i >= n) {\n throw new Error(`tableName/tableRef is invalid: ${JSON.stringify(input)}`)\n }\n\n const c0 = input.charCodeAt(i)\n if (!isIdentStartCharCode(c0)) {\n throw new Error(\n `tableName/tableRef must use identifiers (or quoted identifiers). Got: ${JSON.stringify(input)}`,\n )\n }\n i++\n\n while (i < n) {\n const c = input.charCodeAt(i)\n if (c === 46) break\n if (!isIdentCharCode(c)) {\n throw new Error(\n `tableName/tableRef contains invalid identifier characters: ${JSON.stringify(input)}`,\n )\n }\n i++\n }\n\n return i\n}\n\nfunction assertSafeQualifiedName(tableRef: string): void {\n const raw = String(tableRef)\n const trimmed = raw.trim()\n\n if (trimmed.length === 0) {\n throw new Error('tableName/tableRef is required and cannot be empty')\n }\n\n if (raw !== trimmed) {\n throw new Error(\n `tableName/tableRef must not contain leading/trailing whitespace: ${JSON.stringify(raw)}`,\n )\n }\n\n assertNoControlChars('tableName/tableRef', trimmed)\n\n for (let i = 0; i < trimmed.length; i++) {\n const c = trimmed.charCodeAt(i)\n if (c === 9 || c === 11 || c === 12 || c === 32) {\n throw new Error(\n `tableName/tableRef must not contain whitespace: ${JSON.stringify(trimmed)}`,\n )\n }\n if (c === 59) {\n throw new Error(\n `tableName/tableRef must not contain ';': ${JSON.stringify(trimmed)}`,\n )\n }\n if (c === 40 || c === 41) {\n throw new Error(\n `tableName/tableRef must not contain parentheses: ${JSON.stringify(trimmed)}`,\n )\n }\n }\n\n let i = 0\n const n = trimmed.length\n let parts = 0\n\n while (i < n) {\n const c = trimmed.charCodeAt(i)\n if (c === 46) {\n throw new Error(\n `tableName/tableRef has empty identifier part: ${JSON.stringify(trimmed)}`,\n )\n }\n\n if (c === 34) {\n i = parseQuotedPart(trimmed, i)\n } else {\n i = parseUnquotedPart(trimmed, i)\n }\n\n parts++\n if (parts > 2) {\n throw new Error(\n `tableName/tableRef must be 'table' or 'schema.table' (max 2 parts). Got: ${JSON.stringify(trimmed)}`,\n )\n }\n\n if (i === n) break\n\n if (trimmed.charCodeAt(i) !== 46) {\n throw new Error(\n `tableName/tableRef is invalid: ${JSON.stringify(trimmed)}`,\n )\n }\n i++\n\n if (i === n) {\n throw new Error(\n `tableName/tableRef cannot end with '.': ${JSON.stringify(trimmed)}`,\n )\n }\n }\n}\n\nexport function quote(id: string): string {\n if (isEmptyString(id)) {\n throw new Error('quote: identifier is required and cannot be empty')\n }\n\n if (containsControlChars(id)) {\n throw new Error(\n `quote: identifier contains invalid characters: ${JSON.stringify(id)}`,\n )\n }\n\n if (needsQuoting(id)) {\n return `\"${id.replace(/\"/g, '\"\"')}\"`\n }\n\n return id\n}\n\nexport function resolveColumnName(\n model: Model | undefined,\n fieldName: string,\n): string {\n if (!model) return fieldName\n const columnMap = getColumnMap(model)\n return columnMap.get(fieldName) || fieldName\n}\n\nexport function quoteColumn(\n model: Model | undefined,\n fieldName: string,\n): string {\n return quote(resolveColumnName(model, fieldName))\n}\n\nexport function col(alias: string, field: string, model?: Model): string {\n if (isEmptyString(alias)) {\n throw new Error('col: alias is required and cannot be empty')\n }\n\n if (isEmptyString(field)) {\n throw new Error('col: field is required and cannot be empty')\n }\n\n const columnName = resolveColumnName(model, field)\n return `${alias}.${quote(columnName)}`\n}\n\nexport function colWithAlias(\n alias: string,\n field: string,\n model?: Model,\n): string {\n if (isEmptyString(alias)) {\n throw new Error('colWithAlias: alias is required and cannot be empty')\n }\n\n if (isEmptyString(field)) {\n throw new Error('colWithAlias: field is required and cannot be empty')\n }\n\n const columnName = resolveColumnName(model, field)\n const columnRef = `${alias}.${quote(columnName)}`\n\n if (columnName !== field) {\n return `${columnRef} AS ${quote(field)}`\n }\n\n return columnRef\n}\n\nexport function sqlStringLiteral(value: string): string {\n if (containsControlChars(value)) {\n throw new Error('sqlStringLiteral: value contains invalid characters')\n }\n return `'${value.replace(/'/g, \"''\")}'`\n}\n\nexport function buildTableReference(\n schemaName: string,\n tableName: string,\n dialect?: SqlDialect,\n): string {\n if (isEmptyString(tableName)) {\n throw new Error(\n 'buildTableReference: tableName is required and cannot be empty',\n )\n }\n\n if (containsControlChars(tableName)) {\n throw new Error(\n 'buildTableReference: tableName contains invalid characters',\n )\n }\n\n const d = dialect ?? 'postgres'\n if (d === 'sqlite') {\n return quote(tableName)\n }\n\n if (isEmptyString(schemaName)) {\n throw new Error(\n 'buildTableReference: schemaName is required and cannot be empty',\n )\n }\n\n if (containsControlChars(schemaName)) {\n throw new Error(\n 'buildTableReference: schemaName contains invalid characters',\n )\n }\n\n const safeSchema = schemaName.replace(/\"/g, '\"\"')\n const safeTable = tableName.replace(/\"/g, '\"\"')\n return `\"${safeSchema}\".\"${safeTable}\"`\n}\n\nexport function assertSafeAlias(alias: string): void {\n if (typeof alias !== 'string') {\n throw new Error(`Invalid alias: expected string, got ${typeof alias}`)\n }\n\n const a = alias.trim()\n\n if (a.length === 0) {\n throw new Error('Invalid alias: required and cannot be empty')\n }\n\n if (a !== alias) {\n throw new Error('Invalid alias: leading/trailing whitespace')\n }\n\n if (/[\\u0000-\\u001F\\u007F]/.test(a)) {\n throw new Error(\n 'Invalid alias: contains unsafe characters (control characters)',\n )\n }\n\n if (a.includes('\"') || a.includes(\"'\") || a.includes('`')) {\n throw new Error('Invalid alias: contains unsafe characters (quotes)')\n }\n\n if (a.includes(';')) {\n throw new Error('Invalid alias: contains unsafe characters (semicolon)')\n }\n\n if (a.includes('--') || a.includes('/*') || a.includes('*/')) {\n throw new Error(\n 'Invalid alias: contains unsafe characters (SQL comment tokens)',\n )\n }\n\n if (/\\s/.test(a)) {\n throw new Error(\n 'Invalid alias: must be a simple identifier without whitespace',\n )\n }\n\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(a)) {\n throw new Error(\n `Invalid alias: must be a simple identifier (alphanumeric with underscores): \"${alias}\"`,\n )\n }\n\n const lowered = a.toLowerCase()\n if (ALIAS_FORBIDDEN_KEYWORDS.has(lowered)) {\n throw new Error(\n `Invalid alias: '${alias}' is a SQL keyword that would break query parsing. ` +\n `Forbidden aliases: ${[...ALIAS_FORBIDDEN_KEYWORDS].join(', ')}`,\n )\n }\n}\n\nexport function assertSafeTableRef(tableRef: string): void {\n assertSafeQualifiedName(tableRef)\n}\n\nexport function normalizeKeyList(input: unknown): string[] {\n if (!isNotNullish(input)) return []\n\n if (Array.isArray(input)) {\n const out: string[] = []\n for (const v of input) {\n const s = String(v).trim()\n if (s.length > 0) out.push(s)\n }\n return out\n }\n\n if (typeof input === 'string') {\n const raw = input.trim()\n if (raw.length === 0) return []\n if (raw.includes(',')) {\n return raw\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0)\n }\n return [raw]\n }\n\n const s = String(input).trim()\n return s.length > 0 ? [s] : []\n}\n","import { Model, Field } from '../types'\nimport { SPECIAL_FIELDS } from './shared/constants'\nimport { createError } from './shared/errors'\nimport { getRelationFieldSet } from './shared/model-field-cache'\nimport {\n assertSafeAlias,\n normalizeKeyList,\n quoteColumn,\n} from './shared/sql-utils'\n\nimport { isNotNullish } from './shared/validators/type-guards'\n\nexport function isRelationField(fieldName: string, model: Model): boolean {\n return getRelationFieldSet(model).has(fieldName)\n}\n\nexport function isValidRelationField(field: Field | undefined): field is Field {\n if (!isNotNullish(field)) return false\n if (!field.isRelation) return false\n if (\n !isNotNullish(field.relatedModel) ||\n field.relatedModel.trim().length === 0\n )\n return false\n\n const fk = normalizeKeyList((field as any).foreignKey)\n if (fk.length === 0) return false\n\n const refsRaw = (field as any).references\n const refs = normalizeKeyList(refsRaw)\n\n if (refs.length === 0) {\n return fk.length === 1\n }\n\n if (refs.length !== fk.length) return false\n\n return true\n}\n\nfunction getReferenceFieldNames(\n field: Field,\n foreignKeyCount: number,\n): string[] {\n const refsRaw = (field as any).references\n const refs = normalizeKeyList(refsRaw)\n\n if (refs.length === 0) {\n if (foreignKeyCount === 1) return [SPECIAL_FIELDS.ID]\n return []\n }\n\n if (refs.length !== foreignKeyCount) return []\n return refs\n}\n\nexport function joinCondition(\n field: Field,\n parentModel: Model,\n childModel: Model,\n parentAlias: string,\n childAlias: string,\n): string {\n assertSafeAlias(parentAlias)\n assertSafeAlias(childAlias)\n\n const fkFields = normalizeKeyList((field as any).foreignKey)\n\n if (fkFields.length === 0) {\n throw createError(\n `Relation '${field.name}' is missing foreignKey. This indicates a schema parsing error. Relations must specify fields/references.`,\n { field: field.name },\n )\n }\n\n const refFields = getReferenceFieldNames(field, fkFields.length)\n\n if (refFields.length !== fkFields.length) {\n throw createError(\n `Relation '${field.name}' is missing references (or references count does not match foreignKey count). This is required to support non-id and composite keys.`,\n { field: field.name },\n )\n }\n\n const parts: string[] = []\n\n for (let i = 0; i < fkFields.length; i++) {\n const fk = fkFields[i]\n const ref = refFields[i]\n\n const left = field.isForeignKeyLocal\n ? `${childAlias}.${quoteColumn(childModel, ref)}`\n : `${childAlias}.${quoteColumn(childModel, fk)}`\n const right = field.isForeignKeyLocal\n ? `${parentAlias}.${quoteColumn(parentModel, fk)}`\n : `${parentAlias}.${quoteColumn(parentModel, ref)}`\n\n parts.push(`${left} = ${right}`)\n }\n\n return parts.length === 1 ? parts[0] : `(${parts.join(' AND ')})`\n}\n\nexport function getModelByName(\n schemas: Model[],\n name: string,\n): Model | undefined {\n return schemas.find((m) => m.name === name)\n}\n","import { isDynamicParameter } from '@dee-wan/schema-parser'\nimport { isNotNullish } from './validators/type-guards'\n\ntype NormalizeIntLikeOptions = {\n min?: number\n max?: number\n allowZero?: boolean\n}\n\nexport function normalizeIntLike(\n name: string,\n v: unknown,\n opts: NormalizeIntLikeOptions = {},\n): number | string | undefined {\n if (!isNotNullish(v)) return undefined\n if (isDynamicParameter(v)) return v as string\n\n if (typeof v !== 'number' || !Number.isFinite(v) || !Number.isInteger(v)) {\n throw new Error(`${name} must be an integer`)\n }\n\n const min = opts.min ?? 0\n const allowZero = opts.allowZero ?? true\n\n if (!allowZero && v === 0) {\n throw new Error(`${name} must be > 0`)\n }\n if (v < min) {\n throw new Error(`${name} must be >= ${min}`)\n }\n\n if (typeof opts.max === 'number' && v > opts.max) {\n throw new Error(`${name} must be <= ${opts.max}`)\n }\n\n return v\n}\n","import { extractDynamicName, isDynamicParameter } from '@dee-wan/schema-parser'\nimport { ParamStore } from './param-store'\n\nfunction scopeName(scope: string, dynamicName: string): string {\n const s = String(scope).trim()\n const dn = String(dynamicName).trim()\n if (s.length === 0) return dn\n return `${s}:${dn}`\n}\n\nexport function addAutoScoped(\n params: ParamStore,\n value: unknown,\n scope: string,\n): string {\n if (isDynamicParameter(value)) {\n const dn = extractDynamicName(value as string)\n return params.add(undefined, scopeName(scope, dn))\n }\n return params.add(value)\n}\n","import { isNotNullish, isPlainObject } from './validators/type-guards'\n\ntype OrderByObject = Record<string, unknown>\ntype OrderByArray = Array<Record<string, unknown>>\n\nexport type OrderByType =\n | OrderByObject\n | OrderByArray\n | string\n | null\n | undefined\n\ntype OrderByDirection = 'asc' | 'desc'\ntype OrderByNulls = 'first' | 'last'\ntype OrderBySortObject = { sort: OrderByDirection; nulls?: OrderByNulls }\ntype NormalizedOrderByValue = OrderByDirection | OrderBySortObject\ntype NormalizedOrderBy = Array<Record<string, NormalizedOrderByValue>>\ntype ParseOrderByValue = (\n v: unknown,\n field?: string,\n) => { direction: OrderByDirection; nulls?: OrderByNulls }\n\nconst flipNulls = (v: unknown): unknown => {\n const s = String(v).toLowerCase()\n if (s === 'first') return 'last'\n if (s === 'last') return 'first'\n return v\n}\n\nconst flipSortString = (v: unknown): unknown => {\n if (typeof v !== 'string') return v\n const s = v.toLowerCase()\n if (s === 'asc') return 'desc'\n if (s === 'desc') return 'asc'\n return v\n}\n\nconst getNextSort = (sortRaw: unknown): unknown => {\n if (typeof sortRaw !== 'string') return sortRaw\n\n const s = sortRaw.toLowerCase()\n if (s === 'asc') return 'desc'\n if (s === 'desc') return 'asc'\n return sortRaw\n}\n\nconst flipObjectSort = (\n obj: Record<string, unknown>,\n): Record<string, unknown> => {\n const sortRaw = obj.sort\n const out: Record<string, unknown> = { ...obj, sort: getNextSort(sortRaw) }\n\n const nullsRaw = obj.nulls\n if (typeof nullsRaw === 'string') {\n out.nulls = flipNulls(nullsRaw)\n }\n\n return out\n}\n\nconst flipValue = (v: unknown): unknown => {\n if (typeof v === 'string') return flipSortString(v)\n if (isPlainObject(v)) return flipObjectSort(v)\n return v\n}\n\nconst assertSingleFieldObject = (item: unknown): [string, unknown] => {\n if (!isPlainObject(item)) {\n throw new Error('orderBy array entries must be objects')\n }\n\n const entries = Object.entries(item)\n if (entries.length !== 1) {\n throw new Error('orderBy array entries must have exactly one field')\n }\n\n return entries[0]\n}\n\nconst flipOrderByArray = (orderBy: unknown[]): { [x: string]: unknown }[] => {\n return orderBy.map((item) => {\n const [k, v] = assertSingleFieldObject(item)\n return { [k]: flipValue(v) }\n })\n}\n\nconst flipOrderByObject = (\n orderBy: Record<string, unknown>,\n): Record<string, unknown> => {\n const out: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(orderBy)) {\n out[k] = flipValue(v)\n }\n return out\n}\n\nexport function reverseOrderByInput(orderBy: unknown): OrderByType {\n if (!isNotNullish(orderBy)) return orderBy\n\n if (Array.isArray(orderBy)) {\n return flipOrderByArray(orderBy)\n }\n\n if (isPlainObject(orderBy)) {\n return flipOrderByObject(orderBy)\n }\n\n throw new Error('orderBy must be an object or array of objects')\n}\n\nconst normalizePairs = (\n pairs: Array<[string, unknown]>,\n parseValue: ParseOrderByValue,\n): NormalizedOrderBy => {\n return pairs.map(([field, rawValue]) => {\n const parsed = parseValue(rawValue, field)\n return {\n [field]:\n parsed.nulls !== undefined\n ? { sort: parsed.direction, nulls: parsed.nulls }\n : parsed.direction,\n }\n })\n}\n\nexport function normalizeOrderByInput(\n orderBy: unknown,\n parseValue: ParseOrderByValue,\n): NormalizedOrderBy {\n if (!isNotNullish(orderBy)) return []\n\n if (Array.isArray(orderBy)) {\n const pairs = orderBy.map(assertSingleFieldObject)\n return normalizePairs(pairs, parseValue)\n }\n\n if (isPlainObject(orderBy)) {\n return normalizePairs(Object.entries(orderBy), parseValue)\n }\n\n throw new Error('orderBy must be an object or array of objects')\n}\n","import { Model } from '../../types'\nimport { getScalarFieldSet } from './model-field-cache'\nimport { isNotNullish } from './validators/type-guards'\nimport { normalizeOrderByInput } from './order-by-utils'\n\ntype OrderByDirection = 'asc' | 'desc'\ntype NullsPosition = 'first' | 'last'\n\nexport type ParsedOrderByValue = {\n direction: OrderByDirection\n nulls?: NullsPosition\n}\n\ntype ParseOrderByValue = (v: unknown, field?: string) => ParsedOrderByValue\n\nfunction modelHasScalarId(model?: Model): boolean {\n if (!model) return false\n return getScalarFieldSet(model).has('id')\n}\n\nfunction hasIdTiebreaker(orderBy: unknown, parse: ParseOrderByValue): boolean {\n if (!isNotNullish(orderBy)) return false\n const normalized = normalizeOrderByInput(orderBy, parse)\n return normalized.some((obj) =>\n Object.prototype.hasOwnProperty.call(obj, 'id'),\n )\n}\n\nfunction addIdTiebreaker(orderBy: unknown): unknown {\n if (Array.isArray(orderBy)) return [...orderBy, { id: 'asc' }]\n return [orderBy, { id: 'asc' }]\n}\n\nexport function ensureDeterministicOrderByInput(args: {\n orderBy: unknown\n model?: Model\n parseValue: ParseOrderByValue\n}): unknown {\n const { orderBy, model, parseValue } = args\n\n if (!modelHasScalarId(model)) return orderBy\n\n if (!isNotNullish(orderBy)) {\n return { id: 'asc' }\n }\n\n if (hasIdTiebreaker(orderBy, parseValue)) return orderBy\n return addIdTiebreaker(orderBy)\n}\n","import { PrismaQueryArgs, Model } from '../types'\nimport { SQL_SEPARATORS, SQL_TEMPLATES } from './shared/constants'\nimport {\n col,\n quoteColumn,\n assertSafeAlias,\n assertSafeTableRef,\n} from './shared/sql-utils'\nimport { ParamStore } from './shared/param-store'\nimport { SqlDialect, getGlobalDialect } from '../sql-builder-dialect'\nimport {\n isNotNullish,\n isNonEmptyString,\n isPlainObject,\n} from './shared/validators/type-guards'\nimport { normalizeIntLike } from './shared/int-like'\nimport { addAutoScoped } from './shared/dynamic-params'\nimport { isDynamicParameter } from '@dee-wan/schema-parser'\nimport { normalizeOrderByInput } from './shared/order-by-utils'\nimport { ensureDeterministicOrderByInput } from './shared/order-by-determinism'\n\ntype OrderByDirection = 'asc' | 'desc'\ntype NullsPosition = 'first' | 'last'\n\ntype OrderByValueObject = { direction: OrderByDirection; nulls?: NullsPosition }\n\ntype OrderByEntry = {\n field: string\n direction: OrderByDirection\n nulls?: NullsPosition\n}\n\ntype IntOrDynamic = number | string\ntype MaybeIntOrDynamic = IntOrDynamic | undefined\n\ntype SkipTakeReadResult = {\n hasSkip: boolean\n hasTake: boolean\n skipVal: MaybeIntOrDynamic\n takeVal: MaybeIntOrDynamic\n}\n\nconst MAX_LIMIT_OFFSET = 2147483647\n\nfunction parseDirectionRaw(raw: unknown, errorLabel: string): OrderByDirection {\n const s = String(raw).toLowerCase()\n if (s === 'asc' || s === 'desc') return s\n throw new Error(`Invalid ${errorLabel}: ${raw}`)\n}\n\nfunction parseNullsRaw(\n raw: unknown,\n errorLabel: string,\n): NullsPosition | undefined {\n if (!isNotNullish(raw)) return undefined\n const s = String(raw).toLowerCase()\n if (s === 'first' || s === 'last') return s\n throw new Error(`Invalid ${errorLabel}: ${raw}`)\n}\n\nfunction requireOrderByObject(\n v: unknown,\n errorPrefix: string,\n): Record<string, unknown> {\n if (!isPlainObject(v) || !('sort' in v)) {\n throw new Error(`${errorPrefix} must be 'asc' | 'desc' or { sort, nulls? }`)\n }\n return v\n}\n\nfunction assertAllowedOrderByKeys(\n obj: Record<string, unknown>,\n fieldName?: string,\n): void {\n const allowed = new Set(['sort', 'nulls'])\n for (const k of Object.keys(obj)) {\n if (!allowed.has(k)) {\n throw new Error(\n fieldName\n ? `Unsupported orderBy key '${k}' for field '${fieldName}'`\n : `Unsupported orderBy key '${k}'`,\n )\n }\n }\n}\n\nexport function parseOrderByValue(\n v: unknown,\n fieldName?: string,\n): OrderByValueObject {\n const errorPrefix = fieldName ? `orderBy for '${fieldName}'` : 'orderBy value'\n\n if (typeof v === 'string') {\n return { direction: parseDirectionRaw(v, `${errorPrefix} direction`) }\n }\n\n const obj = requireOrderByObject(v, errorPrefix)\n\n const direction = parseDirectionRaw(obj.sort, `${errorPrefix}.sort`)\n const nulls = parseNullsRaw(obj.nulls, `${errorPrefix}.nulls`)\n\n assertAllowedOrderByKeys(obj, fieldName)\n\n return { direction, nulls }\n}\n\nfunction normalizeFiniteInteger(name: string, v: unknown): number {\n if (typeof v !== 'number' || !Number.isFinite(v) || !Number.isInteger(v)) {\n throw new Error(`${name} must be an integer`)\n }\n return v\n}\n\nfunction normalizeNonNegativeInt(name: string, v: unknown): IntOrDynamic {\n if (isDynamicParameter(v)) return v as string\n\n const n = normalizeFiniteInteger(name, v)\n\n if (n < 0) {\n throw new Error(`${name} must be >= 0`)\n }\n if (n > MAX_LIMIT_OFFSET) {\n throw new Error(`${name} must be <= ${MAX_LIMIT_OFFSET}`)\n }\n return n\n}\n\nfunction hasNonNullishProp(\n v: unknown,\n key: 'skip' | 'take',\n): v is Record<string, unknown> {\n return isPlainObject(v) && key in v && isNotNullish((v as any)[key])\n}\n\nfunction normalizeIntegerOrDynamic(name: 'take', v: unknown): IntOrDynamic {\n if (isDynamicParameter(v)) return v as string\n\n const result = normalizeIntLike(name, v, {\n min: Number.MIN_SAFE_INTEGER,\n max: MAX_LIMIT_OFFSET,\n allowZero: true,\n })\n\n if (result === undefined) {\n throw new Error(`${name} normalization returned undefined`)\n }\n\n return result\n}\n\nexport function readSkipTake(relArgs: unknown): SkipTakeReadResult {\n const hasSkip = hasNonNullishProp(relArgs, 'skip')\n const hasTake = hasNonNullishProp(relArgs, 'take')\n\n if (!hasSkip && !hasTake) {\n return {\n hasSkip: false,\n hasTake: false,\n skipVal: undefined,\n takeVal: undefined,\n }\n }\n\n const obj = relArgs as Record<string, unknown>\n\n const skipVal = hasSkip\n ? normalizeNonNegativeInt('skip', obj.skip)\n : undefined\n const takeVal = hasTake\n ? normalizeIntegerOrDynamic('take', obj.take)\n : undefined\n\n return { hasSkip, hasTake, skipVal, takeVal }\n}\n\nfunction buildOrderByFragment(\n entries: OrderByEntry[],\n alias: string,\n dialect: SqlDialect,\n model?: Model,\n): string {\n if (entries.length === 0) return ''\n\n const out: string[] = []\n\n for (const e of entries) {\n const dir = e.direction.toUpperCase()\n const c = col(alias, e.field, model)\n\n if (dialect === 'postgres') {\n const nulls = isNotNullish(e.nulls)\n ? ` NULLS ${e.nulls.toUpperCase()}`\n : ''\n out.push(`${c} ${dir}${nulls}`)\n continue\n }\n\n if (isNotNullish(e.nulls)) {\n const isNullExpr = `(${c} IS NULL)`\n const nullRankDir = e.nulls === 'first' ? 'DESC' : 'ASC'\n out.push(`${isNullExpr} ${nullRankDir}`)\n out.push(`${c} ${dir}`)\n continue\n }\n\n out.push(`${c} ${dir}`)\n }\n\n return out.join(SQL_SEPARATORS.ORDER_BY)\n}\n\nfunction defaultNullsFor(\n dialect: SqlDialect,\n direction: OrderByDirection,\n): NullsPosition {\n if (dialect === 'postgres') {\n return direction === 'asc' ? 'last' : 'first'\n }\n return direction === 'asc' ? 'first' : 'last'\n}\n\nfunction ensureCursorFieldsInOrder(\n orderEntries: OrderByEntry[],\n cursorEntries: Array<[string, unknown]>,\n): OrderByEntry[] {\n const existing = new Map<string, OrderByEntry>()\n for (const e of orderEntries) existing.set(e.field, e)\n\n const out: OrderByEntry[] = [...orderEntries]\n\n for (const [field] of cursorEntries) {\n if (!existing.has(field)) {\n out.push({ field, direction: 'asc' })\n existing.set(field, out[out.length - 1])\n }\n }\n\n return out\n}\n\nfunction buildCursorFilterParts(\n cursor: Record<string, unknown>,\n cursorAlias: string,\n params: ParamStore,\n model?: Model,\n): {\n whereSql: string\n placeholdersByField: Map<string, string>\n} {\n const entries = Object.entries(cursor)\n if (entries.length === 0) {\n throw new Error('cursor must have at least one field')\n }\n\n const placeholdersByField = new Map<string, string>()\n const parts: string[] = []\n\n for (const [field, value] of entries) {\n const c = `${cursorAlias}.${quoteColumn(model, field)}`\n if (value === null) {\n parts.push(`${c} IS NULL`)\n continue\n }\n const ph = addAutoScoped(params, value, `cursor.filter.${field}`)\n placeholdersByField.set(field, ph)\n parts.push(`${c} = ${ph}`)\n }\n\n return {\n whereSql: parts.length === 1 ? parts[0] : `(${parts.join(' AND ')})`,\n placeholdersByField,\n }\n}\n\nfunction buildCursorEqualityExpr(\n columnExpr: string,\n valueExpr: string,\n): string {\n return `((${valueExpr} IS NULL AND ${columnExpr} IS NULL) OR (${valueExpr} IS NOT NULL AND ${columnExpr} = ${valueExpr}))`\n}\n\nfunction buildCursorInequalityExpr(\n columnExpr: string,\n direction: OrderByDirection,\n nulls: NullsPosition,\n valueExpr: string,\n): string {\n const op = direction === 'asc' ? '>' : '<'\n\n if (nulls === 'first') {\n return `(CASE WHEN ${valueExpr} IS NULL THEN (${columnExpr} IS NOT NULL) ELSE (${columnExpr} ${op} ${valueExpr}) END)`\n }\n\n return `(CASE WHEN ${valueExpr} IS NULL THEN 0=1 ELSE ((${columnExpr} ${op} ${valueExpr}) OR (${columnExpr} IS NULL)) END)`\n}\n\nfunction buildOuterCursorMatch(\n cursor: Record<string, unknown>,\n outerAlias: string,\n placeholdersByField: Map<string, string>,\n params: ParamStore,\n model?: Model,\n): string {\n const parts: string[] = []\n\n for (const [field, value] of Object.entries(cursor)) {\n const c = col(outerAlias, field, model)\n if (value === null) {\n parts.push(`${c} IS NULL`)\n continue\n }\n\n const existing = placeholdersByField.get(field)\n if (typeof existing === 'string' && existing.length > 0) {\n parts.push(`${c} = ${existing}`)\n continue\n }\n\n const ph = addAutoScoped(params, value, `cursor.outerMatch.${field}`)\n parts.push(`${c} = ${ph}`)\n }\n\n return parts.length === 1 ? parts[0] : `(${parts.join(' AND ')})`\n}\n\nfunction buildOrderEntries(orderBy: unknown): OrderByEntry[] {\n const normalized = normalizeOrderByInput(orderBy, parseOrderByValue) as Array<\n Record<string, string | OrderByValueObject>\n >\n\n const entries: OrderByEntry[] = []\n\n for (const item of normalized) {\n for (const [field, value] of Object.entries(item)) {\n if (typeof value === 'string') {\n entries.push({ field, direction: value as OrderByDirection })\n } else {\n entries.push({\n field,\n direction: value.direction,\n nulls: value.nulls,\n })\n }\n }\n }\n\n return entries\n}\n\nfunction buildCursorCteSelectList(\n cursorEntries: Array<[string, unknown]>,\n orderEntries: OrderByEntry[],\n model?: Model,\n): string {\n const set = new Set<string>()\n for (const [f] of cursorEntries) set.add(f)\n for (const e of orderEntries) set.add(e.field)\n\n const cols = [...set].map((f) => quoteColumn(model, f))\n if (cols.length === 0) {\n throw new Error('cursor cte select list is empty')\n }\n return cols.join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nfunction truncateIdent(name: string, maxLen: number): string {\n const s = String(name)\n if (s.length <= maxLen) return s\n return s.slice(0, maxLen)\n}\n\nfunction buildCursorNames(outerAlias: string): {\n cteName: string\n srcAlias: string\n} {\n const maxLen = 63\n const base = outerAlias.toLowerCase()\n const cteName = truncateIdent(`__tp_cursor_${base}`, maxLen)\n const srcAlias = truncateIdent(`__tp_cursor_src_${base}`, maxLen)\n\n if (cteName === outerAlias || srcAlias === outerAlias) {\n return {\n cteName: truncateIdent(`__tp_cursor_${base}_x`, maxLen),\n srcAlias: truncateIdent(`__tp_cursor_src_${base}_x`, maxLen),\n }\n }\n\n return { cteName, srcAlias }\n}\n\nexport function buildCursorCondition(\n cursor: Record<string, unknown>,\n orderBy: unknown,\n tableName: string,\n alias: string,\n params: ParamStore,\n dialect?: SqlDialect,\n model?: Model,\n): { cte: string; condition: string } {\n assertSafeTableRef(tableName)\n assertSafeAlias(alias)\n\n const d = dialect ?? getGlobalDialect()\n\n const cursorEntries = Object.entries(cursor)\n if (cursorEntries.length === 0) {\n throw new Error('cursor must have at least one field')\n }\n\n const { cteName, srcAlias } = buildCursorNames(alias)\n assertSafeAlias(cteName)\n assertSafeAlias(srcAlias)\n\n const { whereSql: cursorWhereSql, placeholdersByField } =\n buildCursorFilterParts(cursor, srcAlias, params, model)\n\n const deterministicOrderBy = ensureDeterministicOrderByInput({\n orderBy,\n model,\n parseValue: parseOrderByValue,\n })\n\n let orderEntries = buildOrderEntries(deterministicOrderBy)\n\n if (orderEntries.length === 0) {\n orderEntries = cursorEntries.map(([field]) => ({\n field,\n direction: 'asc' as OrderByDirection,\n }))\n } else {\n orderEntries = ensureCursorFieldsInOrder(orderEntries, cursorEntries)\n }\n\n const cursorOrderBy = orderEntries\n .map(\n (e) =>\n `${srcAlias}.${quoteColumn(model, e.field)} ${e.direction.toUpperCase()}`,\n )\n .join(', ')\n\n const selectList = buildCursorCteSelectList(\n cursorEntries,\n orderEntries,\n model,\n )\n\n const cte = `${cteName} AS (\n SELECT ${selectList} FROM ${tableName} ${srcAlias}\n WHERE ${cursorWhereSql}\n ORDER BY ${cursorOrderBy}\n LIMIT 1\n )`\n\n const existsExpr = `EXISTS (SELECT 1 FROM ${cteName})`\n\n const outerCursorMatch = buildOuterCursorMatch(\n cursor,\n alias,\n placeholdersByField,\n params,\n model,\n )\n\n const getValueExpr = (field: string): string => {\n return `(SELECT ${quoteColumn(model, field)} FROM ${cteName})`\n }\n\n const orClauses: string[] = []\n\n for (let level = 0; level < orderEntries.length; level++) {\n const andParts: string[] = []\n\n for (let i = 0; i < level; i++) {\n const e = orderEntries[i]\n const c = col(alias, e.field, model)\n const v = getValueExpr(e.field)\n andParts.push(buildCursorEqualityExpr(c, v))\n }\n\n const e = orderEntries[level]\n const c = col(alias, e.field, model)\n const v = getValueExpr(e.field)\n const nulls = e.nulls ?? defaultNullsFor(d, e.direction)\n andParts.push(buildCursorInequalityExpr(c, e.direction, nulls, v))\n\n orClauses.push(`(${andParts.join(SQL_SEPARATORS.CONDITION_AND)})`)\n }\n\n const exclusive = orClauses.join(SQL_SEPARATORS.CONDITION_OR)\n const condition = `(${existsExpr} ${SQL_SEPARATORS.CONDITION_AND} ((${exclusive})${SQL_SEPARATORS.CONDITION_OR}(${outerCursorMatch})))`\n\n return { cte, condition }\n}\n\nexport function buildOrderBy(\n orderBy: unknown,\n alias: string,\n dialect?: SqlDialect,\n model?: Model,\n): string {\n assertSafeAlias(alias)\n\n const entries = buildOrderEntries(orderBy)\n if (entries.length === 0) return ''\n\n const d = dialect ?? getGlobalDialect()\n return buildOrderByFragment(entries, alias, d, model)\n}\n\nexport function buildOrderByClause(\n args: PrismaQueryArgs,\n alias: string,\n dialect?: SqlDialect,\n model?: Model,\n): string {\n if (!isNotNullish(args.orderBy)) return ''\n\n const result = buildOrderBy(args.orderBy, alias, dialect, model)\n\n if (!isNonEmptyString(result)) {\n throw new Error(\n 'buildOrderByClause: orderBy specified but produced empty result',\n )\n }\n\n return result\n}\n\nfunction normalizeTakeLike(v: unknown): MaybeIntOrDynamic {\n const n = normalizeIntLike('take', v, {\n min: Number.MIN_SAFE_INTEGER,\n max: MAX_LIMIT_OFFSET,\n allowZero: true,\n })\n if (typeof n === 'number') {\n if (n === 0) return 0\n }\n return n as MaybeIntOrDynamic\n}\n\nexport function normalizeSkipLike(v: unknown): MaybeIntOrDynamic {\n return normalizeIntLike('skip', v, {\n min: 0,\n max: MAX_LIMIT_OFFSET,\n allowZero: true,\n }) as MaybeIntOrDynamic\n}\n\nexport function getPaginationParams(\n method: string,\n args: PrismaQueryArgs,\n): {\n take?: IntOrDynamic\n skip?: IntOrDynamic\n cursor?: Record<string, unknown>\n} {\n if (method === 'findMany') {\n return {\n take: normalizeTakeLike(args.take),\n skip: normalizeSkipLike(args.skip),\n cursor: args.cursor,\n }\n }\n\n if (method === 'findFirst') {\n const skip = normalizeSkipLike(args.skip)\n return { take: 1, skip: skip ?? 0 }\n }\n\n if (method === 'findUnique') {\n return { take: 1, skip: 0 }\n }\n\n return {}\n}\n","import { isDynamicParameter } from '@dee-wan/schema-parser'\nimport {\n caseInsensitiveLike,\n caseInsensitiveEquals,\n inArray,\n notInArray,\n prepareArrayParam,\n SqlDialect,\n} from '../../sql-builder-dialect'\nimport { Ops, Modes, SQL_TEMPLATES, Wildcards } from '../shared/constants'\nimport { createError } from '../shared/errors'\nimport { ParamStore } from '../shared/param-store'\nimport { isNotNullish, isPlainObject } from '../shared/validators/type-guards'\n\nexport function buildNotComposite(\n expr: string,\n val: Record<string, unknown>,\n params: ParamStore,\n dialect: SqlDialect,\n buildOp: (\n expr: string,\n op: string,\n subVal: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n ) => string,\n separator: string,\n): string {\n const entries = Object.entries(val).filter(\n ([k, v]) => k !== 'mode' && v !== undefined,\n )\n if (entries.length === 0) return ''\n\n const clauses: string[] = []\n for (const [subOp, subVal] of entries) {\n const sub = buildOp(expr, subOp, subVal, params, dialect)\n if (sub && sub.trim().length > 0) clauses.push(`(${sub})`)\n }\n\n if (clauses.length === 0) return ''\n if (clauses.length === 1) return `${SQL_TEMPLATES.NOT} ${clauses[0]}`\n return `${SQL_TEMPLATES.NOT} (${clauses.join(separator)})`\n}\n\nexport function buildScalarOperator(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n mode?: 'insensitive' | 'default',\n fieldType?: string,\n dialect?: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (val === null) {\n return handleNullValue(expr, op)\n }\n\n if (op === Ops.NOT && isPlainObject(val)) {\n return handleNotOperator(expr, val, params, mode, fieldType, dialect)\n }\n\n if (op === Ops.NOT) {\n const placeholder = params.addAuto(val)\n return `${expr} <> ${placeholder}`\n }\n\n if (\n op === Ops.EQUALS &&\n mode === Modes.INSENSITIVE &&\n isNotNullish(dialect)\n ) {\n const placeholder = params.addAuto(val)\n return caseInsensitiveEquals(expr, placeholder, dialect)\n }\n\n const STRING_LIKE_OPS = new Set([\n Ops.CONTAINS,\n Ops.STARTS_WITH,\n Ops.ENDS_WITH,\n ])\n\n if (STRING_LIKE_OPS.has(op as any)) {\n if (!isNotNullish(dialect)) {\n throw createError(`Like operators require a SQL dialect`, {\n operator: op,\n })\n }\n return handleLikeOperator(expr, op, val, params, mode, dialect)\n }\n\n if (op === Ops.IN || op === Ops.NOT_IN) {\n if (!isNotNullish(dialect)) {\n throw createError(`IN operators require a SQL dialect`, { operator: op })\n }\n return handleInOperator(expr, op, val, params, dialect)\n }\n\n if (\n op === Ops.EQUALS &&\n mode === Modes.INSENSITIVE &&\n !isNotNullish(dialect)\n ) {\n throw createError(`Insensitive equals requires a SQL dialect`, {\n operator: op,\n })\n }\n\n return handleComparisonOperator(expr, op, val, params)\n}\n\nfunction handleNullValue(expr: string, op: string): string {\n if (op === Ops.EQUALS) return `${expr} ${SQL_TEMPLATES.IS_NULL}`\n if (op === Ops.NOT) return `${expr} ${SQL_TEMPLATES.IS_NOT_NULL}`\n throw createError(`Operator '${op}' doesn't support null`, { operator: op })\n}\n\nfunction normalizeMode(v: unknown): 'insensitive' | 'default' | undefined {\n if (v === Modes.INSENSITIVE) return Modes.INSENSITIVE\n if (v === Modes.DEFAULT) return Modes.DEFAULT\n return undefined\n}\n\nfunction handleNotOperator(\n expr: string,\n val: Record<string, unknown>,\n params: ParamStore,\n outerMode?: 'insensitive' | 'default',\n fieldType?: string,\n dialect?: SqlDialect,\n): string {\n const innerMode = normalizeMode(val.mode)\n const effectiveMode = innerMode ?? outerMode\n\n const entries = Object.entries(val).filter(\n ([k, v]) => k !== 'mode' && v !== undefined,\n )\n if (entries.length === 0) return ''\n\n if (!isNotNullish(dialect)) {\n const clauses: string[] = []\n for (const [subOp, subVal] of entries) {\n const sub = buildScalarOperator(\n expr,\n subOp,\n subVal,\n params,\n effectiveMode,\n fieldType,\n undefined,\n )\n if (sub && sub.trim().length > 0) clauses.push(`(${sub})`)\n }\n\n if (clauses.length === 0) return ''\n if (clauses.length === 1) return `${SQL_TEMPLATES.NOT} ${clauses[0]}`\n return `${SQL_TEMPLATES.NOT} (${clauses.join(` ${SQL_TEMPLATES.AND} `)})`\n }\n\n return buildNotComposite(\n expr,\n val,\n params,\n dialect,\n (e, subOp, subVal, p, d) =>\n buildScalarOperator(e, subOp, subVal, p, effectiveMode, fieldType, d),\n ` ${SQL_TEMPLATES.AND} `,\n )\n}\n\nfunction buildDynamicLikePattern(\n op: string,\n placeholder: string,\n dialect: SqlDialect,\n): string {\n if (dialect === 'postgres') {\n switch (op) {\n case Ops.CONTAINS:\n return `('%' || ${placeholder} || '%')`\n case Ops.STARTS_WITH:\n return `(${placeholder} || '%')`\n case Ops.ENDS_WITH:\n return `('%' || ${placeholder})`\n default:\n return placeholder\n }\n }\n\n switch (op) {\n case Ops.CONTAINS:\n return `('%' || ${placeholder} || '%')`\n case Ops.STARTS_WITH:\n return `(${placeholder} || '%')`\n case Ops.ENDS_WITH:\n return `('%' || ${placeholder})`\n default:\n return placeholder\n }\n}\n\nfunction handleLikeOperator(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n mode: 'insensitive' | 'default' | undefined,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (isDynamicParameter(val)) {\n const placeholder = params.addAuto(val)\n const patternExpr = buildDynamicLikePattern(op, placeholder, dialect)\n\n if (mode === Modes.INSENSITIVE) {\n return caseInsensitiveLike(expr, patternExpr, dialect)\n }\n\n return `${expr} ${SQL_TEMPLATES.LIKE} ${patternExpr}`\n }\n\n const placeholder = params.add(Wildcards[op](String(val)))\n\n if (mode === Modes.INSENSITIVE) {\n return caseInsensitiveLike(expr, placeholder, dialect)\n }\n\n return `${expr} ${SQL_TEMPLATES.LIKE} ${placeholder}`\n}\n\nfunction handleInOperator(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (isDynamicParameter(val)) {\n const placeholder = params.addAuto(val)\n return op === Ops.IN\n ? inArray(expr, placeholder, dialect)\n : notInArray(expr, placeholder, dialect)\n }\n\n if (!Array.isArray(val)) {\n throw createError(`IN operators require array value`, {\n operator: op,\n value: val,\n })\n }\n\n if (val.length === 0) {\n return op === Ops.IN ? '0=1' : '1=1'\n }\n\n const paramValue = prepareArrayParam(val as unknown[], dialect)\n const placeholder = params.add(paramValue)\n\n return op === Ops.IN\n ? inArray(expr, placeholder, dialect)\n : notInArray(expr, placeholder, dialect)\n}\n\nfunction handleComparisonOperator(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n): string {\n if (val === undefined) return ''\n\n const COMPARISON_OPS: Record<string, string> = {\n [Ops.EQUALS]: '=',\n [Ops.GT]: '>',\n [Ops.GTE]: '>=',\n [Ops.LT]: '<',\n [Ops.LTE]: '<=',\n }\n\n const sqlOp = COMPARISON_OPS[op]\n if (!sqlOp) {\n throw createError(`Unsupported scalar operator: ${op}`, { operator: op })\n }\n\n const placeholder = params.addAuto(val)\n return `${expr} ${sqlOp} ${placeholder}`\n}\n","import { isDynamicParameter } from '@dee-wan/schema-parser'\nimport {\n arrayContains,\n arrayOverlaps,\n arrayContainsAll,\n arrayIsEmpty,\n arrayIsNotEmpty,\n arrayEquals,\n getArrayType,\n prepareArrayParam,\n SqlDialect,\n} from '../../sql-builder-dialect'\nimport {\n LIMITS,\n Ops,\n SQL_TEMPLATES,\n SQL_TEMPLATES as T,\n} from '../shared/constants'\nimport { createError } from '../shared/errors'\nimport { ParamStore } from '../shared/param-store'\nimport { isEmptyArray, isPlainObject } from '../shared/validators/type-guards'\n\nfunction buildArrayParam(\n val: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n): string {\n if (isDynamicParameter(val)) {\n return params.addAuto(val)\n }\n\n if (!Array.isArray(val)) {\n throw createError(`Array operation requires array value`, { value: val })\n }\n\n const paramValue = prepareArrayParam(val as unknown[], dialect)\n return params.add(paramValue)\n}\n\nexport function buildArrayOperator(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n fieldType: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (val === null) {\n if (op === Ops.EQUALS) return `${expr} ${SQL_TEMPLATES.IS_NULL}`\n if (op === Ops.NOT) return `${expr} ${SQL_TEMPLATES.IS_NOT_NULL}`\n }\n\n const cast = getArrayType(fieldType, dialect)\n\n if (op === Ops.EQUALS) {\n return handleArrayEquals(expr, val, params, cast, dialect)\n }\n\n if (op === Ops.NOT) {\n return handleArrayNot(expr, val, params, cast, dialect)\n }\n\n switch (op) {\n case Ops.HAS:\n return handleArrayHas(expr, val, params, cast, dialect)\n case Ops.HAS_SOME:\n return handleArrayHasSome(expr, val, params, cast, dialect)\n case Ops.HAS_EVERY:\n return handleArrayHasEvery(expr, val, params, cast, dialect)\n case Ops.IS_EMPTY:\n return handleArrayIsEmpty(expr, val, dialect)\n default:\n throw createError(`Unknown array operator: ${op}`, { operator: op })\n }\n}\n\nfunction handleArrayEquals(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (isEmptyArray(val)) {\n return arrayIsEmpty(expr, dialect)\n }\n\n const placeholder = buildArrayParam(val, params, dialect)\n return arrayEquals(expr, placeholder, cast, dialect)\n}\n\nfunction handleArrayNot(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n let target: unknown = val\n\n if (isPlainObject(val)) {\n const entries = Object.entries(val).filter(([, v]) => v !== undefined)\n if (entries.length === 1 && entries[0][0] === Ops.EQUALS) {\n target = entries[0][1]\n } else {\n throw createError(`Array NOT only supports { equals: ... } shape`, {\n operator: Ops.NOT,\n value: val,\n })\n }\n }\n\n if (target === null) {\n return `${expr} ${SQL_TEMPLATES.IS_NOT_NULL}`\n }\n\n if (isEmptyArray(target)) {\n return arrayIsNotEmpty(expr, dialect)\n }\n\n const placeholder = buildArrayParam(target, params, dialect)\n return `${T.NOT} (${arrayEquals(expr, placeholder, cast, dialect)})`\n}\n\nfunction handleArrayHas(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (val === null) {\n throw createError(`has requires scalar value`, {\n operator: Ops.HAS,\n value: val,\n })\n }\n\n if (!isDynamicParameter(val) && Array.isArray(val)) {\n throw createError(`has requires scalar value (single element), not array`, {\n operator: Ops.HAS,\n value: val,\n })\n }\n\n if (isPlainObject(val)) {\n throw createError(`has requires scalar value`, {\n operator: Ops.HAS,\n value: val,\n })\n }\n\n const placeholder = params.addAuto(val)\n return arrayContains(expr, placeholder, cast, dialect)\n}\n\nfunction handleArrayHasSome(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (isDynamicParameter(val)) {\n const placeholder = params.addAuto(val)\n return arrayOverlaps(expr, placeholder, cast, dialect)\n }\n\n if (!Array.isArray(val)) {\n throw createError(`hasSome requires array value`, {\n operator: Ops.HAS_SOME,\n value: val,\n })\n }\n\n if (val.length > LIMITS.MAX_ARRAY_SIZE) {\n throw createError(\n `Array too large (${val.length} elements, max ${LIMITS.MAX_ARRAY_SIZE})`,\n { operator: Ops.HAS_SOME, value: `[${val.length} items]` },\n )\n }\n\n if (val.length === 0) return '0=1'\n\n const paramValue = prepareArrayParam(val as unknown[], dialect)\n const placeholder = params.add(paramValue)\n return arrayOverlaps(expr, placeholder, cast, dialect)\n}\n\nfunction handleArrayHasEvery(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n const placeholder = buildArrayParam(val, params, dialect)\n return arrayContainsAll(expr, placeholder, cast, dialect)\n}\n\nfunction handleArrayIsEmpty(\n expr: string,\n val: unknown,\n dialect: SqlDialect,\n): string {\n if (typeof val !== 'boolean') {\n throw createError(`isEmpty requires boolean value`, {\n operator: Ops.IS_EMPTY,\n value: val,\n })\n }\n\n return val === true\n ? arrayIsEmpty(expr, dialect)\n : arrayIsNotEmpty(expr, dialect)\n}\n","import {\n jsonExtractText,\n jsonExtractNumeric,\n jsonToText,\n caseInsensitiveLike,\n SqlDialect,\n} from '../../sql-builder-dialect'\nimport { LIMITS, Ops, SQL_TEMPLATES } from '../shared/constants'\nimport { createError } from '../shared/errors'\nimport { ParamStore } from '../shared/param-store'\nimport { isNotNullish, isPlainObject } from '../shared/validators/type-guards'\n\nconst SAFE_JSON_PATH_SEGMENT = /^[a-zA-Z_]\\w*$/\nconst MAX_PATH_SEGMENT_LENGTH = 255\n\nfunction validateJsonPathSegments(segments: string[]): void {\n for (const segment of segments) {\n if (typeof segment !== 'string') {\n throw createError('JSON path segments must be strings', {\n operator: Ops.PATH,\n value: segment,\n })\n }\n\n if (segment.length > MAX_PATH_SEGMENT_LENGTH) {\n throw createError(\n `JSON path segment too long: max ${MAX_PATH_SEGMENT_LENGTH} characters`,\n { operator: Ops.PATH, value: `[${segment.length} chars]` },\n )\n }\n\n if (!SAFE_JSON_PATH_SEGMENT.test(segment)) {\n throw createError(\n `Invalid JSON path segment: '${segment}'. Must be alphanumeric with underscores, starting with letter or underscore.`,\n { operator: Ops.PATH, value: segment },\n )\n }\n }\n}\n\nexport function buildJsonOperator(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (op === Ops.PATH && isPlainObject(val) && 'path' in val) {\n return handleJsonPath(expr, val, params, dialect)\n }\n\n const jsonWildcards: Record<string, (v: string) => string> = {\n [Ops.STRING_CONTAINS]: (v) => `%${v}%`,\n [Ops.STRING_STARTS_WITH]: (v) => `${v}%`,\n [Ops.STRING_ENDS_WITH]: (v) => `%${v}`,\n }\n\n if (op in jsonWildcards) {\n return handleJsonWildcard(expr, op, val, params, jsonWildcards, dialect)\n }\n\n throw createError(`Unsupported JSON operator: ${op}`, { operator: op })\n}\n\nfunction handleJsonPath(\n expr: string,\n val: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n): string {\n const v = val as {\n path: string[]\n equals?: unknown\n gt?: unknown\n gte?: unknown\n lt?: unknown\n lte?: unknown\n }\n\n if (!Array.isArray(v.path)) {\n throw createError('JSON path must be an array', { operator: Ops.PATH })\n }\n\n if (v.path.length === 0) {\n throw createError('JSON path cannot be empty', { operator: Ops.PATH })\n }\n\n validateJsonPathSegments(v.path)\n\n const pathExpr =\n dialect === 'sqlite'\n ? params.add(`$.${v.path.join('.')}`)\n : params.add(v.path)\n\n const rawOps: [string, unknown][] = [\n ['=', v.equals],\n ['>', v.gt],\n ['>=', v.gte],\n ['<', v.lt],\n ['<=', v.lte],\n ]\n\n const ops: [string, unknown][] = rawOps.filter(\n ([, value]) => value !== undefined,\n )\n\n if (ops.length === 0) {\n throw createError('JSON path query missing comparison operator', {\n operator: Ops.PATH,\n })\n }\n\n const parts: string[] = []\n\n for (const [sqlOp, value] of ops) {\n if (value === null) {\n const base = jsonExtractText(expr, pathExpr, dialect)\n parts.push(`${base} ${SQL_TEMPLATES.IS_NULL}`)\n continue\n }\n\n const valPh = params.add(value)\n const base =\n typeof value === 'number'\n ? jsonExtractNumeric(expr, pathExpr, dialect)\n : jsonExtractText(expr, pathExpr, dialect)\n parts.push(`${base} ${sqlOp} ${valPh}`)\n }\n\n return parts.length === 1 ? parts[0] : `(${parts.join(' AND ')})`\n}\n\nfunction handleJsonWildcard(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n wildcards: Record<string, (v: string) => string>,\n dialect: SqlDialect,\n): string {\n if (!isNotNullish(val)) {\n throw createError(`JSON string operator requires non-null value`, {\n operator: op,\n value: val,\n })\n }\n\n if (isPlainObject(val) || Array.isArray(val)) {\n throw createError(`JSON string operator requires scalar value`, {\n operator: op,\n value: val,\n })\n }\n\n const strVal = String(val)\n if (strVal.length > LIMITS.MAX_STRING_LENGTH) {\n throw createError(\n `String too long (${strVal.length} chars, max ${LIMITS.MAX_STRING_LENGTH})`,\n { operator: op },\n )\n }\n\n const placeholder = params.add(wildcards[op](strVal))\n const jsonText = jsonToText(expr, dialect)\n return caseInsensitiveLike(jsonText, placeholder, dialect)\n}\n","import { isValidRelationField, joinCondition } from '../joins'\nimport {\n SQL_TEMPLATES,\n RelationFilters,\n SQL_SEPARATORS,\n DEFAULT_WHERE_CLAUSE,\n} from '../shared/constants'\nimport { createError } from '../shared/errors'\nimport {\n buildTableReference,\n normalizeKeyList,\n quote,\n} from '../shared/sql-utils'\nimport { BuildContext, QueryResult } from '../shared/types'\nimport { isNotNullish, isPlainObject } from '../shared/validators/type-guards'\nimport { Field, Model } from '../../types'\n\nexport interface IWhereBuilder {\n build(where: Record<string, unknown>, ctx: BuildContext): QueryResult\n}\n\ntype ToOneFilterKey = 'is' | 'isNot'\n\ntype RelationFilterArgs = {\n fieldName: string\n value: Record<string, unknown>\n ctx: BuildContext\n whereBuilder: IWhereBuilder\n field: Field\n relModel: Model\n relTable: string\n relAlias: string\n join: string\n}\n\nconst NO_JOINS: readonly string[] = Object.freeze([] as string[])\n\nfunction freezeJoins(items: readonly string[]): readonly string[] {\n return Object.freeze([...items])\n}\n\nfunction isListRelation(fieldType: unknown): boolean {\n return typeof fieldType === 'string' && fieldType.endsWith('[]')\n}\n\nfunction buildToOneNullCheck(\n field: Field,\n parentAlias: string,\n relTable: string,\n relAlias: string,\n join: string,\n wantNull: boolean,\n): string {\n const isLocal = field.isForeignKeyLocal === true\n\n const fkFields = normalizeKeyList(field.foreignKey)\n if (isLocal) {\n if (fkFields.length === 0) {\n throw createError(`Relation '${field.name}' is missing foreignKey`, {\n field: field.name,\n })\n }\n\n const parts = fkFields.map((fk) => {\n const safe = fk.replace(/\"/g, '\"\"')\n const expr = `${parentAlias}.\"${safe}\"`\n return wantNull\n ? `${expr} ${SQL_TEMPLATES.IS_NULL}`\n : `${expr} ${SQL_TEMPLATES.IS_NOT_NULL}`\n })\n\n if (parts.length === 1) return parts[0]\n return wantNull ? `(${parts.join(' OR ')})` : `(${parts.join(' AND ')})`\n }\n\n const existsSql = `EXISTS (${SQL_TEMPLATES.SELECT} 1 ${SQL_TEMPLATES.FROM} ${relTable} ${relAlias} ${SQL_TEMPLATES.WHERE} ${join})`\n return wantNull ? `${SQL_TEMPLATES.NOT} ${existsSql}` : existsSql\n}\n\nfunction buildToOneExistsMatch(\n relTable: string,\n relAlias: string,\n join: string,\n sub: QueryResult,\n): string {\n const joins = sub.joins.length > 0 ? ` ${sub.joins.join(' ')}` : ''\n return `EXISTS (${SQL_TEMPLATES.SELECT} 1 ${SQL_TEMPLATES.FROM} ${relTable} ${relAlias}${joins} ${SQL_TEMPLATES.WHERE} ${join} ${SQL_TEMPLATES.AND} ${sub.clause})`\n}\n\nfunction buildToOneNotExistsMatch(\n relTable: string,\n relAlias: string,\n join: string,\n sub: QueryResult,\n): string {\n const joins = sub.joins.length > 0 ? ` ${sub.joins.join(' ')}` : ''\n return `${SQL_TEMPLATES.NOT} EXISTS (${SQL_TEMPLATES.SELECT} 1 ${SQL_TEMPLATES.FROM} ${relTable} ${relAlias}${joins} ${SQL_TEMPLATES.WHERE} ${join} ${SQL_TEMPLATES.AND} ${sub.clause})`\n}\n\nfunction buildListRelationFilters(args: RelationFilterArgs): QueryResult {\n const {\n fieldName,\n value,\n ctx,\n whereBuilder,\n relModel,\n relTable,\n relAlias,\n join,\n } = args\n\n const noneValue = value[RelationFilters.NONE]\n if (noneValue !== undefined && noneValue !== null) {\n const sub = whereBuilder.build(noneValue as Record<string, unknown>, {\n ...ctx,\n alias: relAlias,\n model: relModel,\n path: [...ctx.path, fieldName, RelationFilters.NONE],\n isSubquery: true,\n depth: ctx.depth + 1,\n })\n\n const isEmptyFilter =\n isPlainObject(noneValue) &&\n Object.keys(noneValue as Record<string, unknown>).length === 0\n const canOptimize =\n !ctx.isSubquery &&\n isEmptyFilter &&\n sub.clause === DEFAULT_WHERE_CLAUSE &&\n sub.joins.length === 0\n\n if (canOptimize) {\n const checkField =\n relModel.fields.find(\n (f) => !f.isRelation && f.isRequired && f.name !== 'id',\n ) || relModel.fields.find((f) => !f.isRelation && f.name === 'id')\n\n if (checkField) {\n const leftJoinSql = `LEFT JOIN ${relTable} ${relAlias} ON ${join}`\n const whereClause = `${relAlias}.${quote(checkField.name)} IS NULL`\n\n return Object.freeze({\n clause: whereClause,\n joins: freezeJoins([leftJoinSql]),\n })\n }\n }\n }\n\n const filters: Array<{\n key:\n | typeof RelationFilters.SOME\n | typeof RelationFilters.EVERY\n | typeof RelationFilters.NONE\n wrap: (c: string, j: string) => string\n }> = [\n {\n key: RelationFilters.SOME,\n wrap: (c, j) =>\n `EXISTS (${SQL_TEMPLATES.SELECT} 1 ${SQL_TEMPLATES.FROM} ${relTable} ${relAlias}${j} ${SQL_TEMPLATES.WHERE} ${join} ${SQL_TEMPLATES.AND} ${c})`,\n },\n {\n key: RelationFilters.EVERY,\n wrap: (c, j) =>\n `${SQL_TEMPLATES.NOT} EXISTS (${SQL_TEMPLATES.SELECT} 1 ${SQL_TEMPLATES.FROM} ${relTable} ${relAlias}${j} ${SQL_TEMPLATES.WHERE} ${join} ${SQL_TEMPLATES.AND} ${SQL_TEMPLATES.NOT} (${c}))`,\n },\n {\n key: RelationFilters.NONE,\n wrap: (c, j) => {\n const condition =\n c === DEFAULT_WHERE_CLAUSE ? '' : ` ${SQL_TEMPLATES.AND} ${c}`\n return `${SQL_TEMPLATES.NOT} EXISTS (${SQL_TEMPLATES.SELECT} 1 ${SQL_TEMPLATES.FROM} ${relTable} ${relAlias}${j} ${SQL_TEMPLATES.WHERE} ${join}${condition})`\n },\n },\n ]\n\n const clauses: string[] = []\n\n for (const { key, wrap } of filters) {\n const raw = value[key]\n if (raw === undefined || raw === null) continue\n\n const sub = whereBuilder.build(raw as Record<string, unknown>, {\n ...ctx,\n alias: relAlias,\n model: relModel,\n path: [...ctx.path, fieldName, key],\n isSubquery: true,\n depth: ctx.depth + 1,\n })\n\n const j = sub.joins.length > 0 ? ` ${sub.joins.join(' ')}` : ''\n clauses.push(wrap(sub.clause, j))\n }\n\n if (clauses.length === 0) {\n throw createError(\n `List relation '${fieldName}' requires one of { some, every, none }`,\n { field: fieldName, path: ctx.path, modelName: ctx.model.name },\n )\n }\n\n return Object.freeze({\n clause: clauses.join(SQL_SEPARATORS.CONDITION_AND),\n joins: NO_JOINS,\n })\n}\n\nfunction buildToOneRelationFilters(args: RelationFilterArgs): QueryResult {\n const {\n fieldName,\n value,\n ctx,\n whereBuilder,\n field,\n relModel,\n relTable,\n relAlias,\n join,\n } = args\n\n const hasSomeEveryNone =\n isNotNullish(value[RelationFilters.SOME]) ||\n isNotNullish(value[RelationFilters.EVERY]) ||\n isNotNullish(value[RelationFilters.NONE])\n\n if (hasSomeEveryNone) {\n throw createError(\n `To-one relation '${fieldName}' does not support { some, every, none }; use { is, isNot }`,\n { field: fieldName, path: ctx.path, modelName: ctx.model.name },\n )\n }\n\n const hasIs = Object.prototype.hasOwnProperty.call(value, 'is')\n const hasIsNot = Object.prototype.hasOwnProperty.call(value, 'isNot')\n\n let filterKey: ToOneFilterKey\n let filterVal: unknown\n\n if (hasIs) {\n filterKey = 'is'\n filterVal = value.is\n } else if (hasIsNot) {\n filterKey = 'isNot'\n filterVal = value.isNot\n } else {\n filterKey = 'is'\n filterVal = value\n }\n\n if (filterVal === undefined) {\n return Object.freeze({\n clause: DEFAULT_WHERE_CLAUSE,\n joins: NO_JOINS,\n })\n }\n\n if (filterVal === null) {\n const wantNull = filterKey === 'is'\n const clause = buildToOneNullCheck(\n field,\n ctx.alias,\n relTable,\n relAlias,\n join,\n wantNull,\n )\n return Object.freeze({\n clause,\n joins: NO_JOINS,\n })\n }\n\n if (!isPlainObject(filterVal)) {\n throw createError(\n `Relation '${fieldName}' filter must be an object or null`,\n {\n field: fieldName,\n path: ctx.path,\n modelName: ctx.model.name,\n value: filterVal,\n },\n )\n }\n\n const sub = whereBuilder.build(filterVal, {\n ...ctx,\n alias: relAlias,\n model: relModel,\n path: [...ctx.path, fieldName, filterKey],\n isSubquery: true,\n depth: ctx.depth + 1,\n })\n\n const clause =\n filterKey === 'is'\n ? buildToOneExistsMatch(relTable, relAlias, join, sub)\n : buildToOneNotExistsMatch(relTable, relAlias, join, sub)\n\n return Object.freeze({\n clause,\n joins: NO_JOINS,\n })\n}\n\nfunction ensureRelationFilterObject(\n fieldName: string,\n value: Record<string, unknown>,\n ctx: BuildContext,\n): void {\n if (!isPlainObject(value)) {\n throw createError(`Relation filter '${fieldName}' must be an object`, {\n path: [...ctx.path, fieldName],\n field: fieldName,\n modelName: ctx.model.name,\n value,\n })\n }\n}\n\nfunction buildRelation(\n fieldName: string,\n value: Record<string, unknown>,\n ctx: BuildContext,\n whereBuilder: IWhereBuilder,\n): QueryResult {\n const field = ctx.model.fields.find((f) => f.name === fieldName)\n\n if (!isValidRelationField(field)) {\n throw createError(`Invalid relation '${fieldName}'`, {\n field: fieldName,\n path: ctx.path,\n modelName: ctx.model.name,\n })\n }\n\n const relModel = ctx.schemaModels.find((m) => m.name === field.relatedModel)\n if (!isNotNullish(relModel)) {\n throw createError(\n `Related model '${field.relatedModel}' not found in schema. ` +\n `Available models: ${ctx.schemaModels.map((m) => m.name).join(', ')}`,\n {\n field: fieldName,\n path: ctx.path,\n modelName: ctx.model.name,\n },\n )\n }\n\n const relTable = buildTableReference(\n SQL_TEMPLATES.PUBLIC_SCHEMA,\n relModel.tableName,\n ctx.dialect,\n )\n const relAlias = ctx.aliasGen.next(fieldName)\n const join = joinCondition(field, ctx.model, relModel, ctx.alias, relAlias)\n\n const args: RelationFilterArgs = {\n fieldName,\n value,\n ctx,\n whereBuilder,\n field,\n relModel,\n relTable,\n relAlias,\n join,\n }\n\n if (isListRelation(field.type)) return buildListRelationFilters(args)\n return buildToOneRelationFilters(args)\n}\n\nexport function buildTopLevelRelation(\n fieldName: string,\n value: Record<string, unknown>,\n ctx: BuildContext,\n whereBuilder: IWhereBuilder,\n): QueryResult {\n ensureRelationFilterObject(fieldName, value, ctx)\n return buildRelation(fieldName, value, ctx, whereBuilder)\n}\n\nexport function buildNestedRelation(\n fieldName: string,\n value: Record<string, unknown>,\n ctx: BuildContext,\n whereBuilder: IWhereBuilder,\n): QueryResult {\n return buildTopLevelRelation(fieldName, value, ctx, whereBuilder)\n}\n","import { Model, Field } from '../../../types'\nimport { Ops } from '../constants'\nimport { createError } from '../errors'\nimport { isNotNullish, isArrayType, isJsonType } from './type-guards'\n\nexport function assertFieldExists(\n name: string,\n model: Model,\n path: readonly string[],\n): Field {\n const field = model.fields.find((f) => f.name === name)\n if (!isNotNullish(field)) {\n throw createError(`Field '${name}' does not exist on '${model.name}'`, {\n field: name,\n path,\n modelName: model.name,\n availableFields: model.fields.map((f) => f.name),\n })\n }\n return field\n}\n\nexport function assertValidOperator(\n fieldName: string,\n op: string,\n fieldType: string | undefined,\n path: readonly string[],\n modelName: string,\n): void {\n if (!isNotNullish(fieldType)) return\n\n const ARRAY_OPS = new Set([\n Ops.HAS,\n Ops.HAS_SOME,\n Ops.HAS_EVERY,\n Ops.IS_EMPTY,\n ])\n const JSON_OPS = new Set([\n Ops.PATH,\n Ops.STRING_CONTAINS,\n Ops.STRING_STARTS_WITH,\n Ops.STRING_ENDS_WITH,\n ])\n\n const isArrayOp = ARRAY_OPS.has(op as any)\n const isFieldArray = isArrayType(fieldType)\n const arrayOpMismatch = isArrayOp && !isFieldArray\n\n if (arrayOpMismatch) {\n throw createError(`'${op}' requires array field, got '${fieldType}'`, {\n operator: op,\n field: fieldName,\n path,\n modelName,\n })\n }\n\n const isJsonOp = JSON_OPS.has(op as any)\n const isFieldJson = isJsonType(fieldType)\n const jsonOpMismatch = isJsonOp && !isFieldJson\n\n if (jsonOpMismatch) {\n throw createError(`'${op}' requires JSON field, got '${fieldType}'`, {\n operator: op,\n field: fieldName,\n path,\n modelName,\n })\n }\n}\n","import { isRelationField } from '../joins'\nimport { buildScalarOperator } from './operators-scalar'\nimport { buildArrayOperator } from './operators-array'\nimport { buildJsonOperator } from './operators-json'\nimport {\n buildTopLevelRelation,\n buildNestedRelation,\n IWhereBuilder,\n} from './relations'\nimport {\n DEFAULT_WHERE_CLAUSE,\n LogicalOps,\n SQL_SEPARATORS,\n SQL_TEMPLATES,\n Ops,\n} from '../shared/constants'\nimport { createError } from '../shared/errors'\nimport { col } from '../shared/sql-utils'\nimport { BuildContext, QueryResult } from '../shared/types'\nimport {\n assertFieldExists,\n assertValidOperator,\n} from '../shared/validators/field-validators'\nimport {\n isEmptyWhere,\n isValidWhereClause,\n} from '../shared/validators/sql-validators'\nimport {\n isNonEmptyArray,\n isArrayType,\n isJsonType,\n isPlainObject,\n} from '../shared/validators/type-guards'\n\ntype LogicalOperator = 'AND' | 'OR' | 'NOT'\n\nconst MAX_QUERY_DEPTH = 50\nconst EMPTY_JOINS: readonly string[] = Object.freeze([])\nconst JSON_OPS = new Set([\n Ops.PATH,\n Ops.STRING_CONTAINS,\n Ops.STRING_STARTS_WITH,\n Ops.STRING_ENDS_WITH,\n])\n\nclass WhereBuilder implements IWhereBuilder {\n build(where: Record<string, unknown>, ctx: BuildContext): QueryResult {\n if (!isPlainObject(where)) {\n throw createError('where must be an object', {\n path: ctx.path,\n modelName: ctx.model.name,\n })\n }\n return buildWhereInternal(where, ctx, this)\n }\n}\n\nexport const whereBuilderInstance = new WhereBuilder()\n\nfunction freezeResult(\n clause: string,\n joins: readonly string[] = EMPTY_JOINS,\n): QueryResult {\n return Object.freeze({ clause, joins })\n}\n\nfunction dedupePreserveOrder(items: readonly string[]): readonly string[] {\n if (items.length <= 1) return Object.freeze([...items])\n const seen = new Set<string>()\n const out: string[] = []\n for (const s of items) {\n if (!seen.has(s)) {\n seen.add(s)\n out.push(s)\n }\n }\n return Object.freeze(out)\n}\n\nfunction appendResult(\n result: QueryResult,\n clauses: string[],\n allJoins: string[],\n): void {\n if (isValidWhereClause(result.clause)) clauses.push(result.clause)\n if (isNonEmptyArray(result.joins)) allJoins.push(...result.joins)\n}\n\nfunction asLogicalOperator(key: string): LogicalOperator | null {\n if (key === LogicalOps.AND) return 'AND'\n if (key === LogicalOps.OR) return 'OR'\n if (key === LogicalOps.NOT) return 'NOT'\n return null\n}\n\nfunction nextContext(ctx: BuildContext): BuildContext {\n return { ...ctx, depth: ctx.depth + 1 }\n}\n\nfunction buildRelationFilter(\n fieldName: string,\n value: Record<string, unknown>,\n ctx: BuildContext,\n builder: IWhereBuilder,\n): QueryResult {\n const ctx2 = nextContext(ctx)\n if (ctx.isSubquery) {\n return buildNestedRelation(fieldName, value, ctx2, builder)\n }\n return buildTopLevelRelation(fieldName, value, ctx2, builder)\n}\n\nfunction buildWhereEntry(\n key: string,\n value: unknown,\n ctx: BuildContext,\n builder: IWhereBuilder,\n): QueryResult {\n const op = asLogicalOperator(key)\n if (op) return buildLogical(op, value, ctx, builder)\n\n if (isRelationField(key, ctx.model)) {\n if (!isPlainObject(value)) {\n throw createError(`Relation filter '${key}' must be an object`, {\n path: [...ctx.path, key],\n field: key,\n modelName: ctx.model.name,\n value,\n })\n }\n return buildRelationFilter(key, value, ctx, builder)\n }\n\n return buildScalarField(key, value, ctx)\n}\n\nfunction buildWhereInternal(\n where: Record<string, unknown>,\n ctx: BuildContext,\n builder: IWhereBuilder,\n): QueryResult {\n if (ctx.depth > MAX_QUERY_DEPTH) {\n throw createError(\n `Query nesting too deep (max ${MAX_QUERY_DEPTH} levels). This usually indicates a circular reference.`,\n { path: ctx.path, modelName: ctx.model.name },\n )\n }\n\n if (isEmptyWhere(where)) {\n return freezeResult(DEFAULT_WHERE_CLAUSE, EMPTY_JOINS)\n }\n\n const allJoins: string[] = []\n const clauses: string[] = []\n\n for (const [key, value] of Object.entries(where)) {\n if (value === undefined) continue\n const result = buildWhereEntry(key, value, ctx, builder)\n appendResult(result, clauses, allJoins)\n }\n\n const finalClause =\n clauses.length > 0\n ? clauses.join(SQL_SEPARATORS.CONDITION_AND)\n : DEFAULT_WHERE_CLAUSE\n\n return freezeResult(finalClause, dedupePreserveOrder(allJoins))\n}\n\nfunction normalizeLogicalValue(\n operator: LogicalOperator,\n value: unknown,\n ctx: BuildContext,\n): Record<string, unknown>[] {\n if (Array.isArray(value)) {\n const out: Record<string, unknown>[] = []\n for (let i = 0; i < value.length; i++) {\n const v = value[i]\n if (v === undefined) continue\n if (!isPlainObject(v)) {\n throw createError(`${operator} entries must be objects`, {\n path: [...ctx.path, operator, String(i)],\n modelName: ctx.model.name,\n value: v,\n })\n }\n out.push(v)\n }\n return out\n }\n\n if (isPlainObject(value)) {\n return [value]\n }\n\n throw createError(`${operator} must be an object or array of objects`, {\n path: [...ctx.path, operator],\n modelName: ctx.model.name,\n value,\n })\n}\n\nfunction collectLogicalParts(\n operator: LogicalOperator,\n conditions: Record<string, unknown>[],\n ctx: BuildContext,\n builder: IWhereBuilder,\n): { joins: readonly string[]; clauses: readonly string[] } {\n const allJoins: string[] = []\n const clauses: string[] = []\n\n for (let i = 0; i < conditions.length; i++) {\n const result = builder.build(conditions[i], {\n ...ctx,\n path: [...ctx.path, operator, String(i)],\n depth: ctx.depth + 1,\n })\n\n if (isNonEmptyArray(result.joins)) allJoins.push(...result.joins)\n\n if (result.clause && result.clause !== DEFAULT_WHERE_CLAUSE) {\n clauses.push(`(${result.clause})`)\n }\n }\n\n return {\n joins: dedupePreserveOrder(allJoins),\n clauses: Object.freeze(clauses),\n }\n}\n\nfunction buildLogicalClause(\n operator: LogicalOperator,\n clauses: readonly string[],\n): string {\n if (clauses.length === 0) return DEFAULT_WHERE_CLAUSE\n\n if (operator === 'NOT') {\n if (clauses.length === 1) return `${SQL_TEMPLATES.NOT} ${clauses[0]}`\n return `${SQL_TEMPLATES.NOT} (${clauses.join(SQL_SEPARATORS.CONDITION_AND)})`\n }\n\n return clauses.join(` ${operator} `)\n}\n\nfunction buildLogical(\n operator: LogicalOperator,\n value: unknown,\n ctx: BuildContext,\n builder: IWhereBuilder,\n): QueryResult {\n const conditions = normalizeLogicalValue(operator, value, ctx)\n\n if (conditions.length === 0) {\n const clause = operator === 'OR' ? '0=1' : DEFAULT_WHERE_CLAUSE\n return freezeResult(clause, EMPTY_JOINS)\n }\n\n const { joins, clauses } = collectLogicalParts(\n operator,\n conditions,\n ctx,\n builder,\n )\n const clause = buildLogicalClause(operator, clauses)\n return freezeResult(clause, joins)\n}\n\nfunction buildScalarField(\n fieldName: string,\n value: unknown,\n ctx: BuildContext,\n): QueryResult {\n const field = assertFieldExists(fieldName, ctx.model, ctx.path)\n const expr = col(ctx.alias, fieldName, ctx.model)\n\n if (value === null) {\n return freezeResult(`${expr} ${SQL_TEMPLATES.IS_NULL}`, EMPTY_JOINS)\n }\n\n if (isPlainObject(value)) {\n const mode = value.mode as 'insensitive' | 'default' | undefined\n const ops = Object.entries(value).filter(\n ([k, v]) => k !== 'mode' && v !== undefined,\n )\n\n if (ops.length === 0) {\n return freezeResult(DEFAULT_WHERE_CLAUSE, EMPTY_JOINS)\n }\n\n const parts: string[] = []\n for (const [op, val] of ops) {\n assertValidOperator(fieldName, op, field.type, ctx.path, ctx.model.name)\n const clause = buildOperator(expr, op, val, ctx, mode, field.type)\n if (isValidWhereClause(clause)) parts.push(clause)\n }\n\n const clause =\n parts.length > 0\n ? parts.join(SQL_SEPARATORS.CONDITION_AND)\n : DEFAULT_WHERE_CLAUSE\n\n return freezeResult(clause, EMPTY_JOINS)\n }\n\n const clause = buildOperator(\n expr,\n Ops.EQUALS,\n value,\n ctx,\n undefined,\n field.type,\n )\n return freezeResult(clause || DEFAULT_WHERE_CLAUSE, EMPTY_JOINS)\n}\n\nfunction buildOperator(\n expr: string,\n op: string,\n val: unknown,\n ctx: BuildContext,\n mode?: 'insensitive' | 'default',\n fieldType?: string,\n): string {\n if (fieldType && isArrayType(fieldType)) {\n return buildArrayOperator(expr, op, val, ctx.params, fieldType, ctx.dialect)\n }\n\n if (fieldType && isJsonType(fieldType) && JSON_OPS.has(op as any)) {\n return buildJsonOperator(expr, op, val, ctx.params, ctx.dialect)\n }\n\n return buildScalarOperator(\n expr,\n op,\n val,\n ctx.params,\n mode,\n fieldType,\n ctx.dialect,\n )\n}\n","import { AliasGenerator } from './types'\nimport { ALIAS_FORBIDDEN_KEYWORDS } from './constants'\n\nfunction toSafeSqlIdentifier(input: string): string {\n const raw = String(input)\n const cleaned = raw.replace(/\\W/g, '_')\n const startsOk = /^[a-zA-Z_]/.test(cleaned)\n const base = startsOk ? cleaned : `_${cleaned}`\n const fallback = base.length > 0 ? base : '_t'\n const lowered = fallback.toLowerCase()\n return ALIAS_FORBIDDEN_KEYWORDS.has(lowered) ? `_${lowered}` : lowered\n}\n\nexport function createAliasGenerator(\n maxAliases: number = 10000,\n): AliasGenerator {\n let counter = 0\n const usedAliases = new Set<string>()\n\n return {\n next(baseName: string): string {\n if (usedAliases.size >= maxAliases) {\n throw new Error(\n `Alias generator exceeded maximum of ${maxAliases} aliases. ` +\n `This indicates a query complexity issue or potential infinite loop.`,\n )\n }\n\n const base = toSafeSqlIdentifier(baseName)\n\n const suffix = `_${counter}`\n const maxLen = 63\n const baseMax = Math.max(1, maxLen - suffix.length)\n const trimmedBase = base.length > baseMax ? base.slice(0, baseMax) : base\n\n const alias = `${trimmedBase}${suffix}`\n counter += 1\n\n if (usedAliases.has(alias)) {\n throw new Error(\n `CRITICAL: Duplicate alias '${alias}' at counter=${counter}. ` +\n `This indicates a bug in alias generation logic.`,\n )\n }\n usedAliases.add(alias)\n\n return alias\n },\n }\n}\n","import {\n extractDynamicName,\n isDynamicParameter,\n ParamMap,\n} from '@dee-wan/schema-parser'\nimport { normalizeValue } from '../../utils/normalize-value'\n\nexport interface ParamStore {\n add(value: unknown, dynamicName?: string): string\n addAuto(value: unknown): string\n snapshot(): ParamSnapshot\n readonly index: number\n}\n\ninterface ParamSnapshot {\n readonly index: number\n readonly params: readonly unknown[]\n readonly mappings: readonly ParamMap[]\n}\n\nconst MAX_PARAM_INDEX = Number.MAX_SAFE_INTEGER - 1000\n\nfunction assertSameLength(\n params: readonly unknown[],\n mappings: readonly ParamMap[],\n): void {\n if (params.length !== mappings.length) {\n throw new Error(\n `CRITICAL: State corruption - params=${params.length}, mappings=${mappings.length}`,\n )\n }\n}\n\nfunction assertValidNextIndex(index: number): void {\n if (!Number.isInteger(index) || index < 1) {\n throw new Error(`CRITICAL: Index must be integer >= 1, got ${index}`)\n }\n}\n\nfunction assertNextIndexMatches(\n mappingsLength: number,\n nextIndex: number,\n): void {\n const expected = mappingsLength + 1\n if (nextIndex !== expected) {\n throw new Error(\n `CRITICAL: Next index mismatch - expected ${expected}, got ${nextIndex}`,\n )\n }\n}\n\nfunction assertSequentialIndex(actual: number, expected: number): void {\n if (actual !== expected) {\n throw new Error(\n `CRITICAL: Indices must be sequential from 1..N. Expected ${expected}, got ${actual}`,\n )\n }\n}\n\nfunction assertExactlyOneOfDynamicOrValue(m: ParamMap): void {\n const hasDynamic = typeof m.dynamicName === 'string'\n const hasStatic = m.value !== undefined\n\n if (hasDynamic === hasStatic) {\n throw new Error(\n `CRITICAL: ParamMap ${m.index} must have exactly one of dynamicName or value`,\n )\n }\n}\n\nfunction normalizeDynamicNameOrThrow(\n dynamicName: string,\n index: number,\n): string {\n const dn = dynamicName.trim()\n if (dn.length === 0) {\n throw new Error(`CRITICAL: dynamicName cannot be empty (index=${index})`)\n }\n return dn\n}\n\nfunction assertUniqueDynamicName(dn: string, seen: Set<string>): void {\n if (seen.has(dn)) {\n throw new Error(`CRITICAL: Duplicate dynamic param name in mappings: ${dn}`)\n }\n seen.add(dn)\n}\n\nfunction validateMappingEntry(\n m: ParamMap,\n expectedIndex: number,\n seenDynamic: Set<string>,\n): void {\n assertSequentialIndex(m.index, expectedIndex)\n assertExactlyOneOfDynamicOrValue(m)\n\n if (typeof m.dynamicName === 'string') {\n const dn = normalizeDynamicNameOrThrow(m.dynamicName, m.index)\n assertUniqueDynamicName(dn, seenDynamic)\n }\n}\n\nfunction validateMappings(mappings: readonly ParamMap[]): void {\n const seenDynamic = new Set<string>()\n for (let i = 0; i < mappings.length; i++) {\n validateMappingEntry(mappings[i], i + 1, seenDynamic)\n }\n}\n\nfunction validateState(\n params: readonly unknown[],\n mappings: readonly ParamMap[],\n index: number,\n): void {\n assertSameLength(params, mappings)\n assertValidNextIndex(index)\n\n if (mappings.length === 0) return\n\n validateMappings(mappings)\n assertNextIndexMatches(mappings.length, index)\n}\n\nfunction createStoreInternal(\n startIndex: number,\n initialParams: unknown[] = [],\n initialMappings: ParamMap[] = [],\n): ParamStore {\n let index = startIndex\n const params: unknown[] = [...initialParams]\n const mappings: ParamMap[] = [...initialMappings]\n const dynamicNameToIndex = new Map<string, number>()\n\n for (const m of initialMappings) {\n if (typeof m.dynamicName === 'string') {\n dynamicNameToIndex.set(m.dynamicName.trim(), m.index)\n }\n }\n\n function assertCanAdd(): void {\n if (index > MAX_PARAM_INDEX) {\n throw new Error(\n `CRITICAL: Cannot add param - would overflow MAX_SAFE_INTEGER. Current index: ${index}`,\n )\n }\n }\n\n function normalizeDynamicName(dynamicName: string): string {\n const dn = dynamicName.trim()\n if (dn.length === 0) {\n throw new Error('CRITICAL: dynamicName cannot be empty')\n }\n return dn\n }\n\n function format(position: number): string {\n return `$${position}`\n }\n\n function addDynamic(dynamicName: string): string {\n const dn = normalizeDynamicName(dynamicName)\n const existing = dynamicNameToIndex.get(dn)\n if (existing !== undefined) {\n return format(existing)\n }\n\n const position = index\n dynamicNameToIndex.set(dn, position)\n params.push(undefined)\n mappings.push({ index: position, dynamicName: dn })\n index++\n return format(position)\n }\n\n function addStatic(value: unknown): string {\n const position = index\n const normalizedValue = normalizeValue(value)\n params.push(normalizedValue)\n mappings.push({ index: position, value: normalizedValue })\n index++\n return format(position)\n }\n\n function add(value: unknown, dynamicName?: string): string {\n assertCanAdd()\n return dynamicName === undefined\n ? addStatic(value)\n : addDynamic(dynamicName)\n }\n\n function addAuto(value: unknown): string {\n if (isDynamicParameter(value)) {\n const dynamicName = extractDynamicName(value as string)\n return add(undefined, dynamicName)\n }\n return add(value)\n }\n\n function snapshot(): ParamSnapshot {\n return Object.freeze({\n index,\n params: Object.freeze([...params]),\n mappings: Object.freeze([...mappings]),\n })\n }\n\n return {\n add,\n addAuto,\n snapshot,\n get index() {\n return index\n },\n }\n}\n\nexport function createParamStore(startIndex = 1): ParamStore {\n if (!Number.isInteger(startIndex) || startIndex < 1) {\n throw new Error(`Start index must be integer >= 1, got ${startIndex}`)\n }\n\n if (startIndex > MAX_PARAM_INDEX) {\n throw new Error(\n `Start index too high (${startIndex}), risk of overflow at MAX_SAFE_INTEGER`,\n )\n }\n\n return createStoreInternal(startIndex)\n}\n\nexport function createParamStoreFrom(\n existingParams: readonly unknown[],\n existingMappings: readonly ParamMap[],\n nextIndex: number,\n): ParamStore {\n validateState([...existingParams], [...existingMappings], nextIndex)\n return createStoreInternal(\n nextIndex,\n [...existingParams],\n [...existingMappings],\n )\n}\n","import { DEFAULT_WHERE_CLAUSE } from './constants'\nimport { WhereClauseResult } from './types'\nimport { ParamStore } from './param-store'\n\nexport function toPublicResult(\n clause: string,\n joins: readonly string[],\n params: ParamStore,\n): WhereClauseResult {\n const snapshot = params.snapshot()\n\n return Object.freeze({\n clause: clause || DEFAULT_WHERE_CLAUSE,\n joins: Object.freeze([...joins]),\n params: snapshot.params,\n paramMappings: snapshot.mappings,\n nextParamIndex: snapshot.index,\n })\n}\n","import { SqlDialect, getGlobalDialect } from '../sql-builder-dialect'\nimport { Model } from '../types'\nimport { whereBuilderInstance } from './where/builder'\nimport { createAliasGenerator } from './shared/alias-generator'\nimport { createParamStore, ParamStore } from './shared/param-store'\nimport { toPublicResult } from './shared/state'\nimport { WhereClauseResult, BuildContext } from './shared/types'\nimport {\n validateParamConsistency,\n validateParamConsistencyFragment,\n} from './shared/validators/sql-validators'\nimport { assertSafeAlias } from './shared/sql-utils'\n\ninterface BuildWhereOptions {\n alias: string\n model: Model\n schemaModels?: Model[]\n path?: string[]\n params?: ParamStore\n isSubquery?: boolean\n aliasGen?: any\n dialect?: SqlDialect\n}\n\nexport function buildWhereClause(\n where: Record<string, unknown>,\n options: BuildWhereOptions,\n): WhereClauseResult {\n assertSafeAlias(options.alias)\n\n const dialect = options.dialect || getGlobalDialect()\n const params = options.params ?? createParamStore()\n\n const ctx: BuildContext = {\n alias: options.alias,\n model: options.model,\n schemaModels: options.schemaModels ?? [],\n path: options.path ?? [],\n isSubquery: options.isSubquery ?? false,\n aliasGen: options.aliasGen ?? createAliasGenerator(),\n dialect,\n params,\n depth: 0,\n }\n\n const result = whereBuilderInstance.build(where, ctx)\n const publicResult = toPublicResult(result.clause, result.joins, params)\n\n if (!options.isSubquery) {\n const nums = [...publicResult.clause.matchAll(/\\$(\\d+)/g)].map((m) =>\n parseInt(m[1], 10),\n )\n if (nums.length > 0) {\n const min = Math.min(...nums)\n if (min === 1) {\n validateParamConsistency(publicResult.clause, publicResult.params)\n } else {\n validateParamConsistencyFragment(\n publicResult.clause,\n publicResult.params,\n )\n }\n }\n }\n\n return publicResult\n}\n","import { Model } from '../../types'\nimport { SCHEMA_PREFIXES, SQL_SEPARATORS } from '../shared/constants'\nimport {\n getScalarFieldSet,\n getRelationFieldSet,\n} from '../shared/model-field-cache'\nimport { col, colWithAlias, sqlStringLiteral } from '../shared/sql-utils'\nimport {\n hasProperty,\n isNotNullish,\n isNonEmptyArray,\n isPlainObject,\n} from '../shared/validators/type-guards'\n\ntype SelectEntry = readonly [string, unknown]\n\nfunction toSelectEntries(select: Record<string, unknown>): SelectEntry[] {\n const out: SelectEntry[] = []\n for (const [k, v] of Object.entries(select)) {\n if (v !== false && v !== undefined) out.push([k, v])\n }\n return out\n}\n\nfunction validateSelectKeys(\n entries: readonly SelectEntry[],\n scalarSet: ReadonlySet<string>,\n relationSet: ReadonlySet<string>,\n): void {\n const unknown: string[] = []\n for (const [k] of entries) {\n if (k === '_count') continue\n if (!scalarSet.has(k) && !relationSet.has(k)) unknown.push(k)\n }\n if (unknown.length > 0) {\n throw new Error(`Select contains unknown fields: ${unknown.join(', ')}`)\n }\n}\n\nfunction analyzeSelectEntries(\n entries: readonly SelectEntry[],\n scalarSet: ReadonlySet<string>,\n relationSet: ReadonlySet<string>,\n): {\n scalarSelected: string[]\n hasRelationSelection: boolean\n hasCount: boolean\n} {\n const scalarSelected: string[] = []\n let hasRelationSelection = false\n let hasCount = false\n\n for (const [k, v] of entries) {\n if (k === '_count') {\n hasCount = true\n continue\n }\n if (relationSet.has(k)) hasRelationSelection = true\n if (scalarSet.has(k) && v === true) scalarSelected.push(k)\n }\n\n return { scalarSelected, hasRelationSelection, hasCount }\n}\n\nfunction buildDefaultScalarFields(model: Model, alias: string): string[] {\n const excludedPrefixes = [\n SCHEMA_PREFIXES.INTERNAL,\n SCHEMA_PREFIXES.COMMENT,\n ] as const\n\n const out: string[] = []\n for (const f of model.fields) {\n if (f.isRelation) continue\n const excluded = excludedPrefixes.some((p) => f.name.startsWith(p))\n if (!excluded) out.push(colWithAlias(alias, f.name, model))\n }\n\n if (!isNonEmptyArray(out)) {\n throw new Error(`Model ${model.name} has no selectable fields`)\n }\n\n return out\n}\n\nexport function buildSelectFields(\n args: { select?: Record<string, boolean | unknown> },\n model: Model,\n alias: string,\n): string {\n const scalarSet = getScalarFieldSet(model)\n const relationSet = getRelationFieldSet(model)\n\n if (!isNotNullish(args.select)) {\n return buildDefaultScalarFields(model, alias).join(\n SQL_SEPARATORS.FIELD_LIST,\n )\n }\n\n const entries = toSelectEntries(args.select)\n validateSelectKeys(entries, scalarSet, relationSet)\n\n const { scalarSelected, hasRelationSelection, hasCount } =\n analyzeSelectEntries(entries, scalarSet, relationSet)\n\n const fields = scalarSelected.map((field) =>\n colWithAlias(alias, field, model),\n )\n\n if (!isNonEmptyArray(fields)) {\n if (hasRelationSelection) return ''\n if (!hasCount) {\n throw new Error('Select must have at least one scalar field set to true')\n }\n }\n\n return fields.join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nfunction buildAllScalarParts(model: Model, alias: string): string[] {\n const scalarFields = model.fields.filter((f) => !f.isRelation)\n if (!isNonEmptyArray(scalarFields)) {\n throw new Error(`Model ${model.name} has no scalar fields`)\n }\n\n const parts: string[] = []\n for (const field of scalarFields) {\n parts.push(\n `${sqlStringLiteral(field.name)}, ${col(alias, field.name, model)}`,\n )\n }\n return parts\n}\n\nfunction validateRelationSelectKeys(\n entries: readonly SelectEntry[],\n scalarNames: ReadonlySet<string>,\n relationNames: ReadonlySet<string>,\n): void {\n const unknown: string[] = []\n for (const [k] of entries) {\n if (!scalarNames.has(k) && !relationNames.has(k)) unknown.push(k)\n }\n if (unknown.length > 0) {\n throw new Error(`Select contains unknown fields: ${unknown.join(', ')}`)\n }\n}\n\nfunction buildSelectedScalarParts(\n entries: readonly SelectEntry[],\n scalarNames: ReadonlySet<string>,\n alias: string,\n model: Model,\n): string[] {\n const parts: string[] = []\n for (const [key, value] of entries) {\n if (!scalarNames.has(key)) continue\n if (value === true) {\n parts.push(`${sqlStringLiteral(key)}, ${col(alias, key, model)}`)\n }\n }\n return parts\n}\n\nexport function buildRelationSelect(\n relArgs: unknown,\n relModel: Model,\n relAlias: string,\n): string {\n if (relArgs === true) {\n return buildAllScalarParts(relModel, relAlias).join(\n SQL_SEPARATORS.FIELD_LIST,\n )\n }\n\n if (isPlainObject(relArgs) && hasProperty(relArgs, 'select')) {\n const sel = (relArgs as { select: Record<string, unknown> }).select\n if (!isPlainObject(sel)) {\n throw new Error(\n `Relation select must be an object for model ${relModel.name}`,\n )\n }\n\n const scalarNames = new Set(\n relModel.fields.filter((f) => !f.isRelation).map((f) => f.name),\n )\n const relationNames = new Set(\n relModel.fields.filter((f) => f.isRelation).map((f) => f.name),\n )\n\n const entries = toSelectEntries(sel)\n validateRelationSelectKeys(entries, scalarNames, relationNames)\n\n return buildSelectedScalarParts(\n entries,\n scalarNames,\n relAlias,\n relModel,\n ).join(SQL_SEPARATORS.FIELD_LIST)\n }\n\n return buildAllScalarParts(relModel, relAlias).join(SQL_SEPARATORS.FIELD_LIST)\n}\n","import { joinCondition, isValidRelationField } from '../joins'\nimport { buildOrderBy, readSkipTake, parseOrderByValue } from '../pagination'\nimport { buildWhereClause } from '../where'\nimport { jsonAgg, jsonBuildObject, SqlDialect } from '../../sql-builder-dialect'\nimport { buildRelationSelect } from './fields'\nimport { Model, PrismaQueryArgs, Field } from '../../types'\nimport { createAliasGenerator } from '../shared/alias-generator'\nimport { SQL_TEMPLATES, SQL_SEPARATORS } from '../shared/constants'\nimport {\n buildTableReference,\n sqlStringLiteral,\n normalizeKeyList,\n quoteColumn,\n} from '../shared/sql-utils'\nimport { ParamStore } from '../shared/param-store'\nimport { IncludeSpec, AliasGenerator } from '../shared/types'\nimport { isValidWhereClause } from '../shared/validators/sql-validators'\nimport {\n hasProperty,\n isNonEmptyArray,\n isNotNullish,\n isPlainObject,\n} from '../shared/validators/type-guards'\nimport {\n reverseOrderByInput,\n normalizeOrderByInput,\n} from '../shared/order-by-utils'\nimport { addAutoScoped } from '../shared/dynamic-params'\nimport {\n getRelationFieldSet,\n getScalarFieldSet,\n} from '../shared/model-field-cache'\nimport { ensureDeterministicOrderByInput } from '../shared/order-by-determinism'\n\nconst MAX_INCLUDE_DEPTH = 10\n\ninterface IncludeComplexityStats {\n totalIncludes: number\n totalSubqueries: number\n maxDepth: number\n}\n\nconst MAX_TOTAL_SUBQUERIES = 100\nconst MAX_TOTAL_INCLUDES = 50\n\ntype DynamicInt = string\ntype IntOrDynamic = number | DynamicInt\ntype OptionalIntOrDynamic = IntOrDynamic | undefined\ntype OrderByInput = unknown\ntype IncludeSelectArgs = Pick<PrismaQueryArgs, 'include' | 'select'>\n\ninterface IncludeBuildContext {\n model: Model\n schemas: Model[]\n parentAlias: string\n aliasGen: AliasGenerator\n dialect: SqlDialect\n params: ParamStore\n visitPath?: string[]\n depth?: number\n stats?: IncludeComplexityStats\n}\n\nfunction getRelationTableReference(\n relModel: Model,\n dialect: SqlDialect,\n): string {\n return buildTableReference(\n SQL_TEMPLATES.PUBLIC_SCHEMA,\n relModel.tableName,\n dialect,\n )\n}\n\nfunction resolveRelationOrThrow(\n model: Model,\n schemas: readonly Model[],\n relName: string,\n): { field: Field; relModel: Model } {\n const field = model.fields.find((f) => f.name === relName)\n\n if (!isNotNullish(field)) {\n throw new Error(\n `Unknown relation '${relName}' on model ${model.name}. ` +\n `Available relation fields: ${model.fields\n .filter((f) => f.isRelation)\n .map((f) => f.name)\n .join(', ')}`,\n )\n }\n\n if (!isValidRelationField(field)) {\n throw new Error(\n `Invalid relation metadata for '${relName}' on model ${model.name}. ` +\n `This usually indicates a schema parsing error (missing foreignKey/references).`,\n )\n }\n\n const relModel = schemas.find((m) => m.name === field.relatedModel)\n if (!isNotNullish(relModel)) {\n throw new Error(\n `Relation '${relName}' on model ${model.name} references missing model '${field.relatedModel}'.`,\n )\n }\n\n return { field, relModel }\n}\n\nfunction relationEntriesFromArgs(\n args: IncludeSelectArgs,\n model: Model,\n): Array<[string, unknown]> {\n const relationSet = getRelationFieldSet(model)\n const out: Array<[string, unknown]> = []\n const seen = new Set<string>()\n\n const pushFrom = (src: unknown): void => {\n if (!isPlainObject(src)) return\n for (const [k, v] of Object.entries(src)) {\n if (v === false) continue\n if (!relationSet.has(k)) continue\n if (seen.has(k)) continue\n seen.add(k)\n out.push([k, v])\n }\n }\n\n pushFrom(args.include)\n pushFrom(args.select)\n\n return out\n}\n\nfunction validateOrderByForModel(model: Model, orderBy: unknown): void {\n if (!isNotNullish(orderBy)) return\n\n const scalarSet = getScalarFieldSet(model)\n const normalized = normalizeOrderByInput(orderBy, parseOrderByValue)\n\n for (const item of normalized) {\n const entries = Object.entries(item)\n if (entries.length !== 1) {\n throw new Error('orderBy array entries must have exactly one field')\n }\n\n const fieldName = String(entries[0][0]).trim()\n if (fieldName.length === 0) {\n throw new Error('orderBy field name cannot be empty')\n }\n\n if (!scalarSet.has(fieldName)) {\n throw new Error(\n `orderBy references unknown or non-scalar field '${fieldName}' on model ${model.name}`,\n )\n }\n }\n}\n\nfunction appendLimitOffset(\n sql: string,\n dialect: SqlDialect,\n params: ParamStore,\n takeVal: IntOrDynamic | undefined,\n skipVal: IntOrDynamic | undefined,\n scope: string,\n): string {\n const hasTake = isNotNullish(takeVal)\n const hasSkip = isNotNullish(skipVal)\n\n if (dialect === 'sqlite' && !hasTake && hasSkip) {\n const skipPh = addAutoScoped(params, skipVal, `${scope}.skip`)\n return `${sql} ${SQL_TEMPLATES.LIMIT} -1 ${SQL_TEMPLATES.OFFSET} ${skipPh}`\n }\n\n if (hasTake) {\n const takePh = addAutoScoped(params, takeVal, `${scope}.take`)\n sql = `${sql} ${SQL_TEMPLATES.LIMIT} ${takePh}`\n }\n\n if (hasSkip) {\n const skipPh = addAutoScoped(params, skipVal, `${scope}.skip`)\n sql = `${sql} ${SQL_TEMPLATES.OFFSET} ${skipPh}`\n }\n\n return sql\n}\n\nfunction readWhereInput(relArgs: unknown): Record<string, unknown> {\n if (!isPlainObject(relArgs)) return {}\n if (!hasProperty(relArgs, 'where')) return {}\n const w = (relArgs as Record<string, unknown>).where\n return isPlainObject(w) ? w : {}\n}\n\nfunction readOrderByInput(relArgs: unknown): {\n hasOrderBy: boolean\n orderBy: OrderByInput\n} {\n if (!isPlainObject(relArgs)) return { hasOrderBy: false, orderBy: undefined }\n if (!('orderBy' in relArgs)) return { hasOrderBy: false, orderBy: undefined }\n return {\n hasOrderBy: true,\n orderBy: (relArgs as Record<string, unknown>).orderBy,\n }\n}\n\nfunction extractRelationPaginationConfig(relArgs: unknown): {\n hasOrderBy: boolean\n orderBy: unknown\n hasSkip: boolean\n hasTake: boolean\n skipVal: OptionalIntOrDynamic\n takeVal: OptionalIntOrDynamic\n} {\n const { hasOrderBy, orderBy: rawOrderByInput } = readOrderByInput(relArgs)\n const {\n hasSkip,\n hasTake,\n skipVal,\n takeVal: rawTakeVal,\n } = readSkipTake(relArgs)\n\n return {\n hasOrderBy,\n orderBy: rawOrderByInput,\n hasSkip,\n hasTake,\n skipVal,\n takeVal: rawTakeVal,\n }\n}\n\nfunction maybeReverseNegativeTake(\n takeVal: OptionalIntOrDynamic,\n hasOrderBy: boolean,\n orderByInput: unknown,\n): { takeVal: OptionalIntOrDynamic; orderByInput: unknown } {\n if (typeof takeVal !== 'number') return { takeVal, orderByInput }\n if (takeVal >= 0) return { takeVal, orderByInput }\n if (!hasOrderBy) {\n throw new Error('Negative take requires orderBy for deterministic results')\n }\n return {\n takeVal: Math.abs(takeVal),\n orderByInput: reverseOrderByInput(orderByInput),\n }\n}\n\nfunction ensureDeterministicOrderByForInclude(args: {\n relModel: Model\n hasOrderBy: boolean\n orderByInput: unknown\n hasPagination: boolean\n}): unknown {\n if (!args.hasPagination) {\n if (args.hasOrderBy && isNotNullish(args.orderByInput)) {\n validateOrderByForModel(args.relModel, args.orderByInput)\n }\n return args.orderByInput\n }\n\n if (!args.hasOrderBy) {\n return ensureDeterministicOrderByInput({\n orderBy: undefined,\n model: args.relModel,\n parseValue: parseOrderByValue,\n })\n }\n\n if (isNotNullish(args.orderByInput)) {\n validateOrderByForModel(args.relModel, args.orderByInput)\n }\n\n return ensureDeterministicOrderByInput({\n orderBy: args.orderByInput,\n model: args.relModel,\n parseValue: parseOrderByValue,\n })\n}\n\nfunction buildSelectWithNestedIncludes(\n relArgs: unknown,\n relModel: Model,\n relAlias: string,\n ctx: IncludeBuildContext,\n): string {\n let relSelect = buildRelationSelect(relArgs, relModel, relAlias)\n\n const nestedIncludes = isPlainObject(relArgs)\n ? buildIncludeSqlInternal(\n relArgs as PrismaQueryArgs,\n relModel,\n ctx.schemas,\n relAlias,\n ctx.aliasGen,\n ctx.params,\n ctx.dialect,\n ctx.visitPath || [],\n (ctx.depth || 0) + 1,\n ctx.stats,\n )\n : []\n\n if (isNonEmptyArray(nestedIncludes)) {\n const emptyJson = ctx.dialect === 'postgres' ? `'[]'::json` : `json('[]')`\n const nestedSelects = nestedIncludes\n .map((inc) =>\n inc.isOneToOne\n ? `${sqlStringLiteral(inc.name)}, (${inc.sql})`\n : `${sqlStringLiteral(inc.name)}, COALESCE((${inc.sql}), ${emptyJson})`,\n )\n .join(SQL_SEPARATORS.FIELD_LIST)\n\n relSelect =\n isNotNullish(relSelect) && relSelect.trim().length > 0\n ? `${relSelect}${SQL_SEPARATORS.FIELD_LIST}${nestedSelects}`\n : nestedSelects\n }\n\n if (!isNotNullish(relSelect) || relSelect.trim().length === 0) {\n throw new Error(\n `Select must include at least one field or nested relation for model ${relModel.name}`,\n )\n }\n\n return relSelect\n}\n\nfunction buildWhereParts(\n whereInput: Record<string, unknown>,\n relModel: Model,\n relAlias: string,\n ctx: IncludeBuildContext,\n): { joins: string; whereClause: string } {\n const whereResult = buildWhereClause(whereInput, {\n alias: relAlias,\n schemaModels: ctx.schemas,\n model: relModel,\n params: ctx.params,\n isSubquery: true,\n aliasGen: ctx.aliasGen,\n dialect: ctx.dialect,\n })\n\n const joins = whereResult.joins.join(' ')\n const whereClause = isValidWhereClause(whereResult.clause)\n ? ` ${SQL_TEMPLATES.AND} ${whereResult.clause}`\n : ''\n\n return { joins, whereClause }\n}\n\nfunction limitOneSql(\n sql: string,\n params: ParamStore,\n skipVal: OptionalIntOrDynamic,\n scope: string,\n): string {\n if (isNotNullish(skipVal)) {\n const skipPh = addAutoScoped(params, skipVal, `${scope}.skip`)\n return `${sql} ${SQL_TEMPLATES.LIMIT} 1 ${SQL_TEMPLATES.OFFSET} ${skipPh}`\n }\n return `${sql} ${SQL_TEMPLATES.LIMIT} 1`\n}\n\nfunction buildOrderBySql(\n finalOrderByInput: unknown,\n relAlias: string,\n dialect: SqlDialect,\n relModel: Model,\n): string {\n return isNotNullish(finalOrderByInput)\n ? buildOrderBy(finalOrderByInput, relAlias, dialect, relModel)\n : ''\n}\n\nfunction buildBaseSql(args: {\n selectExpr: string\n relTable: string\n relAlias: string\n joins: string\n joinPredicate: string\n whereClause: string\n}): string {\n return (\n `${SQL_TEMPLATES.SELECT} ${args.selectExpr} ` +\n `${SQL_TEMPLATES.FROM} ${args.relTable} ${args.relAlias} ${args.joins} ` +\n `${SQL_TEMPLATES.WHERE} ${args.joinPredicate}${args.whereClause}`\n )\n}\n\nfunction buildOneToOneIncludeSql(args: {\n relName: string\n relTable: string\n relAlias: string\n joins: string\n joinPredicate: string\n whereClause: string\n orderBySql: string\n relSelect: string\n takeVal: OptionalIntOrDynamic\n skipVal: OptionalIntOrDynamic\n ctx: IncludeBuildContext\n}): string {\n const objExpr = jsonBuildObject(args.relSelect, args.ctx.dialect)\n\n let sql = buildBaseSql({\n selectExpr: objExpr,\n relTable: args.relTable,\n relAlias: args.relAlias,\n joins: args.joins,\n joinPredicate: args.joinPredicate,\n whereClause: args.whereClause,\n })\n\n if (args.orderBySql) {\n sql += ` ${SQL_TEMPLATES.ORDER_BY} ${args.orderBySql}`\n }\n\n if (isNotNullish(args.takeVal)) {\n return appendLimitOffset(\n sql,\n args.ctx.dialect,\n args.ctx.params,\n args.takeVal,\n args.skipVal,\n `include.${args.relName}`,\n )\n }\n\n return limitOneSql(\n sql,\n args.ctx.params,\n args.skipVal,\n `include.${args.relName}`,\n )\n}\n\nfunction buildListIncludeSpec(args: {\n relName: string\n relTable: string\n relAlias: string\n joins: string\n joinPredicate: string\n whereClause: string\n orderBySql: string\n relSelect: string\n takeVal: OptionalIntOrDynamic\n skipVal: OptionalIntOrDynamic\n ctx: IncludeBuildContext\n}): IncludeSpec {\n const rowExpr = jsonBuildObject(args.relSelect, args.ctx.dialect)\n const noTake = !isNotNullish(args.takeVal)\n const noSkip = !isNotNullish(args.skipVal)\n\n if (args.ctx.dialect === 'postgres' && noTake && noSkip) {\n const selectExpr = args.orderBySql\n ? `json_agg(${rowExpr} ORDER BY ${args.orderBySql})`\n : `json_agg(${rowExpr})`\n\n const sql = buildBaseSql({\n selectExpr,\n relTable: args.relTable,\n relAlias: args.relAlias,\n joins: args.joins,\n joinPredicate: args.joinPredicate,\n whereClause: args.whereClause,\n })\n\n return Object.freeze({\n name: args.relName,\n sql,\n isOneToOne: false,\n })\n }\n\n const rowAlias = args.ctx.aliasGen.next(`${args.relName}_row`)\n\n let base = buildBaseSql({\n selectExpr: `${rowExpr} ${SQL_TEMPLATES.AS} row`,\n relTable: args.relTable,\n relAlias: args.relAlias,\n joins: args.joins,\n joinPredicate: args.joinPredicate,\n whereClause: args.whereClause,\n })\n\n if (args.orderBySql) {\n base += ` ${SQL_TEMPLATES.ORDER_BY} ${args.orderBySql}`\n }\n\n base = appendLimitOffset(\n base,\n args.ctx.dialect,\n args.ctx.params,\n args.takeVal,\n args.skipVal,\n `include.${args.relName}`,\n )\n\n const selectExpr = jsonAgg('row', args.ctx.dialect)\n const sql = `${SQL_TEMPLATES.SELECT} ${selectExpr} ${SQL_TEMPLATES.FROM} (${base}) ${rowAlias}`\n\n return Object.freeze({\n name: args.relName,\n sql,\n isOneToOne: false,\n })\n}\n\nfunction buildSingleInclude(\n relName: string,\n relArgs: unknown,\n field: Field,\n relModel: Model,\n ctx: IncludeBuildContext,\n): IncludeSpec {\n const relTable = getRelationTableReference(relModel, ctx.dialect)\n\n const relAlias = ctx.aliasGen.next(relName)\n const isList = typeof field.type === 'string' && field.type.endsWith('[]')\n const joinPredicate = joinCondition(\n field,\n ctx.model,\n relModel,\n ctx.parentAlias,\n relAlias,\n )\n\n const whereInput = readWhereInput(relArgs)\n const relSelect = buildSelectWithNestedIncludes(\n relArgs,\n relModel,\n relAlias,\n ctx,\n )\n const whereParts = buildWhereParts(whereInput, relModel, relAlias, ctx)\n\n const paginationConfig = extractRelationPaginationConfig(relArgs)\n\n if (\n !isList &&\n typeof paginationConfig.takeVal === 'number' &&\n paginationConfig.takeVal < 0\n ) {\n throw new Error('Negative take is only supported for list relations')\n }\n\n const adjusted = maybeReverseNegativeTake(\n paginationConfig.takeVal,\n paginationConfig.hasOrderBy,\n paginationConfig.orderBy,\n )\n const hasPagination = paginationConfig.hasSkip || paginationConfig.hasTake\n const finalOrderByInput = ensureDeterministicOrderByForInclude({\n relModel,\n hasOrderBy: paginationConfig.hasOrderBy,\n orderByInput: adjusted.orderByInput,\n hasPagination,\n })\n\n const orderBySql = buildOrderBySql(\n finalOrderByInput,\n relAlias,\n ctx.dialect,\n relModel,\n )\n\n if (!isList) {\n const sql = buildOneToOneIncludeSql({\n relName,\n relTable,\n relAlias,\n joins: whereParts.joins,\n joinPredicate,\n whereClause: whereParts.whereClause,\n orderBySql,\n relSelect,\n takeVal: adjusted.takeVal,\n skipVal: paginationConfig.skipVal,\n ctx,\n })\n\n return Object.freeze({\n name: relName,\n sql,\n isOneToOne: true,\n })\n }\n\n return buildListIncludeSpec({\n relName,\n relTable,\n relAlias,\n joins: whereParts.joins,\n joinPredicate,\n whereClause: whereParts.whereClause,\n orderBySql,\n relSelect,\n takeVal: adjusted.takeVal,\n skipVal: paginationConfig.skipVal,\n ctx,\n })\n}\n\nfunction buildIncludeSqlInternal(\n args: IncludeSelectArgs,\n model: Model,\n schemas: Model[],\n parentAlias: string,\n aliasGen: AliasGenerator,\n params: ParamStore,\n dialect: SqlDialect,\n visitPath: string[] = [],\n depth: number = 0,\n stats?: IncludeComplexityStats,\n): IncludeSpec[] {\n if (!stats) {\n stats = { totalIncludes: 0, totalSubqueries: 0, maxDepth: 0 }\n }\n\n if (depth > MAX_INCLUDE_DEPTH) {\n throw new Error(\n `Maximum include depth of ${MAX_INCLUDE_DEPTH} exceeded. ` +\n `Path: ${visitPath.join(' -> ')}. ` +\n `Deep includes cause exponential SQL complexity and performance issues.`,\n )\n }\n\n stats.maxDepth = Math.max(stats.maxDepth, depth)\n\n const includes: IncludeSpec[] = []\n const entries = relationEntriesFromArgs(args, model)\n\n for (const [relName, relArgs] of entries) {\n if (relArgs === false) continue\n\n stats.totalIncludes++\n if (stats.totalIncludes > MAX_TOTAL_INCLUDES) {\n throw new Error(\n `Maximum total includes (${MAX_TOTAL_INCLUDES}) exceeded. ` +\n `Current: ${stats.totalIncludes} includes. ` +\n `Query has ${stats.maxDepth} levels deep. ` +\n `Simplify your query structure or use multiple queries.`,\n )\n }\n\n stats.totalSubqueries++\n if (stats.totalSubqueries > MAX_TOTAL_SUBQUERIES) {\n throw new Error(\n `Query complexity limit exceeded: ${stats.totalSubqueries} subqueries generated. ` +\n `Maximum allowed: ${MAX_TOTAL_SUBQUERIES}. ` +\n `This indicates exponential include nesting. ` +\n `Stats: depth=${stats.maxDepth}, includes=${stats.totalIncludes}. ` +\n `Path: ${visitPath.join(' -> ')}. ` +\n `Simplify your include structure or split into multiple queries.`,\n )\n }\n\n const resolved = resolveRelationOrThrow(model, schemas, relName)\n\n const relationPath = `${model.name}.${relName}`\n const currentPath = [...visitPath, relationPath]\n\n if (visitPath.includes(relationPath)) {\n throw new Error(\n `Circular include detected: ${currentPath.join(' -> ')}. ` +\n `Relation '${relationPath}' creates an infinite loop.`,\n )\n }\n\n const modelOccurrences = currentPath.filter((p) =>\n p.startsWith(`${resolved.relModel.name}.`),\n ).length\n\n if (modelOccurrences > 2) {\n throw new Error(\n `Include too deeply nested: model '${resolved.relModel.name}' ` +\n `appears ${modelOccurrences} times in path: ${currentPath.join(' -> ')}`,\n )\n }\n\n const include = buildSingleInclude(\n relName,\n relArgs,\n resolved.field,\n resolved.relModel,\n {\n model,\n schemas,\n parentAlias,\n aliasGen,\n dialect,\n params,\n visitPath: currentPath,\n depth: depth + 1,\n stats,\n },\n )\n\n includes.push(include)\n }\n\n return includes\n}\n\nexport function buildIncludeSql(\n args: PrismaQueryArgs,\n model: Model,\n schemas: Model[],\n parentAlias: string,\n params: ParamStore,\n dialect: SqlDialect,\n): IncludeSpec[] {\n const aliasGen = createAliasGenerator()\n const stats: IncludeComplexityStats = {\n totalIncludes: 0,\n totalSubqueries: 0,\n maxDepth: 0,\n }\n\n return buildIncludeSqlInternal(\n args,\n model,\n schemas,\n parentAlias,\n aliasGen,\n params,\n dialect,\n [],\n 0,\n stats,\n )\n}\n\ninterface RelationCountBuild {\n joins: string[]\n jsonPairs: string\n}\n\nfunction resolveCountRelationOrThrow(\n relName: string,\n model: Model,\n schemas: readonly Model[],\n): { field: Field; relModel: Model } {\n const relationSet = getRelationFieldSet(model)\n if (!relationSet.has(relName)) {\n throw new Error(\n `_count.${relName} references unknown relation on model ${model.name}`,\n )\n }\n\n const field = model.fields.find((f) => f.name === relName)\n if (!field) {\n throw new Error(\n `_count.${relName} references unknown relation on model ${model.name}`,\n )\n }\n\n if (!isValidRelationField(field)) {\n throw new Error(\n `_count.${relName} has invalid relation metadata on model ${model.name}`,\n )\n }\n\n const relModel = schemas.find((m) => m.name === field.relatedModel)\n if (!relModel) {\n throw new Error(\n `Related model '${field.relatedModel}' not found for _count.${relName}`,\n )\n }\n\n return { field, relModel }\n}\n\nfunction defaultReferencesForCount(fkCount: number): string[] {\n if (fkCount === 1) return ['id']\n throw new Error(\n 'Relation count for composite keys requires explicit references matching foreignKey length',\n )\n}\n\nfunction resolveCountKeyPairs(field: Field): {\n relKeyFields: string[]\n parentKeyFields: string[]\n} {\n const fkFields = normalizeKeyList((field as any).foreignKey)\n if (fkFields.length === 0) {\n throw new Error('Relation count requires foreignKey')\n }\n\n const refsRaw = (field as any).references\n const refs = normalizeKeyList(refsRaw)\n const refFields =\n refs.length > 0 ? refs : defaultReferencesForCount(fkFields.length)\n\n if (refFields.length !== fkFields.length) {\n throw new Error(\n 'Relation count requires references count to match foreignKey count',\n )\n }\n\n const relKeyFields = field.isForeignKeyLocal ? refFields : fkFields\n const parentKeyFields = field.isForeignKeyLocal ? fkFields : refFields\n\n return { relKeyFields, parentKeyFields }\n}\n\nfunction aliasQualifiedColumn(\n alias: string,\n model: Model,\n field: string,\n): string {\n return `${alias}.${quoteColumn(model, field)}`\n}\n\nfunction subqueryForCount(args: {\n dialect: SqlDialect\n relTable: string\n countAlias: string\n relModel: Model\n relKeyFields: string[]\n}): string {\n const selectKeys = args.relKeyFields\n .map(\n (f, i) =>\n `${aliasQualifiedColumn(args.countAlias, args.relModel, f)} AS \"__fk${i}\"`,\n )\n .join(SQL_SEPARATORS.FIELD_LIST)\n\n const groupByKeys = args.relKeyFields\n .map((f) => aliasQualifiedColumn(args.countAlias, args.relModel, f))\n .join(SQL_SEPARATORS.FIELD_LIST)\n\n const cntExpr =\n args.dialect === 'postgres' ? 'COUNT(*)::int AS __cnt' : 'COUNT(*) AS __cnt'\n\n return `(SELECT ${selectKeys}${SQL_SEPARATORS.FIELD_LIST}${cntExpr} FROM ${args.relTable} ${args.countAlias} GROUP BY ${groupByKeys})`\n}\n\nfunction leftJoinOnForCount(args: {\n joinAlias: string\n parentAlias: string\n parentModel: Model\n parentKeyFields: string[]\n}): string {\n const parts = args.parentKeyFields.map(\n (f, i) =>\n `${args.joinAlias}.\"__fk${i}\" = ${aliasQualifiedColumn(args.parentAlias, args.parentModel, f)}`,\n )\n return parts.length === 1 ? parts[0] : `(${parts.join(' AND ')})`\n}\n\nfunction nextAliasAvoiding(\n aliasGen: ReturnType<typeof createAliasGenerator>,\n base: string,\n forbidden: Set<string>,\n): string {\n let a = aliasGen.next(base)\n while (forbidden.has(a)) {\n a = aliasGen.next(base)\n }\n return a\n}\n\nfunction buildCountJoinAndPair(args: {\n relName: string\n field: Field\n relModel: Model\n parentModel: Model\n parentAlias: string\n dialect: SqlDialect\n aliasGen: ReturnType<typeof createAliasGenerator>\n}): { joinSql: string; pairSql: string } {\n const relTable = getRelationTableReference(args.relModel, args.dialect)\n\n const { relKeyFields, parentKeyFields } = resolveCountKeyPairs(args.field)\n\n const forbidden = new Set<string>([args.parentAlias])\n\n const countAlias = nextAliasAvoiding(\n args.aliasGen,\n `__tp_cnt_${args.relName}`,\n forbidden,\n )\n forbidden.add(countAlias)\n\n const subquery = subqueryForCount({\n dialect: args.dialect,\n relTable,\n countAlias,\n relModel: args.relModel,\n relKeyFields,\n })\n\n const joinAlias = nextAliasAvoiding(\n args.aliasGen,\n `__tp_cnt_j_${args.relName}`,\n forbidden,\n )\n\n const leftJoinOn = leftJoinOnForCount({\n joinAlias,\n parentAlias: args.parentAlias,\n parentModel: args.parentModel,\n parentKeyFields,\n })\n\n return {\n joinSql: `LEFT JOIN ${subquery} ${joinAlias} ON ${leftJoinOn}`,\n pairSql: `${sqlStringLiteral(args.relName)}, COALESCE(${joinAlias}.__cnt, 0)`,\n }\n}\n\nexport function buildRelationCountSql(\n countSelect: Record<string, boolean>,\n model: Model,\n schemas: readonly Model[],\n parentAlias: string,\n _params: ParamStore,\n dialect: SqlDialect,\n): RelationCountBuild {\n const joins: string[] = []\n const pairs: string[] = []\n const aliasGen = createAliasGenerator()\n\n for (const [relName, shouldCount] of Object.entries(countSelect)) {\n if (!shouldCount) continue\n\n const resolved = resolveCountRelationOrThrow(relName, model, schemas)\n const built = buildCountJoinAndPair({\n relName,\n field: resolved.field,\n relModel: resolved.relModel,\n parentModel: model,\n parentAlias,\n dialect,\n aliasGen,\n })\n\n joins.push(built.joinSql)\n pairs.push(built.pairSql)\n }\n\n return {\n joins,\n jsonPairs: pairs.join(SQL_SEPARATORS.FIELD_LIST),\n }\n}\n","import { isDynamicParameter } from '@dee-wan/schema-parser'\nimport { SQL_TEMPLATES, SQL_SEPARATORS } from '../shared/constants'\nimport { col, quote } from '../shared/sql-utils'\nimport { SelectQuerySpec, SqlResult } from '../shared/types'\nimport {\n validateSelectQuery,\n validateParamConsistencyByDialect,\n} from '../shared/validators/sql-validators'\nimport {\n isNotNullish,\n isNonEmptyArray,\n isNonEmptyString,\n isPlainObject,\n} from '../shared/validators/type-guards'\nimport { addAutoScoped } from '../shared/dynamic-params'\nimport { jsonBuildObject } from '../../sql-builder-dialect'\nimport { buildRelationCountSql } from './includes'\n\nconst ALIAS_CAPTURE = '([A-Za-z_][A-Za-z0-9_]*)'\nconst COLUMN_PART = '(?:\"([^\"]+)\"|([a-z_][a-z0-9_]*))'\nconst AS_PART = `(?:\\\\s+AS\\\\s+${COLUMN_PART})?`\nconst SIMPLE_COLUMN_PATTERN = `^${ALIAS_CAPTURE}\\\\.${COLUMN_PART}${AS_PART}$`\nconst SIMPLE_COLUMN_RE = new RegExp(SIMPLE_COLUMN_PATTERN, 'i')\n\nfunction joinNonEmpty(parts: string[], sep: string): string {\n return parts.filter((s) => s.trim().length > 0).join(sep)\n}\n\nfunction buildWhereSql(conditions: readonly string[]): string {\n if (!isNonEmptyArray(conditions)) return ''\n const parts = [\n SQL_TEMPLATES.WHERE,\n conditions.join(SQL_SEPARATORS.CONDITION_AND),\n ]\n return ` ${parts.join(' ')}`\n}\n\nfunction buildJoinsSql(\n ...joinGroups: Array<readonly string[] | undefined>\n): string {\n const all: string[] = []\n for (const g of joinGroups) {\n if (isNonEmptyArray(g)) all.push(...g)\n }\n return all.length > 0 ? ` ${all.join(' ')}` : ''\n}\n\nfunction buildSelectList(baseSelect: string, extraCols: string): string {\n const base = baseSelect.trim()\n const extra = extraCols.trim()\n if (base && extra) return `${base}${SQL_SEPARATORS.FIELD_LIST}${extra}`\n return base || extra\n}\n\nfunction finalizeSql(\n sql: string,\n params: SelectQuerySpec['params'],\n dialect: SelectQuerySpec['dialect'],\n): SqlResult {\n const snapshot = params.snapshot()\n validateSelectQuery(sql)\n validateParamConsistencyByDialect(sql, snapshot.params, dialect)\n return Object.freeze({\n sql,\n params: snapshot.params,\n paramMappings: Object.freeze(snapshot.mappings),\n })\n}\n\nfunction parseSimpleScalarSelect(select: string, fromAlias: string): string[] {\n const raw = select.trim()\n if (raw.length === 0) return []\n\n const parts = raw.split(SQL_SEPARATORS.FIELD_LIST)\n const names: string[] = []\n\n for (const part of parts) {\n const p = part.trim()\n const m = p.match(SIMPLE_COLUMN_RE)\n\n if (!m) {\n throw new Error(\n `sqlite distinct emulation requires scalar select fields to be simple columns (optionally with AS). Got: ${p}`,\n )\n }\n\n const actualAlias = m[1]\n if (actualAlias.toLowerCase() !== fromAlias.toLowerCase()) {\n throw new Error(\n `Expected alias '${fromAlias}', got '${actualAlias}' in: ${p}`,\n )\n }\n\n const columnName = (m[2] ?? m[3] ?? '').trim()\n const outAlias = (m[4] ?? m[5] ?? '').trim()\n const name = outAlias.length > 0 ? outAlias : columnName\n\n if (name.length === 0) {\n throw new Error(`Failed to parse selected column name from: ${p}`)\n }\n\n names.push(name)\n }\n\n return names\n}\n\nfunction replaceOrderByAlias(\n orderBy: string,\n fromAlias: string,\n outerAlias: string,\n): string {\n const src = String(fromAlias)\n if (src.length === 0) return orderBy\n\n const escaped = src.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n const re = new RegExp(`\\\\b${escaped}\\\\.`, 'gi')\n return orderBy.replace(re, `${outerAlias}.`)\n}\n\nfunction buildDistinctColumns(\n distinct: readonly string[],\n fromAlias: string,\n model?: any,\n): string {\n return distinct\n .map((f) => col(fromAlias, f, model))\n .join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nfunction buildOutputColumns(\n scalarNames: string[],\n includeNames: string[],\n hasCount: boolean,\n): string {\n const outputCols = [...scalarNames, ...includeNames]\n if (hasCount) outputCols.push('_count')\n const formatted = outputCols\n .map((n) => quote(n))\n .join(SQL_SEPARATORS.FIELD_LIST)\n if (!isNonEmptyString(formatted)) {\n throw new Error('distinct emulation requires at least one output column')\n }\n return formatted\n}\n\nfunction buildWindowOrder(args: {\n baseOrder: string\n idField: any\n fromAlias: string\n model?: any\n}): string {\n const { baseOrder, idField, fromAlias, model } = args\n const fromLower = String(fromAlias).toLowerCase()\n\n const orderFields = baseOrder\n .split(SQL_SEPARATORS.ORDER_BY)\n .map((s) => s.trim().toLowerCase())\n\n const hasIdInOrder = orderFields.some(\n (f) =>\n f.startsWith(`${fromLower}.id `) || f.startsWith(`${fromLower}.\"id\" `),\n )\n\n if (hasIdInOrder) return baseOrder\n\n const idTiebreaker = idField ? `, ${col(fromAlias, 'id', model)} ASC` : ''\n return `${baseOrder}${idTiebreaker}`\n}\n\nfunction buildSqliteDistinctQuery(\n spec: SelectQuerySpec,\n selectWithIncludes: string,\n countJoins?: string[],\n): string {\n const { includes, from, whereClause, whereJoins, orderBy, distinct, model } =\n spec\n if (!isNotNullish(distinct) || !isNonEmptyArray(distinct)) {\n throw new Error('buildSqliteDistinctQuery requires distinct fields')\n }\n const scalarNames = parseSimpleScalarSelect(spec.select, from.alias)\n const includeNames = includes.map((i) => i.name)\n const hasCount = Boolean(spec.args?.select?._count)\n const outerSelectCols = buildOutputColumns(\n scalarNames,\n includeNames,\n hasCount,\n )\n const distinctCols = buildDistinctColumns([...distinct], from.alias, model)\n const fallbackOrder = [...distinct]\n .map((f) => `${col(from.alias, f, model)} ASC`)\n .join(SQL_SEPARATORS.FIELD_LIST)\n const idField = model.fields.find(\n (f: any) => f.name === 'id' && !f.isRelation,\n )\n const baseOrder = isNonEmptyString(orderBy) ? orderBy : fallbackOrder\n const windowOrder = buildWindowOrder({\n baseOrder,\n idField,\n fromAlias: from.alias,\n model,\n })\n const outerOrder = isNonEmptyString(orderBy)\n ? replaceOrderByAlias(orderBy, from.alias, `\"__tp_distinct\"`)\n : replaceOrderByAlias(fallbackOrder, from.alias, `\"__tp_distinct\"`)\n const joins = buildJoinsSql(whereJoins, countJoins)\n const conditions: string[] = []\n if (whereClause && whereClause !== '1=1') conditions.push(whereClause)\n const whereSql = buildWhereSql(conditions)\n const innerSelectList = selectWithIncludes.trim()\n const innerComma = innerSelectList.length > 0 ? SQL_SEPARATORS.FIELD_LIST : ''\n\n const innerParts = [\n SQL_TEMPLATES.SELECT,\n innerSelectList + innerComma,\n `ROW_NUMBER() OVER (PARTITION BY ${distinctCols} ORDER BY ${windowOrder})`,\n SQL_TEMPLATES.AS,\n '\"__tp_rn\"',\n SQL_TEMPLATES.FROM,\n from.table,\n from.alias,\n ]\n if (joins) innerParts.push(joins)\n if (whereSql) innerParts.push(whereSql)\n const inner = innerParts.filter(Boolean).join(' ')\n\n const outerParts = [\n SQL_TEMPLATES.SELECT,\n outerSelectCols,\n SQL_TEMPLATES.FROM,\n `(${inner})`,\n SQL_TEMPLATES.AS,\n '\"__tp_distinct\"',\n SQL_TEMPLATES.WHERE,\n '\"__tp_rn\" = 1',\n ]\n if (isNonEmptyString(outerOrder)) {\n outerParts.push(SQL_TEMPLATES.ORDER_BY, outerOrder)\n }\n return outerParts.filter(Boolean).join(' ')\n}\n\nfunction buildIncludeColumns(spec: SelectQuerySpec): {\n includeCols: string\n selectWithIncludes: string\n countJoins: string[]\n} {\n const { select, includes, dialect, model, schemas, from, params } = spec\n const baseSelect = (select ?? '').trim()\n let countCols = ''\n let countJoins: string[] = []\n const countSelect = spec.args?.select?._count\n if (countSelect) {\n if (isPlainObject(countSelect) && 'select' in countSelect) {\n const countBuild = buildRelationCountSql(\n (countSelect as any).select,\n model,\n schemas,\n from.alias,\n params,\n dialect,\n )\n if (countBuild.jsonPairs) {\n countCols = `${jsonBuildObject(countBuild.jsonPairs, dialect)} ${SQL_TEMPLATES.AS} ${quote('_count')}`\n }\n countJoins = countBuild.joins\n }\n }\n const hasIncludes = isNonEmptyArray(includes)\n const hasCountCols = isNonEmptyString(countCols)\n if (!hasIncludes && !hasCountCols) {\n return { includeCols: '', selectWithIncludes: baseSelect, countJoins: [] }\n }\n const emptyJson = dialect === 'postgres' ? `'[]'::json` : `json('[]')`\n const includeCols = hasIncludes\n ? includes\n .map((inc) => {\n const expr = inc.isOneToOne\n ? `(${inc.sql})`\n : `COALESCE((${inc.sql}), ${emptyJson})`\n return `${expr} ${SQL_TEMPLATES.AS} ${quote(inc.name)}`\n })\n .join(SQL_SEPARATORS.FIELD_LIST)\n : ''\n const allCols = joinNonEmpty(\n [includeCols, countCols],\n SQL_SEPARATORS.FIELD_LIST,\n )\n const selectWithIncludes = buildSelectList(baseSelect, allCols)\n return { includeCols: allCols, selectWithIncludes, countJoins }\n}\n\nfunction appendPagination(sql: string, spec: SelectQuerySpec): string {\n const { method, pagination, params } = spec\n const isFindUniqueOrFirst = method === 'findUnique' || method === 'findFirst'\n if (isFindUniqueOrFirst) {\n const parts: string[] = [sql, SQL_TEMPLATES.LIMIT, '1']\n const hasSkip =\n isNotNullish(pagination.skip) &&\n (isDynamicParameter(pagination.skip) ||\n (typeof pagination.skip === 'number' && pagination.skip > 0)) &&\n method === 'findFirst'\n if (hasSkip) {\n const placeholder = addAutoScoped(\n params,\n pagination.skip,\n 'root.pagination.skip',\n )\n parts.push(SQL_TEMPLATES.OFFSET, placeholder)\n }\n return parts.join(' ')\n }\n const parts: string[] = [sql]\n if (isNotNullish(pagination.take)) {\n const placeholder = addAutoScoped(\n params,\n pagination.take,\n 'root.pagination.take',\n )\n parts.push(SQL_TEMPLATES.LIMIT, placeholder)\n }\n if (isNotNullish(pagination.skip)) {\n const placeholder = addAutoScoped(\n params,\n pagination.skip,\n 'root.pagination.skip',\n )\n parts.push(SQL_TEMPLATES.OFFSET, placeholder)\n }\n return parts.join(' ')\n}\n\nfunction hasWindowDistinct(spec: SelectQuerySpec): boolean {\n const d = spec.distinct\n return isNotNullish(d) && isNonEmptyArray(d)\n}\n\nfunction assertDistinctAllowed(\n method: SelectQuerySpec['method'],\n enabled: boolean,\n): void {\n if (enabled && method !== 'findMany') {\n throw new Error(\n 'distinct is only supported for findMany in this SQL builder',\n )\n }\n}\n\nfunction assertHasSelectFields(baseSelect: string, includeCols: string): void {\n if (!isNonEmptyString(baseSelect) && !isNonEmptyString(includeCols)) {\n throw new Error('SELECT requires at least one selected field or include')\n }\n}\n\nfunction withCountJoins(\n spec: SelectQuerySpec,\n countJoins: string[],\n whereJoins?: readonly string[],\n): SelectQuerySpec {\n return {\n ...spec,\n whereJoins: [...(whereJoins || []), ...(countJoins || [])],\n }\n}\n\nfunction buildPostgresDistinctOnClause(\n fromAlias: string,\n distinct?: readonly string[],\n model?: any,\n): string | null {\n if (!isNonEmptyArray(distinct)) return null\n const distinctCols = buildDistinctColumns([...distinct], fromAlias, model)\n return `${SQL_TEMPLATES.DISTINCT_ON} (${distinctCols})`\n}\n\nfunction pushJoinGroups(\n parts: string[],\n ...groups: Array<readonly string[] | undefined>\n): void {\n for (const g of groups) {\n if (isNonEmptyArray(g)) parts.push(g.join(' '))\n }\n}\n\nfunction buildConditions(\n whereClause?: string,\n cursorClause?: string,\n): string[] {\n const conditions: string[] = []\n if (whereClause && whereClause !== '1=1') conditions.push(whereClause)\n if (isNotNullish(cursorClause) && isNonEmptyString(cursorClause))\n conditions.push(cursorClause)\n return conditions\n}\n\nfunction pushWhere(parts: string[], conditions: string[]): void {\n if (!isNonEmptyArray(conditions)) return\n parts.push(SQL_TEMPLATES.WHERE, conditions.join(SQL_SEPARATORS.CONDITION_AND))\n}\n\nexport function constructFinalSql(spec: SelectQuerySpec): SqlResult {\n const {\n select,\n from,\n whereClause,\n whereJoins,\n orderBy,\n distinct,\n method,\n cursorCte,\n cursorClause,\n params,\n dialect,\n model,\n } = spec\n const useWindowDistinct = hasWindowDistinct(spec)\n assertDistinctAllowed(method, useWindowDistinct)\n const { includeCols, selectWithIncludes, countJoins } =\n buildIncludeColumns(spec)\n if (useWindowDistinct) {\n const baseSelect = (select ?? '').trim()\n assertHasSelectFields(baseSelect, includeCols)\n const spec2 = withCountJoins(spec, countJoins, whereJoins)\n let sql = buildSqliteDistinctQuery(spec2, selectWithIncludes).trim()\n sql = appendPagination(sql, spec)\n return finalizeSql(sql, params, dialect)\n }\n const parts: string[] = []\n if (cursorCte) {\n parts.push(`WITH ${cursorCte}`)\n }\n parts.push(SQL_TEMPLATES.SELECT)\n const distinctOn =\n dialect === 'postgres'\n ? buildPostgresDistinctOnClause(from.alias, distinct, model)\n : null\n if (distinctOn) parts.push(distinctOn)\n const baseSelect = (select ?? '').trim()\n const fullSelectList = buildSelectList(baseSelect, includeCols)\n if (!isNonEmptyString(fullSelectList)) {\n throw new Error('SELECT requires at least one selected field or include')\n }\n parts.push(fullSelectList)\n parts.push(SQL_TEMPLATES.FROM, from.table, from.alias)\n pushJoinGroups(parts, whereJoins, countJoins)\n const conditions = buildConditions(whereClause, cursorClause)\n pushWhere(parts, conditions)\n if (isNonEmptyString(orderBy)) parts.push(SQL_TEMPLATES.ORDER_BY, orderBy)\n let sql = parts.join(' ').trim()\n sql = appendPagination(sql, spec)\n return finalizeSql(sql, params, dialect)\n}\n","import { Model } from '../../../types'\nimport { createError } from '../errors'\nimport { getFieldInfo } from '../model-field-cache'\n\nconst NUMERIC_TYPES = new Set(['Int', 'Float', 'Decimal', 'BigInt'])\n\nexport interface FieldInfo {\n name: string\n type: string\n dbName: string\n isRelation: boolean\n isRequired: boolean\n}\n\nexport function assertScalarField(\n model: Model,\n fieldName: string,\n context: string,\n): FieldInfo {\n const field = getFieldInfo(model, fieldName)\n\n if (!field) {\n throw createError(\n `${context} references unknown field '${fieldName}' on model ${model.name}`,\n {\n field: fieldName,\n modelName: model.name,\n availableFields: model.fields.map((f) => f.name),\n },\n )\n }\n\n if (field.isRelation) {\n throw createError(\n `${context} does not support relation field '${fieldName}'`,\n { field: fieldName, modelName: model.name },\n )\n }\n\n return field\n}\n\nexport function assertNumericField(\n model: Model,\n fieldName: string,\n context: string,\n): FieldInfo {\n const field = assertScalarField(model, fieldName, context)\n\n const baseType = field.type.replace(/\\[\\]|\\?/g, '')\n if (!NUMERIC_TYPES.has(baseType)) {\n throw createError(\n `${context} requires numeric field, got '${field.type}'`,\n { field: fieldName, modelName: model.name },\n )\n }\n\n return field\n}\n\nexport function assertFieldType(\n field: FieldInfo,\n allowedTypes: Set<string>,\n context: string,\n modelName: string,\n): void {\n const baseType = field.type.replace(/\\[\\]|\\?/g, '')\n\n if (!allowedTypes.has(baseType)) {\n throw createError(`${context} does not support type '${field.type}'`, {\n field: field.name,\n modelName,\n })\n }\n}\n\nexport function isNumericType(fieldType: string): boolean {\n const baseType = fieldType.replace(/\\[\\]|\\?/g, '')\n return NUMERIC_TYPES.has(baseType)\n}\n","import { SqlDialect, getGlobalDialect } from '../sql-builder-dialect'\nimport { PrismaQueryArgs, Model } from '../types'\nimport {\n buildOrderByClause,\n getPaginationParams,\n buildCursorCondition,\n parseOrderByValue,\n} from './pagination'\nimport { constructFinalSql } from './select/assembly'\nimport { buildSelectFields } from './select/fields'\nimport { buildIncludeSql } from './select/includes'\nimport {\n reverseOrderByInput,\n normalizeOrderByInput as normalizeOrderByShared,\n} from './shared/order-by-utils'\nimport { createParamStoreFrom } from './shared/param-store'\nimport { assertSafeAlias, assertSafeTableRef } from './shared/sql-utils'\nimport { WhereClauseResult, SqlResult, SelectQuerySpec } from './shared/types'\nimport {\n isNotNullish,\n isNonEmptyArray,\n isPlainObject,\n} from './shared/validators/type-guards'\nimport { assertScalarField } from './shared/validators/field-assertions'\n\ntype OrderByValue =\n | 'asc'\n | 'desc'\n | { sort: 'asc' | 'desc'; nulls?: 'first' | 'last' }\n\ntype OrderByItem = Record<string, OrderByValue>\n\nfunction normalizeOrderByInput(\n orderBy: PrismaQueryArgs['orderBy'],\n): OrderByItem[] {\n return normalizeOrderByShared(orderBy, parseOrderByValue)\n}\n\nfunction normalizeDistinctFields(\n distinct: PrismaQueryArgs['distinct'],\n): string[] {\n if (!isNonEmptyArray(distinct)) return []\n return distinct\n .filter((f) => typeof f === 'string')\n .map((f) => f.trim())\n .filter((f) => f.length > 0)\n}\n\nfunction mapFirstOrderByByField(\n existing: OrderByItem[],\n): Map<string, OrderByItem> {\n const m = new Map<string, OrderByItem>()\n for (const obj of existing) {\n const field = Object.keys(obj)[0]\n if (field && !m.has(field)) m.set(field, obj)\n }\n return m\n}\n\nfunction buildPostgresDistinctOrderBy(\n distinctFields: string[],\n existing: OrderByItem[],\n): OrderByItem[] {\n const firstByField = mapFirstOrderByByField(existing)\n\n const next: OrderByItem[] = []\n for (const f of distinctFields) {\n next.push(firstByField.get(f) ?? { [f]: 'asc' })\n }\n\n const distinctSet = new Set(distinctFields)\n for (const obj of existing) {\n const field = Object.keys(obj)[0]\n if (!distinctSet.has(field)) next.push(obj)\n }\n\n return next\n}\n\nfunction applyPostgresDistinctOrderBy(args: PrismaQueryArgs): PrismaQueryArgs {\n const distinctFields = normalizeDistinctFields(args.distinct)\n if (distinctFields.length === 0) return args\n if (!isNotNullish(args.orderBy)) return args\n\n const existing = normalizeOrderByInput(args.orderBy)\n if (existing.length === 0) return args\n\n return {\n ...args,\n orderBy: buildPostgresDistinctOrderBy(distinctFields, existing),\n }\n}\n\nfunction validateDistinct(\n model: Model,\n distinct: PrismaQueryArgs['distinct'],\n): void {\n if (!isNotNullish(distinct) || !isNonEmptyArray(distinct)) return\n const seen = new Set<string>()\n for (const raw of distinct) {\n const f = String(raw).trim()\n if (f.length === 0) continue\n if (seen.has(f)) {\n throw new Error(`distinct must not contain duplicates (field: '${f}')`)\n }\n seen.add(f)\n assertScalarField(model, f, 'distinct')\n }\n}\n\nfunction validateOrderBy(\n model: Model,\n orderBy: PrismaQueryArgs['orderBy'],\n): void {\n if (!isNotNullish(orderBy)) return\n\n const items = normalizeOrderByInput(orderBy)\n if (items.length === 0) return\n\n for (const it of items) {\n const entries = Object.entries(it)\n if (entries.length !== 1) {\n throw new Error('orderBy array entries must have exactly one field')\n }\n const fieldName = String(entries[0][0]).trim()\n if (fieldName.length === 0) {\n throw new Error('orderBy field name cannot be empty')\n }\n assertScalarField(model, fieldName, 'orderBy')\n parseOrderByValue(entries[0][1], fieldName)\n }\n}\n\nfunction validateCursor(model: Model, cursor: unknown): void {\n if (!isNotNullish(cursor)) return\n if (!isPlainObject(cursor)) {\n throw new Error('cursor must be an object')\n }\n const entries = Object.entries(cursor)\n if (entries.length === 0) {\n throw new Error('cursor must have at least one field')\n }\n for (const [fieldName] of entries) {\n const f = String(fieldName).trim()\n if (f.length === 0) {\n throw new Error('cursor field name cannot be empty')\n }\n assertScalarField(model, f, 'cursor')\n }\n}\n\nfunction resolveDialect(dialect?: SqlDialect): SqlDialect {\n return dialect ?? getGlobalDialect()\n}\n\nfunction normalizeArgsForNegativeTake(\n method: string,\n args: PrismaQueryArgs,\n): PrismaQueryArgs {\n if (method !== 'findMany') return args\n if (typeof args.take !== 'number') return args\n if (!Number.isInteger(args.take)) return args\n if (args.take >= 0) return args\n\n if (!isNotNullish(args.orderBy)) {\n throw new Error('Negative take requires orderBy for deterministic results')\n }\n\n return {\n ...args,\n take: Math.abs(args.take),\n orderBy: reverseOrderByInput(args.orderBy),\n }\n}\n\nfunction normalizeArgsForDialect(\n dialect: SqlDialect,\n args: PrismaQueryArgs,\n): PrismaQueryArgs {\n if (dialect !== 'postgres') return args\n return applyPostgresDistinctOrderBy(args)\n}\n\nfunction buildCursorClauseIfAny(input: {\n cursor: unknown\n orderBy: PrismaQueryArgs['orderBy']\n tableName: string\n alias: string\n params: ReturnType<typeof createParamStoreFrom>\n dialect: SqlDialect\n model: Model\n}): { cte?: string; condition?: string } {\n const { cursor, orderBy, tableName, alias, params, dialect, model } = input\n if (!isNotNullish(cursor)) return {}\n return buildCursorCondition(\n cursor,\n orderBy,\n tableName,\n alias,\n params,\n dialect,\n model,\n )\n}\n\nfunction buildSelectSpec(input: {\n method: string\n normalizedArgs: PrismaQueryArgs\n model: Model\n schemas: Model[]\n tableName: string\n alias: string\n whereResult: WhereClauseResult\n dialect: SqlDialect\n}): SelectQuerySpec {\n const {\n method,\n normalizedArgs,\n model,\n schemas,\n tableName,\n alias,\n whereResult,\n dialect,\n } = input\n\n const selectFields = buildSelectFields(\n { select: normalizedArgs.select },\n model,\n alias,\n )\n\n const orderByClause = buildOrderByClause(\n normalizedArgs,\n alias,\n dialect,\n model,\n )\n const { take, skip, cursor } = getPaginationParams(method, normalizedArgs)\n\n const params = createParamStoreFrom(\n whereResult.params,\n whereResult.paramMappings,\n whereResult.nextParamIndex,\n )\n\n const includes = buildIncludeSql(\n normalizedArgs,\n model,\n schemas,\n alias,\n params,\n dialect,\n )\n\n const cursorResult = buildCursorClauseIfAny({\n cursor,\n orderBy: normalizedArgs.orderBy,\n tableName,\n alias,\n params,\n dialect,\n model,\n })\n\n if (\n dialect === 'sqlite' &&\n isNonEmptyArray(normalizedArgs.distinct) &&\n cursorResult.condition\n ) {\n throw new Error(\n 'Cursor pagination with distinct is not supported in SQLite due to window function limitations. ' +\n 'Use findMany with skip/take instead, or remove distinct.',\n )\n }\n\n return {\n select: selectFields,\n includes,\n from: { table: tableName, alias },\n whereClause: whereResult.clause,\n whereJoins: whereResult.joins,\n orderBy: orderByClause,\n pagination: { take, skip },\n distinct: normalizedArgs.distinct,\n method,\n cursorCte: cursorResult.cte,\n cursorClause: cursorResult.condition,\n params,\n dialect,\n model,\n schemas,\n args: normalizedArgs,\n }\n}\n\ntype BuildSelectSqlInput = {\n method: string\n args: PrismaQueryArgs\n model: Model\n schemas: Model[]\n from: { tableName: string; alias: string }\n whereResult: WhereClauseResult\n dialect?: SqlDialect\n}\n\nexport function buildSelectSql(input: BuildSelectSqlInput): SqlResult {\n const { method, args, model, schemas, from, whereResult, dialect } = input\n\n assertSafeAlias(from.alias)\n assertSafeTableRef(from.tableName)\n\n const dialectToUse = resolveDialect(dialect)\n\n const argsForSql = normalizeArgsForNegativeTake(method, args)\n const normalizedArgs = normalizeArgsForDialect(dialectToUse, argsForSql)\n\n validateDistinct(model, normalizedArgs.distinct)\n validateOrderBy(model, normalizedArgs.orderBy)\n validateCursor(model, normalizedArgs.cursor)\n\n const spec = buildSelectSpec({\n method,\n normalizedArgs,\n model,\n schemas,\n tableName: from.tableName,\n alias: from.alias,\n whereResult,\n dialect: dialectToUse,\n })\n\n return constructFinalSql(spec)\n}\n","import { ParamStore } from './param-store'\nimport { SqlDialect } from '../../sql-builder-dialect'\n\nexport type ComparisonBuilder = (\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n) => string\n\nexport function buildComparisons(\n expr: string,\n filter: Record<string, unknown>,\n params: ParamStore,\n dialect: SqlDialect,\n builder: ComparisonBuilder,\n excludeKeys: Set<string> = new Set(['mode']),\n): string[] {\n const out: string[] = []\n\n for (const [op, val] of Object.entries(filter)) {\n if (excludeKeys.has(op) || val === undefined) continue\n\n const built = builder(expr, op, val, params, dialect)\n if (built && built.trim().length > 0) {\n out.push(built)\n }\n }\n\n return out\n}\n\nexport function joinComparisons(clauses: string[]): string {\n if (clauses.length === 0) return ''\n if (clauses.length === 1) return clauses[0]\n return clauses.join(' AND ')\n}\n","import { PrismaQueryArgs, Model } from '../types'\nimport {\n SQL_TEMPLATES,\n SQL_SEPARATORS,\n Ops,\n LogicalOps,\n} from './shared/constants'\nimport {\n assertSafeAlias,\n assertSafeTableRef,\n col,\n quote,\n colWithAlias,\n} from './shared/sql-utils'\nimport { createParamStore, ParamStore } from './shared/param-store'\nimport { WhereClauseResult, SqlResult } from './shared/types'\nimport {\n isValidWhereClause,\n validateSelectQuery,\n validateParamConsistency,\n} from './shared/validators/sql-validators'\nimport {\n isNotNullish,\n isNonEmptyArray,\n isPlainObject,\n} from './shared/validators/type-guards'\nimport {\n SqlDialect,\n getGlobalDialect,\n inArray,\n notInArray,\n prepareArrayParam,\n} from '../sql-builder-dialect'\nimport { isDynamicParameter } from '@dee-wan/schema-parser'\nimport { addAutoScoped } from './shared/dynamic-params'\nimport { buildNotComposite } from './where/operators-scalar'\nimport { getFieldInfo } from './shared/model-field-cache'\nimport {\n assertScalarField,\n assertNumericField,\n} from './shared/validators/field-assertions'\nimport { buildComparisons, joinComparisons } from './shared/comparison-builder'\n\ntype AggregateKey = '_count' | '_sum' | '_avg' | '_min' | '_max'\ntype LogicalKey = 'AND' | 'OR' | 'NOT'\n\nconst AGGREGATES: ReadonlyArray<[AggregateKey, string]> = [\n ['_sum', 'SUM'],\n ['_avg', 'AVG'],\n ['_min', 'MIN'],\n ['_max', 'MAX'],\n]\n\nconst COMPARISON_OPS: Record<string, string> = {\n [Ops.EQUALS]: '=',\n [Ops.NOT]: '<>',\n [Ops.GT]: '>',\n [Ops.GTE]: '>=',\n [Ops.LT]: '<',\n [Ops.LTE]: '<=',\n}\n\nconst HAVING_ALLOWED_OPS = new Set<string>([\n Ops.EQUALS,\n Ops.NOT,\n Ops.GT,\n Ops.GTE,\n Ops.LT,\n Ops.LTE,\n Ops.IN,\n Ops.NOT_IN,\n])\n\nfunction isTruthySelection(v: unknown): boolean {\n return v === true\n}\n\nfunction aggExprForField(\n aggKey: AggregateKey,\n field: string,\n alias: string,\n model?: Model,\n): string {\n if (aggKey === '_count') {\n return field === '_all' ? `COUNT(*)` : `COUNT(${col(alias, field, model)})`\n }\n if (field === '_all') {\n throw new Error(`'${aggKey}' does not support '_all'`)\n }\n if (aggKey === '_sum') return `SUM(${col(alias, field, model)})`\n if (aggKey === '_avg') return `AVG(${col(alias, field, model)})`\n if (aggKey === '_min') return `MIN(${col(alias, field, model)})`\n return `MAX(${col(alias, field, model)})`\n}\n\nfunction buildComparisonOp(op: string): string {\n const sqlOp = COMPARISON_OPS[op]\n if (!sqlOp) {\n throw new Error(`Unsupported HAVING operator: ${op}`)\n }\n return sqlOp\n}\n\nfunction addHavingParam(\n params: ParamStore,\n op: string,\n value: unknown,\n): string {\n return addAutoScoped(params, value, `having.${op}`)\n}\n\nfunction normalizeLogicalValue(\n operator: LogicalKey,\n value: unknown,\n): Record<string, unknown>[] {\n if (Array.isArray(value)) {\n const out: Record<string, unknown>[] = []\n for (const v of value) {\n if (!isPlainObject(v)) {\n throw new Error(`${operator} entries must be objects in HAVING`)\n }\n out.push(v)\n }\n return out\n }\n\n if (isPlainObject(value)) {\n return [value]\n }\n\n throw new Error(`${operator} must be an object or array of objects in HAVING`)\n}\n\nfunction assertHavingOp(op: string): void {\n if (!HAVING_ALLOWED_OPS.has(op)) {\n throw new Error(\n `Unsupported HAVING operator '${op}'. Allowed: ${[...HAVING_ALLOWED_OPS].join(', ')}`,\n )\n }\n}\n\nfunction buildNullComparison(expr: string, op: string): string {\n if (op === Ops.EQUALS) return `${expr} ${SQL_TEMPLATES.IS_NULL}`\n if (op === Ops.NOT) return `${expr} ${SQL_TEMPLATES.IS_NOT_NULL}`\n throw new Error(`Operator '${op}' doesn't support null in HAVING`)\n}\n\nfunction buildInComparison(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n): string {\n if (isDynamicParameter(val)) {\n const placeholder = addHavingParam(params, op, val)\n return op === Ops.IN\n ? inArray(expr, placeholder, dialect)\n : notInArray(expr, placeholder, dialect)\n }\n\n if (!Array.isArray(val)) {\n throw new Error(`HAVING '${op}' requires array value`)\n }\n\n if (val.length === 0) {\n return op === Ops.IN ? '0=1' : '1=1'\n }\n\n const paramValue = prepareArrayParam(val, dialect)\n const placeholder = params.add(paramValue)\n return op === Ops.IN\n ? inArray(expr, placeholder, dialect)\n : notInArray(expr, placeholder, dialect)\n}\n\nfunction buildBinaryComparison(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n): string {\n const sqlOp = buildComparisonOp(op)\n const placeholder = addHavingParam(params, op, val)\n return `${expr} ${sqlOp} ${placeholder}`\n}\n\nfunction buildSimpleComparison(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n): string {\n assertHavingOp(op)\n\n if (val === null) return buildNullComparison(expr, op)\n\n if (op === Ops.NOT && isPlainObject(val)) {\n return buildNotComposite(\n expr,\n val,\n params,\n dialect,\n buildSimpleComparison,\n SQL_SEPARATORS.CONDITION_AND,\n )\n }\n\n if (op === Ops.IN || op === Ops.NOT_IN) {\n return buildInComparison(expr, op, val, params, dialect)\n }\n\n return buildBinaryComparison(expr, op, val, params)\n}\n\nfunction isLogicalKey(key: string): key is LogicalKey {\n return (\n key === LogicalOps.AND || key === LogicalOps.OR || key === LogicalOps.NOT\n )\n}\n\nfunction isAggregateKey(key: string): key is AggregateKey {\n return (\n key === '_count' ||\n key === '_sum' ||\n key === '_avg' ||\n key === '_min' ||\n key === '_max'\n )\n}\n\nfunction negateClauses(subClauses: string[]): string {\n if (subClauses.length === 1) return `${SQL_TEMPLATES.NOT} ${subClauses[0]}`\n return `${SQL_TEMPLATES.NOT} (${subClauses.join(SQL_SEPARATORS.CONDITION_AND)})`\n}\n\nfunction combineLogical(key: LogicalKey, subClauses: string[]): string {\n if (key === LogicalOps.NOT) return negateClauses(subClauses)\n return subClauses.join(` ${key} `)\n}\n\nfunction buildLogicalClause(\n key: LogicalKey,\n value: unknown,\n alias: string,\n params: ParamStore,\n dialect: SqlDialect,\n model: Model,\n): string {\n const items = normalizeLogicalValue(key, value)\n const subClauses: string[] = []\n\n for (const it of items) {\n const c = buildHavingNode(it, alias, params, dialect, model)\n if (c && c !== '') subClauses.push(`(${c})`)\n }\n\n if (subClauses.length === 0) return ''\n return combineLogical(key, subClauses)\n}\n\nfunction buildHavingEntry(\n key: string,\n value: unknown,\n alias: string,\n params: ParamStore,\n dialect: SqlDialect,\n model: Model,\n): string[] {\n if (isLogicalKey(key)) {\n const logical = buildLogicalClause(\n key,\n value,\n alias,\n params,\n dialect,\n model,\n )\n return logical ? [logical] : []\n }\n\n if (isAggregateKey(key)) {\n return buildHavingForAggregateFirstShape(\n key,\n value,\n alias,\n params,\n dialect,\n model,\n )\n }\n\n return buildHavingForFieldFirstShape(\n key,\n value,\n alias,\n params,\n dialect,\n model,\n )\n}\n\nfunction buildHavingNode(\n node: Record<string, unknown>,\n alias: string,\n params: ParamStore,\n dialect: SqlDialect,\n model: Model,\n): string {\n const clauses: string[] = []\n\n for (const [key, value] of Object.entries(node)) {\n const built = buildHavingEntry(key, value, alias, params, dialect, model)\n for (const c of built) {\n if (c && c.trim().length > 0) clauses.push(c)\n }\n }\n\n return clauses.join(SQL_SEPARATORS.CONDITION_AND)\n}\n\nfunction assertHavingAggTarget(\n aggKey: AggregateKey,\n field: string,\n model: Model,\n): void {\n if (field === '_all') {\n if (aggKey !== '_count') {\n throw new Error(`HAVING '${aggKey}' does not support '_all'`)\n }\n return\n }\n\n if (aggKey === '_sum' || aggKey === '_avg') {\n assertNumericField(model, field, 'HAVING')\n } else {\n assertScalarField(model, field, 'HAVING')\n }\n}\n\nfunction buildHavingOpsForExpr(\n expr: string,\n filter: Record<string, unknown>,\n params: ParamStore,\n dialect: SqlDialect,\n): string[] {\n return buildComparisons(expr, filter, params, dialect, buildSimpleComparison)\n}\n\nfunction buildHavingForAggregateFirstShape(\n aggKey: AggregateKey,\n target: unknown,\n alias: string,\n params: ParamStore,\n dialect: SqlDialect,\n model: Model,\n): string[] {\n if (!isPlainObject(target)) {\n throw new Error(`HAVING '${aggKey}' must be an object`)\n }\n\n const out: string[] = []\n\n for (const [field, filter] of Object.entries(target)) {\n assertHavingAggTarget(aggKey, field, model)\n if (!isPlainObject(filter) || Object.keys(filter).length === 0) continue\n\n const expr = aggExprForField(aggKey, field, alias, model)\n out.push(...buildHavingOpsForExpr(expr, filter, params, dialect))\n }\n\n return out\n}\n\nfunction buildHavingForFieldFirstShape(\n fieldName: string,\n target: unknown,\n alias: string,\n params: ParamStore,\n dialect: SqlDialect,\n model: Model,\n): string[] {\n if (!isPlainObject(target)) {\n throw new Error(`HAVING '${fieldName}' must be an object`)\n }\n\n const field = assertScalarField(model, fieldName, 'HAVING')\n const out: string[] = []\n const obj = target as Record<string, unknown>\n\n const keys: AggregateKey[] = ['_count', '_sum', '_avg', '_min', '_max']\n for (const aggKey of keys) {\n const aggFilter = obj[aggKey]\n if (!isPlainObject(aggFilter)) continue\n\n if (aggKey === '_sum' || aggKey === '_avg') {\n assertNumericField(model, fieldName, 'HAVING')\n }\n\n const entries = Object.entries(aggFilter)\n if (entries.length === 0) continue\n\n const expr = aggExprForField(aggKey, fieldName, alias, model)\n\n const clauses = buildComparisons(\n expr,\n aggFilter,\n params,\n dialect,\n buildSimpleComparison,\n )\n out.push(...clauses)\n }\n\n return out\n}\n\nfunction buildHavingClause(\n having: Record<string, unknown> | undefined,\n alias: string,\n params: ParamStore,\n model: Model,\n dialect?: SqlDialect,\n): string {\n if (!isNotNullish(having)) return ''\n\n const d = dialect ?? getGlobalDialect()\n if (!isPlainObject(having)) {\n throw new Error('having must be an object')\n }\n\n return buildHavingNode(having, alias, params, d, model)\n}\n\nfunction normalizeCountArg(\n v: unknown,\n): Record<string, unknown> | true | undefined {\n if (!isNotNullish(v)) return undefined\n if (v === true) return true\n if (isPlainObject(v)) return v\n return undefined\n}\n\nfunction pushCountAllField(fields: string[]): void {\n fields.push(\n `${SQL_TEMPLATES.COUNT_ALL} ${SQL_TEMPLATES.AS} ${quote('_count._all')}`,\n )\n}\n\nfunction assertCountableScalarField(model: Model, fieldName: string): void {\n assertScalarField(model, fieldName, '_count')\n}\n\nfunction pushCountField(\n fields: string[],\n alias: string,\n fieldName: string,\n model?: Model,\n): void {\n const outAlias = `_count.${fieldName}`\n fields.push(\n `COUNT(${col(alias, fieldName, model)}) ${SQL_TEMPLATES.AS} ${quote(outAlias)}`,\n )\n}\n\nfunction addCountFields(\n fields: string[],\n countArg: Record<string, unknown> | true | undefined,\n alias: string,\n model: Model,\n): void {\n if (!isNotNullish(countArg)) return\n\n if (countArg === true) {\n pushCountAllField(fields)\n return\n }\n\n if (!isPlainObject(countArg)) return\n\n if (countArg._all === true) {\n pushCountAllField(fields)\n }\n\n const selected = Object.entries(countArg).filter(\n ([f, v]) => f !== '_all' && isTruthySelection(v),\n )\n\n for (const [f] of selected) {\n assertCountableScalarField(model, f)\n pushCountField(fields, alias, f, model)\n }\n}\n\nfunction getAggregateSelectionObject(\n args: PrismaQueryArgs,\n agg: AggregateKey,\n): Record<string, unknown> | undefined {\n const obj = (args as Record<string, unknown>)[agg]\n return isPlainObject(obj) ? obj : undefined\n}\n\nfunction assertAggregatableScalarField(\n model: Model,\n agg: AggregateKey,\n fieldName: string,\n): void {\n if (agg === '_sum' || agg === '_avg') {\n assertNumericField(model, fieldName, agg)\n } else {\n assertScalarField(model, fieldName, agg)\n }\n}\n\nfunction pushAggregateFieldSql(\n fields: string[],\n aggFn: string,\n alias: string,\n agg: AggregateKey,\n fieldName: string,\n model?: Model,\n): void {\n const outAlias = `${agg}.${fieldName}`\n fields.push(\n `${aggFn}(${col(alias, fieldName, model)}) ${SQL_TEMPLATES.AS} ${quote(outAlias)}`,\n )\n}\n\nfunction addAggregateFields(\n fields: string[],\n args: PrismaQueryArgs,\n alias: string,\n model: Model,\n): void {\n for (const [agg, aggFn] of AGGREGATES) {\n const obj = getAggregateSelectionObject(args, agg)\n if (!obj) continue\n\n for (const [fieldName, selection] of Object.entries(obj)) {\n if (fieldName === '_all')\n throw new Error(`'${agg}' does not support '_all'`)\n if (!isTruthySelection(selection)) continue\n\n assertAggregatableScalarField(model, agg, fieldName)\n pushAggregateFieldSql(fields, aggFn, alias, agg, fieldName, model)\n }\n }\n}\n\nfunction buildAggregateFields(\n args: PrismaQueryArgs,\n alias: string,\n model: Model,\n): string[] {\n const fields: string[] = []\n\n const countArg = normalizeCountArg(args._count)\n addCountFields(fields, countArg, alias, model)\n addAggregateFields(fields, args, alias, model)\n\n return fields\n}\n\nexport function buildAggregateSql(\n args: PrismaQueryArgs,\n whereResult: WhereClauseResult,\n tableName: string,\n alias: string,\n model: Model,\n): SqlResult {\n assertSafeAlias(alias)\n assertSafeTableRef(tableName)\n\n const aggFields = buildAggregateFields(args, alias, model)\n if (!isNonEmptyArray(aggFields)) {\n throw new Error('buildAggregateSql requires at least one aggregate field')\n }\n\n const selectClause = aggFields.join(SQL_SEPARATORS.FIELD_LIST)\n const whereClause = isValidWhereClause(whereResult.clause)\n ? `${SQL_TEMPLATES.WHERE} ${whereResult.clause}`\n : ''\n\n const sql = [\n SQL_TEMPLATES.SELECT,\n selectClause,\n SQL_TEMPLATES.FROM,\n tableName,\n alias,\n whereClause,\n ]\n .filter((x) => x && String(x).trim().length > 0)\n .join(' ')\n .trim()\n\n validateSelectQuery(sql)\n validateParamConsistency(sql, whereResult.params)\n\n return Object.freeze({\n sql,\n params: Object.freeze([...whereResult.params]),\n paramMappings: Object.freeze([...whereResult.paramMappings]),\n })\n}\n\nfunction assertGroupByBy(args: PrismaQueryArgs, model: Model): string[] {\n if (!isNotNullish(args.by) || !isNonEmptyArray(args.by)) {\n throw new Error('buildGroupBySql: by is required and cannot be empty')\n }\n\n const byFields = args.by.map((f: string) => String(f))\n const bySet = new Set(byFields)\n if (bySet.size !== byFields.length) {\n throw new Error('buildGroupBySql: by must not contain duplicates')\n }\n\n for (const f of byFields) {\n assertScalarField(model, f, 'groupBy.by')\n }\n\n return byFields\n}\n\nfunction buildGroupBySelectParts(\n args: PrismaQueryArgs,\n alias: string,\n model: Model,\n byFields: string[],\n): { groupCols: string[]; groupFields: string; selectFields: string } {\n const groupCols = byFields.map((f) => col(alias, f, model))\n const selectCols = byFields.map((f) => colWithAlias(alias, f, model))\n const groupFields = groupCols.join(SQL_SEPARATORS.FIELD_LIST)\n\n const aggFields = buildAggregateFields(args, alias, model)\n const selectFields = isNonEmptyArray(aggFields)\n ? selectCols.concat(aggFields).join(SQL_SEPARATORS.FIELD_LIST)\n : selectCols.join(SQL_SEPARATORS.FIELD_LIST)\n\n return { groupCols, groupFields, selectFields }\n}\n\nfunction buildGroupByHaving(\n args: PrismaQueryArgs,\n alias: string,\n params: ParamStore,\n model: Model,\n dialect: SqlDialect,\n): string {\n if (!isNotNullish(args.having)) return ''\n if (!isPlainObject(args.having)) {\n throw new Error('having must be an object')\n }\n\n const h = buildHavingClause(args.having, alias, params, model, dialect)\n if (!h || h.trim().length === 0) return ''\n return `${SQL_TEMPLATES.HAVING} ${h}`\n}\n\nexport function buildGroupBySql(\n args: PrismaQueryArgs,\n whereResult: WhereClauseResult,\n tableName: string,\n alias: string,\n model: Model,\n dialect?: SqlDialect,\n): SqlResult {\n assertSafeAlias(alias)\n assertSafeTableRef(tableName)\n\n const byFields = assertGroupByBy(args, model)\n\n const d = dialect ?? getGlobalDialect()\n const params = createParamStore(whereResult.nextParamIndex)\n\n const { groupFields, selectFields } = buildGroupBySelectParts(\n args,\n alias,\n model,\n byFields,\n )\n\n const havingClause = buildGroupByHaving(args, alias, params, model, d)\n\n const whereClause = isValidWhereClause(whereResult.clause)\n ? `${SQL_TEMPLATES.WHERE} ${whereResult.clause}`\n : ''\n\n const sql = [\n SQL_TEMPLATES.SELECT,\n selectFields,\n SQL_TEMPLATES.FROM,\n tableName,\n alias,\n whereClause,\n SQL_TEMPLATES.GROUP_BY,\n groupFields,\n havingClause,\n ]\n .filter((x) => x && String(x).trim().length > 0)\n .join(' ')\n .trim()\n\n const snapshot = params.snapshot()\n\n validateSelectQuery(sql)\n validateParamConsistency(sql, [...whereResult.params, ...snapshot.params])\n\n const mergedParams = [...whereResult.params, ...snapshot.params]\n\n return Object.freeze({\n sql,\n params: Object.freeze(mergedParams),\n paramMappings: Object.freeze([\n ...whereResult.paramMappings,\n ...snapshot.mappings,\n ]),\n })\n}\n\nexport function buildCountSql(\n whereResult: WhereClauseResult,\n tableName: string,\n alias: string,\n skip?: number | string,\n _dialect?: SqlDialect,\n): SqlResult {\n assertSafeAlias(alias)\n assertSafeTableRef(tableName)\n\n if (skip !== undefined && skip !== null) {\n if (isDynamicParameter(skip)) {\n throw new Error(\n 'count() with skip is not supported because it produces nondeterministic results. ' +\n 'Dynamic skip cannot be validated at build time. ' +\n 'Use findMany().length or add explicit orderBy + cursor/skip logic in a deterministic query.',\n )\n }\n\n if (typeof skip === 'string') {\n const s = skip.trim()\n if (s.length > 0) {\n const n = Number(s)\n if (Number.isFinite(n) && Number.isInteger(n) && n > 0) {\n throw new Error(\n 'count() with skip is not supported because it produces nondeterministic results. ' +\n 'Use findMany().length or add explicit orderBy to ensure deterministic behavior.',\n )\n }\n }\n }\n\n if (\n typeof skip === 'number' &&\n Number.isFinite(skip) &&\n Number.isInteger(skip) &&\n skip > 0\n ) {\n throw new Error(\n 'count() with skip is not supported because it produces nondeterministic results. ' +\n 'Use findMany().length or add explicit orderBy to ensure deterministic behavior.',\n )\n }\n }\n\n const whereClause = isValidWhereClause(whereResult.clause)\n ? `${SQL_TEMPLATES.WHERE} ${whereResult.clause}`\n : ''\n\n const sql = [\n SQL_TEMPLATES.SELECT,\n SQL_TEMPLATES.COUNT_ALL,\n SQL_TEMPLATES.AS,\n quote('_count._all'),\n SQL_TEMPLATES.FROM,\n tableName,\n alias,\n whereClause,\n ]\n .filter((x) => x && String(x).trim().length > 0)\n .join(' ')\n .trim()\n\n validateSelectQuery(sql)\n validateParamConsistency(sql, whereResult.params)\n\n return Object.freeze({\n sql,\n params: Object.freeze([...whereResult.params]),\n paramMappings: Object.freeze([...whereResult.paramMappings]),\n })\n}\n","import { getModelByName } from './builder/joins'\nimport { buildSelectSql } from './builder/select'\nimport {\n buildAggregateSql,\n buildCountSql,\n buildGroupBySql,\n} from './builder/aggregates'\nimport { getGlobalDialect, SqlDialect } from './sql-builder-dialect'\nimport { buildWhereClause } from './builder/where'\nimport { buildTableReference } from './builder/shared/sql-utils'\nimport { SQL_TEMPLATES, SQL_RESERVED_WORDS } from './builder/shared/constants'\nimport { validateParamConsistencyByDialect } from './builder/shared/validators/sql-validators'\nimport {\n ParamMap,\n DirectiveProps,\n convertDMMFToModels,\n} from '@dee-wan/schema-parser'\n\nexport interface SQLDirective {\n method: PrismaMethod\n sql: string\n staticParams: any[]\n dynamicKeys: string[]\n paramMappings: readonly ParamMap[]\n originalDirective: DirectiveProps\n}\n\ntype PrismaMethod =\n | 'findMany'\n | 'findFirst'\n | 'findUnique'\n | 'aggregate'\n | 'groupBy'\n | 'count'\n\nfunction safeAlias(input: string): string {\n const raw = String(input).toLowerCase()\n const cleaned = raw.replace(/[^a-z0-9_]/g, '_')\n const startsOk = /^[a-z_]/.test(cleaned)\n let base = startsOk ? cleaned : `_${cleaned}`\n base = base.length > 0 ? base : '_t'\n\n if (SQL_RESERVED_WORDS.has(base)) {\n base = `_${base}`\n }\n\n return base\n}\n\nfunction isPrismaMethod(v: unknown): v is PrismaMethod {\n return (\n v === 'findMany' ||\n v === 'findFirst' ||\n v === 'findUnique' ||\n v === 'aggregate' ||\n v === 'groupBy' ||\n v === 'count'\n )\n}\n\nfunction getMethodFromProcessed(processed: Record<string, any>): PrismaMethod {\n const maybe = processed?.method\n if (isPrismaMethod(maybe)) return maybe\n return 'findMany'\n}\n\nfunction buildSqlResult(args: {\n method: PrismaMethod\n processed: Record<string, any>\n whereResult: ReturnType<typeof buildWhereClause>\n tableName: string\n alias: string\n modelDef: any\n schemaModels: any\n dialect: SqlDialect\n}): { sql: string; paramMappings: readonly ParamMap[] } {\n const {\n method,\n processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n schemaModels,\n dialect,\n } = args\n\n if (method === 'aggregate') {\n return buildAggregateSql(processed, whereResult, tableName, alias, modelDef)\n }\n\n if (method === 'groupBy') {\n return buildGroupBySql(processed, whereResult, tableName, alias, modelDef)\n }\n\n if (method === 'count') {\n return buildCountSql(\n whereResult,\n tableName,\n alias,\n processed.skip as number,\n )\n }\n\n return buildSelectSql({\n method,\n args: processed,\n model: modelDef,\n schemas: schemaModels,\n from: { tableName, alias },\n whereResult,\n dialect,\n })\n}\n\nfunction normalizeSqlAndMappingsForDialect(\n sql: string,\n paramMappings: readonly ParamMap[],\n dialect: SqlDialect,\n): { sql: string; paramMappings: readonly ParamMap[] } {\n if (dialect !== 'sqlite') return { sql, paramMappings }\n\n const byIndex = new Map<number, ParamMap>()\n for (const m of paramMappings) byIndex.set(m.index, m)\n\n const placeholderPositions: number[] = []\n const normalizedSql = sql.replace(/\\$(\\d+)/g, (_, num) => {\n placeholderPositions.push(parseInt(num, 10))\n return '?'\n })\n\n const expandedMappings: ParamMap[] = placeholderPositions.map(\n (originalIndex, i) => {\n const originalMapping = byIndex.get(originalIndex)\n if (!originalMapping) {\n throw new Error(\n `CRITICAL: No mapping found for parameter $${originalIndex}`,\n )\n }\n return {\n index: i + 1,\n value: originalMapping.value,\n dynamicName: originalMapping.dynamicName,\n }\n },\n )\n\n return { sql: normalizedSql, paramMappings: expandedMappings }\n}\n\nfunction buildParamsFromMappings(mappings: readonly ParamMap[]): {\n staticParams: any[]\n dynamicKeys: string[]\n} {\n const sorted = [...mappings].sort((a, b) => a.index - b.index)\n\n return sorted.reduce(\n (acc, m) => {\n if (m.dynamicName !== undefined) {\n acc.dynamicKeys.push(m.dynamicName)\n return acc\n }\n if (m.value !== undefined) {\n acc.staticParams.push(m.value)\n return acc\n }\n throw new Error(\n `CRITICAL: ParamMap ${m.index} has neither dynamicName nor value`,\n )\n },\n { staticParams: [] as any[], dynamicKeys: [] as string[] },\n )\n}\n\nfunction resolveModelContext(directive: DirectiveProps): {\n schemaModels: any\n modelDef: any\n} {\n const { model, datamodel } = directive.context\n\n const schemaModels = convertDMMFToModels(datamodel)\n const modelDef = getModelByName(schemaModels, model.name)\n if (!modelDef) throw new Error(`Model ${model.name} not found in schema`)\n\n return { schemaModels, modelDef }\n}\n\nfunction buildMainTableAndAlias(args: { modelDef: any; dialect: SqlDialect }): {\n tableName: string\n alias: string\n} {\n const { modelDef, dialect } = args\n const baseName = modelDef.tableName || modelDef.name\n\n return {\n tableName: buildTableReference(\n SQL_TEMPLATES.PUBLIC_SCHEMA,\n baseName,\n dialect,\n ),\n alias: safeAlias(`${baseName}_main`),\n }\n}\n\nfunction buildMainWhere(args: {\n processed: Record<string, any>\n alias: string\n schemaModels: any\n modelDef: any\n dialect: SqlDialect\n}): ReturnType<typeof buildWhereClause> {\n const { processed, alias, schemaModels, modelDef, dialect } = args\n\n return buildWhereClause((processed.where || {}) as Record<string, unknown>, {\n alias,\n schemaModels,\n model: modelDef,\n path: ['where'],\n isSubquery: false,\n dialect,\n })\n}\n\nfunction buildAndNormalizeSql(args: {\n method: PrismaMethod\n processed: Record<string, any>\n whereResult: ReturnType<typeof buildWhereClause>\n tableName: string\n alias: string\n modelDef: any\n schemaModels: any\n dialect: SqlDialect\n}): { sql: string; paramMappings: readonly ParamMap[] } {\n const {\n method,\n processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n schemaModels,\n dialect,\n } = args\n\n const sqlResult = buildSqlResult({\n method,\n processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n schemaModels,\n dialect,\n })\n\n return normalizeSqlAndMappingsForDialect(\n sqlResult.sql,\n sqlResult.paramMappings,\n dialect,\n )\n}\n\nfunction finalizeDirective(args: {\n directive: DirectiveProps\n normalizedSql: string\n normalizedMappings: readonly ParamMap[]\n dialect: SqlDialect\n}): SQLDirective {\n const { directive, normalizedSql, normalizedMappings, dialect } = args\n\n const params = normalizedMappings.map((m) => m.value ?? undefined)\n validateParamConsistencyByDialect(normalizedSql, params, dialect)\n\n const { staticParams, dynamicKeys } =\n buildParamsFromMappings(normalizedMappings)\n\n return {\n method: directive.method as PrismaMethod,\n sql: normalizedSql,\n staticParams,\n dynamicKeys,\n paramMappings: normalizedMappings,\n originalDirective: directive,\n }\n}\n\nexport function generateSQL(directive: DirectiveProps): SQLDirective {\n const { query } = directive\n\n const { schemaModels, modelDef } = resolveModelContext(directive)\n\n const dialect = getGlobalDialect()\n\n const { tableName, alias } = buildMainTableAndAlias({ modelDef, dialect })\n\n const whereResult = buildMainWhere({\n processed: query.processed,\n alias,\n schemaModels,\n modelDef,\n dialect,\n })\n\n const method = directive.method as PrismaMethod\n\n const normalized = buildAndNormalizeSql({\n method,\n processed: query.processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n schemaModels,\n dialect,\n })\n\n return finalizeDirective({\n directive,\n normalizedSql: normalized.sql,\n normalizedMappings: normalized.paramMappings,\n dialect,\n })\n}\n","export type PrismaMethod =\n | 'findMany'\n | 'findFirst'\n | 'findUnique'\n | 'count'\n | 'aggregate'\n | 'groupBy'\n\nfunction parseAggregateValue(value: unknown): unknown {\n if (typeof value === 'string' && /^-?\\d+(\\.\\d+)?$/.test(value)) {\n return parseFloat(value)\n }\n return value\n}\n\nfunction transformGroupByResults(results: unknown[]): unknown[] {\n return results.map((row) => {\n const raw = row as Record<string, unknown>\n const parsed: any = {}\n\n for (const [key, value] of Object.entries(raw)) {\n const parts = key.split('.')\n if (parts.length === 2) {\n const [group, field] = parts\n if (!parsed[group]) parsed[group] = {}\n parsed[group][field] = parseAggregateValue(value)\n } else {\n parsed[key] = value\n }\n }\n\n return parsed\n })\n}\n\nfunction transformCountResults(results: unknown[]): number {\n const result = results[0] as any\n const count = result?.['_count._all'] || result?.count || 0\n return typeof count === 'string' ? parseInt(count, 10) : count\n}\n\nfunction transformAggregateResults(results: unknown[]): Record<string, any> {\n const raw = (results[0] || {}) as Record<string, unknown>\n const parsed: any = {}\n\n for (const [key, value] of Object.entries(raw)) {\n const parts = key.split('.')\n if (parts.length === 2) {\n const [group, field] = parts\n if (!parsed[group]) parsed[group] = {}\n parsed[group][field] = parseAggregateValue(value)\n } else {\n parsed[key] = value\n }\n }\n\n return parsed\n}\n\nexport const RESULT_TRANSFORMERS: Partial<\n Record<PrismaMethod, (results: unknown[]) => unknown>\n> = {\n findFirst: (results) => results[0] || null,\n findUnique: (results) => results[0] || null,\n count: transformCountResults,\n aggregate: transformAggregateResults,\n groupBy: transformGroupByResults,\n}\n\nexport function transformQueryResults(\n method: PrismaMethod,\n results: unknown[],\n): unknown {\n const transformer = RESULT_TRANSFORMERS[method]\n return transformer ? transformer(results) : results\n}\n","interface Node<K, V> {\n key: K;\n value: V;\n freq: number;\n queue: \"small\" | \"main\";\n prev: Node<K, V> | null;\n next: Node<K, V> | null;\n}\n\nfunction withDispose<T>(it: IterableIterator<T>): MapIterator<T> {\n const anyIt = it as any;\n if (anyIt[Symbol.dispose] === undefined) {\n anyIt[Symbol.dispose] = () => {};\n }\n return it as unknown as MapIterator<T>;\n}\n\nexport class BoundedCache<K, V> implements Map<K, V> {\n private map: Map<K, Node<K, V>> = new Map();\n private ghost: Set<K> = new Set();\n\n private smallHead: Node<K, V> | null = null;\n private smallTail: Node<K, V> | null = null;\n private smallSize = 0;\n\n private mainHead: Node<K, V> | null = null;\n private mainTail: Node<K, V> | null = null;\n private mainSize = 0;\n\n private readonly maxSize: number;\n private readonly smallLimit: number;\n private readonly mainLimit: number;\n private readonly ghostLimit: number;\n\n constructor(maxSize: number) {\n this.maxSize = maxSize;\n this.smallLimit = Math.max(1, Math.floor(maxSize * 0.1));\n this.mainLimit = maxSize - this.smallLimit;\n this.ghostLimit = this.mainLimit;\n }\n\n get size(): number {\n return this.map.size;\n }\n\n get(key: K): V | undefined {\n const node = this.map.get(key);\n if (!node) return undefined;\n\n node.freq = Math.min(node.freq + 1, 3);\n return node.value;\n }\n\n set(key: K, value: V): this {\n const existing = this.map.get(key);\n\n if (existing) {\n existing.value = value;\n return this;\n }\n\n if (this.ghost.has(key)) {\n this.ghost.delete(key);\n const node = this.createNode(key, value, \"main\");\n this.map.set(key, node);\n this.pushMain(node);\n\n if (this.mainSize > this.mainLimit) this.evictMain();\n return this;\n }\n\n const node = this.createNode(key, value, \"small\");\n this.map.set(key, node);\n this.pushSmall(node);\n\n if (this.size > this.maxSize) {\n if (this.smallSize > this.smallLimit) this.evictSmall();\n else this.evictMain();\n }\n\n return this;\n }\n\n has(key: K): boolean {\n return this.map.has(key);\n }\n\n delete(key: K): boolean {\n const node = this.map.get(key);\n if (!node) return false;\n\n this.map.delete(key);\n this.removeNode(node);\n return true;\n }\n\n clear(): void {\n this.map.clear();\n this.ghost.clear();\n this.smallHead = this.smallTail = null;\n this.mainHead = this.mainTail = null;\n this.smallSize = this.mainSize = 0;\n }\n\n keys(): MapIterator<K> {\n return withDispose(\n (function* (self: BoundedCache<K, V>) {\n for (const key of self.map.keys()) yield key;\n })(this),\n );\n }\n\n values(): MapIterator<V> {\n return withDispose(\n (function* (self: BoundedCache<K, V>) {\n for (const node of self.map.values()) yield node.value;\n })(this),\n );\n }\n\n entries(): MapIterator<[K, V]> {\n return withDispose(\n (function* (self: BoundedCache<K, V>) {\n for (const [key, node] of self.map.entries())\n yield [key, node.value] as [K, V];\n })(this),\n );\n }\n\n forEach(\n callbackfn: (value: V, key: K, map: Map<K, V>) => void,\n thisArg?: any,\n ): void {\n for (const [key, node] of this.map.entries()) {\n callbackfn.call(thisArg, node.value, key, this);\n }\n }\n\n [Symbol.iterator](): MapIterator<[K, V]> {\n return this.entries();\n }\n\n get [Symbol.toStringTag](): string {\n return \"BoundedCache\";\n }\n\n private createNode(key: K, value: V, queue: \"small\" | \"main\"): Node<K, V> {\n return { key, value, freq: 0, queue, prev: null, next: null };\n }\n\n private pushSmall(node: Node<K, V>): void {\n node.next = this.smallHead;\n node.prev = null;\n\n if (this.smallHead) this.smallHead.prev = node;\n else this.smallTail = node;\n\n this.smallHead = node;\n this.smallSize++;\n }\n\n private pushMain(node: Node<K, V>): void {\n node.next = this.mainHead;\n node.prev = null;\n\n if (this.mainHead) this.mainHead.prev = node;\n else this.mainTail = node;\n\n this.mainHead = node;\n this.mainSize++;\n }\n\n private popSmall(): Node<K, V> | null {\n if (!this.smallTail) return null;\n\n const node = this.smallTail;\n this.smallTail = node.prev;\n\n if (this.smallTail) this.smallTail.next = null;\n else this.smallHead = null;\n\n node.prev = null;\n node.next = null;\n this.smallSize--;\n return node;\n }\n\n private popMain(): Node<K, V> | null {\n if (!this.mainTail) return null;\n\n const node = this.mainTail;\n this.mainTail = node.prev;\n\n if (this.mainTail) this.mainTail.next = null;\n else this.mainHead = null;\n\n node.prev = null;\n node.next = null;\n this.mainSize--;\n return node;\n }\n\n private removeNode(node: Node<K, V>): void {\n this.unlinkNode(node);\n\n if (node.queue === \"small\") {\n if (node === this.smallHead) this.smallHead = node.next;\n if (node === this.smallTail) this.smallTail = node.prev;\n this.smallSize--;\n } else {\n if (node === this.mainHead) this.mainHead = node.next;\n if (node === this.mainTail) this.mainTail = node.prev;\n this.mainSize--;\n }\n\n node.prev = null;\n node.next = null;\n }\n\n private unlinkNode(node: Node<K, V>): void {\n if (node.prev) node.prev.next = node.next;\n if (node.next) node.next.prev = node.prev;\n }\n\n private shouldPromoteFromSmall(node: Node<K, V>): boolean {\n return node.freq > 1;\n }\n\n private shouldRetryInMain(node: Node<K, V>): boolean {\n return node.freq >= 1;\n }\n\n private promoteToMain(node: Node<K, V>): void {\n node.queue = \"main\";\n this.pushMain(node);\n }\n\n private addToGhost(key: K): void {\n this.ghost.add(key);\n\n if (this.ghost.size <= this.ghostLimit) return;\n\n const firstGhost = this.ghost.values().next().value;\n if (firstGhost !== undefined) this.ghost.delete(firstGhost);\n }\n\n private evictFromCache(node: Node<K, V>): void {\n this.map.delete(node.key);\n }\n\n private evictSmall(): void {\n while (this.smallSize > 0) {\n const node = this.popSmall();\n if (!node) return;\n\n if (this.shouldPromoteFromSmall(node)) {\n this.promoteToMain(node);\n\n if (this.mainSize > this.mainLimit) {\n this.evictMain();\n return;\n }\n\n continue;\n }\n\n this.evictFromCache(node);\n this.addToGhost(node.key);\n return;\n }\n }\n\n private evictMain(): void {\n while (this.mainSize > 0) {\n const node = this.popMain();\n if (!node) return;\n\n if (this.shouldRetryInMain(node)) {\n node.freq--;\n this.pushMain(node);\n continue;\n }\n\n this.evictFromCache(node);\n return;\n }\n }\n}\n\nexport function createBoundedCache<K, V>(maxSize: number): Map<K, V> {\n return new BoundedCache<K, V>(maxSize);\n}\n","import { ParamMap, isDynamicParameter } from '@dee-wan/schema-parser'\nimport type { Model } from './types'\nimport type { SqlDialect } from './sql-builder-dialect'\nimport { buildWhereClause } from './builder/where'\nimport { buildSelectSql } from './builder/select'\nimport {\n buildAggregateSql,\n buildCountSql,\n buildGroupBySql,\n} from './builder/aggregates'\nimport { buildTableReference } from './builder/shared/sql-utils'\nimport { SQL_TEMPLATES, SQL_RESERVED_WORDS } from './builder/shared/constants'\nimport { createBoundedCache } from './utils/s3-fifo'\n\nexport type PrismaMethod =\n | 'findMany'\n | 'findFirst'\n | 'findUnique'\n | 'count'\n | 'aggregate'\n | 'groupBy'\n\ninterface SqlResult {\n sql: string\n params: unknown[]\n}\n\nconst queryCache = createBoundedCache<string, string>(1000)\n\nfunction makeAlias(name: string): string {\n const base = name\n .toLowerCase()\n .replace(/[^a-z0-9_]/g, '_')\n .slice(0, 50)\n const safe = /^[a-z_]/.test(base) ? base : `_${base}`\n return SQL_RESERVED_WORDS.has(safe) ? `${safe}_t` : safe\n}\n\nfunction toSqliteParams(sql: string, params: readonly unknown[]): SqlResult {\n const reorderedParams: unknown[] = []\n let lastIndex = 0\n const parts: string[] = []\n\n for (let i = 0; i < sql.length; i++) {\n if (sql[i] === '$' && i + 1 < sql.length) {\n let num = 0\n let j = i + 1\n while (j < sql.length && sql[j] >= '0' && sql[j] <= '9') {\n num = num * 10 + (sql.charCodeAt(j) - 48)\n j++\n }\n\n if (j > i + 1) {\n parts.push(sql.substring(lastIndex, i))\n parts.push('?')\n reorderedParams.push(params[num - 1])\n i = j - 1\n lastIndex = j\n }\n }\n }\n\n parts.push(sql.substring(lastIndex))\n return { sql: parts.join(''), params: reorderedParams }\n}\n\nfunction canonicalizeQuery(\n modelName: string,\n method: PrismaMethod,\n args: Record<string, unknown>,\n): string {\n function normalize(obj: any): any {\n if (obj === null || obj === undefined) return obj\n\n if (obj instanceof Date) {\n return '__DATE_PARAM__'\n }\n\n if (Array.isArray(obj)) {\n return obj.map(normalize)\n }\n\n if (typeof obj === 'object') {\n const sorted: any = {}\n for (const key of Object.keys(obj).sort()) {\n const value = obj[key]\n sorted[key] = isDynamicParameter(value) ? '__DYN__' : normalize(value)\n }\n return sorted\n }\n\n return obj\n }\n\n const canonical = normalize(args)\n return `${modelName}:${method}:${JSON.stringify(canonical)}`\n}\n\nfunction buildSQLFull(\n model: Model,\n models: Model[],\n method: PrismaMethod,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult {\n const tableName = buildTableReference(\n SQL_TEMPLATES.PUBLIC_SCHEMA,\n model.tableName,\n dialect,\n )\n const alias = makeAlias(model.tableName)\n\n const whereResult = buildWhereClause(\n (args.where || {}) as Record<string, unknown>,\n {\n alias,\n schemaModels: models,\n model,\n path: ['where'],\n isSubquery: false,\n dialect,\n },\n )\n\n const withMethod = { ...args, method }\n let result: { sql: string; params: readonly unknown[] }\n\n switch (method) {\n case 'aggregate':\n result = buildAggregateSql(\n withMethod,\n whereResult,\n tableName,\n alias,\n model,\n )\n break\n case 'groupBy':\n result = buildGroupBySql(\n withMethod,\n whereResult,\n tableName,\n alias,\n model,\n dialect,\n )\n break\n case 'count':\n result = buildCountSql(\n whereResult,\n tableName,\n alias,\n args.skip as number,\n dialect,\n )\n break\n default:\n result = buildSelectSql({\n method,\n args: withMethod,\n model,\n schemas: models,\n from: { tableName, alias },\n whereResult,\n dialect,\n })\n }\n\n return dialect === 'sqlite'\n ? toSqliteParams(result.sql, result.params)\n : { sql: result.sql, params: [...result.params] }\n}\n\nexport function buildSQLWithCache(\n model: Model,\n models: Model[],\n method: PrismaMethod,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult {\n const cacheKey = canonicalizeQuery(model.name, method, args)\n const cachedSql = queryCache.get(cacheKey)\n\n if (cachedSql) {\n const result = buildSQLFull(model, models, method, args, dialect)\n return { sql: cachedSql, params: result.params }\n }\n\n const result = buildSQLFull(model, models, method, args, dialect)\n queryCache.set(cacheKey, result.sql)\n\n return result\n}\n\nexport { queryCache }\n","import {\n type Model,\n DirectiveProps,\n convertDMMFToModels,\n} from '@dee-wan/schema-parser'\nimport { DMMF } from '@prisma/generator-helper'\nimport { SQL_RESERVED_WORDS } from './builder/shared/constants'\nimport { setGlobalDialect, SqlDialect } from './sql-builder-dialect'\nimport {\n generateSQL as generateSQLInternal,\n SQLDirective,\n} from './sql-generator'\nimport { transformQueryResults, type PrismaMethod } from './result-transformers'\nimport { buildSQLWithCache } from './query-cache'\n\ninterface SqlResult {\n sql: string\n params: unknown[]\n}\n\ninterface SpeedExtensionConfig {\n postgres?: any\n sqlite?: any\n models?: Model[]\n dmmf?: DMMF.Document\n debug?: boolean\n allowedModels?: string[]\n onQuery?: (info: QueryInfo) => void\n}\n\ninterface QueryInfo {\n model: string\n method: string\n sql: string\n params: unknown[]\n duration: number\n}\n\nconst ACCELERATED_METHODS = new Set<PrismaMethod>([\n 'findMany',\n 'findFirst',\n 'findUnique',\n 'count',\n 'aggregate',\n 'groupBy',\n])\n\nfunction makeAlias(name: string): string {\n const base = name\n .toLowerCase()\n .replace(/[^a-z0-9_]/g, '_')\n .slice(0, 50)\n const safe = /^[a-z_]/.test(base) ? base : `_${base}`\n return SQL_RESERVED_WORDS.has(safe) ? `${safe}_t` : safe\n}\n\nfunction toSqliteParams(sql: string, params: readonly unknown[]): SqlResult {\n const positions: number[] = []\n\n const converted = sql.replace(/\\$(\\d+)/g, (_, num) => {\n positions.push(parseInt(num, 10))\n return '?'\n })\n\n const reordered = positions.map((pos) => {\n const idx = pos - 1\n if (idx < 0 || idx >= params.length) {\n throw new Error(`Param $${pos} out of bounds (have ${params.length})`)\n }\n return params[idx]\n })\n\n return { sql: converted, params: reordered }\n}\n\nexport function buildSQL(\n model: Model,\n models: Model[],\n method: PrismaMethod,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult {\n return buildSQLWithCache(model, models, method, args, dialect)\n}\n\nasync function executePostgres(\n client: any,\n sql: string,\n params: unknown[],\n): Promise<unknown[]> {\n return await client.unsafe(sql, params as any[])\n}\n\nfunction executeSqlite(db: any, sql: string, params: unknown[]): unknown[] {\n const stmt = db.prepare(sql)\n\n if (sql.toUpperCase().includes('COUNT(*) AS')) {\n return [stmt.get(...params)]\n }\n\n return stmt.all(...params)\n}\n\ntype ExecuteWithTimingInput = {\n modelName: string\n method: PrismaMethod\n model: Model\n allModels: Model[]\n args: Record<string, unknown>\n dialect: SqlDialect\n debug: boolean\n executeQuery: (sql: string, params: unknown[]) => Promise<unknown[]>\n onQuery?: (info: QueryInfo) => void\n}\n\nasync function executeWithTiming(\n input: ExecuteWithTimingInput,\n): Promise<unknown[]> {\n const startTime = Date.now()\n\n const { sql, params } = buildSQL(\n input.model,\n input.allModels,\n input.method,\n input.args,\n input.dialect,\n )\n\n if (input.debug) {\n console.log(`[${input.dialect}] ${input.modelName}.${input.method}`)\n console.log('SQL:', sql)\n console.log('Params:', params)\n }\n\n const results = await input.executeQuery(sql, params)\n const duration = Date.now() - startTime\n\n input.onQuery?.({\n model: input.modelName,\n method: input.method,\n sql,\n params,\n duration,\n })\n\n return results\n}\n\nfunction resolveModelName(ctx: any): string {\n return ctx?.name || ctx?.$name\n}\n\nfunction isAllowedModel(\n allowedModels: string[] | undefined,\n modelName: string,\n): boolean {\n if (!allowedModels) return true\n return allowedModels.includes(modelName)\n}\n\nfunction getModelOrNull(\n modelMap: Map<string, Model>,\n modelName: string,\n): Model | null {\n return modelMap.get(modelName) ?? null\n}\n\nfunction fallbackToPrisma(\n ctx: any,\n modelName: string,\n method: PrismaMethod,\n args: any,\n) {\n return ctx.$parent[modelName][method](args)\n}\n\nfunction createExecuteQuery(client: any, dialect: SqlDialect) {\n return async (sql: string, params: unknown[]): Promise<unknown[]> => {\n if (dialect === 'postgres') {\n return await executePostgres(client, sql, params)\n }\n return executeSqlite(client, sql, params)\n }\n}\n\nfunction logAcceleratedError(\n debug: boolean,\n dialect: SqlDialect,\n modelName: string,\n method: PrismaMethod,\n error: unknown,\n) {\n if (!debug) return\n console.error(`[${dialect}] ${modelName}.${method} failed:`, error)\n}\n\ntype AccelerationDeps = {\n dialect: SqlDialect\n debug: boolean\n onQuery?: (info: QueryInfo) => void\n allowedModels?: string[]\n allModels: Model[]\n modelMap: Map<string, Model>\n executeQuery: (sql: string, params: unknown[]) => Promise<unknown[]>\n}\n\nfunction canAccelerate(\n deps: AccelerationDeps,\n modelName: string,\n method: PrismaMethod,\n): boolean {\n if (!ACCELERATED_METHODS.has(method)) return false\n if (!isAllowedModel(deps.allowedModels, modelName)) return false\n return deps.modelMap.has(modelName)\n}\n\nasync function runAccelerated(\n deps: AccelerationDeps,\n modelName: string,\n method: PrismaMethod,\n model: Model,\n args: any,\n): Promise<unknown> {\n const results = await executeWithTiming({\n modelName,\n method,\n model,\n allModels: deps.allModels,\n args: (args || {}) as Record<string, unknown>,\n dialect: deps.dialect,\n debug: deps.debug,\n executeQuery: deps.executeQuery,\n onQuery: deps.onQuery,\n })\n\n return transformQueryResults(method, results)\n}\n\nasync function handleMethodCall(\n ctx: any,\n method: PrismaMethod,\n args: any,\n deps: AccelerationDeps,\n): Promise<any> {\n const modelName = resolveModelName(ctx)\n\n if (!canAccelerate(deps, modelName, method)) {\n return fallbackToPrisma(ctx, modelName, method, args)\n }\n\n const model = getModelOrNull(deps.modelMap, modelName)\n if (!model) {\n return fallbackToPrisma(ctx, modelName, method, args)\n }\n\n try {\n return await runAccelerated(deps, modelName, method, model, args)\n } catch (error) {\n logAcceleratedError(deps.debug, deps.dialect, modelName, method, error)\n return fallbackToPrisma(ctx, modelName, method, args)\n }\n}\n\n/**\n * Runtime-only Prisma extension for SQL acceleration.\n *\n * ⚠️ RECOMMENDED: Use generated extension instead for zero overhead!\n *\n * @example\n * // RECOMMENDED: Generated extension (no models/dmmf needed)\n * import { speedExtension } from './generated/sql'\n * const prisma = new PrismaClient().$extends(\n * speedExtension({ postgres: sql })\n * )\n *\n * @example\n * // Runtime with pre-converted models\n * import { speedExtension } from 'prisma-sql'\n * import { MODELS } from './generated/sql'\n * const prisma = new PrismaClient().$extends(\n * speedExtension({ postgres: sql, models: MODELS })\n * )\n *\n * @example\n * // Runtime with DMMF (auto-converts on startup)\n * import { speedExtension } from 'prisma-sql'\n * import { Prisma } from '@prisma/client'\n * const prisma = new PrismaClient().$extends(\n * speedExtension({ postgres: sql, dmmf: Prisma.dmmf })\n * )\n */\nexport function speedExtension(config: SpeedExtensionConfig) {\n const {\n postgres,\n sqlite,\n models: providedModels,\n dmmf,\n debug = false,\n allowedModels,\n onQuery,\n } = config\n\n if (!postgres && !sqlite) {\n throw new Error('speedExtension requires either postgres or sqlite client')\n }\n\n if (postgres && sqlite) {\n throw new Error(\n 'speedExtension cannot use both postgres and sqlite clients',\n )\n }\n\n let models: Model[]\n\n if (providedModels) {\n models = providedModels\n } else if (dmmf) {\n models = convertDMMFToModels(dmmf.datamodel)\n } else {\n throw new Error(\n 'speedExtension requires either models or dmmf parameter.\\n\\n' +\n '⚠️ RECOMMENDED APPROACH:\\n' +\n ' Use the generated extension for zero runtime overhead:\\n\\n' +\n ' import { speedExtension } from \"./generated/sql\"\\n' +\n ' const prisma = new PrismaClient().$extends(\\n' +\n ' speedExtension({ postgres: sql })\\n' +\n ' )\\n\\n' +\n ' 1. Add generator to schema.prisma:\\n' +\n ' generator sql {\\n' +\n ' provider = \"prisma-sql-generator\"\\n' +\n ' }\\n\\n' +\n ' 2. Run: npx prisma generate\\n\\n' +\n ' 3. Import from generated file\\n\\n' +\n '❌ RUNTIME-ONLY MODE:\\n' +\n ' If you cannot use the generator, provide models or dmmf:\\n\\n' +\n ' import { speedExtension } from \"prisma-sql\"\\n' +\n ' import { MODELS } from \"./generated/sql\"\\n' +\n ' const prisma = new PrismaClient().$extends(\\n' +\n ' speedExtension({ postgres: sql, models: MODELS })\\n' +\n ' )\\n\\n' +\n ' Or with DMMF (auto-converts on startup):\\n\\n' +\n ' import { Prisma } from \"@prisma/client\"\\n' +\n ' const prisma = new PrismaClient().$extends(\\n' +\n ' speedExtension({ postgres: sql, dmmf: Prisma.dmmf })\\n' +\n ' )',\n )\n }\n\n if (!Array.isArray(models) || models.length === 0) {\n throw new Error('speedExtension: models array is empty or invalid')\n }\n\n const dialect: SqlDialect = postgres ? 'postgres' : 'sqlite'\n const client = postgres || sqlite\n\n setGlobalDialect(dialect)\n\n return (prisma: any) => {\n const modelMap = new Map(models.map((m) => [m.name, m]))\n const executeQuery = createExecuteQuery(client, dialect)\n\n const deps: AccelerationDeps = {\n dialect,\n debug,\n onQuery,\n allowedModels,\n allModels: models,\n modelMap,\n executeQuery,\n }\n\n const createMethodHandler = (method: PrismaMethod) => {\n return async function (this: any, args: any) {\n return handleMethodCall(this, method, args, deps)\n }\n }\n\n const methodHandlers: Record<string, any> = {}\n for (const method of ACCELERATED_METHODS) {\n methodHandlers[method] = createMethodHandler(method)\n }\n\n return prisma.$extends({\n name: 'prisma-sql-speed',\n\n client: {\n $original: prisma,\n },\n\n model: {\n $allModels: methodHandlers,\n },\n })\n }\n}\n\nfunction createToSQLFunction(\n models: Model[],\n dialect: SqlDialect,\n): (\n model: string,\n method: PrismaMethod,\n args?: Record<string, unknown>,\n) => SqlResult {\n if (!models || !Array.isArray(models) || models.length === 0) {\n throw new Error('createToSQL requires non-empty models array')\n }\n\n const modelMap = new Map(models.map((m) => [m.name, m]))\n\n setGlobalDialect(dialect)\n\n return function toSQL(\n model: string,\n method: PrismaMethod,\n args: Record<string, unknown> = {},\n ): SqlResult {\n const m = modelMap.get(model)\n if (!m) {\n throw new Error(\n `Model '${model}' not found. Available: ${[...modelMap.keys()].join(', ')}`,\n )\n }\n return buildSQL(m, models, method, args, dialect)\n }\n}\n\n/**\n * Create a SQL generator function from models.\n *\n * @example\n * import { createToSQL } from 'prisma-sql'\n * import { MODELS } from './generated/sql'\n *\n * const toSQL = createToSQL(MODELS, 'postgres')\n * const { sql, params } = toSQL('User', 'findMany', {\n * where: { status: 'ACTIVE' }\n * })\n */\nexport function createToSQL(\n modelsOrDmmf: Model[] | DMMF.Document,\n dialect: SqlDialect,\n) {\n const models = Array.isArray(modelsOrDmmf)\n ? modelsOrDmmf\n : convertDMMFToModels((modelsOrDmmf as DMMF.Document).datamodel)\n\n return createToSQLFunction(models, dialect)\n}\n\ninterface PrismaSQLConfig<TClient> {\n client: TClient\n models?: Model[]\n dmmf?: DMMF.Document\n dialect: SqlDialect\n execute: (\n client: TClient,\n sql: string,\n params: unknown[],\n ) => Promise<unknown[]>\n}\n\n/**\n * Create a Prisma SQL client for environments where extensions aren't supported.\n *\n * @example\n * import { createPrismaSQL } from 'prisma-sql'\n * import { MODELS } from './generated/sql'\n *\n * const prismaSQL = createPrismaSQL({\n * client: sql,\n * models: MODELS,\n * dialect: 'postgres',\n * execute: (client, sql, params) => client.unsafe(sql, params)\n * })\n *\n * const users = await prismaSQL.query('User', 'findMany', {\n * where: { status: 'ACTIVE' }\n * })\n */\nexport function createPrismaSQL<TClient>(config: PrismaSQLConfig<TClient>) {\n const { client, models: providedModels, dmmf, dialect, execute } = config\n\n let models: Model[]\n\n if (providedModels) {\n models = providedModels\n } else if (dmmf) {\n models = convertDMMFToModels(dmmf.datamodel)\n } else {\n throw new Error('createPrismaSQL requires either models or dmmf parameter')\n }\n\n if (!Array.isArray(models) || models.length === 0) {\n throw new Error('createPrismaSQL: models array is empty or invalid')\n }\n\n const toSQL = createToSQLFunction(models, dialect)\n\n async function query<T = unknown[]>(\n model: string,\n method: PrismaMethod,\n args: Record<string, unknown> = {},\n ): Promise<T> {\n const { sql, params } = toSQL(model, method, args)\n return execute(client, sql, params) as Promise<T>\n }\n\n return { toSQL, query, client }\n}\n\nexport function generateSQL(directive: DirectiveProps): SQLDirective {\n return generateSQLInternal(directive)\n}\n\nexport function generateAllSQL(directives: DirectiveProps[]): SQLDirective[] {\n const results: SQLDirective[] = []\n const errors: Array<{ directive: DirectiveProps; error: Error }> = []\n\n for (const directive of directives) {\n try {\n results.push(generateSQL(directive))\n } catch (error) {\n errors.push({\n directive,\n error: error instanceof Error ? error : new Error(String(error)),\n })\n }\n }\n\n if (errors.length > 0) {\n console.warn(\n `[generateAllSQL] ${errors.length} directive(s) failed SQL generation`,\n )\n for (const { directive, error } of errors) {\n console.warn(\n ` - ${directive.modelName}.${directive.method}: ${error.message}`,\n )\n }\n }\n\n return results\n}\n\nexport function generateSQLByModel(\n directives: DirectiveProps[],\n): Map<string, SQLDirective[]> {\n const byModel = new Map<string, SQLDirective[]>()\n\n for (const directive of directives) {\n const sql = generateSQL(directive)\n\n if (!byModel.has(directive.modelName)) {\n byModel.set(directive.modelName, [])\n }\n\n byModel.get(directive.modelName)!.push(sql)\n }\n\n return byModel\n}\n\nexport type {\n SpeedExtensionConfig,\n QueryInfo,\n SqlResult,\n PrismaMethod,\n PrismaSQLConfig,\n}\n\nexport type { SqlDialect, SQLDirective }\nexport { setGlobalDialect, getGlobalDialect } from './sql-builder-dialect'\nexport type { Model, Field, PrismaQueryArgs } from './types'\nexport { convertDMMFToModels } from '@dee-wan/schema-parser'\nexport { transformQueryResults }\n"]}