prisma-sql 1.2.0 → 1.3.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/sql-builder-dialect.ts","../src/builder/shared/constants.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/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/shared/int-like.ts","../src/builder/shared/dynamic-params.ts","../src/builder/shared/order-by-utils.ts","../src/builder/pagination.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/index.ts"],"names":["s","isDynamicParameter","placeholder","COMPARISON_OPS","base","clause","extractDynamicName","e","c","v","selectExpr","sql","safeAlias","parts","baseSelect","normalizeOrderByInput","normalizeLogicalValue","assertScalarField","buildLogicalClause","convertDMMFToModels","generateSQL"],"mappings":"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","file":"index.cjs","sourcesContent":["export 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 'text[]'\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\n }\n return JSON.stringify(value)\n}\n","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","// 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","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'\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 containsUnsafeSqlFragmentChars(s: string): boolean {\n return containsControlChars(s) || s.includes(';')\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 col(alias: string, field: string): 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 return `${alias}.${quote(field)}`\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 (containsUnsafeSqlFragmentChars(a)) {\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 const t = String(tableRef)\n if (t.trim().length === 0) {\n throw new Error('tableName/tableRef is required and cannot be empty')\n }\n if (containsUnsafeSqlFragmentChars(t)) {\n throw new Error(\n `tableName/tableRef contains unsafe characters: ${JSON.stringify(t)}`,\n )\n }\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 { quote, 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 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}.${quote(ref)}`\n : `${childAlias}.${quote(fk)}`\n const right = field.isForeignKeyLocal\n ? `${parentAlias}.${quote(fk)}`\n : `${parentAlias}.${quote(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 {\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.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)\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 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 { 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'\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 normalizeValue(value: unknown): unknown {\n if (value instanceof Date) {\n return value.toISOString()\n }\n return value\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 { 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 } 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): 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)\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): {\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(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): string {\n return `(SELECT ${cursorAlias}.${quote(field)} ${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): string {\n const parts: string[] = []\n\n for (const [field, value] of Object.entries(cursor)) {\n const c = col(outerAlias, field)\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): 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)\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 )\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)\n const v = cursorValueExpr(tableName, cursorAlias, cursorWhereSql, e.field)\n andParts.push(buildCursorEqualityExpr(c, v))\n }\n\n const e = orderEntries[level]\n const c = col(alias, e.field)\n const v = cursorValueExpr(tableName, cursorAlias, cursorWhereSql, 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 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): string {\n const entries = buildOrderEntries(orderBy)\n if (entries.length === 0) return ''\n\n const d = dialect ?? getGlobalDialect()\n return buildOrderByFragment(entries, alias, d)\n}\n\nexport function buildOrderByClause(\n args: PrismaQueryArgs,\n alias: string,\n dialect?: SqlDialect,\n): string {\n if (!isNotNullish(args.orderBy)) return ''\n\n const result = buildOrderBy(args.orderBy, alias, dialect)\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 { Model } from '../../types'\nimport { SCHEMA_PREFIXES, SQL_SEPARATORS } from '../shared/constants'\nimport {\n getScalarFieldSet,\n getRelationFieldSet,\n} from '../shared/model-field-cache'\nimport { col, 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(col(alias, f.name))\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) => col(alias, field))\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(`${sqlStringLiteral(field.name)}, ${col(alias, field.name)}`)\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): 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)}`)\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(entries, scalarNames, relAlias).join(\n SQL_SEPARATORS.FIELD_LIST,\n )\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): string {\n return isNotNullish(finalOrderByInput)\n ? buildOrderBy(finalOrderByInput, relAlias, dialect)\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(field, ctx.parentAlias, relAlias)\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(finalOrderByInput, relAlias, ctx.dialect)\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'\n\nconst SIMPLE_SELECT_RE_CACHE = new Map<string, RegExp>()\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: snapshot.params,\n paramMappings: 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): string {\n return distinct.map((f) => col(fromAlias, f)).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}): string {\n const { baseOrder, idField, fromAlias } = 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')} 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)\n\n const fallbackOrder = [...distinct]\n .map((f) => `${col(from.alias, f)} ASC`)\n .join(SQL_SEPARATORS.FIELD_LIST)\n\n const idField = model.fields.find((f) => f.name === 'id' && !f.isRelation)\n const baseOrder = isNonEmptyString(orderBy) ? orderBy : fallbackOrder\n\n const windowOrder = buildWindowOrder({\n baseOrder,\n idField,\n fromAlias: from.alias,\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): string | null {\n if (!isNonEmptyArray(distinct)) return null\n const distinctCols = buildDistinctColumns([...distinct], fromAlias)\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 } = 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)\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(normalizedArgs, alias, dialect)\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'\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 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): string {\n if (aggKey === '_count') {\n return field === '_all' ? `COUNT(*)` : `COUNT(${col(alias, field)})`\n }\n if (field === '_all') {\n throw new Error(`'${aggKey}' does not support '_all'`)\n }\n if (aggKey === '_sum') return `SUM(${col(alias, field)})`\n if (aggKey === '_avg') return `AVG(${col(alias, field)})`\n if (aggKey === '_min') return `MIN(${col(alias, field)})`\n return `MAX(${col(alias, field)})`\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)\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)\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): void {\n const outAlias = `_count.${fieldName}`\n fields.push(\n `COUNT(${col(alias, fieldName)}) ${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)\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): void {\n const outAlias = `${agg}.${fieldName}`\n fields.push(\n `${aggFn}(${col(alias, fieldName)}) ${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)\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([...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))\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 return Object.freeze({\n sql,\n params: Object.freeze([...whereResult.params, ...snapshot.params]),\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(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 header: string\n sql: string\n staticParams: any[]\n dynamicKeys: string[]\n paramMappings: readonly ParamMap[]\n cache: DirectiveProps['cache']\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 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 processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n schemaModels,\n dialect,\n } = args\n\n const method = getMethodFromProcessed(processed)\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 header: directive.header,\n sql: normalizedSql,\n staticParams,\n dynamicKeys,\n paramMappings: normalizedMappings,\n cache: directive.cache,\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 normalized = buildAndNormalizeSql({\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 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}\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","import {\n convertDMMFToModels,\n type Model,\n DirectiveProps,\n} from '@dee-wan/schema-parser'\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'\n\ninterface SqlResult {\n sql: string\n params: unknown[]\n}\n\ninterface SpeedExtensionConfig {\n postgres?: any\n sqlite?: any\n dmmf?: any\n debug?: boolean\n models?: 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\nfunction buildSQL(\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\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\nexport function speedExtension(config: SpeedExtensionConfig) {\n const {\n postgres,\n sqlite,\n dmmf: providedDmmf,\n debug = false,\n models: 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 const dialect: SqlDialect = postgres ? 'postgres' : 'sqlite'\n const client = postgres || sqlite\n\n setGlobalDialect(dialect)\n\n return (prisma: any) => {\n let dmmf = providedDmmf\n\n if (!dmmf) {\n dmmf = prisma._dmmf || prisma._engineConfig?.document || prisma._baseDmmf\n\n if (!dmmf?.datamodel) {\n throw new Error(\n 'Cannot access Prisma DMMF. Please provide dmmf in config: speedExtension({ postgres: sql, dmmf: Prisma.dmmf })',\n )\n }\n }\n\n const allModels = convertDMMFToModels(dmmf.datamodel)\n const modelMap = new Map(allModels.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,\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: 'speed-extension',\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 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\nexport function createToSQL(dmmf: any, dialect: SqlDialect) {\n const models = convertDMMFToModels(dmmf.datamodel)\n return createToSQLFunction(models, dialect)\n}\n\ninterface PrismaSQLConfig<TClient> {\n client: TClient\n dmmf: any\n dialect: SqlDialect\n execute: (\n client: TClient,\n sql: string,\n params: unknown[],\n ) => Promise<unknown[]>\n}\n\nexport function createPrismaSQL<TClient>(config: PrismaSQLConfig<TClient>) {\n const { client, dmmf, dialect, execute } = config\n const models = convertDMMFToModels(dmmf.datamodel)\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.header}: ${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'\n"]}
1
+ {"version":3,"sources":["../src/sql-builder-dialect.ts","../src/builder/shared/constants.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/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/shared/int-like.ts","../src/builder/shared/dynamic-params.ts","../src/builder/shared/order-by-utils.ts","../src/builder/pagination.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/index.ts"],"names":["s","isDynamicParameter","placeholder","COMPARISON_OPS","base","clause","extractDynamicName","e","c","v","selectExpr","sql","safeAlias","parts","baseSelect","normalizeOrderByInput","normalizeLogicalValue","assertScalarField","buildLogicalClause","convertDMMFToModels","generateSQL"],"mappings":"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","file":"index.cjs","sourcesContent":["export 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 'text[]'\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\n }\n return JSON.stringify(value)\n}\n","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","// 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","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'\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 containsUnsafeSqlFragmentChars(s: string): boolean {\n return containsControlChars(s) || s.includes(';')\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 col(alias: string, field: string): 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 return `${alias}.${quote(field)}`\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 (containsUnsafeSqlFragmentChars(a)) {\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 const t = String(tableRef)\n if (t.trim().length === 0) {\n throw new Error('tableName/tableRef is required and cannot be empty')\n }\n if (containsUnsafeSqlFragmentChars(t)) {\n throw new Error(\n `tableName/tableRef contains unsafe characters: ${JSON.stringify(t)}`,\n )\n }\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 { quote, 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 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}.${quote(ref)}`\n : `${childAlias}.${quote(fk)}`\n const right = field.isForeignKeyLocal\n ? `${parentAlias}.${quote(fk)}`\n : `${parentAlias}.${quote(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 {\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.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)\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 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 { 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'\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 normalizeValue(value: unknown): unknown {\n if (value instanceof Date) {\n return value.toISOString()\n }\n return value\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 { 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 } 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): 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)\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): {\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(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): string {\n return `(SELECT ${cursorAlias}.${quote(field)} ${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): string {\n const parts: string[] = []\n\n for (const [field, value] of Object.entries(cursor)) {\n const c = col(outerAlias, field)\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): 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)\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 )\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)\n const v = cursorValueExpr(tableName, cursorAlias, cursorWhereSql, e.field)\n andParts.push(buildCursorEqualityExpr(c, v))\n }\n\n const e = orderEntries[level]\n const c = col(alias, e.field)\n const v = cursorValueExpr(tableName, cursorAlias, cursorWhereSql, 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 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): string {\n const entries = buildOrderEntries(orderBy)\n if (entries.length === 0) return ''\n\n const d = dialect ?? getGlobalDialect()\n return buildOrderByFragment(entries, alias, d)\n}\n\nexport function buildOrderByClause(\n args: PrismaQueryArgs,\n alias: string,\n dialect?: SqlDialect,\n): string {\n if (!isNotNullish(args.orderBy)) return ''\n\n const result = buildOrderBy(args.orderBy, alias, dialect)\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 { Model } from '../../types'\nimport { SCHEMA_PREFIXES, SQL_SEPARATORS } from '../shared/constants'\nimport {\n getScalarFieldSet,\n getRelationFieldSet,\n} from '../shared/model-field-cache'\nimport { col, 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(col(alias, f.name))\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) => col(alias, field))\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(`${sqlStringLiteral(field.name)}, ${col(alias, field.name)}`)\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): 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)}`)\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(entries, scalarNames, relAlias).join(\n SQL_SEPARATORS.FIELD_LIST,\n )\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): string {\n return isNotNullish(finalOrderByInput)\n ? buildOrderBy(finalOrderByInput, relAlias, dialect)\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(field, ctx.parentAlias, relAlias)\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(finalOrderByInput, relAlias, ctx.dialect)\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'\n\nconst SIMPLE_SELECT_RE_CACHE = new Map<string, RegExp>()\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: snapshot.params,\n paramMappings: 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): string {\n return distinct.map((f) => col(fromAlias, f)).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}): string {\n const { baseOrder, idField, fromAlias } = 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')} 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)\n\n const fallbackOrder = [...distinct]\n .map((f) => `${col(from.alias, f)} ASC`)\n .join(SQL_SEPARATORS.FIELD_LIST)\n\n const idField = model.fields.find((f) => f.name === 'id' && !f.isRelation)\n const baseOrder = isNonEmptyString(orderBy) ? orderBy : fallbackOrder\n\n const windowOrder = buildWindowOrder({\n baseOrder,\n idField,\n fromAlias: from.alias,\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): string | null {\n if (!isNonEmptyArray(distinct)) return null\n const distinctCols = buildDistinctColumns([...distinct], fromAlias)\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 } = 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)\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(normalizedArgs, alias, dialect)\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'\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 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): string {\n if (aggKey === '_count') {\n return field === '_all' ? `COUNT(*)` : `COUNT(${col(alias, field)})`\n }\n if (field === '_all') {\n throw new Error(`'${aggKey}' does not support '_all'`)\n }\n if (aggKey === '_sum') return `SUM(${col(alias, field)})`\n if (aggKey === '_avg') return `AVG(${col(alias, field)})`\n if (aggKey === '_min') return `MIN(${col(alias, field)})`\n return `MAX(${col(alias, field)})`\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)\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)\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): void {\n const outAlias = `_count.${fieldName}`\n fields.push(\n `COUNT(${col(alias, fieldName)}) ${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)\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): void {\n const outAlias = `${agg}.${fieldName}`\n fields.push(\n `${aggFn}(${col(alias, fieldName)}) ${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)\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([...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))\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 return Object.freeze({\n sql,\n params: Object.freeze([...whereResult.params, ...snapshot.params]),\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(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 header: string\n sql: string\n staticParams: any[]\n dynamicKeys: string[]\n paramMappings: readonly ParamMap[]\n cache: DirectiveProps['cache']\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 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 processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n schemaModels,\n dialect,\n } = args\n\n const method = getMethodFromProcessed(processed)\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 header: directive.header,\n sql: normalizedSql,\n staticParams,\n dynamicKeys,\n paramMappings: normalizedMappings,\n cache: directive.cache,\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 normalized = buildAndNormalizeSql({\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 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}\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","import {\n convertDMMFToModels,\n type Model,\n DirectiveProps,\n} from '@dee-wan/schema-parser'\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'\n\ninterface SqlResult {\n sql: string\n params: unknown[]\n}\n\ninterface SpeedExtensionConfig {\n postgres?: any\n sqlite?: any\n models: Model[]\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\nfunction buildSQL(\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\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\nexport function speedExtension(config: SpeedExtensionConfig) {\n const {\n postgres,\n sqlite,\n models,\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 if (!models || !Array.isArray(models) || models.length === 0) {\n throw new Error(\n 'speedExtension requires models parameter. ' +\n 'Convert DMMF first: speedExtension({ models: convertDMMFToModels(Prisma.dmmf.datamodel) })',\n )\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: 'speed-extension',\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\nexport function createToSQL(models: Model[], dialect: SqlDialect) {\n return createToSQLFunction(models, dialect)\n}\n\ninterface PrismaSQLConfig<TClient> {\n client: TClient\n models: Model[]\n dialect: SqlDialect\n execute: (\n client: TClient,\n sql: string,\n params: unknown[],\n ) => Promise<unknown[]>\n}\n\nexport function createPrismaSQL<TClient>(config: PrismaSQLConfig<TClient>) {\n const { client, models, dialect, execute } = config\n\n if (!models || !Array.isArray(models) || models.length === 0) {\n throw new Error('createPrismaSQL requires non-empty models array')\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.header}: ${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'\n"]}