prisma-sql 1.66.0 → 1.67.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.
- package/dist/generator.cjs +7511 -8015
- package/dist/generator.cjs.map +1 -1
- package/dist/generator.js +7511 -8015
- package/dist/generator.js.map +1 -1
- package/dist/index.cjs +804 -1327
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +10 -4
- package/dist/index.d.ts +10 -4
- package/dist/index.js +804 -1327
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/normalize-value.ts","../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/validators/sql-validators.ts","../src/builder/shared/sql-utils.ts","../src/builder/shared/model-field-cache.ts","../src/builder/joins.ts","../src/builder/shared/int-like.ts","../src/builder/shared/dynamic-params.ts","../src/builder/shared/order-by-utils.ts","../src/builder/shared/order-by-determinism.ts","../src/builder/shared/primary-key-utils.ts","../src/builder/shared/validators/field-assertions.ts","../src/builder/pagination.ts","../src/builder/shared/null-comparison.ts","../src/builder/shared/in-operator-builder.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/array-utils.ts","../src/builder/where/builder.ts","../src/builder/shared/alias-generator.ts","../src/builder/shared/param-store.ts","../src/builder/shared/state.ts","../src/builder/where.ts","../src/builder/select/fields.ts","../src/builder/shared/relation-key-utils.ts","../src/builder/shared/relation-extraction-utils.ts","../src/builder/select/includes.ts","../src/builder/shared/string-builder.ts","../src/builder/shared/relation-utils.ts","../src/builder/select/flat-join.ts","../src/builder/select/assembly.ts","../src/builder/select.ts","../src/builder/shared/comparison-builder.ts","../src/builder/aggregates.ts","../src/sql-generator.ts","../src/utils/s3-fifo.ts","../src/fast-path.ts","../src/query-cache.ts","../src/result-transformers.ts","../src/batch.ts","../src/transaction.ts","../src/builder/shared/key-utils.ts","../src/builder/select/reducer.ts","../src/builder/select/segment-planner.ts","../src/builder/shared/where-in-executor-base.ts","../src/builder/where-in-executor.ts","../src/builder/select/core-reducer.ts","../src/builder/select/streaming-reducer.ts","../src/builder/select/streaming-progressive-reducer.ts","../src/builder/select/streaming-where-in-executor.ts","../src/builder/select/row-transformers.ts","../src/generated-runtime.ts","../src/index.ts"],"names":["s","isDynamicParameter","extractDynamicName","normalizeField","e","c","cursorField","ph","separator","placeholder","COMPARISON_OPS","base","clause","selectExpr","sql","isList","hasNestedIncludes","parts","normalizeOrderByInput","normalizeLogicalValue","MAX_NOT_DEPTH","buildLogicalClause","convertDMMFToModels","extractIncludeSpec","node","created","processRelation","createStreamingReducer","results","generateSQL","config"],"mappings":"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","file":"index.cjs","sourcesContent":["const MAX_DEPTH = 20\n\nexport function normalizeValue(\n value: unknown,\n seen = new WeakSet<object>(),\n depth = 0,\n): unknown {\n if (depth > MAX_DEPTH) {\n throw new Error(`Max normalization depth exceeded (${MAX_DEPTH} levels)`)\n }\n if (value instanceof Date) {\n return normalizeDateValue(value)\n }\n if (typeof value === 'bigint') {\n return value.toString()\n }\n if (Array.isArray(value)) {\n return normalizeArrayValue(value, seen, depth)\n }\n if (value && typeof value === 'object') {\n return normalizeObjectValue(value, seen, depth)\n }\n return value\n}\n\nfunction normalizeDateValue(date: Date): string {\n const t = date.getTime()\n if (!Number.isFinite(t)) {\n throw new Error('Invalid Date value in SQL params')\n }\n return date.toISOString()\n}\n\nfunction normalizeArrayValue(\n value: unknown[],\n seen: WeakSet<object>,\n depth: number,\n): unknown[] {\n const arrRef = value as unknown as object\n if (seen.has(arrRef)) {\n throw new Error('Circular reference in SQL params')\n }\n seen.add(arrRef)\n const out = value.map((v) => normalizeValue(v, seen, depth + 1))\n seen.delete(arrRef)\n return out\n}\n\nfunction normalizeObjectValue(\n value: object,\n seen: WeakSet<object>,\n depth: number,\n): unknown {\n if (value instanceof Uint8Array) return value\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) return value\n\n const proto = Object.getPrototypeOf(value)\n const isPlain = proto === Object.prototype || proto === null\n if (!isPlain) return value\n\n const obj = value as Record<string, unknown>\n if (seen.has(obj)) {\n throw new Error('Circular reference in SQL params')\n }\n seen.add(obj)\n const out: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(obj)) {\n out[k] = normalizeValue(v, seen, depth + 1)\n }\n seen.delete(obj)\n return out\n}\n","import { normalizeValue } from './utils/normalize-value'\n\nexport type SqlDialect = 'postgres' | 'sqlite'\n\nlet globalDialect: SqlDialect = 'postgres'\n\nexport function setGlobalDialect(dialect: SqlDialect): void {\n if (dialect !== 'postgres' && dialect !== 'sqlite') {\n throw new Error(\n `Invalid dialect: ${dialect}. Must be 'postgres' or 'sqlite'`,\n )\n }\n globalDialect = dialect\n}\n\nexport function getGlobalDialect(): SqlDialect {\n return globalDialect\n}\n\nexport function withDialect<T>(dialect: SqlDialect, fn: () => T): T {\n const prev = globalDialect\n globalDialect = dialect\n try {\n const result = fn()\n if (result instanceof Promise) {\n throw new Error(\n 'withDialect cannot be used with async functions. ' +\n 'Pass dialect explicitly to buildSQL() instead of relying on global state.',\n )\n }\n return result\n } finally {\n globalDialect = prev\n }\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 if (dialect === 'postgres') {\n return `${column} @> ARRAY[${value}]::${arrayType}`\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 if (dialect === 'postgres') {\n return `${column} && ${value}::${arrayType}`\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 if (dialect === 'postgres') {\n return `${column} @> ${value}::${arrayType}`\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 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 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 if (dialect === 'postgres') {\n return `${column} = ${value}::${arrayType}`\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 if (dialect === 'postgres') {\n return `${column} ILIKE ${pattern}`\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 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 if (dialect === 'postgres') {\n const p = String(path).trim()\n const pathExpr = /^\\$\\d+$/.test(p) ? `${p}::text[]` : p\n return `${column}#>>${pathExpr}`\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 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 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 if (dialect === 'postgres') {\n return `${column} = ANY(${value})`\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 if (dialect === 'postgres') {\n return `${column} != ALL(${value})`\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 if (dialect === 'sqlite') {\n return 'TEXT'\n }\n const baseType = prismaType.replace(/\\[\\]|\\?/g, '')\n switch (baseType) {\n case 'String':\n return 'text[]'\n case 'Int':\n return 'integer[]'\n case 'Float':\n return 'double precision[]'\n case 'Decimal':\n return 'numeric[]'\n case 'Boolean':\n return 'boolean[]'\n case 'BigInt':\n return 'bigint[]'\n case 'DateTime':\n return 'timestamptz[]'\n default:\n return `\"${baseType}\"[]`\n }\n}\n\nexport function jsonAgg(content: string, dialect: SqlDialect): string {\n assertNonEmpty(content, 'jsonAgg content')\n if (dialect === 'postgres') {\n return `json_agg(${content})`\n }\n return `json_group_array(${content})`\n}\n\nexport function jsonBuildObject(pairs: string, dialect: SqlDialect): string {\n const safePairs = (pairs ?? '').trim()\n if (dialect === 'postgres') {\n return safePairs.length > 0\n ? `json_build_object(${safePairs})`\n : `json_build_object()`\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 if (dialect === 'postgres') {\n return value.map((v) => normalizeValue(v))\n }\n return JSON.stringify(value.map((v) => normalizeValue(v)))\n}\n","export const IS_PRODUCTION = process.env.NODE_ENV === 'production'\n\nexport const SQL_SEPARATORS = Object.freeze({\n FIELD_LIST: ', ',\n CONDITION_AND: ' AND ',\n CONDITION_OR: ' OR ',\n ORDER_BY: ', ',\n} as const)\n\nexport const ALIAS_FORBIDDEN_KEYWORDS = new Set([\n 'select',\n 'from',\n 'where',\n 'having',\n 'order',\n 'group',\n 'limit',\n 'offset',\n 'join',\n 'inner',\n 'left',\n 'right',\n 'outer',\n 'cross',\n 'full',\n 'and',\n 'or',\n 'not',\n 'by',\n 'as',\n 'on',\n 'union',\n 'intersect',\n 'except',\n 'case',\n 'when',\n 'then',\n 'else',\n 'end',\n])\n\nexport const SQL_KEYWORDS = new Set([\n ...ALIAS_FORBIDDEN_KEYWORDS,\n 'user',\n 'users',\n 'table',\n 'column',\n 'index',\n 'values',\n 'in',\n 'like',\n 'between',\n 'is',\n 'exists',\n 'null',\n 'true',\n 'false',\n 'all',\n 'any',\n 'some',\n 'update',\n 'insert',\n 'delete',\n 'create',\n 'drop',\n 'alter',\n 'truncate',\n 'grant',\n 'revoke',\n 'exec',\n 'execute',\n])\n\nexport const SQL_RESERVED_WORDS = SQL_KEYWORDS\n\nexport const DEFAULT_WHERE_CLAUSE = '1=1' as const\n\nexport const SPECIAL_FIELDS = Object.freeze({\n ID: 'id',\n} as const)\n\nexport const SQL_TEMPLATES = Object.freeze({\n PUBLIC_SCHEMA: 'public',\n WHERE: 'WHERE',\n SELECT: 'SELECT',\n FROM: 'FROM',\n ORDER_BY: 'ORDER BY',\n GROUP_BY: 'GROUP BY',\n HAVING: 'HAVING',\n LIMIT: 'LIMIT',\n OFFSET: 'OFFSET',\n COUNT_ALL: 'COUNT(*)',\n AS: 'AS',\n DISTINCT_ON: 'DISTINCT ON',\n IS_NULL: 'IS NULL',\n IS_NOT_NULL: 'IS NOT NULL',\n LIKE: 'LIKE',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n} as const)\n\nexport const SCHEMA_PREFIXES = Object.freeze({\n INTERNAL: '@',\n COMMENT: '//',\n} as const)\n\nexport const Ops = Object.freeze({\n EQUALS: 'equals',\n NOT: 'not',\n GT: 'gt',\n GTE: 'gte',\n LT: 'lt',\n LTE: 'lte',\n IN: 'in',\n NOT_IN: 'notIn',\n CONTAINS: 'contains',\n STARTS_WITH: 'startsWith',\n ENDS_WITH: 'endsWith',\n HAS: 'has',\n HAS_SOME: 'hasSome',\n HAS_EVERY: 'hasEvery',\n IS_EMPTY: 'isEmpty',\n PATH: 'path',\n STRING_CONTAINS: 'string_contains',\n STRING_STARTS_WITH: 'string_starts_with',\n STRING_ENDS_WITH: 'string_ends_with',\n} as const)\n\nexport const LogicalOps = Object.freeze({\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n} as const)\n\nexport const RelationFilters = Object.freeze({\n SOME: 'some',\n EVERY: 'every',\n NONE: 'none',\n} as const)\n\nexport const Modes = Object.freeze({\n INSENSITIVE: 'insensitive',\n DEFAULT: 'default',\n} as const)\n\nexport const Wildcards: Readonly<Record<string, (v: string) => string>> =\n Object.freeze({\n [Ops.CONTAINS]: (v: string) => `%${v}%`,\n [Ops.STARTS_WITH]: (v: string) => `${v}%`,\n [Ops.ENDS_WITH]: (v: string) => `%${v}`,\n })\n\nexport const REGEX_CACHE = {\n PARAM_PLACEHOLDER: /\\$(\\d+)/g,\n VALID_IDENTIFIER: /^[a-z_][a-z0-9_]*$/,\n} as const\n\nexport const LIMITS = Object.freeze({\n MAX_QUERY_DEPTH: 50,\n MAX_ARRAY_SIZE: 10000,\n MAX_STRING_LENGTH: 10000,\n MAX_HAVING_DEPTH: 50,\n} as const)\n\nexport const AGGREGATE_PREFIXES = new Set([\n '_count',\n '_sum',\n '_avg',\n '_min',\n '_max',\n]) as ReadonlySet<string>\n","/**\n * Type Guards and Checks\n * Pure type checking with no business logic\n */\nexport function isNotNullish<T>(\n value: T | null | undefined,\n): value is NonNullable<T> {\n return value !== null && value !== undefined\n}\n\nexport function isNonEmptyString(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0\n}\n\nexport function isEmptyString(value: unknown): boolean {\n return typeof value === 'string' && value.trim().length === 0\n}\n\nexport function isNonEmptyArray<T>(value: unknown): value is T[] {\n return Array.isArray(value) && value.length > 0\n}\n\nexport function isEmptyArray(value: unknown): boolean {\n return Array.isArray(value) && value.length === 0\n}\n\nexport function isPlainObject(val: unknown): val is Record<string, unknown> {\n if (!isNotNullish(val)) return false\n if (Array.isArray(val)) return false\n if (typeof val !== 'object') return false\n return Object.prototype.toString.call(val) === '[object Object]'\n}\n\nexport function hasProperty<K extends string>(\n obj: unknown,\n key: K,\n): obj is Record<K, unknown> {\n return isPlainObject(obj) && key in obj\n}\n\nexport function isArrayType(t: string | undefined): boolean {\n if (!isNotNullish(t)) return false\n const normalized = t.replace(/\\?$/, '')\n return normalized.endsWith('[]')\n}\n\nexport function isJsonType(t: string | undefined): boolean {\n return isNotNullish(t) && (t === 'Json' || t === 'Json?')\n}\n\nexport function hasValidContent(sql: string): boolean {\n return isNotNullish(sql) && sql.trim().length > 0\n}\n\nexport function hasRequiredKeywords(sql: string): boolean {\n const upper = sql.toUpperCase()\n const hasSelect = upper.includes('SELECT')\n const hasFrom = upper.includes('FROM')\n return hasSelect && hasFrom && upper.indexOf('SELECT') < upper.indexOf('FROM')\n}\n","import { ErrorContext } from './types'\nimport { isNonEmptyArray, isNotNullish } from './validators/type-guards'\n\ntype SqlBuilderErrorCode =\n | 'FIELD_NOT_FOUND'\n | 'INVALID_OPERATOR'\n | 'INVALID_VALUE'\n | 'RELATION_ERROR'\n | 'PARAM_ERROR'\n | 'SQL_ERROR'\n | 'VALIDATION_ERROR'\n | 'CRITICAL'\n\nclass SqlBuilderError extends Error {\n public readonly code: SqlBuilderErrorCode\n public readonly context?: ErrorContext\n\n constructor(\n message: string,\n code: SqlBuilderErrorCode,\n context?: ErrorContext,\n ) {\n super(message)\n this.name = 'SqlBuilderError'\n this.code = code\n this.context = context\n }\n}\n\nexport function createError(\n message: string,\n ctx: ErrorContext,\n code: SqlBuilderErrorCode = 'VALIDATION_ERROR',\n): SqlBuilderError {\n const parts = [message]\n\n if (isNonEmptyArray(ctx.path)) {\n parts.push(`Path: ${ctx.path.join('.')}`)\n }\n\n if (isNotNullish(ctx.modelName)) {\n parts.push(`Model: ${ctx.modelName}`)\n }\n\n if (isNonEmptyArray(ctx.availableFields)) {\n parts.push(`Available fields: ${ctx.availableFields.join(', ')}`)\n }\n\n return new SqlBuilderError(parts.join('\\n'), code, ctx)\n}\n","import {\n DEFAULT_WHERE_CLAUSE,\n REGEX_CACHE,\n SQL_KEYWORDS,\n IS_PRODUCTION,\n} from '../constants'\nimport {\n isNotNullish,\n hasValidContent,\n hasRequiredKeywords,\n} from './type-guards'\nimport { SqlDialect } from '../../../sql-builder-dialect'\n\nexport function isValidWhereClause(clause: string): boolean {\n return (\n isNotNullish(clause) &&\n clause.trim().length > 0 &&\n clause !== DEFAULT_WHERE_CLAUSE\n )\n}\n\nexport function isEmptyWhere(\n where: Record<string, unknown> | null | undefined,\n): boolean {\n if (!isNotNullish(where)) return true\n return Object.keys(where).length === 0\n}\n\nfunction sqlPreview(sql: string): string {\n const s = String(sql)\n if (s.length <= 160) return s\n return `${s.slice(0, 160)}...`\n}\n\nexport function validateSelectQuery(sql: string): void {\n if (IS_PRODUCTION) return\n\n if (!hasValidContent(sql)) {\n throw new Error('CRITICAL: Generated empty SQL query')\n }\n\n if (!hasRequiredKeywords(sql)) {\n throw new Error(`CRITICAL: Invalid SQL structure. SQL: ${sqlPreview(sql)}`)\n }\n}\n\ntype DollarScan = {\n min: number\n max: number\n seen: Uint8Array\n sawAny: boolean\n}\n\nfunction parseDollarNumber(\n sql: string,\n start: number,\n): { next: number; num: number } {\n const n = sql.length\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 }\n return { next: i, num }\n}\n\nconst MAX_PARAMS = 32767\n\nfunction scanDollarPlaceholders(sql: string, markUpTo: number): DollarScan {\n if (markUpTo > MAX_PARAMS) {\n throw new Error(`Parameter count ${markUpTo} exceeds maximum ${MAX_PARAMS}`)\n }\n\n const seen = new Uint8Array(markUpTo + 1)\n let min = Number.POSITIVE_INFINITY\n let max = 0\n let sawAny = false\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 parsed = parseDollarNumber(sql, i + 1)\n i = parsed.next\n\n const num = parsed.num\n if (num === 0) continue\n\n sawAny = true\n if (num < min) min = num\n if (num > max) max = num\n if (num <= markUpTo) seen[num] = 1\n }\n\n if (!sawAny) {\n return { min: 0, max: 0, seen, sawAny: false }\n }\n\n return { min, max, seen, sawAny: true }\n}\n\nfunction assertNoGapsDollar(\n scan: DollarScan,\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 if (IS_PRODUCTION) return\n\n const paramLen = params.length\n const scan = scanDollarPlaceholders(sql, paramLen)\n\n if (paramLen === 0) {\n if (scan.sawAny) {\n throw new Error(\n `CRITICAL: SQL contains placeholders but params is empty. SQL: ${sqlPreview(sql)}`,\n )\n }\n return\n }\n\n if (!scan.sawAny) {\n throw new Error(\n `CRITICAL: SQL is missing placeholders ($1..$${paramLen}) but params has length ${paramLen}. SQL: ${sqlPreview(sql)}`,\n )\n }\n\n if (scan.min !== 1) {\n throw new Error(\n `CRITICAL: Placeholder range must start at $1, got min=$${scan.min}. SQL: ${sqlPreview(sql)}`,\n )\n }\n\n if (scan.max !== paramLen) {\n throw new Error(\n `CRITICAL: Placeholder max must match params length. max=$${scan.max}, params=${paramLen}. SQL: ${sqlPreview(sql)}`,\n )\n }\n\n assertNoGapsDollar(scan, 1, paramLen, sql)\n}\n\nfunction countQuestionMarkPlaceholders(sql: string): number {\n const s = String(sql)\n let count = 0\n for (let i = 0; i < s.length; i++) {\n if (s.charCodeAt(i) === 63) count++\n }\n return count\n}\n\nfunction validateQuestionMarkConsistency(\n sql: string,\n params: readonly unknown[],\n): void {\n if (IS_PRODUCTION) return\n\n const expected = params.length\n const found = countQuestionMarkPlaceholders(sql)\n\n if (expected !== found) {\n throw new Error(\n `CRITICAL: Parameter mismatch - expected ${expected} '?' placeholders, found ${found}. SQL: ${sqlPreview(sql)}`,\n )\n }\n}\n\nexport function validateParamConsistencyByDialect(\n sql: string,\n params: readonly unknown[],\n dialect: SqlDialect,\n): void {\n if (IS_PRODUCTION) return\n\n if (dialect === 'postgres') {\n validateParamConsistency(sql, params)\n return\n }\n\n if (dialect === 'sqlite') {\n validateQuestionMarkConsistency(sql, params)\n return\n }\n\n if ((dialect as any) === 'mysql' || (dialect as any) === 'mariadb') {\n validateQuestionMarkConsistency(sql, params)\n return\n }\n\n validateParamConsistency(sql, params)\n}\n\nexport function needsQuoting(identifier: string): boolean {\n if (!REGEX_CACHE.VALID_IDENTIFIER.test(identifier)) return true\n if (SQL_KEYWORDS.has(identifier.toLowerCase())) return true\n return false\n}\n","import { SqlDialect } from '../../sql-builder-dialect'\nimport { needsQuoting } from './validators/sql-validators'\nimport { isEmptyString, isNotNullish } from './validators/type-guards'\nimport type { Model } from '../../types'\nimport { getColumnMap, getQuotedColumn } from './model-field-cache'\nimport { ALIAS_FORBIDDEN_KEYWORDS } from './constants'\n\nconst COL_EXPR_CACHE = new WeakMap<Model, Map<string, string>>()\nconst COL_WITH_ALIAS_CACHE = new WeakMap<Model, Map<string, string>>()\n\nfunction containsControlChars(s: string): boolean {\n for (let i = 0; i < s.length; i++) {\n const code = s.charCodeAt(i)\n if ((code >= 0 && code <= 31) || code === 127) {\n return true\n }\n }\n return false\n}\n\nfunction assertNoControlChars(label: string, s: string): void {\n if (containsControlChars(s)) {\n throw new Error(\n `${label} contains invalid characters: ${JSON.stringify(s)}`,\n )\n }\n}\n\nfunction quoteRawIdent(id: string): string {\n return `\"${id.replace(/\"/g, '\"\"')}\"`\n}\n\nfunction isIdentCharCode(c: number): boolean {\n return (\n (c >= 48 && c <= 57) ||\n (c >= 65 && c <= 90) ||\n (c >= 97 && c <= 122) ||\n c === 95\n )\n}\n\nfunction isIdentStartCharCode(c: number): boolean {\n return (c >= 65 && c <= 90) || (c >= 97 && c <= 122) || c === 95\n}\n\nconst MAX_PARSE_ITERATIONS = 10000\n\nfunction parseQuotedPart(input: string, start: number): number {\n const n = input.length\n let i = start + 1\n let sawAny = false\n let iterations = 0\n\n while (i < n) {\n if (++iterations > MAX_PARSE_ITERATIONS) {\n throw new Error('Table name parsing exceeded complexity limit')\n }\n\n const c = input.charCodeAt(i)\n if (c === 34) {\n const next = i + 1\n if (next < n && input.charCodeAt(next) === 34) {\n sawAny = true\n i += 2\n continue\n }\n if (!sawAny) {\n throw new Error(\n `qualified name has empty quoted identifier part: ${JSON.stringify(input)}`,\n )\n }\n return i + 1\n }\n if (c === 10 || c === 13 || c === 0) {\n throw new Error(\n `qualified name contains invalid characters: ${JSON.stringify(input)}`,\n )\n }\n sawAny = true\n i++\n }\n\n throw new Error(\n `qualified name has unterminated quoted identifier: ${JSON.stringify(input)}`,\n )\n}\n\nfunction parseUnquotedPart(input: string, start: number): number {\n const n = input.length\n let i = start\n\n if (i >= n) {\n throw new Error(`qualified name is invalid: ${JSON.stringify(input)}`)\n }\n\n const c0 = input.charCodeAt(i)\n if (!isIdentStartCharCode(c0)) {\n throw new Error(\n `qualified name must use identifiers (or quoted identifiers). Got: ${JSON.stringify(input)}`,\n )\n }\n i++\n\n while (i < n) {\n const c = input.charCodeAt(i)\n if (c === 46) break\n if (!isIdentCharCode(c)) {\n throw new Error(\n `qualified name contains invalid identifier characters: ${JSON.stringify(input)}`,\n )\n }\n i++\n }\n\n return i\n}\n\nfunction validateQualifiedNameFormat(trimmed: string): void {\n for (let i = 0; i < trimmed.length; i++) {\n const c = trimmed.charCodeAt(i)\n if (c === 9 || c === 11 || c === 12 || c === 32) {\n throw new Error(\n `tableName/tableRef must not contain whitespace: ${JSON.stringify(trimmed)}`,\n )\n }\n if (c === 59) {\n throw new Error(\n `tableName/tableRef must not contain ';': ${JSON.stringify(trimmed)}`,\n )\n }\n if (c === 40 || c === 41) {\n throw new Error(\n `tableName/tableRef must not contain parentheses: ${JSON.stringify(trimmed)}`,\n )\n }\n }\n}\n\nfunction parseQualifiedNameParts(trimmed: string): void {\n let i = 0\n const n = trimmed.length\n let parts = 0\n\n while (i < n) {\n const c = trimmed.charCodeAt(i)\n if (c === 46) {\n throw new Error(\n `tableName/tableRef has empty identifier part: ${JSON.stringify(trimmed)}`,\n )\n }\n\n if (c === 34) {\n i = parseQuotedPart(trimmed, i)\n } else {\n i = parseUnquotedPart(trimmed, i)\n }\n\n parts++\n if (parts > 2) {\n throw new Error(\n `tableName/tableRef must be 'table' or 'schema.table' (max 2 parts). Got: ${JSON.stringify(trimmed)}`,\n )\n }\n\n if (i === n) break\n\n if (trimmed.charCodeAt(i) !== 46) {\n throw new Error(\n `tableName/tableRef is invalid: ${JSON.stringify(trimmed)}`,\n )\n }\n i++\n\n if (i === n) {\n throw new Error(\n `tableName/tableRef cannot end with '.': ${JSON.stringify(trimmed)}`,\n )\n }\n }\n}\n\nfunction assertSafeQualifiedName(input: string): void {\n const raw = String(input)\n const trimmed = raw.trim()\n\n if (trimmed.length === 0) {\n throw new Error('tableName/tableRef is required and cannot be empty')\n }\n\n if (raw !== trimmed) {\n throw new Error(\n `tableName/tableRef must not contain leading/trailing whitespace: ${JSON.stringify(raw)}`,\n )\n }\n\n assertNoControlChars('tableName/tableRef', trimmed)\n validateQualifiedNameFormat(trimmed)\n parseQualifiedNameParts(trimmed)\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 quoteRawIdent(id)\n }\n\n return id\n}\n\nexport function quoteColumn(\n model: Model | undefined,\n fieldName: string,\n): string {\n if (!model) return quote(fieldName)\n const cached = getQuotedColumn(model, fieldName)\n return cached || quote(fieldName)\n}\n\nfunction getOrCreateCache<K extends object, V>(\n weakMap: WeakMap<K, Map<string, V>>,\n key: K,\n): Map<string, V> {\n let cache = weakMap.get(key)\n if (!cache) {\n cache = new Map()\n weakMap.set(key, cache)\n }\n return cache\n}\n\nexport function col(alias: string, field: string, model?: Model): string {\n if (!model) return `${alias}.${quote(field)}`\n\n const cache = getOrCreateCache(COL_EXPR_CACHE, model)\n const cacheKey = `${alias}.${field}`\n\n let cached = cache.get(cacheKey)\n if (cached) return cached\n\n const quotedCol = getQuotedColumn(model, field) || quote(field)\n cached = `${alias}.${quotedCol}`\n cache.set(cacheKey, cached)\n return cached\n}\n\nexport function colWithAlias(\n alias: string,\n field: string,\n model?: Model,\n): string {\n if (isEmptyString(alias)) {\n throw new Error('colWithAlias: alias is required and cannot be empty')\n }\n\n if (isEmptyString(field)) {\n throw new Error('colWithAlias: field is required and cannot be empty')\n }\n\n if (!model) {\n return `${alias}.${quote(field)} AS ${quote(field)}`\n }\n\n const cache = getOrCreateCache(COL_WITH_ALIAS_CACHE, model)\n const cacheKey = `${alias}.${field}`\n\n let cached = cache.get(cacheKey)\n if (cached) return cached\n\n const columnMap = getColumnMap(model)\n const columnName = columnMap.get(field) || field\n const quotedCol = getQuotedColumn(model, field) || quote(columnName)\n const columnRef = `${alias}.${quotedCol}`\n\n if (columnName !== field) {\n cached = `${columnRef} AS ${quote(field)}`\n } else {\n cached = columnRef\n }\n\n cache.set(cacheKey, cached)\n return cached\n}\n\nexport function sqlStringLiteral(value: string): string {\n if (containsControlChars(value)) {\n throw new Error('sqlStringLiteral: value contains invalid characters')\n }\n return `'${value.replace(/'/g, \"''\")}'`\n}\n\nexport function buildTableReference(\n schemaName: string,\n tableName: string,\n dialect?: SqlDialect,\n): string {\n if (isEmptyString(tableName)) {\n throw new Error(\n 'buildTableReference: tableName is required and cannot be empty',\n )\n }\n\n if (containsControlChars(tableName)) {\n throw new Error(\n 'buildTableReference: tableName contains invalid characters',\n )\n }\n\n const d = dialect ?? 'postgres'\n if (d === 'sqlite') {\n return quote(tableName)\n }\n\n if (isEmptyString(schemaName)) {\n throw new Error(\n 'buildTableReference: schemaName is required and cannot be empty',\n )\n }\n\n if (containsControlChars(schemaName)) {\n throw new Error(\n 'buildTableReference: schemaName contains invalid characters',\n )\n }\n\n const safeSchema = schemaName.replace(/\"/g, '\"\"')\n const safeTable = tableName.replace(/\"/g, '\"\"')\n return `\"${safeSchema}\".\"${safeTable}\"`\n}\n\nexport function assertSafeAlias(alias: string): void {\n if (typeof alias !== 'string') {\n throw new Error(`Invalid alias: expected string, got ${typeof alias}`)\n }\n\n const a = alias.trim()\n\n if (a.length === 0) {\n throw new Error('Invalid alias: required and cannot be empty')\n }\n\n if (a !== alias) {\n throw new Error('Invalid alias: leading/trailing whitespace')\n }\n\n if (containsControlChars(a)) {\n throw new Error(\n 'Invalid alias: contains unsafe characters (control characters)',\n )\n }\n\n if (a.includes('\"') || a.includes(\"'\") || a.includes('`')) {\n throw new Error('Invalid alias: contains unsafe characters (quotes)')\n }\n\n if (a.includes(';')) {\n throw new Error('Invalid alias: contains unsafe characters (semicolon)')\n }\n\n if (a.includes('--') || a.includes('/*') || a.includes('*/')) {\n throw new Error(\n 'Invalid alias: contains unsafe characters (SQL comment tokens)',\n )\n }\n\n if (/\\s/.test(a)) {\n throw new Error(\n 'Invalid alias: must be a simple identifier without whitespace',\n )\n }\n\n if (!/^[A-Za-z_]\\w*$/.test(a)) {\n throw new Error(\n `Invalid alias: must be a simple identifier (alphanumeric with underscores): \"${alias}\"`,\n )\n }\n\n const lowered = a.toLowerCase()\n if (ALIAS_FORBIDDEN_KEYWORDS.has(lowered)) {\n throw new Error(\n `Invalid alias: '${alias}' is a SQL keyword that would break query parsing. ` +\n `Forbidden aliases: ${[...ALIAS_FORBIDDEN_KEYWORDS].join(', ')}`,\n )\n }\n}\n\nexport function assertSafeTableRef(tableRef: string): void {\n assertSafeQualifiedName(tableRef)\n}\n\nexport function normalizeKeyList(input: unknown): string[] {\n if (!isNotNullish(input)) return []\n\n if (Array.isArray(input)) {\n const out: string[] = []\n for (const v of input) {\n const s = String(v).trim()\n if (s.length > 0) out.push(s)\n }\n return out\n }\n\n if (typeof input === 'string') {\n const raw = input.trim()\n if (raw.length === 0) return []\n if (raw.includes(',')) {\n return raw\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0)\n }\n return [raw]\n }\n\n const s = String(input).trim()\n return s.length > 0 ? [s] : []\n}\n","import { Model, Field } from '../../types'\nimport { Field as ParsedField } from '@dee-wan/schema-parser'\nimport { quote } from './sql-utils'\n\ninterface FieldIndices {\n scalarFields: ReadonlyMap<string, Field>\n relationFields: ReadonlyMap<string, Field>\n scalarNames: readonly string[]\n relationNames: readonly string[]\n jsonFields: ReadonlySet<string>\n pkFields: readonly string[]\n columnMap: ReadonlyMap<string, string>\n quotedColumns: ReadonlyMap<string, string>\n}\n\nconst FIELD_INDICES_CACHE = new WeakMap<Model, FieldIndices>()\n\nfunction normalizeField(field: ParsedField): Field {\n return field as unknown as Field\n}\n\nexport function getFieldIndices(model: Model): FieldIndices {\n let cached = FIELD_INDICES_CACHE.get(model)\n if (cached) return cached\n\n const scalarFields = new Map<string, Field>()\n const relationFields = new Map<string, Field>()\n const scalarNames: string[] = []\n const relationNames: string[] = []\n const jsonFields = new Set<string>()\n const pkFields: string[] = []\n const columnMap = new Map<string, string>()\n const quotedColumns = new Map<string, string>()\n\n for (const rawField of model.fields) {\n const field = normalizeField(rawField)\n\n if (field.isRelation) {\n relationFields.set(field.name, field)\n relationNames.push(field.name)\n } else {\n scalarFields.set(field.name, field)\n scalarNames.push(field.name)\n\n const fieldType = String((field as any).type ?? '').toLowerCase()\n if (fieldType === 'json') {\n jsonFields.add(field.name)\n }\n\n if (\n (field as any).isId ||\n (field as any).isPrimaryKey ||\n (field as any).primaryKey\n ) {\n pkFields.push(field.name)\n }\n\n if (field.dbName && field.dbName !== field.name) {\n columnMap.set(field.name, field.dbName)\n }\n\n const columnName = field.dbName || field.name\n quotedColumns.set(field.name, quote(columnName))\n }\n }\n\n cached = Object.freeze({\n scalarFields,\n relationFields,\n scalarNames,\n relationNames,\n jsonFields,\n pkFields,\n columnMap,\n quotedColumns,\n })\n\n FIELD_INDICES_CACHE.set(model, cached)\n return cached\n}\n\nexport function getRelationFieldSet(model: Model): ReadonlySet<string> {\n return new Set(getFieldIndices(model).relationNames)\n}\n\nexport function getScalarFieldSet(model: Model): ReadonlySet<string> {\n return new Set(getFieldIndices(model).scalarNames)\n}\n\nexport function getColumnMap(model: Model): ReadonlyMap<string, string> {\n return getFieldIndices(model).columnMap\n}\n\nexport function getScalarFieldNames(model: Model): string[] {\n return [...getFieldIndices(model).scalarNames]\n}\n\nexport function getQuotedColumn(\n model: Model,\n fieldName: string,\n): string | undefined {\n return getFieldIndices(model).quotedColumns.get(fieldName)\n}\n\nexport function getJsonFieldSet(model: Model): ReadonlySet<string> {\n return getFieldIndices(model).jsonFields\n}\n\nexport function parseJsonIfNeeded(isJson: boolean, value: any): any {\n if (!isJson) return value\n if (value == null) return value\n if (typeof value !== 'string') return value\n try {\n return JSON.parse(value)\n } catch {\n return value\n }\n}\n\nexport function maybeParseJson(\n value: any,\n jsonSet: ReadonlySet<string>,\n fieldName: string,\n): any {\n if (!jsonSet.has(fieldName)) return value\n if (value == null) return value\n if (typeof value !== 'string') return value\n try {\n return JSON.parse(value)\n } catch {\n return value\n }\n}\n","import { Model, Field } from '../types'\nimport { SPECIAL_FIELDS } from './shared/constants'\nimport { createError } from './shared/errors'\nimport { getRelationFieldSet } from './shared/model-field-cache'\nimport {\n assertSafeAlias,\n normalizeKeyList,\n quoteColumn,\n} from './shared/sql-utils'\n\nimport { isNotNullish } from './shared/validators/type-guards'\n\nexport function isRelationField(fieldName: string, model: Model): boolean {\n return getRelationFieldSet(model).has(fieldName)\n}\n\nexport function isValidRelationField(field: Field | undefined): field is Field {\n if (!isNotNullish(field)) return false\n if (!field.isRelation) return false\n if (\n !isNotNullish(field.relatedModel) ||\n field.relatedModel.trim().length === 0\n )\n return false\n\n const fk = normalizeKeyList(field.foreignKey)\n if (fk.length === 0) return false\n\n const refs = normalizeKeyList(field.references)\n\n if (refs.length === 0) {\n return fk.length === 1\n }\n\n if (refs.length !== fk.length) return false\n\n return true\n}\n\nfunction getReferenceFieldNames(\n field: Field,\n foreignKeyCount: number,\n): string[] {\n const refs = normalizeKeyList(field.references)\n\n if (refs.length === 0) {\n if (foreignKeyCount === 1) return [SPECIAL_FIELDS.ID]\n return []\n }\n\n if (refs.length !== foreignKeyCount) return []\n return refs\n}\n\nexport function joinCondition(\n field: Field,\n parentModel: Model,\n childModel: Model,\n parentAlias: string,\n childAlias: string,\n): string {\n assertSafeAlias(parentAlias)\n assertSafeAlias(childAlias)\n\n const fkFields = normalizeKeyList(field.foreignKey)\n\n if (fkFields.length === 0) {\n throw createError(\n `Relation '${field.name}' is missing foreignKey. This indicates a schema parsing error. Relations must specify fields/references.`,\n { field: field.name },\n )\n }\n\n const refFields = getReferenceFieldNames(field, fkFields.length)\n\n if (refFields.length !== fkFields.length) {\n throw createError(\n `Relation '${field.name}' is missing references (or references count does not match foreignKey count). This is required to support non-id and composite keys.`,\n { field: field.name },\n )\n }\n\n const parts: string[] = []\n\n for (let i = 0; i < fkFields.length; i++) {\n const fk = fkFields[i]\n const ref = refFields[i]\n\n const left = field.isForeignKeyLocal\n ? `${childAlias}.${quoteColumn(childModel, ref)}`\n : `${childAlias}.${quoteColumn(childModel, fk)}`\n const right = field.isForeignKeyLocal\n ? `${parentAlias}.${quoteColumn(parentModel, fk)}`\n : `${parentAlias}.${quoteColumn(parentModel, ref)}`\n\n parts.push(`${left} = ${right}`)\n }\n\n return parts.length === 1 ? parts[0] : `(${parts.join(' AND ')})`\n}\n\nexport function getModelByName(\n schemas: Model[],\n name: string,\n): Model | undefined {\n return schemas.find((m) => m.name === name)\n}\n","import { isDynamicParameter } from '@dee-wan/schema-parser'\nimport { isNotNullish } from './validators/type-guards'\n\ntype NormalizeIntLikeOptions = {\n min?: number\n max?: number\n allowZero?: boolean\n}\n\nexport function normalizeIntLike(\n name: string,\n v: unknown,\n opts: NormalizeIntLikeOptions = {},\n): number | string | undefined {\n if (!isNotNullish(v)) return undefined\n if (isDynamicParameter(v)) return v as string\n\n if (typeof v !== 'number' || !Number.isFinite(v) || !Number.isInteger(v)) {\n throw new Error(`${name} must be an integer`)\n }\n\n const min = opts.min ?? 0\n const allowZero = opts.allowZero ?? true\n\n if (!allowZero && v === 0) {\n throw new Error(`${name} must be > 0`)\n }\n if (v < min) {\n throw new Error(`${name} must be >= ${min}`)\n }\n\n if (typeof opts.max === 'number' && v > opts.max) {\n throw new Error(`${name} must be <= ${opts.max}`)\n }\n\n return v\n}\n","import { extractDynamicName, isDynamicParameter } from '@dee-wan/schema-parser'\nimport { ParamStore } from './param-store'\n\nfunction scopeName(scope: string, dynamicName: string): string {\n const s = String(scope).trim()\n const dn = String(dynamicName).trim()\n if (s.length === 0) return dn\n return `${s}:${dn}`\n}\n\nexport function addAutoScoped(\n params: ParamStore,\n value: unknown,\n scope: string,\n): string {\n if (isDynamicParameter(value)) {\n const dn = extractDynamicName(value as string)\n return params.add(undefined, scopeName(scope, dn))\n }\n return params.add(value)\n}\n","import { isNotNullish, isPlainObject } from './validators/type-guards'\nimport { Model } from '../../types'\nimport { getScalarFieldSet } from './model-field-cache'\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'\n\nexport type OrderBySortObject = {\n direction: OrderByDirection\n nulls?: OrderByNulls\n}\n\ntype NormalizedOrderByValue = OrderByDirection | OrderBySortObject\ntype NormalizedOrderBy = Array<Record<string, NormalizedOrderByValue>>\n\ntype ParseOrderByValue = (\n v: unknown,\n field?: string,\n) => { direction: OrderByDirection; nulls?: OrderByNulls }\n\nexport interface OrderByEntry {\n field: string\n direction: OrderByDirection\n nulls?: OrderByNulls\n}\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 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 out: Record<string, unknown> = { ...obj }\n\n const hasSort = Object.prototype.hasOwnProperty.call(obj, 'sort')\n const hasDirection = Object.prototype.hasOwnProperty.call(obj, 'direction')\n\n if (hasSort) {\n out.sort = getNextSort(obj.sort)\n } else if (hasDirection) {\n out.direction = getNextSort(obj.direction)\n } else {\n out.sort = getNextSort(obj.sort)\n }\n\n if (typeof obj.nulls === 'string') {\n out.nulls = flipNulls(obj.nulls)\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 ? { direction: 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\nexport function normalizeAndValidateOrderBy(\n orderBy: unknown,\n model: Model,\n parseValue: ParseOrderByValue,\n): OrderByEntry[] {\n if (!isNotNullish(orderBy)) return []\n\n const normalized = normalizeOrderByInput(orderBy, parseValue)\n const entries: OrderByEntry[] = []\n const scalarSet = getScalarFieldSet(model)\n\n for (const item of normalized) {\n const [[field, value]] = Object.entries(item)\n\n if (!scalarSet.has(field)) {\n throw new Error(\n `orderBy field '${field}' not found on model ${model.name}`,\n )\n }\n\n if (typeof value === 'string') {\n entries.push({ field, direction: value as OrderByDirection })\n } else {\n entries.push({\n field,\n direction: (value as OrderBySortObject).direction,\n nulls: (value as OrderBySortObject).nulls,\n })\n }\n }\n\n return entries\n}\n","import { Model } from '../../types'\nimport { getScalarFieldSet } from './model-field-cache'\nimport { isNotNullish } from './validators/type-guards'\nimport { normalizeOrderByInput } from './order-by-utils'\n\ntype OrderByDirection = 'asc' | 'desc'\ntype NullsPosition = 'first' | 'last'\n\ntype ParsedOrderByValue = {\n direction: OrderByDirection\n nulls?: NullsPosition\n}\n\ntype ParseOrderByValue = (v: unknown, field?: string) => ParsedOrderByValue\n\nfunction findTiebreakerField(model?: Model): string | null {\n if (!model) return null\n\n const scalarSet = getScalarFieldSet(model)\n\n for (const f of model.fields) {\n if ((f as any).isId && !f.isRelation && scalarSet.has(f.name)) return f.name\n }\n\n if (scalarSet.has('id')) return 'id'\n\n return null\n}\n\nfunction hasTiebreaker(\n orderBy: unknown,\n parse: ParseOrderByValue,\n field: string,\n): boolean {\n if (!isNotNullish(orderBy)) return false\n const normalized = normalizeOrderByInput(orderBy, parse)\n return normalized.some((obj) =>\n Object.prototype.hasOwnProperty.call(obj, field),\n )\n}\n\nfunction addTiebreaker(orderBy: unknown, field: string): unknown {\n if (Array.isArray(orderBy)) return [...orderBy, { [field]: 'asc' }]\n return [orderBy, { [field]: 'asc' }]\n}\n\nexport function ensureDeterministicOrderByInput(args: {\n orderBy: unknown\n model?: Model\n parseValue: ParseOrderByValue\n}): unknown {\n const { orderBy, model, parseValue } = args\n\n const tiebreaker = findTiebreakerField(model)\n if (!tiebreaker) return orderBy\n\n if (!isNotNullish(orderBy)) {\n return { [tiebreaker]: 'asc' }\n }\n\n if (hasTiebreaker(orderBy, parseValue, tiebreaker)) return orderBy\n return addTiebreaker(orderBy, tiebreaker)\n}\n","import { Field, Model } from '../../types'\nimport { Field as ParsedField } from '@dee-wan/schema-parser'\nimport { getFieldIndices } from './model-field-cache'\n\nconst FIELD_BY_NAME_CACHE = new WeakMap<Model, Map<string, Field>>()\n\nfunction normalizeField(field: ParsedField): Field {\n return field as unknown as Field\n}\n\nexport function getPrimaryKeyFields(model: Model): string[] {\n const cached = getFieldIndices(model).pkFields\n if (cached.length > 0) return [...cached]\n\n const idField = model.fields.find(\n (f: any) => f.name === 'id' && !f.isRelation,\n )\n if (idField) return ['id']\n\n throw new Error(\n `Model ${model.name} has no primary key field. Models must have either fields with isId=true or a field named 'id'.`,\n )\n}\n\nexport function getPrimaryKeyField(model: Model): string {\n const fields = getPrimaryKeyFields(model)\n if (fields.length !== 1) {\n throw new Error(\n `getPrimaryKeyField requires single-field PK, but ${model.name} has ${fields.length} fields`,\n )\n }\n return fields[0]\n}\n\nexport function getFieldByName(\n model: Model,\n fieldName: string,\n): Field | undefined {\n let cache = FIELD_BY_NAME_CACHE.get(model)\n if (!cache) {\n cache = new Map()\n for (const rawField of model.fields) {\n const field = normalizeField(rawField)\n cache.set(field.name, field)\n }\n FIELD_BY_NAME_CACHE.set(model, cache)\n }\n\n return cache.get(fieldName)\n}\n","import { Model, Field } from '../../../types'\nimport { createError } from '../errors'\nimport { getFieldByName } from '../primary-key-utils'\n\nexport function assertFieldExists(\n fieldName: string,\n model: Model,\n context: string,\n path: readonly string[] = [],\n): Field {\n const field = getFieldByName(model, fieldName)\n if (!field) {\n throw createError(\n `${context}: field '${fieldName}' does not exist on model '${model.name}'`,\n {\n field: fieldName,\n modelName: model.name,\n path,\n availableFields: model.fields.map((f) => f.name),\n },\n )\n }\n return field\n}\n\nexport function assertScalarField(\n model: Model,\n fieldName: string,\n context: string,\n): Field {\n const field = assertFieldExists(fieldName, model, context)\n\n if (field.isRelation) {\n throw createError(\n `${context}: field '${fieldName}' is a relation field, expected scalar field`,\n { field: fieldName, modelName: model.name },\n )\n }\n\n return field\n}\n\nexport function assertNumericField(\n model: Model,\n fieldName: string,\n context: string,\n): Field {\n const field = assertScalarField(model, fieldName, context)\n\n const numericTypes = new Set([\n 'Int',\n 'BigInt',\n 'Float',\n 'Decimal',\n 'Int?',\n 'BigInt?',\n 'Float?',\n 'Decimal?',\n ])\n\n if (!numericTypes.has(field.type)) {\n throw createError(\n `${context}: field '${fieldName}' must be numeric (Int, BigInt, Float, Decimal), got '${field.type}'`,\n { field: fieldName, modelName: model.name },\n )\n }\n\n return field\n}\n\nexport function assertValidOperator(\n fieldName: string,\n operator: string,\n fieldType: string,\n path: readonly string[],\n modelName: string,\n): void {\n const stringOps = new Set([\n 'equals',\n 'not',\n 'in',\n 'notIn',\n 'lt',\n 'lte',\n 'gt',\n 'gte',\n 'contains',\n 'startsWith',\n 'endsWith',\n 'mode',\n 'search',\n ])\n\n const numericOps = new Set([\n 'equals',\n 'not',\n 'in',\n 'notIn',\n 'lt',\n 'lte',\n 'gt',\n 'gte',\n ])\n\n const jsonOps = new Set([\n 'equals',\n 'not',\n 'path',\n 'string_contains',\n 'string_starts_with',\n 'string_ends_with',\n 'array_contains',\n 'array_starts_with',\n 'array_ends_with',\n ])\n\n const isString = fieldType === 'String' || fieldType === 'String?'\n const isNumeric = ['Int', 'BigInt', 'Float', 'Decimal'].some(\n (t) => fieldType === t || fieldType === `${t}?`,\n )\n const isJson = fieldType === 'Json' || fieldType === 'Json?'\n\n if (isString && !stringOps.has(operator)) {\n throw createError(\n `Operator '${operator}' is not valid for String field '${fieldName}'`,\n { field: fieldName, modelName, path, operator },\n )\n }\n\n if (isNumeric && !numericOps.has(operator)) {\n throw createError(\n `Operator '${operator}' is not valid for numeric field '${fieldName}'`,\n { field: fieldName, modelName, path, operator },\n )\n }\n\n if (isJson && !jsonOps.has(operator)) {\n throw createError(\n `Operator '${operator}' is not valid for Json field '${fieldName}'`,\n { field: fieldName, modelName, path, operator },\n )\n }\n}\n","import { PrismaQueryArgs, Model } from '../types'\nimport { SQL_SEPARATORS } from './shared/constants'\nimport {\n col,\n quoteColumn,\n assertSafeAlias,\n assertSafeTableRef,\n} from './shared/sql-utils'\nimport { ParamStore } from './shared/param-store'\nimport { SqlDialect, getGlobalDialect } from '../sql-builder-dialect'\nimport {\n isNotNullish,\n isNonEmptyString,\n isPlainObject,\n} from './shared/validators/type-guards'\nimport { normalizeIntLike } from './shared/int-like'\nimport { addAutoScoped } from './shared/dynamic-params'\nimport { isDynamicParameter } from '@dee-wan/schema-parser'\nimport {\n normalizeAndValidateOrderBy,\n normalizeOrderByInput,\n} from './shared/order-by-utils'\nimport { ensureDeterministicOrderByInput } from './shared/order-by-determinism'\nimport { assertScalarField } from './shared/validators/field-assertions'\n\ntype OrderByDirection = 'asc' | 'desc'\ntype NullsPosition = 'first' | 'last'\n\ntype OrderByValueObject = { direction: OrderByDirection; nulls?: NullsPosition }\n\ntype OrderByEntry = {\n field: string\n direction: OrderByDirection\n nulls?: NullsPosition\n}\n\ntype IntOrDynamic = number | string\ntype MaybeIntOrDynamic = IntOrDynamic | undefined\ntype OrderByInput = unknown\ntype IncludeSelectArgs = Pick<PrismaQueryArgs, 'include' | 'select'>\n\nconst MAX_LIMIT_OFFSET = 2147483647\nconst ORDER_BY_ALLOWED_KEYS = new Set(['sort', 'nulls'])\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 for (const k of Object.keys(obj)) {\n if (!ORDER_BY_ALLOWED_KEYS.has(k)) {\n throw new Error(\n fieldName\n ? `Unsupported orderBy key '${k}' for field '${fieldName}'`\n : `Unsupported orderBy key '${k}'`,\n )\n }\n }\n}\n\nexport function parseOrderByValue(\n v: unknown,\n fieldName?: string,\n): OrderByValueObject {\n const errorPrefix = fieldName ? `orderBy for '${fieldName}'` : 'orderBy value'\n\n if (typeof v === 'string') {\n return { direction: parseDirectionRaw(v, `${errorPrefix} direction`) }\n }\n\n const obj = requireOrderByObject(v, errorPrefix)\n\n const direction = parseDirectionRaw(obj.sort, `${errorPrefix}.sort`)\n const nulls = parseNullsRaw(obj.nulls, `${errorPrefix}.nulls`)\n\n assertAllowedOrderByKeys(obj, fieldName)\n\n return { direction, nulls }\n}\n\nfunction normalizeNonNegativeInt(name: 'skip', v: unknown): IntOrDynamic {\n if (isDynamicParameter(v)) return v as string\n const result = normalizeIntLike(name, v, {\n min: 0,\n max: MAX_LIMIT_OFFSET,\n allowZero: true,\n })\n if (result === undefined)\n throw new Error(`${name} normalization returned undefined`)\n return result\n}\n\nconst MIN_NEGATIVE_TAKE = -10000\nfunction normalizeIntAllowNegative(name: 'take', v: unknown): IntOrDynamic {\n if (isDynamicParameter(v)) return v as string\n const result = normalizeIntLike(name, v, {\n min: MIN_NEGATIVE_TAKE,\n max: MAX_LIMIT_OFFSET,\n allowZero: true,\n })\n if (result === undefined)\n throw new Error(`${name} normalization returned undefined`)\n return result\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\nexport function readSkipTake(relArgs: unknown): {\n hasSkip: boolean\n hasTake: boolean\n skipVal: MaybeIntOrDynamic\n takeVal: MaybeIntOrDynamic\n} {\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 ? normalizeIntAllowNegative('take', obj.take)\n : undefined\n\n return { hasSkip, hasTake, skipVal, takeVal }\n}\n\nfunction buildOrderByFragment(\n entries: OrderByEntry[],\n alias: string,\n dialect: SqlDialect,\n model?: Model,\n): string {\n if (entries.length === 0) return ''\n\n const out: string[] = []\n for (const e of entries) {\n const dir = e.direction.toUpperCase()\n const c = col(alias, e.field, model)\n\n if (dialect === 'postgres') {\n const nulls = isNotNullish(e.nulls)\n ? ` NULLS ${e.nulls.toUpperCase()}`\n : ''\n out.push(c + ' ' + dir + nulls)\n continue\n }\n\n if (isNotNullish(e.nulls)) {\n const isNullExpr = `(${c} IS NULL)`\n const nullRankDir = e.nulls === 'first' ? 'DESC' : 'ASC'\n out.push(isNullExpr + ' ' + nullRankDir)\n out.push(c + ' ' + dir)\n continue\n }\n\n out.push(c + ' ' + dir)\n }\n\n return out.join(SQL_SEPARATORS.ORDER_BY)\n}\n\nfunction defaultNullsFor(\n dialect: SqlDialect,\n direction: OrderByDirection,\n): NullsPosition {\n if (dialect === 'postgres') return direction === 'asc' ? 'last' : 'first'\n return direction === 'asc' ? 'first' : 'last'\n}\n\nfunction ensureCursorFieldsInOrder(\n orderEntries: OrderByEntry[],\n cursorEntries: Array<[string, unknown]>,\n): OrderByEntry[] {\n if (cursorEntries.length === 0) return orderEntries\n\n const existing = new Set<string>()\n for (const entry of orderEntries) existing.add(entry.field)\n\n let out: OrderByEntry[] | null = null\n\n for (const [field] of cursorEntries) {\n if (!existing.has(field)) {\n if (!out) out = orderEntries.slice()\n out.push({ field, direction: 'asc' })\n existing.add(field)\n }\n }\n\n return out ?? orderEntries\n}\n\nfunction buildCursorFilterParts(\n cursor: Record<string, unknown>,\n cursorAlias: string,\n params: ParamStore,\n model?: Model,\n): { whereSql: string } {\n const parts: string[] = []\n\n for (const field in cursor) {\n if (!Object.prototype.hasOwnProperty.call(cursor, field)) continue\n\n const value = cursor[field]\n\n if (value === undefined) continue\n\n const c = cursorAlias + '.' + quoteColumn(model, field)\n\n if (value === null) {\n parts.push(c + ' IS NULL')\n continue\n }\n\n const ph = addAutoScoped(params, value, `cursor.filter.${field}`)\n parts.push(c + ' = ' + ph)\n }\n\n if (parts.length === 0) {\n throw new Error('cursor must have at least one field with defined value')\n }\n\n return {\n whereSql: parts.length === 1 ? parts[0] : '(' + parts.join(' AND ') + ')',\n }\n}\n\nfunction buildCursorEqualityExpr(\n columnExpr: string,\n cursorField: string,\n): string {\n return `((${cursorField} IS NULL AND ${columnExpr} IS NULL) OR (${cursorField} IS NOT NULL AND ${columnExpr} = ${cursorField}))`\n}\n\nfunction buildCursorInequalityExpr(\n columnExpr: string,\n direction: OrderByDirection,\n nulls: NullsPosition,\n cursorField: string,\n): string {\n const op = direction === 'asc' ? '>' : '<'\n\n if (nulls === 'first') {\n return `(CASE WHEN ${cursorField} IS NULL THEN (${columnExpr} IS NOT NULL) ELSE (${columnExpr} ${op} ${cursorField}) END)`\n }\n\n return `(CASE WHEN ${cursorField} IS NULL THEN 0=1 ELSE ((${columnExpr} ${op} ${cursorField}) OR (${columnExpr} IS NULL)) END)`\n}\n\nfunction buildCursorCteSelectList(\n cursorEntries: Array<[string, unknown]>,\n orderEntries: OrderByEntry[],\n model?: Model,\n): string {\n const seen = new Set<string>()\n const ordered: string[] = []\n\n for (const [f] of cursorEntries) {\n if (!seen.has(f)) {\n seen.add(f)\n ordered.push(f)\n }\n }\n\n for (const e of orderEntries) {\n if (!seen.has(e.field)) {\n seen.add(e.field)\n ordered.push(e.field)\n }\n }\n\n if (ordered.length === 0) throw new Error('cursor cte select list is empty')\n\n return ordered\n .map((f) => quoteColumn(model, f))\n .join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nfunction truncateIdent(name: string, maxLen: number): string {\n const s = String(name)\n return s.length <= maxLen ? s : s.slice(0, maxLen)\n}\n\nfunction buildCursorNames(outerAlias: string): {\n cteName: string\n srcAlias: string\n} {\n const maxLen = 63\n const base = outerAlias.toLowerCase()\n const cteName = truncateIdent(`__tp_cursor_${base}`, maxLen)\n const srcAlias = truncateIdent(`__tp_cursor_src_${base}`, maxLen)\n\n if (cteName === outerAlias || srcAlias === outerAlias) {\n return {\n cteName: truncateIdent(`__tp_cursor_${base}_x`, maxLen),\n srcAlias: truncateIdent(`__tp_cursor_src_${base}_x`, maxLen),\n }\n }\n\n return { cteName, srcAlias }\n}\n\nfunction assertCursorAndOrderFieldsScalar(\n model: Model | undefined,\n cursor: Record<string, unknown>,\n orderEntries: OrderByEntry[],\n): void {\n if (!model) return\n for (const k in cursor) {\n if (!Object.prototype.hasOwnProperty.call(cursor, k)) continue\n assertScalarField(model, k, 'cursor')\n }\n for (const e of orderEntries) {\n assertScalarField(model, e.field, 'orderBy')\n }\n}\n\nexport function buildCursorCondition(\n cursor: Record<string, unknown>,\n orderBy: unknown,\n tableName: string,\n alias: string,\n params: ParamStore,\n dialect?: SqlDialect,\n model?: Model,\n): { cte: string; condition: string } {\n assertSafeTableRef(tableName)\n assertSafeAlias(alias)\n\n const d = dialect ?? getGlobalDialect()\n\n const cursorEntries: Array<[string, unknown]> = []\n for (const k in cursor) {\n if (Object.prototype.hasOwnProperty.call(cursor, k)) {\n const value = cursor[k]\n if (value !== undefined) {\n cursorEntries.push([k, value])\n }\n }\n }\n\n if (cursorEntries.length === 0)\n throw new Error('cursor must have at least one field with defined value')\n\n const { cteName, srcAlias } = buildCursorNames(alias)\n assertSafeAlias(cteName)\n assertSafeAlias(srcAlias)\n\n const deterministicOrderBy = ensureDeterministicOrderByInput({\n orderBy,\n model,\n parseValue: parseOrderByValue,\n })\n\n let orderEntries = normalizeAndValidateOrderBy(\n orderBy,\n model!,\n parseOrderByValue,\n )\n if (orderEntries.length === 0) {\n orderEntries = cursorEntries.map(([field]) => ({\n field,\n direction: 'asc' as const,\n }))\n } else {\n orderEntries = ensureCursorFieldsInOrder(orderEntries, cursorEntries)\n }\n\n assertCursorAndOrderFieldsScalar(model, cursor, orderEntries)\n\n const { whereSql: cursorWhereSql } = buildCursorFilterParts(\n cursor,\n srcAlias,\n params,\n model,\n )\n\n const cursorOrderBy = orderEntries\n .map(\n (e) =>\n srcAlias +\n '.' +\n quoteColumn(model, e.field) +\n ' ' +\n e.direction.toUpperCase(),\n )\n .join(', ')\n\n const selectList = buildCursorCteSelectList(\n cursorEntries,\n orderEntries,\n model,\n )\n\n const cte =\n cteName +\n ' AS (\\n SELECT ' +\n selectList +\n ' FROM ' +\n tableName +\n ' ' +\n srcAlias +\n '\\n WHERE ' +\n cursorWhereSql +\n '\\n ORDER BY ' +\n cursorOrderBy +\n '\\n LIMIT 1\\n )'\n\n const existsExpr = 'EXISTS (SELECT 1 FROM ' + cteName + ')'\n\n const orClauses: string[] = []\n\n for (let level = 0; level < orderEntries.length; level++) {\n const andParts: string[] = []\n\n for (let i = 0; i < level; i++) {\n const e = orderEntries[i]\n const c = col(alias, e.field, model)\n const cursorField = cteName + '.' + quoteColumn(model, e.field)\n andParts.push(buildCursorEqualityExpr(c, cursorField))\n }\n\n const e = orderEntries[level]\n const c = col(alias, e.field, model)\n const cursorField = cteName + '.' + quoteColumn(model, e.field)\n const nulls = e.nulls ?? defaultNullsFor(d, e.direction)\n andParts.push(buildCursorInequalityExpr(c, e.direction, nulls, cursorField))\n\n orClauses.push('(' + andParts.join(SQL_SEPARATORS.CONDITION_AND) + ')')\n }\n\n const exclusive = orClauses.join(SQL_SEPARATORS.CONDITION_OR)\n\n const outerMatchParts: string[] = []\n for (const [field, value] of cursorEntries) {\n const c = col(alias, field, model)\n if (value === null) {\n outerMatchParts.push(c + ' IS NULL')\n continue\n }\n const ph = addAutoScoped(params, value, `cursor.outerMatch.${field}`)\n outerMatchParts.push(c + ' = ' + ph)\n }\n const outerCursorMatch =\n outerMatchParts.length === 1\n ? outerMatchParts[0]\n : '(' + outerMatchParts.join(SQL_SEPARATORS.CONDITION_AND) + ')'\n\n const condition =\n '(' +\n existsExpr +\n SQL_SEPARATORS.CONDITION_AND +\n '((' +\n exclusive +\n ')' +\n SQL_SEPARATORS.CONDITION_OR +\n '(' +\n outerCursorMatch +\n ')))'\n\n return { cte, condition }\n}\n\nexport function buildOrderBy(\n orderBy: unknown,\n alias: string,\n dialect?: SqlDialect,\n model?: Model,\n): string {\n assertSafeAlias(alias)\n\n const entries = normalizeAndValidateOrderBy(\n orderBy,\n model!,\n parseOrderByValue,\n )\n if (entries.length === 0) return ''\n\n const d = dialect ?? getGlobalDialect()\n return buildOrderByFragment(entries, alias, d, model)\n}\n\nexport function buildOrderByClause(\n args: PrismaQueryArgs,\n alias: string,\n dialect?: SqlDialect,\n model?: Model,\n): string {\n if (!isNotNullish(args.orderBy)) return ''\n\n const result = buildOrderBy(args.orderBy, alias, dialect, model)\n if (!isNonEmptyString(result)) {\n throw new Error(\n 'buildOrderByClause: orderBy specified but produced empty result',\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 === 0) return 0\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\nfunction buildOrderEntries(orderBy: unknown, model: Model): OrderByEntry[] {\n return normalizeAndValidateOrderBy(orderBy, model, parseOrderByValue)\n}\n","import { Ops, SQL_TEMPLATES } from './constants'\nimport { createError } from './errors'\n\nexport function buildNullComparison(\n expr: string,\n op: string,\n allowNull: boolean = false,\n): string | 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 return null\n}\n\nexport function tryBuildNullComparison(\n expr: string,\n op: string,\n val: unknown,\n context: string,\n): string | null {\n if (val !== null) return null\n\n const clause = buildNullComparison(expr, op)\n if (clause === null) {\n throw createError(`Operator '${op}' doesn't support null in ${context}`, {\n operator: op,\n })\n }\n return clause\n}\n","import { isDynamicParameter } from '@dee-wan/schema-parser'\nimport {\n inArray,\n notInArray,\n prepareArrayParam,\n SqlDialect,\n} from '../../sql-builder-dialect'\nimport { createError } from './errors'\nimport { ParamStore } from './param-store'\n\nexport function buildInCondition(\n expr: string,\n op: 'in' | 'notIn',\n val: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n context: string,\n): string {\n if (isDynamicParameter(val)) {\n const ph = params.addAuto(val)\n return op === 'in'\n ? inArray(expr, ph, dialect)\n : notInArray(expr, ph, dialect)\n }\n\n if (!Array.isArray(val)) {\n throw createError(`${context} requires array value`, {\n operator: op,\n value: val,\n })\n }\n\n if (val.length === 0) {\n return op === 'in' ? '0=1' : '1=1'\n }\n\n if (dialect === 'sqlite' && val.length <= 30) {\n const phs = val.map((item) => params.add(item))\n const list = phs.join(', ')\n return op === 'in' ? `${expr} IN (${list})` : `${expr} NOT IN (${list})`\n }\n\n const paramValue = prepareArrayParam(val, dialect)\n const ph = params.add(paramValue)\n return op === 'in'\n ? inArray(expr, ph, dialect)\n : notInArray(expr, ph, dialect)\n}\n","import { isDynamicParameter } from '@dee-wan/schema-parser'\nimport {\n caseInsensitiveLike,\n caseInsensitiveEquals,\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'\nimport { tryBuildNullComparison } from '../shared/null-comparison'\nimport { buildInCondition } from '../shared/in-operator-builder'\n\nconst MAX_NOT_DEPTH = 50\n\ninterface ScalarOperatorOptions {\n mode?: ModeType\n fieldType?: string\n dialect?: SqlDialect\n depth?: number\n}\n\ntype ModeType = 'insensitive' | 'default' | undefined\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\nfunction validateOperatorRequirements(\n op: string,\n mode: ModeType,\n dialect: SqlDialect | undefined,\n): void {\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) && !isNotNullish(dialect)) {\n throw createError(`Like operators require a SQL dialect`, { operator: op })\n }\n\n if ((op === Ops.IN || op === Ops.NOT_IN) && !isNotNullish(dialect)) {\n throw createError(`IN operators require a SQL dialect`, { operator: op })\n }\n\n if (\n op === Ops.EQUALS &&\n mode === Modes.INSENSITIVE &&\n !isNotNullish(dialect)\n ) {\n throw createError(`Insensitive equals requires a SQL dialect`, {\n operator: op,\n })\n }\n}\n\nfunction routeOperatorHandler(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n mode: ModeType,\n dialect: SqlDialect | undefined,\n): string | null {\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 return handleLikeOperator(expr, op, val, params, mode, dialect!)\n }\n\n if (op === Ops.IN || op === Ops.NOT_IN) {\n return buildInCondition(\n expr,\n op === Ops.IN ? 'in' : 'notIn',\n val,\n params,\n dialect!,\n 'WHERE clause',\n )\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 return null\n}\n\nexport function buildScalarOperator(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n options: ScalarOperatorOptions = {},\n): string {\n const { mode, fieldType, dialect, depth = 0 } = options\n\n if (val === undefined) return ''\n\n if (depth > MAX_NOT_DEPTH) {\n throw new Error(\n `NOT operator nesting too deep (max ${MAX_NOT_DEPTH} levels). This usually indicates a circular reference or adversarial input.`,\n )\n }\n\n const nullCheck = tryBuildNullComparison(expr, op, val, 'WHERE clause')\n if (nullCheck) return nullCheck\n\n if (op === Ops.NOT && isPlainObject(val)) {\n return handleNotOperator(expr, val, params, mode, fieldType, dialect, depth)\n }\n\n if (op === Ops.NOT) {\n const placeholder = params.addAuto(val)\n return `${expr} <> ${placeholder}`\n }\n\n validateOperatorRequirements(op, mode, dialect)\n\n const specialHandler = routeOperatorHandler(\n expr,\n op,\n val,\n params,\n mode,\n dialect,\n )\n if (specialHandler !== null) {\n return specialHandler\n }\n\n return handleComparisonOperator(expr, op, val, params)\n}\n\nfunction normalizeMode(v: unknown): ModeType {\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?: ModeType,\n fieldType?: string,\n dialect?: SqlDialect,\n depth: number = 0,\n): string {\n const innerMode = normalizeMode(val.mode)\n const effectiveMode = innerMode ?? outerMode\n\n const entries = Object.entries(val).filter(\n ([k, v]) => k !== 'mode' && v !== undefined,\n )\n if (entries.length === 0) return ''\n\n if (!isNotNullish(dialect)) {\n const clauses: string[] = []\n for (const [subOp, subVal] of entries) {\n const sub = buildScalarOperator(expr, subOp, subVal, params, {\n mode: effectiveMode,\n fieldType,\n dialect: undefined,\n depth: depth + 1,\n })\n if (sub && sub.trim().length > 0) clauses.push(`(${sub})`)\n }\n\n if (clauses.length === 0) return ''\n if (clauses.length === 1) return `${SQL_TEMPLATES.NOT} ${clauses[0]}`\n const separator = ` ${SQL_TEMPLATES.AND} `\n return `${SQL_TEMPLATES.NOT} (${clauses.join(separator)})`\n }\n\n const separator = ` ${SQL_TEMPLATES.AND} `\n return buildNotComposite(\n expr,\n val,\n params,\n dialect,\n (e, subOp, subVal, p, d) =>\n buildScalarOperator(e, subOp, subVal, p, {\n mode: effectiveMode,\n fieldType,\n dialect: d,\n depth: depth + 1,\n }),\n separator,\n )\n}\n\nfunction buildDynamicLikePattern(op: string, placeholder: string): string {\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: ModeType,\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)\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 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'\nimport { tryBuildNullComparison } from '../shared/null-comparison'\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 if (val.length > LIMITS.MAX_ARRAY_SIZE) {\n throw createError(\n `Array too large (${val.length} elements, max ${LIMITS.MAX_ARRAY_SIZE})`,\n { value: `[${val.length} items]` },\n )\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 const nullCheck = tryBuildNullComparison(expr, op, val, 'array operators')\n if (nullCheck) return nullCheck\n\n const cast = getArrayType(fieldType, dialect)\n\n if (op === Ops.EQUALS) {\n return handleArrayEquals(expr, val, params, cast, dialect)\n }\n\n if (op === Ops.NOT) {\n return handleArrayNot(expr, val, params, cast, dialect)\n }\n\n switch (op) {\n case Ops.HAS:\n return handleArrayHas(expr, val, params, cast, dialect)\n case Ops.HAS_SOME:\n return handleArrayHasSome(expr, val, params, cast, dialect)\n case Ops.HAS_EVERY:\n return handleArrayHasEvery(expr, val, params, cast, dialect)\n case Ops.IS_EMPTY:\n return handleArrayIsEmpty(expr, val, dialect)\n default:\n throw createError(`Unknown array operator: ${op}`, { operator: op })\n }\n}\n\nfunction handleArrayEquals(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (isEmptyArray(val)) {\n return arrayIsEmpty(expr, dialect)\n }\n\n const placeholder = buildArrayParam(val, params, dialect)\n return arrayEquals(expr, placeholder, cast, dialect)\n}\n\nfunction handleArrayNot(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n let target: unknown = val\n\n if (isPlainObject(val)) {\n const entries = Object.entries(val).filter(([, v]) => v !== undefined)\n if (entries.length === 1 && entries[0][0] === Ops.EQUALS) {\n target = entries[0][1]\n } else {\n throw createError(`Array NOT only supports { equals: ... } shape`, {\n operator: Ops.NOT,\n value: val,\n })\n }\n }\n\n if (target === null) {\n return `${expr} ${SQL_TEMPLATES.IS_NOT_NULL}`\n }\n\n if (isEmptyArray(target)) {\n return arrayIsNotEmpty(expr, dialect)\n }\n\n const placeholder = buildArrayParam(target, params, dialect)\n return `${T.NOT} (${arrayEquals(expr, placeholder, cast, dialect)})`\n}\n\nfunction handleArrayHas(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (val === null) {\n throw createError(`has requires scalar value`, {\n operator: Ops.HAS,\n value: val,\n })\n }\n\n if (!isDynamicParameter(val) && Array.isArray(val)) {\n throw createError(`has requires scalar value (single element), not array`, {\n operator: Ops.HAS,\n value: val,\n })\n }\n\n if (isPlainObject(val)) {\n throw createError(`has requires scalar value`, {\n operator: Ops.HAS,\n value: val,\n })\n }\n\n const placeholder = params.addAuto(val)\n return arrayContains(expr, placeholder, cast, dialect)\n}\n\nfunction handleArrayHasSome(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (isDynamicParameter(val)) {\n const placeholder = params.addAuto(val)\n return arrayOverlaps(expr, placeholder, cast, dialect)\n }\n\n if (!Array.isArray(val)) {\n throw createError(`hasSome requires array value`, {\n operator: Ops.HAS_SOME,\n value: val,\n })\n }\n\n if (val.length > LIMITS.MAX_ARRAY_SIZE) {\n throw createError(\n `Array too large (${val.length} elements, max ${LIMITS.MAX_ARRAY_SIZE})`,\n { operator: Ops.HAS_SOME, value: `[${val.length} items]` },\n )\n }\n\n if (val.length === 0) return '0=1'\n\n const paramValue = prepareArrayParam(val as unknown[], dialect)\n const placeholder = params.add(paramValue)\n return arrayOverlaps(expr, placeholder, cast, dialect)\n}\n\nfunction handleArrayHasEvery(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n const placeholder = buildArrayParam(val, params, dialect)\n return arrayContainsAll(expr, placeholder, cast, dialect)\n}\n\nfunction handleArrayIsEmpty(\n expr: string,\n val: unknown,\n dialect: SqlDialect,\n): string {\n if (typeof val !== 'boolean') {\n throw createError(`isEmpty requires boolean value`, {\n operator: Ops.IS_EMPTY,\n value: val,\n })\n }\n\n return val === true\n ? arrayIsEmpty(expr, dialect)\n : arrayIsNotEmpty(expr, dialect)\n}\n","import {\n jsonExtractText,\n jsonExtractNumeric,\n jsonToText,\n caseInsensitiveLike,\n SqlDialect,\n} from '../../sql-builder-dialect'\nimport { LIMITS, Ops, SQL_TEMPLATES } from '../shared/constants'\nimport { createError } from '../shared/errors'\nimport { ParamStore } from '../shared/param-store'\nimport { isNotNullish, isPlainObject } from '../shared/validators/type-guards'\n\nconst SAFE_JSON_PATH_SEGMENT = /^[a-zA-Z_]\\w*$/\nconst MAX_PATH_SEGMENT_LENGTH = 255\nconst MAX_PATH_SEGMENTS = 100\n\nfunction sanitizeForError(s: string): string {\n let result = ''\n for (let i = 0; i < s.length; i++) {\n const code = s.charCodeAt(i)\n if ((code >= 0 && code <= 31) || code === 127) {\n result += `\\\\x${code.toString(16).padStart(2, '0')}`\n } else {\n result += s[i]\n }\n }\n return result\n}\n\nfunction validateJsonPathSegments(segments: string[]): void {\n if (segments.length > MAX_PATH_SEGMENTS) {\n throw createError(`JSON path too long: max ${MAX_PATH_SEGMENTS} segments`, {\n operator: Ops.PATH,\n })\n }\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i]\n\n if (typeof segment !== 'string') {\n throw createError(`JSON path segment at index ${i} must be string`, {\n operator: Ops.PATH,\n })\n }\n\n if (segment.length > MAX_PATH_SEGMENT_LENGTH) {\n throw createError(\n `JSON path segment at index ${i} too long: max ${MAX_PATH_SEGMENT_LENGTH} characters`,\n { operator: Ops.PATH },\n )\n }\n\n if (!SAFE_JSON_PATH_SEGMENT.test(segment)) {\n throw createError(\n `Invalid JSON path segment at index ${i}: '${sanitizeForError(segment)}'`,\n { operator: Ops.PATH },\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 quoteColumn,\n} from '../shared/sql-utils'\nimport { BuildContext, QueryResult } from '../shared/types'\nimport { isNotNullish, isPlainObject } from '../shared/validators/type-guards'\nimport { Field, Model } from '../../types'\nimport { getFieldByName } from '../shared/primary-key-utils'\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[] = []\n\nfunction isListRelation(fieldType: unknown): boolean {\n return typeof fieldType === 'string' && fieldType.endsWith('[]')\n}\n\nfunction buildToOneNullCheck(\n field: Field,\n parentModel: Model,\n parentAlias: string,\n relTable: string,\n relAlias: string,\n join: string,\n wantNull: boolean,\n): string {\n const isLocal = field.isForeignKeyLocal === true\n const fkFields = normalizeKeyList(field.foreignKey)\n\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 expr = `${parentAlias}.${quoteColumn(parentModel, fk)}`\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 tryOptimizeNoneFilter(\n noneValue: unknown,\n ctx: BuildContext,\n relModel: Model,\n relTable: string,\n relAlias: string,\n join: string,\n sub: QueryResult,\n): QueryResult | null {\n const isEmptyFilter =\n isPlainObject(noneValue) && Object.keys(noneValue).length === 0\n\n const canOptimize =\n !ctx.isSubquery &&\n isEmptyFilter &&\n sub.clause === DEFAULT_WHERE_CLAUSE &&\n sub.joins.length === 0\n\n if (!canOptimize) return null\n\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) return null\n\n const leftJoinSql = `LEFT JOIN ${relTable} ${relAlias} ON ${join}`\n const whereClause = `${relAlias}.${quoteColumn(relModel, checkField.name)} IS NULL`\n\n return {\n clause: whereClause,\n joins: [leftJoinSql],\n }\n}\n\nfunction processRelationFilter(\n key:\n | typeof RelationFilters.SOME\n | typeof RelationFilters.EVERY\n | typeof RelationFilters.NONE,\n wrap: (c: string, j: string) => string,\n args: RelationFilterArgs,\n): string | null {\n const { value, fieldName, ctx, relAlias, relModel, whereBuilder } = args\n const raw = value[key]\n if (raw === undefined || raw === null) return null\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 return wrap(sub.clause, j)\n}\n\nfunction buildListRelationFilters(args: RelationFilterArgs): QueryResult {\n const {\n fieldName,\n value,\n ctx,\n whereBuilder,\n relModel,\n relTable,\n relAlias,\n join,\n } = args\n\n const noneValue = value[RelationFilters.NONE]\n\n if (noneValue !== undefined && noneValue !== null) {\n const sub = whereBuilder.build(noneValue as Record<string, unknown>, {\n ...ctx,\n alias: relAlias,\n model: relModel,\n path: [...ctx.path, fieldName, RelationFilters.NONE],\n isSubquery: true,\n depth: ctx.depth + 1,\n })\n\n const optimized = tryOptimizeNoneFilter(\n noneValue,\n ctx,\n relModel,\n relTable,\n relAlias,\n join,\n sub,\n )\n\n if (optimized) return optimized\n }\n\n const filters: Array<{\n key:\n | typeof RelationFilters.SOME\n | typeof RelationFilters.EVERY\n | typeof RelationFilters.NONE\n wrap: (c: string, j: string) => string\n }> = [\n {\n key: RelationFilters.SOME,\n wrap: (c, j) =>\n `EXISTS (${SQL_TEMPLATES.SELECT} 1 ${SQL_TEMPLATES.FROM} ${relTable} ${relAlias}${j} ${SQL_TEMPLATES.WHERE} ${join} ${SQL_TEMPLATES.AND} ${c})`,\n },\n {\n key: RelationFilters.EVERY,\n wrap: (c, j) =>\n `${SQL_TEMPLATES.NOT} EXISTS (${SQL_TEMPLATES.SELECT} 1 ${SQL_TEMPLATES.FROM} ${relTable} ${relAlias}${j} ${SQL_TEMPLATES.WHERE} ${join} ${SQL_TEMPLATES.AND} ${SQL_TEMPLATES.NOT} (${c}))`,\n },\n {\n key: RelationFilters.NONE,\n wrap: (c, j) => {\n const condition =\n c === DEFAULT_WHERE_CLAUSE ? '' : ` ${SQL_TEMPLATES.AND} ${c}`\n return `${SQL_TEMPLATES.NOT} EXISTS (${SQL_TEMPLATES.SELECT} 1 ${SQL_TEMPLATES.FROM} ${relTable} ${relAlias}${j} ${SQL_TEMPLATES.WHERE} ${join}${condition})`\n },\n },\n ]\n\n const clauses: string[] = []\n\n for (const { key, wrap } of filters) {\n const clause = processRelationFilter(key, wrap, args)\n if (clause) clauses.push(clause)\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 {\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 {\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.model,\n ctx.alias,\n relTable,\n relAlias,\n join,\n wantNull,\n )\n return {\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 {\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 = getFieldByName(ctx.model, 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\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\n const relAlias = ctx.aliasGen.next(fieldName)\n\n const join = joinCondition(field, ctx.model, relModel, ctx.alias, relAlias)\n\n const args: RelationFilterArgs = {\n fieldName,\n value,\n ctx,\n whereBuilder,\n field,\n relModel,\n relTable,\n relAlias,\n join,\n }\n\n if (isListRelation(field.type)) return buildListRelationFilters(args)\n return buildToOneRelationFilters(args)\n}\n\nexport function buildTopLevelRelation(\n fieldName: string,\n value: Record<string, unknown>,\n ctx: BuildContext,\n whereBuilder: IWhereBuilder,\n): QueryResult {\n ensureRelationFilterObject(fieldName, value, ctx)\n return buildRelation(fieldName, value, ctx, whereBuilder)\n}\n\nexport function buildNestedRelation(\n fieldName: string,\n value: Record<string, unknown>,\n ctx: BuildContext,\n whereBuilder: IWhereBuilder,\n): QueryResult {\n return buildTopLevelRelation(fieldName, value, ctx, whereBuilder)\n}\n","export function deduplicatePreserveOrder<T>(items: readonly T[]): readonly T[] {\n if (items.length <= 1) return Object.freeze([...items])\n\n const seen = new Set<T>()\n const out: T[] = []\n\n for (const item of items) {\n if (!seen.has(item)) {\n seen.add(item)\n out.push(item)\n }\n }\n\n return out\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 { assertFieldExists } from '../shared/validators/field-assertions'\nimport { isValidWhereClause } from '../shared/validators/sql-validators'\nimport {\n isNonEmptyArray,\n isArrayType,\n isJsonType,\n isPlainObject,\n} from '../shared/validators/type-guards'\nimport { deduplicatePreserveOrder } from '../shared/array-utils'\nimport { buildNullComparison } from '../shared/null-comparison'\n\ntype LogicalOperator = 'AND' | 'OR' | 'NOT'\n\nconst MAX_QUERY_DEPTH = 50\nconst EMPTY_JOINS: readonly string[] = []\nconst JSON_OPS = new Set([\n Ops.PATH,\n Ops.STRING_CONTAINS,\n Ops.STRING_STARTS_WITH,\n Ops.STRING_ENDS_WITH,\n])\n\nclass WhereBuilder implements IWhereBuilder {\n build(where: Record<string, unknown>, ctx: BuildContext): QueryResult {\n if (!isPlainObject(where)) {\n throw createError('where must be an object', {\n path: ctx.path,\n modelName: ctx.model.name,\n })\n }\n return buildWhereInternal(where, ctx, this)\n }\n}\n\nexport const whereBuilderInstance = new WhereBuilder()\n\nfunction createResult(\n clause: string,\n joins: readonly string[] = EMPTY_JOINS,\n): QueryResult {\n return { clause, joins }\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 buildSimpleEquality(\n expr: string,\n value: unknown,\n ctx: BuildContext,\n): string {\n if (value === null) return `${expr} ${SQL_TEMPLATES.IS_NULL}`\n const placeholder = ctx.params.addAuto(value)\n return `${expr} = ${placeholder}`\n}\n\nfunction isSimpleWhere(where: Record<string, unknown>): boolean {\n const keys = Object.keys(where)\n if (keys.length !== 1) return false\n\n const key = keys[0]\n const value = where[key]\n\n if (value === null) return true\n if (value === undefined) return false\n if (typeof value === 'string') return true\n if (typeof value === 'number') return true\n if (typeof value === 'boolean') return true\n\n return false\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 (ctx.seenObjects.has(where)) {\n throw createError('Circular reference detected in WHERE clause', {\n path: ctx.path,\n modelName: ctx.model.name,\n })\n }\n\n if (!isPlainObject(where) || Object.keys(where).length === 0) {\n return createResult(DEFAULT_WHERE_CLAUSE, EMPTY_JOINS)\n }\n\n ctx.seenObjects.add(where)\n\n if (isSimpleWhere(where)) {\n const key = Object.keys(where)[0]\n const value = where[key]\n assertFieldExists(key, ctx.model, 'WHERE', ctx.path)\n const expr = col(ctx.alias, key, ctx.model)\n const clause = buildSimpleEquality(expr, value, ctx)\n return createResult(clause, EMPTY_JOINS)\n }\n\n const allJoins: string[] = []\n const clauses: string[] = []\n\n for (const key in where) {\n const value = where[key]\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 const dedupedJoins = deduplicatePreserveOrder(allJoins)\n\n return createResult(finalClause, dedupedJoins)\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 const dedupedJoins = deduplicatePreserveOrder(allJoins)\n\n return {\n joins: dedupedJoins,\n 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 createResult(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 createResult(clause, joins)\n}\n\nfunction buildScalarField(\n fieldName: string,\n value: unknown,\n ctx: BuildContext,\n): QueryResult {\n const field = assertFieldExists(fieldName, ctx.model, 'WHERE', ctx.path)\n const expr = col(ctx.alias, fieldName, ctx.model)\n\n if (value === null) {\n return createResult(`${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 createResult(DEFAULT_WHERE_CLAUSE, EMPTY_JOINS)\n }\n\n const parts: string[] = []\n for (const [op, val] of ops) {\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 createResult(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 createResult(clause || DEFAULT_WHERE_CLAUSE, EMPTY_JOINS)\n}\n\nfunction buildOperator(\n expr: string,\n op: string,\n val: unknown,\n ctx: BuildContext,\n mode?: 'insensitive' | 'default',\n fieldType?: string,\n): string {\n if (fieldType && isArrayType(fieldType)) {\n return buildArrayOperator(expr, op, val, ctx.params, fieldType, ctx.dialect)\n }\n\n if (fieldType && isJsonType(fieldType) && JSON_OPS.has(op as any)) {\n return buildJsonOperator(expr, op, val, ctx.params, ctx.dialect)\n }\n\n return buildScalarOperator(expr, op, val, ctx.params, {\n mode,\n fieldType,\n dialect: ctx.dialect,\n })\n}\n","import { AliasGenerator } from './types'\nimport { ALIAS_FORBIDDEN_KEYWORDS } from './constants'\n\nconst SAFE_IDENTIFIER_CACHE = new Map<string, string>()\n\nfunction toSafeSqlIdentifier(input: string): string {\n const cached = SAFE_IDENTIFIER_CACHE.get(input)\n if (cached !== undefined) return cached\n\n const raw = String(input)\n const n = raw.length\n\n if (n === 0) {\n SAFE_IDENTIFIER_CACHE.set(input, '_t')\n return '_t'\n }\n\n let out = ''\n for (let i = 0; i < n; i++) {\n const c = raw.charCodeAt(i)\n const isAZ = (c >= 65 && c <= 90) || (c >= 97 && c <= 122)\n const is09 = c >= 48 && c <= 57\n const isUnderscore = c === 95\n\n out += isAZ || is09 || isUnderscore ? raw[i] : '_'\n }\n\n const c0 = out.charCodeAt(0)\n const startsOk =\n (c0 >= 65 && c0 <= 90) || (c0 >= 97 && c0 <= 122) || c0 === 95\n const lowered = (startsOk ? out : `_${out}`).toLowerCase()\n\n const result = ALIAS_FORBIDDEN_KEYWORDS.has(lowered) ? `_${lowered}` : lowered\n\n if (SAFE_IDENTIFIER_CACHE.size < 1000) {\n SAFE_IDENTIFIER_CACHE.set(input, result)\n }\n\n return result\n}\n\nexport function createAliasGenerator(\n maxAliases: number = 10000,\n): AliasGenerator {\n let counter = 0\n const usedAliases = new Set<string>()\n\n const maxLen = 63\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 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 )\n }\n usedAliases.add(alias)\n\n return alias\n },\n }\n}\n","import {\n extractDynamicName,\n isDynamicParameter,\n ParamMap,\n} from '@dee-wan/schema-parser'\nimport { normalizeValue } from '../../utils/normalize-value'\nimport { SqlDialect } from '../../sql-builder-dialect'\n\nexport interface ParamStore {\n add(value: unknown, dynamicName?: string): string\n addAuto(value: unknown): string\n snapshot(): ParamSnapshot\n readonly index: number\n readonly dialect: SqlDialect\n}\n\ninterface ParamSnapshot {\n readonly index: number\n readonly params: readonly unknown[]\n readonly mappings: readonly ParamMap[]\n readonly dynamicNameIndex: ReadonlyMap<string, number>\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 validateMappings(mappings: readonly ParamMap[]): void {\n const seenDynamic = new Set<string>()\n for (let i = 0; i < mappings.length; i++) {\n const m = mappings[i]\n assertSequentialIndex(m.index, i + 1)\n assertExactlyOneOfDynamicOrValue(m)\n\n if (typeof m.dynamicName === 'string') {\n const dn = normalizeDynamicNameOrThrow(m.dynamicName, m.index)\n if (seenDynamic.has(dn)) {\n throw new Error(`CRITICAL: Duplicate dynamic param name: ${dn}`)\n }\n seenDynamic.add(dn)\n }\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 if (mappings.length === 0) return\n validateMappings(mappings)\n assertNextIndexMatches(mappings.length, index)\n}\n\nfunction buildDynamicNameIndex(\n mappings: readonly ParamMap[],\n): Map<string, number> {\n const dynamicNameToIndex = new Map<string, number>()\n for (const m of mappings) {\n if (typeof m.dynamicName === 'string') {\n dynamicNameToIndex.set(m.dynamicName.trim(), m.index)\n }\n }\n return dynamicNameToIndex\n}\n\nfunction assertCanAddParam(currentIndex: number): void {\n if (currentIndex > MAX_PARAM_INDEX) {\n throw new Error(\n `CRITICAL: Cannot add param - would overflow MAX_SAFE_INTEGER. Current index: ${currentIndex}`,\n )\n }\n}\n\nconst POSTGRES_POSITION_CACHE = new Array(500)\nfor (let i = 0; i < 500; i++) {\n POSTGRES_POSITION_CACHE[i] = `$${i + 1}`\n}\n\nfunction formatPositionPostgres(position: number): string {\n if (position <= 500) return POSTGRES_POSITION_CACHE[position - 1]\n return `$${position}`\n}\n\nfunction formatPositionSqlite(_position: number): string {\n return '?'\n}\n\nfunction validateDynamicName(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\nfunction createStoreInternal(\n startIndex: number,\n dialect: SqlDialect,\n initialParams: unknown[] = [],\n initialMappings: ParamMap[] = [],\n cachedIndex?: ReadonlyMap<string, number>,\n): ParamStore {\n let index = startIndex\n let params: unknown[] = initialParams.length > 0 ? initialParams.slice() : []\n let mappings: ParamMap[] =\n initialMappings.length > 0 ? initialMappings.slice() : []\n let frozen = false\n\n let dynamicNameToIndex = cachedIndex\n ? new Map(cachedIndex)\n : buildDynamicNameIndex(mappings)\n\n let dirty = true\n let cachedSnapshot: ParamSnapshot | null = null\n\n const formatPosition =\n dialect === 'sqlite' ? formatPositionSqlite : formatPositionPostgres\n\n function ensureMutable(): void {\n if (frozen) {\n params = params.slice()\n mappings = mappings.slice()\n frozen = false\n }\n }\n\n function registerParam(paramValue: unknown, mapping: ParamMap): string {\n ensureMutable()\n const position = index\n params.push(paramValue)\n mappings.push(mapping)\n index++\n dirty = true\n return formatPosition(position)\n }\n\n function addDynamic(dynamicName: string): string {\n const dn = validateDynamicName(dynamicName)\n const existing = dynamicNameToIndex.get(dn)\n if (existing !== undefined) return formatPosition(existing)\n\n const position = index\n dynamicNameToIndex.set(dn, position)\n return registerParam(undefined, { index: position, dynamicName: dn })\n }\n\n function addStatic(value: unknown): string {\n const position = index\n const normalizedValue = normalizeValue(value)\n return registerParam(normalizedValue, {\n index: position,\n value: normalizedValue,\n })\n }\n\n function add(value: unknown, dynamicName?: string): string {\n assertCanAddParam(index)\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 if (!dirty && cachedSnapshot) return cachedSnapshot\n\n frozen = true\n\n const snap: ParamSnapshot = {\n index,\n params,\n mappings,\n dynamicNameIndex: new Map(dynamicNameToIndex),\n }\n\n cachedSnapshot = snap\n dirty = false\n return snap\n }\n\n return {\n add,\n addAuto,\n snapshot,\n get index() {\n return index\n },\n get dialect() {\n return dialect\n },\n }\n}\n\nexport function createParamStore(\n startIndex = 1,\n dialect: SqlDialect = 'postgres',\n): 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, dialect)\n}\n\nexport function createParamStoreFrom(\n existingParams: readonly unknown[],\n existingMappings: readonly ParamMap[],\n nextIndex: number,\n dialect: SqlDialect = 'postgres',\n): ParamStore {\n validateState(existingParams, existingMappings, nextIndex)\n\n const cachedIndex = buildDynamicNameIndex(existingMappings)\n\n return createStoreInternal(\n nextIndex,\n dialect,\n existingParams.slice(),\n existingMappings.slice(),\n cachedIndex,\n )\n}\n","import { DEFAULT_WHERE_CLAUSE } from './constants'\nimport { WhereClauseResult } from './types'\nimport { ParamStore } from './param-store'\n\nexport function toPublicResult(\n clause: string,\n joins: readonly string[],\n params: ParamStore,\n): WhereClauseResult {\n const snapshot = params.snapshot()\n\n return Object.freeze({\n clause: clause || DEFAULT_WHERE_CLAUSE,\n joins: Object.freeze([...joins]),\n params: snapshot.params,\n paramMappings: snapshot.mappings,\n nextParamIndex: snapshot.index,\n })\n}\n","import { SqlDialect, getGlobalDialect } from '../sql-builder-dialect'\nimport { Model } from '../types'\nimport { whereBuilderInstance } from './where/builder'\nimport { createAliasGenerator } from './shared/alias-generator'\nimport { createParamStore, ParamStore } from './shared/param-store'\nimport { toPublicResult } from './shared/state'\nimport { WhereClauseResult, BuildContext } from './shared/types'\nimport { assertSafeAlias } from './shared/sql-utils'\n\ninterface BuildWhereOptions {\n alias: string\n model: Model\n schemaModels?: Model[]\n path?: string[]\n params?: ParamStore\n isSubquery?: boolean\n aliasGen?: any\n dialect?: SqlDialect\n}\n\nexport function buildWhereClause(\n where: Record<string, unknown>,\n options: BuildWhereOptions,\n): WhereClauseResult {\n assertSafeAlias(options.alias)\n\n const dialect = options.dialect || getGlobalDialect()\n const params = options.params ?? createParamStore()\n\n const ctx: BuildContext = {\n alias: options.alias,\n model: options.model,\n schemaModels: options.schemaModels ?? [],\n path: options.path ?? [],\n isSubquery: options.isSubquery ?? false,\n aliasGen: options.aliasGen ?? createAliasGenerator(),\n dialect,\n params,\n depth: 0,\n seenObjects: new WeakSet<object>(),\n }\n\n const result = whereBuilderInstance.build(where, ctx)\n const publicResult = toPublicResult(result.clause, result.joins, params)\n\n return publicResult\n}\n","import { Model } from '../../types'\nimport { SCHEMA_PREFIXES, SQL_SEPARATORS } from '../shared/constants'\nimport {\n getScalarFieldSet,\n getRelationFieldSet,\n} from '../shared/model-field-cache'\nimport { col, colWithAlias, sqlStringLiteral } from '../shared/sql-utils'\nimport {\n hasProperty,\n isNotNullish,\n isNonEmptyArray,\n isPlainObject,\n} from '../shared/validators/type-guards'\n\ntype SelectEntry = readonly [string, unknown]\n\nconst DEFAULT_SELECT_CACHE = new WeakMap<Model, Map<string, string>>()\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 analyzeSelectEntries(\n entries: readonly SelectEntry[],\n scalarSet: ReadonlySet<string>,\n relationSet: ReadonlySet<string>,\n): {\n scalarSelected: string[]\n hasRelationSelection: boolean\n hasCount: boolean\n} {\n const scalarSelected: string[] = []\n let hasRelationSelection = false\n let hasCount = false\n\n for (const [k, v] of entries) {\n if (k === '_count') {\n hasCount = true\n continue\n }\n if (relationSet.has(k)) hasRelationSelection = true\n if (scalarSet.has(k) && v === true) scalarSelected.push(k)\n }\n\n return { scalarSelected, hasRelationSelection, hasCount }\n}\n\nfunction buildDefaultScalarFields(model: Model, alias: string): string[] {\n const excludedPrefixes = [\n SCHEMA_PREFIXES.INTERNAL,\n SCHEMA_PREFIXES.COMMENT,\n ] as const\n\n const out: string[] = []\n for (const f of model.fields) {\n if (f.isRelation) continue\n const excluded = excludedPrefixes.some((p) => f.name.startsWith(p))\n if (!excluded) out.push(colWithAlias(alias, f.name, model))\n }\n\n if (!isNonEmptyArray(out)) {\n throw new Error(`Model ${model.name} has no selectable fields`)\n }\n\n return out\n}\n\nfunction getDefaultSelectCached(\n model: Model,\n alias: string,\n): string | undefined {\n return DEFAULT_SELECT_CACHE.get(model)?.get(alias)\n}\n\nfunction cacheDefaultSelect(model: Model, alias: string, sql: string): void {\n let cache = DEFAULT_SELECT_CACHE.get(model)\n if (!cache) {\n cache = new Map()\n DEFAULT_SELECT_CACHE.set(model, cache)\n }\n cache.set(alias, sql)\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 const cached = getDefaultSelectCached(model, alias)\n if (cached) return cached\n\n const result = buildDefaultScalarFields(model, alias).join(\n SQL_SEPARATORS.FIELD_LIST,\n )\n cacheDefaultSelect(model, alias, result)\n return result\n }\n\n const entries = toSelectEntries(args.select)\n validateFieldKeys(entries, scalarSet, relationSet, true)\n\n const { scalarSelected, hasRelationSelection, hasCount } =\n analyzeSelectEntries(entries, scalarSet, relationSet)\n\n const fields = scalarSelected.map((field) =>\n colWithAlias(alias, field, model),\n )\n\n if (!isNonEmptyArray(fields)) {\n if (hasRelationSelection) return ''\n if (!hasCount) {\n throw new Error('Select must have at least one scalar field set to true')\n }\n }\n\n return fields.join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nfunction buildAllScalarParts(model: Model, alias: string): string[] {\n const scalarFields = model.fields.filter((f) => !f.isRelation)\n if (!isNonEmptyArray(scalarFields)) {\n throw new Error(`Model ${model.name} has no scalar fields`)\n }\n\n const parts: string[] = []\n for (const field of scalarFields) {\n parts.push(\n `${sqlStringLiteral(field.name)}, ${col(alias, field.name, model)}`,\n )\n }\n return parts\n}\n\nfunction validateFieldKeys(\n entries: readonly SelectEntry[],\n scalarSet: ReadonlySet<string>,\n relationSet: ReadonlySet<string>,\n allowCount = false,\n): void {\n const unknown: string[] = []\n for (const [k] of entries) {\n if (allowCount && 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 buildSelectedScalarParts(\n entries: readonly SelectEntry[],\n scalarNames: ReadonlySet<string>,\n alias: string,\n model: Model,\n): string[] {\n const parts: string[] = []\n for (const [key, value] of entries) {\n if (!scalarNames.has(key)) continue\n if (value === true) {\n parts.push(`${sqlStringLiteral(key)}, ${col(alias, key, model)}`)\n }\n }\n return parts\n}\n\nexport function buildRelationSelect(\n relArgs: unknown,\n relModel: Model,\n relAlias: string,\n): string {\n if (relArgs === true) {\n return buildAllScalarParts(relModel, relAlias).join(\n SQL_SEPARATORS.FIELD_LIST,\n )\n }\n\n if (isPlainObject(relArgs) && hasProperty(relArgs, 'select')) {\n const sel = (relArgs as { select: Record<string, unknown> }).select\n if (!isPlainObject(sel)) {\n throw new Error(\n `Relation select must be an object for model ${relModel.name}`,\n )\n }\n\n const scalarNames = getScalarFieldSet(relModel)\n const relationNames = getRelationFieldSet(relModel)\n\n const entries = toSelectEntries(sel)\n validateFieldKeys(entries, scalarNames, relationNames, false)\n\n return buildSelectedScalarParts(\n entries,\n scalarNames,\n relAlias,\n relModel,\n ).join(SQL_SEPARATORS.FIELD_LIST)\n }\n\n return buildAllScalarParts(relModel, relAlias).join(SQL_SEPARATORS.FIELD_LIST)\n}\n","import { Field } from '../../types'\nimport { normalizeKeyList } from './sql-utils'\n\nexport interface RelationKeys {\n childKeys: string[]\n parentKeys: string[]\n}\n\nexport function resolveRelationKeys(\n field: Field,\n context: 'include' | 'count' | 'whereIn' = 'include',\n): RelationKeys {\n const fkFields = normalizeKeyList(field.foreignKey)\n\n if (fkFields.length === 0) {\n throw new Error(\n `Relation '${field.name}' is missing foreignKey for ${context}`,\n )\n }\n\n const refs = normalizeKeyList(field.references)\n const refFields = refs.length > 0 ? refs : fkFields.length === 1 ? ['id'] : []\n\n if (refFields.length !== fkFields.length) {\n throw new Error(\n `Relation '${field.name}' references count (${refFields.length}) ` +\n `doesn't match foreignKey count (${fkFields.length}) (context: ${context})`,\n )\n }\n\n const childKeys = field.isForeignKeyLocal ? refFields : fkFields\n const parentKeys = field.isForeignKeyLocal ? fkFields : refFields\n\n return { childKeys, parentKeys }\n}\n","import { Model } from '../../types'\nimport { getFieldIndices } from './model-field-cache'\nimport { isPlainObject } from './validators/type-guards'\n\nexport interface RelationEntry {\n name: string\n value: unknown\n}\n\nexport function extractRelationEntries(\n args: { include?: unknown; select?: unknown },\n model: Model,\n): RelationEntry[] {\n const indices = getFieldIndices(model)\n const entries: RelationEntry[] = []\n const seen = new Set<string>()\n\n const sources = [\n args.include && isPlainObject(args.include) ? args.include : null,\n args.select && isPlainObject(args.select) ? args.select : null,\n ]\n\n for (const source of sources) {\n if (!source) continue\n\n for (const key in source) {\n if (!Object.prototype.hasOwnProperty.call(source, key)) continue\n if (!indices.relationFields.has(key)) continue\n if (seen.has(key)) continue\n\n const value = (source as any)[key]\n if (value === false) continue\n\n seen.add(key)\n entries.push({ name: key, value })\n }\n }\n\n return entries\n}\n\nexport function extractRelationEntriesFromSelect(\n select: unknown,\n model: Model,\n): RelationEntry[] {\n if (!isPlainObject(select)) return []\n\n const indices = getFieldIndices(model)\n const entries: RelationEntry[] = []\n\n for (const key in select) {\n if (!Object.prototype.hasOwnProperty.call(select, key)) continue\n if (!indices.relationFields.has(key)) continue\n\n const value = (select as any)[key]\n if (value === false) continue\n if (value === true) continue\n if (!isPlainObject(value)) continue\n\n const v = value as Record<string, unknown>\n if (v.include || v.select) {\n entries.push({ name: key, value })\n }\n }\n\n return entries\n}\n","import { joinCondition, isValidRelationField } from '../joins'\nimport { buildOrderBy, readSkipTake, parseOrderByValue } from '../pagination'\nimport { buildWhereClause } from '../where'\nimport { jsonAgg, jsonBuildObject, SqlDialect } from '../../sql-builder-dialect'\nimport { buildRelationSelect } from './fields'\nimport { Model, PrismaQueryArgs, Field } from '../../types'\nimport { createAliasGenerator } from '../shared/alias-generator'\nimport { SQL_TEMPLATES, SQL_SEPARATORS } from '../shared/constants'\nimport {\n buildTableReference,\n quote,\n sqlStringLiteral,\n normalizeKeyList,\n quoteColumn,\n} from '../shared/sql-utils'\nimport { ParamStore } from '../shared/param-store'\nimport { IncludeSpec, AliasGenerator } from '../shared/types'\nimport { isValidWhereClause } from '../shared/validators/sql-validators'\nimport {\n hasProperty,\n isNonEmptyArray,\n isNotNullish,\n isPlainObject,\n} from '../shared/validators/type-guards'\nimport {\n reverseOrderByInput,\n normalizeOrderByInput,\n} from '../shared/order-by-utils'\nimport { addAutoScoped } from '../shared/dynamic-params'\nimport {\n getRelationFieldSet,\n getScalarFieldSet,\n} from '../shared/model-field-cache'\nimport { ensureDeterministicOrderByInput } from '../shared/order-by-determinism'\nimport { isDynamicParameter } from '@dee-wan/schema-parser'\nimport { resolveRelationKeys } from '../shared/relation-key-utils'\nimport {\n extractRelationEntries,\n RelationEntry,\n} from '../shared/relation-extraction-utils'\n\nconst MAX_INCLUDE_DEPTH = 5\nconst MAX_INCLUDES_PER_LEVEL = 10\nconst MAX_TOTAL_SUBQUERIES = 100\n\ninterface IncludeComplexityStats {\n totalIncludes: number\n totalSubqueries: number\n maxDepth: number\n}\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 schemaByName: Map<string, Model>\n parentAlias: string\n aliasGen: AliasGenerator\n dialect: SqlDialect\n params: ParamStore\n includePath: string[]\n visitSet: Set<string>\n depth: number\n stats: IncludeComplexityStats\n outerHasLimit?: boolean\n}\n\ninterface FlatJoinEligibility {\n canUse: boolean\n reason?: string\n}\n\nexport function canUseFlatJoinForInclude(\n relationName: string,\n relArgs: unknown,\n relModel: Model,\n depth: number,\n outerHasLimit: boolean,\n): FlatJoinEligibility {\n if (depth > 0) {\n return { canUse: false, reason: 'nested_depth' }\n }\n\n const { hasSkip, hasTake } = readSkipTake(relArgs)\n if (hasSkip || hasTake) {\n return { canUse: false, reason: 'child_pagination' }\n }\n\n if (hasNestedRelationInArgs(relArgs, relModel)) {\n return { canUse: false, reason: 'nested_includes' }\n }\n\n if (!outerHasLimit) {\n return { canUse: false, reason: 'no_outer_limit' }\n }\n\n return { canUse: true }\n}\n\nfunction buildIncludeScope(includePath: readonly string[]): string {\n if (includePath.length === 0) return 'include'\n let scope = 'include'\n for (let i = 0; i < includePath.length; i++) {\n scope += `.${includePath[i]}`\n if (i < includePath.length - 1) {\n scope += '.include'\n }\n }\n return scope\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 schemaByName: Map<string, Model>,\n relName: string,\n): { field: Field; relModel: Model } {\n const field = model.fields.find((f) => f.name === relName) as\n | Field\n | undefined\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 relatedModelName = field.relatedModel\n if (\n !isNotNullish(relatedModelName) ||\n String(relatedModelName).trim().length === 0\n ) {\n throw new Error(\n `Relation '${relName}' on model ${model.name} is missing relatedModel metadata.`,\n )\n }\n\n const relModel = schemaByName.get(relatedModelName)\n if (!isNotNullish(relModel)) {\n throw new Error(\n `Relation '${relName}' on model ${model.name} references missing model '${relatedModelName}'.`,\n )\n }\n\n return { field, relModel }\n}\n\nfunction validateOrderByForModel(model: Model, orderBy: unknown): void {\n if (!isNotNullish(orderBy)) return\n\n const scalarSet = getScalarFieldSet(model)\n const normalized = normalizeOrderByInput(orderBy, parseOrderByValue)\n\n for (const item of normalized) {\n const entries = Object.entries(item)\n if (entries.length !== 1) {\n throw new Error('orderBy array entries must have exactly one field')\n }\n\n const fieldName = String(entries[0][0]).trim()\n if (fieldName.length === 0) {\n throw new Error('orderBy field name cannot be empty')\n }\n if (!scalarSet.has(fieldName)) {\n throw new Error(\n `orderBy references unknown or non-scalar field '${fieldName}' on model ${model.name}`,\n )\n }\n }\n}\n\nfunction appendLimitOffset(\n sql: string,\n dialect: SqlDialect,\n params: ParamStore,\n takeVal: IntOrDynamic | undefined,\n skipVal: IntOrDynamic | undefined,\n scope: string,\n): string {\n const hasTake = isNotNullish(takeVal)\n const hasSkip = isNotNullish(skipVal)\n\n if (dialect === 'sqlite' && !hasTake && hasSkip) {\n const skipPh = addAutoScoped(params, skipVal, `${scope}.skip`)\n return `${sql} ${SQL_TEMPLATES.LIMIT} -1 ${SQL_TEMPLATES.OFFSET} ${skipPh}`\n }\n\n if (hasTake) {\n const takePh = addAutoScoped(params, takeVal, `${scope}.take`)\n sql = `${sql} ${SQL_TEMPLATES.LIMIT} ${takePh}`\n }\n\n if (hasSkip) {\n const skipPh = addAutoScoped(params, skipVal, `${scope}.skip`)\n sql = `${sql} ${SQL_TEMPLATES.OFFSET} ${skipPh}`\n }\n\n return sql\n}\n\nfunction readWhereInput(relArgs: unknown): Record<string, unknown> {\n if (!isPlainObject(relArgs)) return {}\n if (!hasProperty(relArgs, 'where')) return {}\n const w = (relArgs as Record<string, unknown>).where\n return isPlainObject(w) ? w : {}\n}\n\nfunction readOrderByInput(relArgs: unknown): {\n hasOrderBy: boolean\n orderBy: OrderByInput\n} {\n if (!isPlainObject(relArgs)) return { hasOrderBy: false, orderBy: undefined }\n if (!('orderBy' in relArgs)) return { hasOrderBy: false, orderBy: undefined }\n return {\n hasOrderBy: true,\n orderBy: (relArgs as any).orderBy,\n }\n}\n\nfunction extractRelationPaginationConfig(relArgs: unknown): {\n hasOrderBy: boolean\n orderBy: unknown\n hasSkip: boolean\n hasTake: boolean\n skipVal: OptionalIntOrDynamic\n takeVal: OptionalIntOrDynamic\n} {\n const { hasOrderBy, orderBy: rawOrderByInput } = readOrderByInput(relArgs)\n const {\n hasSkip,\n hasTake,\n skipVal,\n takeVal: rawTakeVal,\n } = readSkipTake(relArgs)\n\n return {\n hasOrderBy,\n orderBy: rawOrderByInput,\n hasSkip,\n hasTake,\n skipVal,\n takeVal: rawTakeVal,\n }\n}\n\nfunction maybeReverseNegativeTake(\n takeVal: OptionalIntOrDynamic,\n hasOrderBy: boolean,\n orderByInput: unknown,\n): { takeVal: OptionalIntOrDynamic; orderByInput: unknown } {\n if (typeof takeVal !== 'number') return { takeVal, orderByInput }\n if (takeVal >= 0) return { takeVal, orderByInput }\n if (!hasOrderBy) {\n throw new Error('Negative take requires orderBy for deterministic results')\n }\n return {\n takeVal: Math.abs(takeVal),\n orderByInput: reverseOrderByInput(orderByInput),\n }\n}\n\nfunction finalizeOrderByForInclude(args: {\n relModel: Model\n hasOrderBy: boolean\n orderByInput: unknown\n hasPagination: boolean\n}): unknown {\n if (args.hasOrderBy && isNotNullish(args.orderByInput)) {\n validateOrderByForModel(args.relModel, args.orderByInput)\n }\n\n if (!args.hasPagination) return args.orderByInput\n\n return ensureDeterministicOrderByInput({\n orderBy: args.hasOrderBy ? args.orderByInput : undefined,\n model: args.relModel,\n parseValue: parseOrderByValue,\n })\n}\n\nfunction buildSelectWithNestedIncludes(\n relArgs: unknown,\n relModel: Model,\n relAlias: string,\n ctx: IncludeBuildContext,\n): string {\n let relSelect = buildRelationSelect(relArgs, relModel, relAlias)\n\n const nestedIncludes = isPlainObject(relArgs)\n ? buildIncludeSqlInternal(relArgs as PrismaQueryArgs, {\n ...ctx,\n model: relModel,\n parentAlias: relAlias,\n depth: ctx.depth + 1,\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; rawClause: 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 hasClause = isValidWhereClause(whereResult.clause)\n\n return {\n joins,\n whereClause: hasClause ? ` ${SQL_TEMPLATES.AND} ${whereResult.clause}` : '',\n rawClause: hasClause ? whereResult.clause : '',\n }\n}\n\nfunction limitOneSql(\n sql: string,\n params: ParamStore,\n skipVal: OptionalIntOrDynamic,\n scope: string,\n): string {\n if (isNotNullish(skipVal)) {\n const skipPh = addAutoScoped(params, skipVal, `${scope}.skip`)\n return `${sql} ${SQL_TEMPLATES.LIMIT} 1 ${SQL_TEMPLATES.OFFSET} ${skipPh}`\n }\n return `${sql} ${SQL_TEMPLATES.LIMIT} 1`\n}\n\nfunction buildOrderBySql(\n finalOrderByInput: unknown,\n relAlias: string,\n dialect: SqlDialect,\n relModel: Model,\n): string {\n return isNotNullish(finalOrderByInput)\n ? buildOrderBy(finalOrderByInput, relAlias, dialect, relModel)\n : ''\n}\n\nfunction buildBaseSql(args: {\n selectExpr: string\n relTable: string\n relAlias: string\n joins: string\n joinPredicate: string\n whereClause: string\n}): string {\n const joins = args.joins ? ` ${args.joins}` : ''\n const where = `${SQL_TEMPLATES.WHERE} ${args.joinPredicate}${args.whereClause}`\n return (\n `${SQL_TEMPLATES.SELECT} ${args.selectExpr} ` +\n `${SQL_TEMPLATES.FROM} ${args.relTable} ${args.relAlias}${joins} ` +\n where\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) sql += ` ${SQL_TEMPLATES.ORDER_BY} ${args.orderBySql}`\n\n const scopeBase = buildIncludeScope(args.ctx.includePath)\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 scopeBase,\n )\n }\n\n return limitOneSql(sql, args.ctx.params, args.skipVal, scopeBase)\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 const emptyJson =\n args.ctx.dialect === 'postgres' ? `'[]'::json` : `json('[]')`\n\n if (args.ctx.dialect === 'postgres' && noTake && noSkip) {\n const rawAgg = args.orderBySql\n ? `json_agg(${rowExpr} ORDER BY ${args.orderBySql})`\n : `json_agg(${rowExpr})`\n\n const selectExpr = `COALESCE(${rawAgg}, ${emptyJson})`\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({ name: args.relName, sql, isOneToOne: false })\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) base += ` ${SQL_TEMPLATES.ORDER_BY} ${args.orderBySql}`\n\n const scopeBase = buildIncludeScope(args.ctx.includePath)\n\n base = appendLimitOffset(\n base,\n args.ctx.dialect,\n args.ctx.params,\n args.takeVal,\n args.skipVal,\n scopeBase,\n )\n\n const agg = jsonAgg('row', args.ctx.dialect)\n const selectExpr = `COALESCE(${agg}, ${emptyJson})`\n\n const sql =\n `${SQL_TEMPLATES.SELECT} ${selectExpr} ` +\n `${SQL_TEMPLATES.FROM} (${base}) ${SQL_TEMPLATES.AS} ${rowAlias}`\n\n return Object.freeze({ name: args.relName, sql, isOneToOne: false })\n}\n\nfunction buildFkSelectList(\n relAlias: string,\n relModel: Model,\n relKeyFields: string[],\n): string {\n return relKeyFields\n .map((f, i) => `${relAlias}.${quoteColumn(relModel, f)} AS \"__fk${i}\"`)\n .join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nfunction buildFkGroupByUnqualified(relKeyFields: string[]): string {\n return relKeyFields\n .map((_, i) => `\"__fk${i}\"`)\n .join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nfunction buildJoinOnCondition(\n joinAlias: string,\n parentAlias: string,\n parentModel: Model,\n parentKeyFields: string[],\n): string {\n const parts = parentKeyFields.map(\n (f, i) =>\n `${joinAlias}.\"__fk${i}\" = ${parentAlias}.${quoteColumn(parentModel, f)}`,\n )\n return parts.length === 1 ? parts[0] : `(${parts.join(' AND ')})`\n}\n\nfunction buildPartitionBy(\n relAlias: string,\n relModel: Model,\n relKeyFields: string[],\n): string {\n return relKeyFields\n .map((f) => `${relAlias}.${quoteColumn(relModel, f)}`)\n .join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nexport function hasNestedRelationInArgs(\n relArgs: unknown,\n relModel: Model,\n): boolean {\n if (!isPlainObject(relArgs)) return false\n\n const relationSet = getRelationFieldSet(relModel)\n const checkSource = (src: unknown): boolean => {\n if (!isPlainObject(src)) return false\n for (const k of Object.keys(src)) {\n if (relationSet.has(k) && (src as Record<string, unknown>)[k] !== false)\n return true\n }\n return false\n }\n\n if (checkSource((relArgs as Record<string, unknown>).include)) return true\n if (checkSource((relArgs as Record<string, unknown>).select)) return true\n\n return false\n}\n\nfunction canUseJoinInclude(\n dialect: string,\n isList: boolean,\n takeVal: OptionalIntOrDynamic,\n skipVal: OptionalIntOrDynamic,\n depth: number,\n outerHasLimit: boolean,\n hasNestedIncludes: boolean,\n): boolean {\n if (dialect !== 'postgres') return false\n if (!isList) return false\n if (depth > 0) return false\n if (outerHasLimit) return false\n if (hasNestedIncludes) return false\n if (isDynamicParameter(takeVal) || isDynamicParameter(skipVal)) return false\n return true\n}\n\nfunction buildJoinBasedNonPaginated(args: {\n relName: string\n relTable: string\n relAlias: string\n relModel: Model\n field: Field\n whereJoins: string\n rawWhereClause: string\n orderBySql: string\n relSelect: string\n ctx: IncludeBuildContext\n}): IncludeSpec {\n const { childKeys: relKeyFields, parentKeys: parentKeyFields } =\n resolveRelationKeys(args.field, 'include')\n\n const joinAlias = args.ctx.aliasGen.next(`__inc_${args.relName}`)\n\n const fkSelect = buildFkSelectList(args.relAlias, args.relModel, relKeyFields)\n const fkGroupBy = buildPartitionBy(args.relAlias, args.relModel, relKeyFields)\n const rowExpr = jsonBuildObject(args.relSelect, args.ctx.dialect)\n\n const aggExpr = args.orderBySql\n ? `json_agg(${rowExpr} ORDER BY ${args.orderBySql})`\n : `json_agg(${rowExpr})`\n\n const joinsPart = args.whereJoins ? ` ${args.whereJoins}` : ''\n const wherePart = args.rawWhereClause\n ? ` ${SQL_TEMPLATES.WHERE} ${args.rawWhereClause}`\n : ''\n\n const subquery =\n `SELECT ${fkSelect}${SQL_SEPARATORS.FIELD_LIST}${aggExpr} AS __agg` +\n ` FROM ${args.relTable} ${args.relAlias}${joinsPart}${wherePart}` +\n ` GROUP BY ${fkGroupBy}`\n\n const onCondition = buildJoinOnCondition(\n joinAlias,\n args.ctx.parentAlias,\n args.ctx.model,\n parentKeyFields,\n )\n\n const joinSql = `LEFT JOIN (${subquery}) ${joinAlias} ON ${onCondition}`\n const selectExpr = `COALESCE(${joinAlias}.__agg, '[]'::json) AS ${quote(args.relName)}`\n\n return Object.freeze({\n name: args.relName,\n sql: '',\n isOneToOne: false,\n joinSql,\n selectExpr,\n })\n}\n\nfunction buildJoinBasedPaginated(args: {\n relName: string\n relTable: string\n relAlias: string\n relModel: Model\n field: Field\n whereJoins: string\n rawWhereClause: string\n orderBySql: string\n relSelect: string\n takeVal: number | undefined\n skipVal: number | undefined\n ctx: IncludeBuildContext\n}): IncludeSpec {\n const { childKeys: relKeyFields, parentKeys: parentKeyFields } =\n resolveRelationKeys(args.field, 'include')\n\n const joinAlias = args.ctx.aliasGen.next(`__inc_${args.relName}`)\n const rankedAlias = args.ctx.aliasGen.next(`__ranked_${args.relName}`)\n\n const fkSelect = buildFkSelectList(args.relAlias, args.relModel, relKeyFields)\n const partitionBy = buildPartitionBy(\n args.relAlias,\n args.relModel,\n relKeyFields,\n )\n const rowExpr = jsonBuildObject(args.relSelect, args.ctx.dialect)\n\n const orderExpr =\n args.orderBySql ||\n `${args.relAlias}.${quoteColumn(args.relModel, 'id')} ASC`\n\n const joinsPart = args.whereJoins ? ` ${args.whereJoins}` : ''\n const wherePart = args.rawWhereClause\n ? ` ${SQL_TEMPLATES.WHERE} ${args.rawWhereClause}`\n : ''\n\n const innerSql =\n `SELECT ${fkSelect}${SQL_SEPARATORS.FIELD_LIST}` +\n `${rowExpr} AS __row${SQL_SEPARATORS.FIELD_LIST}` +\n `ROW_NUMBER() OVER (PARTITION BY ${partitionBy} ORDER BY ${orderExpr}) AS __rn` +\n ` FROM ${args.relTable} ${args.relAlias}${joinsPart}${wherePart}`\n\n const scopeBase = buildIncludeScope(args.ctx.includePath)\n const rnFilterParts: string[] = []\n\n if (isNotNullish(args.skipVal) && args.skipVal > 0) {\n const skipPh = addAutoScoped(\n args.ctx.params,\n args.skipVal,\n `${scopeBase}.skip`,\n )\n rnFilterParts.push(`__rn > ${skipPh}`)\n\n if (isNotNullish(args.takeVal)) {\n const takePh = addAutoScoped(\n args.ctx.params,\n args.takeVal,\n `${scopeBase}.take`,\n )\n rnFilterParts.push(`__rn <= (${skipPh} + ${takePh})`)\n }\n } else if (isNotNullish(args.takeVal)) {\n const takePh = addAutoScoped(\n args.ctx.params,\n args.takeVal,\n `${scopeBase}.take`,\n )\n rnFilterParts.push(`__rn <= ${takePh}`)\n }\n\n const rnFilter =\n rnFilterParts.length > 0\n ? ` ${SQL_TEMPLATES.WHERE} ${rnFilterParts.join(SQL_SEPARATORS.CONDITION_AND)}`\n : ''\n\n const fkGroupByOuter = buildFkGroupByUnqualified(relKeyFields)\n\n const outerSql =\n `SELECT ${fkGroupByOuter}${SQL_SEPARATORS.FIELD_LIST}` +\n `json_agg(__row ORDER BY __rn) AS __agg` +\n ` FROM (${innerSql}) ${rankedAlias}${rnFilter}` +\n ` GROUP BY ${fkGroupByOuter}`\n\n const onCondition = buildJoinOnCondition(\n joinAlias,\n args.ctx.parentAlias,\n args.ctx.model,\n parentKeyFields,\n )\n\n const joinSql = `LEFT JOIN (${outerSql}) ${joinAlias} ON ${onCondition}`\n const selectExpr = `COALESCE(${joinAlias}.__agg, '[]'::json) AS ${quote(args.relName)}`\n\n return Object.freeze({\n name: args.relName,\n sql: '',\n isOneToOne: false,\n joinSql,\n selectExpr,\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 const relAlias = ctx.aliasGen.next(relName)\n\n const isList = typeof field.type === 'string' && field.type.endsWith('[]')\n const joinPredicate = joinCondition(\n field,\n ctx.model,\n relModel,\n ctx.parentAlias,\n relAlias,\n )\n\n const whereInput = readWhereInput(relArgs)\n const relSelect = buildSelectWithNestedIncludes(\n relArgs,\n relModel,\n relAlias,\n ctx,\n )\n const whereParts = buildWhereParts(whereInput, relModel, relAlias, ctx)\n\n const paginationConfig = extractRelationPaginationConfig(relArgs)\n\n if (\n !isList &&\n typeof paginationConfig.takeVal === 'number' &&\n paginationConfig.takeVal < 0\n ) {\n throw new Error('Negative take is only supported for list relations')\n }\n\n const adjusted = maybeReverseNegativeTake(\n paginationConfig.takeVal,\n paginationConfig.hasOrderBy,\n paginationConfig.orderBy,\n )\n\n const hasPagination = paginationConfig.hasSkip || paginationConfig.hasTake\n\n const finalOrderByInput = finalizeOrderByForInclude({\n relModel,\n hasOrderBy: paginationConfig.hasOrderBy,\n orderByInput: adjusted.orderByInput,\n hasPagination,\n })\n\n const orderBySql = buildOrderBySql(\n finalOrderByInput,\n relAlias,\n ctx.dialect,\n relModel,\n )\n\n if (!isList) {\n const sql = buildOneToOneIncludeSql({\n relName,\n relTable,\n relAlias,\n joins: whereParts.joins,\n joinPredicate,\n whereClause: whereParts.whereClause,\n orderBySql,\n relSelect,\n takeVal: adjusted.takeVal,\n skipVal: paginationConfig.skipVal,\n ctx,\n })\n return Object.freeze({ name: relName, sql, isOneToOne: true })\n }\n\n const depth = ctx.depth\n const outerHasLimit = ctx.outerHasLimit === true\n const nestedIncludes = hasNestedRelationInArgs(relArgs, relModel)\n\n if (\n canUseJoinInclude(\n ctx.dialect,\n isList,\n adjusted.takeVal,\n paginationConfig.skipVal,\n depth,\n outerHasLimit,\n nestedIncludes,\n )\n ) {\n const hasTakeOrSkip =\n isNotNullish(adjusted.takeVal) || isNotNullish(paginationConfig.skipVal)\n\n if (!hasTakeOrSkip) {\n return buildJoinBasedNonPaginated({\n relName,\n relTable,\n relAlias,\n relModel,\n field,\n whereJoins: whereParts.joins,\n rawWhereClause: whereParts.rawClause,\n orderBySql,\n relSelect,\n ctx,\n })\n }\n\n return buildJoinBasedPaginated({\n relName,\n relTable,\n relAlias,\n relModel,\n field,\n whereJoins: whereParts.joins,\n rawWhereClause: whereParts.rawClause,\n orderBySql,\n relSelect,\n takeVal: adjusted.takeVal as number | undefined,\n skipVal: paginationConfig.skipVal as number | undefined,\n ctx,\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 ctx: IncludeBuildContext,\n): IncludeSpec[] {\n const depth = ctx.depth\n\n if (depth > MAX_INCLUDE_DEPTH) {\n throw new Error(\n `Maximum include depth of ${MAX_INCLUDE_DEPTH} exceeded. ` +\n `Path: ${Array.from(ctx.visitSet).join(' -> ')}. ` +\n `Deep includes cause exponential SQL complexity and performance issues.`,\n )\n }\n\n const modelPath = ctx.includePath\n .map((p) => {\n const parts = p.split('.')\n return parts.length > 0 ? parts[0] : ''\n })\n .filter((p) => p.length > 0)\n\n const currentModelCount = modelPath.filter((m) => m === ctx.model.name).length\n if (currentModelCount > 2) {\n throw new Error(\n `Circular relation detected: Model '${ctx.model.name}' appears ${currentModelCount} times ` +\n `in include path: ${ctx.includePath.join(' -> ')}. ` +\n `Self-referential relations must be limited to 2 levels deep.`,\n )\n }\n\n ctx.stats.maxDepth = Math.max(ctx.stats.maxDepth, depth)\n\n const includes: IncludeSpec[] = []\n const entries = extractRelationEntries(args, ctx.model)\n\n if (entries.length > MAX_INCLUDES_PER_LEVEL) {\n throw new Error(\n `Too many includes at depth ${depth} (${entries.length} > ${MAX_INCLUDES_PER_LEVEL}). ` +\n `Path: ${Array.from(ctx.visitSet).join(' -> ')}`,\n )\n }\n\n for (const entry of entries) {\n const relName = entry.name\n const relArgs = entry.value\n\n if (relArgs === false) continue\n\n ctx.stats.totalIncludes++\n if (ctx.stats.totalIncludes > MAX_TOTAL_SUBQUERIES) {\n throw new Error(\n `Query complexity limit exceeded: ${ctx.stats.totalIncludes} includes generated. ` +\n `Maximum allowed: ${MAX_TOTAL_SUBQUERIES}. ` +\n `This indicates exponential include nesting. ` +\n `Stats: depth=${ctx.stats.maxDepth}, includes=${ctx.stats.totalIncludes}. ` +\n `Path: ${Array.from(ctx.visitSet).join(' -> ')}. ` +\n `Simplify your include structure or split into multiple queries.`,\n )\n }\n\n ctx.stats.totalSubqueries++\n\n const resolved = resolveRelationOrThrow(\n ctx.model,\n ctx.schemaByName,\n relName,\n )\n\n const relationPath = `${ctx.model.name}.${relName}`\n\n if (ctx.visitSet.has(relationPath)) {\n throw new Error(\n `Circular include detected: ${Array.from(ctx.visitSet).join(' -> ')} -> ${relationPath}. ` +\n `Relation '${relationPath}' creates an infinite loop.`,\n )\n }\n\n const nextIncludePath = [...ctx.includePath, relName]\n const nextVisitSet = new Set(ctx.visitSet)\n nextVisitSet.add(relationPath)\n\n includes.push(\n buildSingleInclude(relName, relArgs, resolved.field, resolved.relModel, {\n ...ctx,\n includePath: nextIncludePath,\n visitSet: nextVisitSet,\n depth: depth,\n }),\n )\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 outerHasLimit: boolean = true,\n): IncludeSpec[] {\n const aliasGen = createAliasGenerator()\n const stats: IncludeComplexityStats = {\n totalIncludes: 0,\n totalSubqueries: 0,\n maxDepth: 0,\n }\n\n const schemaByName = new Map<string, Model>()\n for (const m of schemas) schemaByName.set(m.name, m)\n\n return buildIncludeSqlInternal(args, {\n model,\n schemas,\n schemaByName,\n parentAlias,\n aliasGen,\n params,\n dialect,\n includePath: [],\n visitSet: new Set<string>(),\n depth: 0,\n stats,\n outerHasLimit,\n })\n}\n\ninterface RelationCountBuild {\n joins: string[]\n jsonPairs: string\n}\n\nfunction resolveCountRelationOrThrow(\n relName: string,\n model: Model,\n schemaByName: Map<string, 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) as\n | Field\n | undefined\n if (!field) {\n throw new Error(\n `_count.${relName} references unknown relation on model ${model.name}`,\n )\n }\n\n if (!isValidRelationField(field)) {\n throw new Error(\n `_count.${relName} has invalid relation metadata on model ${model.name}`,\n )\n }\n\n const relatedModelName = field.relatedModel\n if (\n !isNotNullish(relatedModelName) ||\n String(relatedModelName).trim().length === 0\n ) {\n throw new Error(\n `_count.${relName} is missing relatedModel metadata on model ${model.name}`,\n )\n }\n\n const relModel = schemaByName.get(relatedModelName)\n if (!relModel) {\n throw new Error(\n `Related model '${relatedModelName}' not found for _count.${relName}`,\n )\n }\n\n return { field, relModel }\n}\n\nfunction aliasQualifiedColumn(\n alias: string,\n model: Model,\n field: string,\n): string {\n return `${alias}.${quoteColumn(model, field)}`\n}\n\nfunction subqueryForCount(args: {\n dialect: SqlDialect\n relTable: string\n countAlias: string\n relModel: Model\n relKeyFields: string[]\n}): string {\n const selectKeys = args.relKeyFields\n .map(\n (f, i) =>\n `${aliasQualifiedColumn(args.countAlias, args.relModel, f)} AS \"__fk${i}\"`,\n )\n .join(SQL_SEPARATORS.FIELD_LIST)\n\n const groupByKeys = args.relKeyFields\n .map((f) => aliasQualifiedColumn(args.countAlias, args.relModel, f))\n .join(SQL_SEPARATORS.FIELD_LIST)\n\n const cntExpr =\n args.dialect === 'postgres' ? 'COUNT(*)::int AS __cnt' : 'COUNT(*) AS __cnt'\n\n return `(SELECT ${selectKeys}${SQL_SEPARATORS.FIELD_LIST}${cntExpr} FROM ${args.relTable} ${args.countAlias} GROUP BY ${groupByKeys})`\n}\n\nfunction leftJoinOnForCount(args: {\n joinAlias: string\n parentAlias: string\n parentModel: Model\n parentKeyFields: string[]\n}): string {\n const parts = args.parentKeyFields.map(\n (f, i) =>\n `${args.joinAlias}.\"__fk${i}\" = ${aliasQualifiedColumn(args.parentAlias, args.parentModel, f)}`,\n )\n return parts.length === 1 ? parts[0] : `(${parts.join(' AND ')})`\n}\n\nfunction nextAliasAvoiding(\n aliasGen: ReturnType<typeof createAliasGenerator>,\n base: string,\n forbidden: Set<string>,\n): string {\n let a = aliasGen.next(base)\n while (forbidden.has(a)) a = aliasGen.next(base)\n return a\n}\n\nfunction buildCountJoinAndPair(args: {\n relName: string\n field: Field\n relModel: Model\n parentModel: Model\n parentAlias: string\n dialect: SqlDialect\n aliasGen: ReturnType<typeof createAliasGenerator>\n}): { joinSql: string; pairSql: string } {\n const relTable = getRelationTableReference(args.relModel, args.dialect)\n const { childKeys: relKeyFields, parentKeys: parentKeyFields } =\n resolveRelationKeys(args.field, 'count')\n\n const forbidden = new Set<string>([args.parentAlias])\n\n const countAlias = nextAliasAvoiding(\n args.aliasGen,\n `__tp_cnt_${args.relName}`,\n forbidden,\n )\n forbidden.add(countAlias)\n\n const subquery = subqueryForCount({\n dialect: args.dialect,\n relTable,\n countAlias,\n relModel: args.relModel,\n relKeyFields,\n })\n\n const joinAlias = nextAliasAvoiding(\n args.aliasGen,\n `__tp_cnt_j_${args.relName}`,\n forbidden,\n )\n\n const leftJoinOn = leftJoinOnForCount({\n joinAlias,\n parentAlias: args.parentAlias,\n parentModel: args.parentModel,\n parentKeyFields,\n })\n\n return {\n joinSql: `LEFT JOIN ${subquery} ${joinAlias} ON ${leftJoinOn}`,\n pairSql: `${sqlStringLiteral(args.relName)}, COALESCE(${joinAlias}.__cnt, 0)`,\n }\n}\n\nexport function buildRelationCountSql(\n countSelect: Record<string, boolean>,\n model: Model,\n schemas: readonly Model[],\n parentAlias: string,\n _params: ParamStore,\n dialect: SqlDialect,\n): RelationCountBuild {\n const joins: string[] = []\n const pairs: string[] = []\n const aliasGen = createAliasGenerator()\n\n const schemaByName = new Map<string, Model>()\n for (const m of schemas) schemaByName.set(m.name, m)\n\n for (const [relName, shouldCount] of Object.entries(countSelect)) {\n if (!shouldCount) continue\n\n const resolved = resolveCountRelationOrThrow(relName, model, schemaByName)\n const built = buildCountJoinAndPair({\n relName,\n field: resolved.field,\n relModel: resolved.relModel,\n parentModel: model,\n parentAlias,\n dialect,\n aliasGen,\n })\n\n joins.push(built.joinSql)\n pairs.push(built.pairSql)\n }\n\n return { joins, jsonPairs: pairs.join(SQL_SEPARATORS.FIELD_LIST) }\n}\n","export class StringBuilder {\n private parts: string[] = []\n\n append(str: string): this {\n if (str) this.parts.push(str)\n return this\n }\n\n appendIf(condition: boolean, str: string): this {\n if (condition && str) this.parts.push(str)\n return this\n }\n\n join(separator: string): string {\n return this.parts.join(separator)\n }\n\n toString(): string {\n return this.parts.join('')\n }\n\n clear(): void {\n this.parts.length = 0\n }\n}\n\nexport function joinNonEmpty(parts: string[], sep: string): string {\n let result = ''\n for (const p of parts) {\n if (p) {\n if (result) result += sep\n result += p\n }\n }\n return result\n}\n","import { Model } from '../../types'\nimport { getRelationFieldSet } from './model-field-cache'\nimport { isPlainObject } from './validators/type-guards'\n\nexport function hasChildPagination(relArgs: unknown): boolean {\n if (!isPlainObject(relArgs)) return false\n const args = relArgs as Record<string, unknown>\n if (args.take !== undefined && args.take !== null) return true\n if (args.skip !== undefined && args.skip !== null) return true\n return false\n}\n\nexport function extractScalarSelection(\n relArgs: unknown,\n relModel: Model,\n): { includeAllScalars: boolean; selectedScalarFields: string[] } {\n const scalarFields = relModel.fields\n .filter((f) => !f.isRelation)\n .map((f) => f.name)\n const scalarSet = new Set(scalarFields)\n\n if (relArgs === true || !isPlainObject(relArgs)) {\n return { includeAllScalars: true, selectedScalarFields: scalarFields }\n }\n\n const obj = relArgs as Record<string, unknown>\n if (!isPlainObject(obj.select)) {\n return { includeAllScalars: true, selectedScalarFields: scalarFields }\n }\n\n const sel = obj.select as Record<string, unknown>\n const selected: string[] = []\n for (const [k, v] of Object.entries(sel)) {\n if (!scalarSet.has(k)) continue\n if (v === true) selected.push(k)\n }\n\n return { includeAllScalars: false, selectedScalarFields: selected }\n}\n\nexport function extractNestedIncludeSpec(\n relArgs: unknown,\n relModel: Model,\n): Record<string, any> {\n const relationSet = getRelationFieldSet(relModel)\n const out: Record<string, any> = {}\n\n if (!isPlainObject(relArgs)) return out\n const obj = relArgs as Record<string, unknown>\n\n if (isPlainObject(obj.include)) {\n for (const [k, v] of Object.entries(\n obj.include as Record<string, unknown>,\n )) {\n if (!relationSet.has(k)) continue\n if (v === false) continue\n out[k] = v\n }\n }\n\n if (isPlainObject(obj.select)) {\n for (const [k, v] of Object.entries(\n obj.select as Record<string, unknown>,\n )) {\n if (!relationSet.has(k)) continue\n if (v === false) continue\n if (v === true) {\n out[k] = true\n continue\n }\n if (isPlainObject(v)) {\n const vv = v as Record<string, unknown>\n if (isPlainObject(vv.include) || isPlainObject(vv.select)) {\n out[k] = v\n }\n }\n }\n }\n\n return out\n}\n\nexport interface RelationEntry {\n name: string\n value: unknown\n}\n\nexport function extractRelationEntries(\n args: { include?: unknown; select?: unknown },\n model: Model,\n): RelationEntry[] {\n const relationSet = getRelationFieldSet(model)\n const entries: RelationEntry[] = []\n const seen = new Set<string>()\n\n const scanSource = (source: unknown): void => {\n if (!isPlainObject(source)) return\n\n for (const [key, value] of Object.entries(source)) {\n if (!relationSet.has(key)) continue\n if (value === false) continue\n if (seen.has(key)) continue\n\n seen.add(key)\n entries.push({ name: key, value })\n }\n }\n\n scanSource(args.include)\n scanSource(args.select)\n\n return entries\n}\n","import { Model } from '../../types'\nimport { SQL_TEMPLATES, SQL_SEPARATORS } from '../shared/constants'\nimport { quote, buildTableReference, quoteColumn } from '../shared/sql-utils'\nimport { joinCondition, isValidRelationField } from '../joins'\nimport { SelectQuerySpec } from '../shared/types'\nimport {\n getFieldIndices,\n getRelationFieldSet,\n} from '../shared/model-field-cache'\nimport { appendPagination } from './assembly'\nimport { isPlainObject } from '../shared/validators/type-guards'\nimport { SqlDialect } from '../../sql-builder-dialect'\nimport {\n getPrimaryKeyField,\n getPrimaryKeyFields,\n} from '../shared/primary-key-utils'\nimport { extractRelationEntries } from '../shared/relation-extraction-utils'\nimport {\n hasChildPagination,\n extractScalarSelection,\n extractNestedIncludeSpec,\n} from '../shared/relation-utils'\nimport { deduplicatePreserveOrder } from '../shared/array-utils'\nimport { Field } from '@dee-wan/schema-parser'\n\nexport interface FlatJoinBuildResult {\n sql: string\n requiresReduction: boolean\n includeSpec: Record<string, any>\n}\n\ninterface AliasCounter {\n count: number\n next(): number\n}\n\nfunction createAliasCounter(): AliasCounter {\n return {\n count: 0,\n next(): number {\n if (this.count >= Number.MAX_SAFE_INTEGER - 1000) {\n throw new Error(\n 'Alias counter overflow. This indicates an extremely complex query ' +\n 'or a potential infinite loop in relation traversal.',\n )\n }\n const current = this.count\n this.count++\n return current\n },\n }\n}\n\nfunction getRelationModel(\n parentModel: Model,\n relationName: string,\n schemas: readonly Model[],\n): Model {\n const field = parentModel.fields.find((f) => f.name === relationName)\n if (!field?.isRelation || !field.relatedModel) {\n throw new Error(`Invalid relation ${relationName} on ${parentModel.name}`)\n }\n\n const relModel = schemas.find((m) => m.name === field.relatedModel)\n if (!relModel) {\n throw new Error(`Related model ${field.relatedModel} not found`)\n }\n\n return relModel\n}\n\nfunction buildChildColumns(args: {\n relModel: Model\n relationName: string\n childAlias: string\n prefix: string\n relArgs: unknown\n}): string[] {\n const { relModel, relationName, childAlias, prefix, relArgs } = args\n const fullPrefix = prefix ? `${prefix}.${relationName}` : relationName\n\n const indices = getFieldIndices(relModel)\n const scalarSelection = extractScalarSelection(relArgs, relModel)\n\n const required = indices.pkFields.concat(\n scalarSelection.selectedScalarFields.filter(\n (f) => !indices.pkFields.includes(f),\n ),\n )\n\n const columns = new Array<string>(required.length)\n let idx = 0\n\n for (const fieldName of required) {\n const field = indices.scalarFields.get(fieldName)\n if (!field) continue\n\n const colName = field.dbName || field.name\n const quotedCol = quote(colName)\n\n columns[idx++] =\n `${childAlias}.${quotedCol} AS \"${fullPrefix}.${field.name}\"`\n }\n\n columns.length = idx\n return columns\n}\n\nfunction canUseNestedFlatJoin(relArgs: unknown, depth: number): boolean {\n if (depth > 10) return false\n if (!isPlainObject(relArgs)) return true\n if (hasChildPagination(relArgs)) return false\n\n const obj = relArgs as Record<string, unknown>\n\n if (obj.include && isPlainObject(obj.include)) {\n for (const childValue of Object.values(\n obj.include as Record<string, unknown>,\n )) {\n if (childValue !== false && !canUseNestedFlatJoin(childValue, depth + 1))\n return false\n }\n }\n\n if (obj.select && isPlainObject(obj.select)) {\n for (const childValue of Object.values(\n obj.select as Record<string, unknown>,\n )) {\n if (childValue !== false && !canUseNestedFlatJoin(childValue, depth + 1))\n return false\n }\n }\n\n return true\n}\n\nexport function canUseFlatJoinForAll(\n includeSpec: Record<string, any>,\n): boolean {\n for (const value of Object.values(includeSpec)) {\n if (value === false) continue\n if (!canUseNestedFlatJoin(value, 0)) return false\n }\n return true\n}\n\nfunction buildNestedJoins(\n parentModel: Model,\n parentAlias: string,\n includeSpec: Record<string, any>,\n schemas: readonly Model[],\n dialect: SqlDialect,\n prefix: string,\n aliasCounter: AliasCounter,\n depth: number = 0,\n): { joins: string[]; selects: string[]; orderBy: string[] } {\n if (depth > 10) {\n throw new Error(\n `Nested joins exceeded maximum depth of 10 at prefix '${prefix}'`,\n )\n }\n\n const joins: string[] = []\n const selects: string[] = []\n const orderBy: string[] = []\n\n for (const [relName, relValue] of Object.entries(includeSpec)) {\n if (relValue === false) continue\n\n const field = parentModel.fields.find((f) => f.name === relName)\n if (!isValidRelationField(field as any)) continue\n\n const relModel = getRelationModel(parentModel, relName, schemas)\n const relTable = buildTableReference(\n SQL_TEMPLATES.PUBLIC_SCHEMA,\n relModel.tableName,\n dialect,\n )\n\n const childAlias = `fj_${aliasCounter.next()}`\n const joinCond = joinCondition(\n field as any,\n parentModel,\n relModel,\n parentAlias,\n childAlias,\n )\n\n joins.push(`LEFT JOIN ${relTable} ${childAlias} ON ${joinCond}`)\n selects.push(\n ...buildChildColumns({\n relModel,\n relationName: relName,\n childAlias,\n prefix,\n relArgs: relValue,\n }),\n )\n\n const childPkFields = getPrimaryKeyFields(relModel)\n for (const pkField of childPkFields) {\n orderBy.push(\n `${childAlias}.${quoteColumn(relModel, pkField)} ASC NULLS LAST`,\n )\n }\n\n const nested = extractNestedIncludeSpec(relValue, relModel)\n if (Object.keys(nested).length > 0) {\n const nestedPrefix = prefix ? `${prefix}.${relName}` : relName\n const deeper = buildNestedJoins(\n relModel,\n childAlias,\n nested,\n schemas,\n dialect,\n nestedPrefix,\n aliasCounter,\n depth + 1,\n )\n\n joins.push(...deeper.joins)\n selects.push(...deeper.selects)\n orderBy.push(...deeper.orderBy)\n }\n }\n\n return { joins, selects, orderBy }\n}\n\nfunction buildSubqueryRawSelect(model: Model, alias: string): string {\n const cols: string[] = []\n for (const f of model.fields) {\n if (f.isRelation) continue\n cols.push(`${alias}.${quoteColumn(model, f.name)}`)\n }\n return cols.length > 0 ? cols.join(SQL_SEPARATORS.FIELD_LIST) : '*'\n}\n\nexport function buildFlatJoinSql(spec: SelectQuerySpec): FlatJoinBuildResult {\n const {\n select,\n from,\n whereClause,\n whereJoins,\n orderBy,\n dialect,\n model,\n schemas,\n args,\n } = spec\n\n const includeSpec = extractRelationEntries(args, model).reduce(\n (acc, { name, value }) => {\n acc[name] = value\n return acc\n },\n {} as Record<string, any>,\n )\n\n if (Object.keys(includeSpec).length === 0) {\n return { sql: '', requiresReduction: false, includeSpec: {} }\n }\n\n if (!canUseFlatJoinForAll(includeSpec)) {\n return { sql: '', requiresReduction: false, includeSpec: {} }\n }\n\n const baseJoins = whereJoins.length > 0 ? whereJoins.join(' ') : ''\n const baseWhere =\n whereClause && whereClause !== '1=1' ? `WHERE ${whereClause}` : ''\n const baseOrderBy = orderBy ? `ORDER BY ${orderBy}` : ''\n\n const subqueryScalarCols = buildSubqueryRawSelect(model, from.alias)\n let baseSubquery = `\n SELECT ${subqueryScalarCols} FROM ${from.table} ${from.alias}\n ${baseJoins}\n ${baseWhere}\n ${baseOrderBy}\n `.trim()\n baseSubquery = appendPagination(baseSubquery, spec)\n\n const aliasCounter = createAliasCounter()\n const built = buildNestedJoins(\n model,\n from.alias,\n includeSpec,\n schemas,\n dialect,\n '',\n aliasCounter,\n 0,\n )\n\n if (built.joins.length === 0) {\n return { sql: '', requiresReduction: false, includeSpec: {} }\n }\n\n const baseSelect = (select ?? '').trim()\n const allSelects = [baseSelect, ...built.selects]\n .filter((s) => s && s.trim().length > 0)\n .join(SQL_SEPARATORS.FIELD_LIST)\n\n if (!allSelects) {\n throw new Error('Flat-join SELECT requires at least one selected field')\n }\n\n const pkField = getPrimaryKeyField(model)\n\n const orderByParts: string[] = []\n orderByParts.push(`${from.alias}.${quoteColumn(model, pkField)} ASC`)\n orderByParts.push(...built.orderBy)\n\n const finalOrderBy = orderByParts.join(', ')\n\n const sql = `\n SELECT ${allSelects}\n FROM (${baseSubquery}) ${from.alias}\n ${built.joins.join(' ')}\n ORDER BY ${finalOrderBy}\n `.trim()\n\n return { sql, requiresReduction: true, includeSpec }\n}\n","import type { PrismaQueryArgs } from '../../types'\nimport { SQL_TEMPLATES, SQL_SEPARATORS } from '../shared/constants'\nimport { col, quote } from '../shared/sql-utils'\nimport { SelectQuerySpec, SqlResult } from '../shared/types'\nimport {\n validateSelectQuery,\n validateParamConsistencyByDialect,\n} from '../shared/validators/sql-validators'\nimport {\n isNotNullish,\n isNonEmptyArray,\n isNonEmptyString,\n isPlainObject,\n} from '../shared/validators/type-guards'\nimport { addAutoScoped } from '../shared/dynamic-params'\nimport { jsonBuildObject } from '../../sql-builder-dialect'\nimport { buildRelationCountSql } from './includes'\nimport { joinNonEmpty } from '../shared/string-builder'\nimport { getRelationFieldSet } from '../shared/model-field-cache'\nimport { parseOrderByValue } from '../pagination'\nimport {\n normalizeOrderByInput,\n OrderBySortObject,\n} from '../shared/order-by-utils'\nimport { buildFlatJoinSql, canUseFlatJoinForAll } from './flat-join'\nimport { isDynamicParameter } from '@dee-wan/schema-parser'\n\ntype DistinctOrderEntry = {\n field: string\n direction: 'asc' | 'desc'\n nulls?: 'first' | 'last'\n}\n\nconst SELECT_FIELD_REGEX =\n /^\\s*(\"(?:[^\"]|\"\")+\"|[a-z_][a-z0-9_]*)\\s*\\.\\s*(\"(?:[^\"]|\"\")+\"|[a-z_][a-z0-9_]*)(?:\\s+AS\\s+(\"(?:[^\"]|\"\")+\"|[a-z_][a-z0-9_]*))?\\s*$/i\n\nfunction buildWhereSql(conditions: readonly string[]): string {\n if (!isNonEmptyArray(conditions)) return ''\n return (\n ' ' +\n SQL_TEMPLATES.WHERE +\n ' ' +\n conditions.join(SQL_SEPARATORS.CONDITION_AND)\n )\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)) {\n for (const j of g) all.push(j)\n }\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) return extra\n if (!extra) return base\n return base + SQL_SEPARATORS.FIELD_LIST + extra\n}\n\nfunction finalizeSql(\n sql: string,\n params: SelectQuerySpec['params'],\n dialect: SelectQuerySpec['dialect'],\n): SqlResult {\n const snapshot = params.snapshot()\n validateSelectQuery(sql)\n validateParamConsistencyByDialect(sql, snapshot.params, dialect)\n return {\n sql,\n params: [...snapshot.params],\n paramMappings: [...snapshot.mappings],\n }\n}\n\nfunction unquoteIdent(s: string): string {\n if (s.startsWith('\"') && s.endsWith('\"')) {\n return s.slice(1, -1).replace(/\"\"/g, '\"')\n }\n return s\n}\n\nfunction parseSelectField(p: string, fromAlias: string): string {\n const match = SELECT_FIELD_REGEX.exec(p)\n if (!match) {\n throw new Error(\n `SQLite distinct emulation requires simple column references.\\n` +\n `Complex expressions, functions, and computed fields are not supported.\\n` +\n `Got: ${p}\\n\\n` +\n `Hint: When using distinct with SQLite:\\n` +\n ` - Use only direct field selections (e.g., { id: true, name: true })\\n` +\n ` - Remove computed fields from select\\n` +\n ` - Avoid selecting relation counts or aggregates\\n` +\n ` - Or switch to PostgreSQL which supports DISTINCT ON with expressions`,\n )\n }\n\n const [, alias, column, outputAlias] = match\n\n const actualAlias = unquoteIdent(alias)\n if (actualAlias.toLowerCase() !== fromAlias.toLowerCase()) {\n throw new Error(\n `Expected alias '${fromAlias}', got '${actualAlias}' in: ${p}`,\n )\n }\n\n if (outputAlias) {\n return unquoteIdent(outputAlias)\n }\n\n return unquoteIdent(column)\n}\n\nfunction parseSimpleScalarSelect(select: string, fromAlias: string): string[] {\n const raw = select.trim()\n if (raw.length === 0) return []\n\n const parts = raw.split(SQL_SEPARATORS.FIELD_LIST)\n const names: string[] = []\n\n for (const p of parts) {\n const trimmed = p.trim()\n if (trimmed.length === 0) continue\n names.push(parseSelectField(trimmed, fromAlias))\n }\n\n return names\n}\n\nfunction buildDistinctColumns(\n distinct: readonly string[],\n fromAlias: string,\n model?: any,\n): string {\n return distinct\n .map((f) => col(fromAlias, f, model))\n .join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nfunction buildOutputColumns(\n scalarNames: string[],\n includeNames: string[],\n hasCount: boolean,\n): string {\n const outputCols = hasCount\n ? [...scalarNames, ...includeNames, '_count']\n : [...scalarNames, ...includeNames]\n\n const formatted = outputCols\n .map((n) => quote(n))\n .join(SQL_SEPARATORS.FIELD_LIST)\n if (!isNonEmptyString(formatted)) {\n throw new Error('distinct emulation requires at least one output column')\n }\n return formatted\n}\n\nfunction buildWindowOrder(args: {\n baseOrder: string\n idField: any\n fromAlias: string\n model?: any\n}): string {\n const { baseOrder, idField, fromAlias, model } = args\n const fromLower = String(fromAlias).toLowerCase()\n\n const orderFields = baseOrder\n .split(SQL_SEPARATORS.ORDER_BY)\n .map((s) => s.trim().toLowerCase().replace(/\\s+/g, ' '))\n\n const hasIdInOrder = orderFields.some((f) => {\n return f.includes(`${fromLower}.id`) || f.includes(`${fromLower}.\"id\"`)\n })\n\n if (hasIdInOrder) return baseOrder\n\n const idTiebreaker = idField\n ? ', ' + col(fromAlias, 'id', model) + ' ASC'\n : ''\n return baseOrder + idTiebreaker\n}\n\nfunction extractDistinctOrderEntries(\n spec: SelectQuerySpec,\n): DistinctOrderEntry[] {\n if (isNotNullish(spec.args.orderBy)) {\n const normalized = normalizeOrderByInput(\n spec.args.orderBy,\n parseOrderByValue,\n )\n\n const entries: DistinctOrderEntry[] = []\n for (const item of normalized) {\n for (const field in item) {\n if (!Object.prototype.hasOwnProperty.call(item, field)) continue\n const value = item[field]\n\n if (typeof value === 'string') {\n entries.push({ field, direction: value as 'asc' | 'desc' })\n continue\n }\n\n const obj = value as OrderBySortObject\n entries.push({ field, direction: obj.direction, nulls: obj.nulls })\n }\n }\n if (entries.length > 0) return entries\n }\n\n if (isNotNullish(spec.distinct) && isNonEmptyArray(spec.distinct)) {\n return [...spec.distinct].map((f) => ({\n field: f,\n direction: 'asc' as const,\n }))\n }\n\n return []\n}\n\nfunction buildFieldNameOrderBy(\n entries: DistinctOrderEntry[],\n alias: string,\n): string {\n if (entries.length === 0) return ''\n\n const out: string[] = []\n for (const e of entries) {\n const dir = e.direction.toUpperCase()\n const c = `${alias}.${quote(e.field)}`\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 buildSqliteDistinctQuery(\n spec: SelectQuerySpec,\n selectWithIncludes: string,\n countJoins?: string[],\n): string {\n const { includes, from, whereClause, whereJoins, orderBy, distinct, model } =\n spec\n if (!isNotNullish(distinct) || !isNonEmptyArray(distinct)) {\n throw new Error('buildSqliteDistinctQuery requires distinct fields')\n }\n\n const scalarNames = parseSimpleScalarSelect(spec.select, from.alias)\n const includeNames = includes.map((i) => i.name)\n const hasCount = Boolean(spec.args?.select?._count)\n\n const outerSelectCols = buildOutputColumns(\n scalarNames,\n includeNames,\n hasCount,\n )\n const distinctCols = buildDistinctColumns([...distinct], from.alias, model)\n\n const fallbackOrder = [...distinct]\n .map((f) => col(from.alias, f, model) + ' ASC')\n .join(SQL_SEPARATORS.FIELD_LIST)\n\n const idField = model.fields.find(\n (f: any) => f.name === 'id' && !f.isRelation,\n )\n const baseOrder = isNonEmptyString(orderBy) ? orderBy : fallbackOrder\n\n const windowOrder = buildWindowOrder({\n baseOrder,\n idField,\n fromAlias: from.alias,\n model,\n })\n\n const outerEntries = extractDistinctOrderEntries(spec)\n const outerOrder = buildFieldNameOrderBy(outerEntries, '\"__tp_distinct\"')\n\n const joins = buildJoinsSql(whereJoins, countJoins)\n\n const conditions: string[] = []\n if (whereClause && whereClause !== '1=1') conditions.push(whereClause)\n const whereSql = buildWhereSql(conditions)\n\n const innerSelectList = selectWithIncludes.trim()\n const innerComma = innerSelectList.length > 0 ? SQL_SEPARATORS.FIELD_LIST : ''\n\n const innerParts: string[] = [\n SQL_TEMPLATES.SELECT,\n innerSelectList + innerComma,\n 'ROW_NUMBER() OVER (PARTITION BY ' +\n distinctCols +\n ' ORDER BY ' +\n windowOrder +\n ')',\n SQL_TEMPLATES.AS,\n '\"__tp_rn\"',\n SQL_TEMPLATES.FROM,\n from.table,\n from.alias,\n ]\n if (joins) innerParts.push(joins)\n if (whereSql) innerParts.push(whereSql)\n const inner = innerParts.join(' ')\n\n const outerParts: string[] = [\n SQL_TEMPLATES.SELECT,\n outerSelectCols,\n SQL_TEMPLATES.FROM,\n '(' + inner + ')',\n SQL_TEMPLATES.AS,\n '\"__tp_distinct\"',\n SQL_TEMPLATES.WHERE,\n '\"__tp_rn\" = 1',\n ]\n if (isNonEmptyString(outerOrder)) {\n outerParts.push(SQL_TEMPLATES.ORDER_BY, outerOrder)\n }\n return outerParts.join(' ')\n}\n\nfunction resolveCountSelect(\n countSelectRaw: unknown,\n model: SelectQuerySpec['model'],\n): Record<string, boolean> | null {\n if (countSelectRaw === true) {\n const relationSet = getRelationFieldSet(model)\n if (relationSet.size === 0) return null\n const allRelations: Record<string, boolean> = {}\n for (const name of relationSet) {\n allRelations[name] = true\n }\n return allRelations\n }\n\n if (isPlainObject(countSelectRaw) && 'select' in countSelectRaw) {\n return (countSelectRaw as { select: Record<string, boolean> }).select\n }\n\n return null\n}\n\nfunction buildIncludeColumns(spec: SelectQuerySpec): {\n includeCols: string\n selectWithIncludes: string\n countJoins: string[]\n includeJoins: 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 countSelectRaw = spec.args?.select?._count\n if (countSelectRaw) {\n const resolvedCountSelect = resolveCountSelect(countSelectRaw, model)\n\n if (resolvedCountSelect && Object.keys(resolvedCountSelect).length > 0) {\n const countBuild = buildRelationCountSql(\n resolvedCountSelect,\n model,\n schemas,\n from.alias,\n params,\n dialect,\n )\n if (countBuild.jsonPairs) {\n countCols =\n jsonBuildObject(countBuild.jsonPairs, dialect) +\n ' ' +\n SQL_TEMPLATES.AS +\n ' ' +\n 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 {\n includeCols: '',\n selectWithIncludes: baseSelect,\n countJoins: [],\n includeJoins: [],\n }\n }\n\n const emptyJson = dialect === 'postgres' ? `'[]'::json` : `json('[]')`\n\n const correlatedParts: string[] = []\n const joinIncludeJoins: string[] = []\n const joinIncludeSelects: string[] = []\n\n if (hasIncludes) {\n for (const inc of includes) {\n if (inc.joinSql && inc.selectExpr) {\n joinIncludeJoins.push(inc.joinSql)\n joinIncludeSelects.push(inc.selectExpr)\n } else {\n const expr = inc.isOneToOne\n ? '(' + inc.sql + ')'\n : 'COALESCE((' + inc.sql + '), ' + emptyJson + ')'\n correlatedParts.push(\n expr + ' ' + SQL_TEMPLATES.AS + ' ' + quote(inc.name),\n )\n }\n }\n }\n\n const correlatedCols = correlatedParts.join(SQL_SEPARATORS.FIELD_LIST)\n const joinSelectCols = joinIncludeSelects.join(SQL_SEPARATORS.FIELD_LIST)\n\n const allIncludeCols = joinNonEmpty(\n [correlatedCols, joinSelectCols, countCols],\n SQL_SEPARATORS.FIELD_LIST,\n )\n const selectWithIncludes = buildSelectList(baseSelect, allIncludeCols)\n\n return {\n includeCols: allIncludeCols,\n selectWithIncludes,\n countJoins,\n includeJoins: joinIncludeJoins,\n }\n}\n\nexport function appendPagination(sql: string, spec: SelectQuerySpec): string {\n const { method, pagination, params } = spec\n const isFindUniqueOrFirst = method === 'findUnique' || method === 'findFirst'\n\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 if (spec.dialect !== 'sqlite') return false\n const d = spec.distinct\n return isNotNullish(d) && isNonEmptyArray(d)\n}\n\nfunction hasAnyDistinct(spec: SelectQuerySpec): boolean {\n return isNotNullish(spec.distinct) && isNonEmptyArray(spec.distinct)\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 withCountJoins(\n spec: SelectQuerySpec,\n countJoins: string[],\n whereJoins?: readonly string[],\n): SelectQuerySpec {\n return {\n ...spec,\n whereJoins: [...(whereJoins || []), ...(countJoins || [])],\n }\n}\n\nfunction buildPostgresDistinctOnClause(\n fromAlias: string,\n distinct?: readonly string[],\n model?: any,\n): string | null {\n if (!isNonEmptyArray(distinct)) return null\n const distinctCols = buildDistinctColumns([...distinct], fromAlias, model)\n return SQL_TEMPLATES.DISTINCT_ON + ' (' + distinctCols + ')'\n}\n\nfunction pushJoinGroups(\n parts: string[],\n ...groups: Array<readonly string[] | undefined>\n): void {\n for (const g of groups) {\n if (isNonEmptyArray(g)) parts.push(g.join(' '))\n }\n}\n\nfunction buildConditions(\n whereClause?: string,\n cursorClause?: string,\n): string[] {\n const conditions: string[] = []\n if (whereClause && whereClause !== '1=1') conditions.push(whereClause)\n if (isNotNullish(cursorClause) && isNonEmptyString(cursorClause))\n conditions.push(cursorClause)\n return conditions\n}\n\nfunction pushWhere(parts: string[], conditions: string[]): void {\n if (!isNonEmptyArray(conditions)) return\n parts.push(SQL_TEMPLATES.WHERE, conditions.join(SQL_SEPARATORS.CONDITION_AND))\n}\n\nfunction extractIncludeSpec(args: PrismaQueryArgs): Record<string, any> {\n const includeSpec: Record<string, any> = {}\n\n if (args.include && isPlainObject(args.include)) {\n for (const [key, value] of Object.entries(args.include)) {\n if (value !== false) {\n includeSpec[key] = value\n }\n }\n }\n\n if (args.select && isPlainObject(args.select)) {\n for (const [key, value] of Object.entries(args.select)) {\n if (value !== false && value !== true && isPlainObject(value)) {\n const selectVal = value as Record<string, any>\n if (selectVal.include || selectVal.select) {\n includeSpec[key] = value\n }\n }\n }\n }\n\n return includeSpec\n}\n\nfunction hasNestedIncludes(includeSpec: Record<string, any>): boolean {\n return Object.keys(includeSpec).length > 0\n}\n\nfunction splitOrderByTerms(orderBy: string): string[] {\n const raw = orderBy.trim()\n if (raw.length === 0) return []\n return raw\n .split(SQL_SEPARATORS.ORDER_BY)\n .map((s) => s.trim())\n .filter((s) => s.length > 0)\n}\n\nfunction hasIdInOrderBy(orderBy: string, fromAlias: string): boolean {\n const lower = orderBy.toLowerCase()\n const aliasLower = fromAlias.toLowerCase()\n\n return (\n lower.includes(`${aliasLower}.id `) || lower.includes(`${aliasLower}.\"id\"`)\n )\n}\n\nfunction ensureIdTiebreakerOrderBy(\n orderBy: string,\n fromAlias: string,\n model: any,\n): string {\n const idField = model?.fields?.find?.(\n (f: any) => f.name === 'id' && !f.isRelation,\n )\n if (!idField) return orderBy\n if (hasIdInOrderBy(orderBy, fromAlias)) return orderBy\n const t = col(fromAlias, 'id', model) + ' ASC'\n return isNonEmptyString(orderBy) ? orderBy + ', ' + t : t\n}\n\nfunction ensurePostgresDistinctOrderBy(args: {\n orderBy: string\n distinct: readonly string[]\n fromAlias: string\n model: any\n}): string {\n const { orderBy, distinct, fromAlias, model } = args\n\n const distinctTerms = distinct.map((f) => col(fromAlias, f, model) + ' ASC')\n\n const existing = splitOrderByTerms(orderBy)\n const canKeepAsIs =\n existing.length >= distinctTerms.length &&\n distinctTerms.every((term, i) =>\n existing[i].toLowerCase().startsWith(term.split(' ASC')[0].toLowerCase()),\n )\n\n const merged = canKeepAsIs\n ? orderBy\n : [...distinctTerms, ...existing].join(SQL_SEPARATORS.ORDER_BY)\n\n return ensureIdTiebreakerOrderBy(merged, fromAlias, model)\n}\n\nexport function constructFinalSql(spec: SelectQuerySpec): SqlResult {\n const {\n select,\n from,\n whereClause,\n whereJoins,\n orderBy,\n distinct,\n method,\n cursorCte,\n cursorClause,\n params,\n dialect,\n model,\n includes,\n schemas,\n pagination,\n args,\n } = spec\n\n const useWindowDistinct = hasWindowDistinct(spec)\n assertDistinctAllowed(method, useWindowDistinct)\n\n const hasDistinct = hasAnyDistinct(spec)\n assertDistinctAllowed(method, hasDistinct)\n\n const includeSpec = extractIncludeSpec(args)\n const hasIncludes = hasNestedIncludes(includeSpec)\n\n const hasPagination = isNotNullish(pagination.take)\n\n const shouldUseFlatJoin =\n dialect === 'postgres' &&\n hasPagination &&\n hasIncludes &&\n canUseFlatJoinForAll(includeSpec)\n\n if (shouldUseFlatJoin) {\n const flatResult = buildFlatJoinSql(spec)\n\n if (flatResult.sql) {\n const baseSqlResult = finalizeSql(flatResult.sql, params, dialect)\n return {\n sql: baseSqlResult.sql,\n params: baseSqlResult.params,\n paramMappings: baseSqlResult.paramMappings,\n requiresReduction: true,\n includeSpec: flatResult.includeSpec,\n }\n }\n }\n\n const { includeCols, selectWithIncludes, countJoins, includeJoins } =\n buildIncludeColumns(spec)\n\n if (useWindowDistinct) {\n const allExtraJoins = [...countJoins, ...includeJoins]\n const spec2 = withCountJoins(spec, allExtraJoins, whereJoins)\n let sql = buildSqliteDistinctQuery(spec2, selectWithIncludes).trim()\n sql = appendPagination(sql, spec)\n return finalizeSql(sql, params, dialect)\n }\n\n const parts: string[] = []\n if (cursorCte) parts.push('WITH ' + cursorCte)\n\n parts.push(SQL_TEMPLATES.SELECT)\n\n const distinctOn =\n dialect === 'postgres'\n ? buildPostgresDistinctOnClause(from.alias, distinct, model)\n : null\n if (distinctOn) parts.push(distinctOn)\n\n const baseSelect = (select ?? '').trim()\n const fullSelectList = buildSelectList(baseSelect, includeCols)\n if (!isNonEmptyString(fullSelectList)) {\n throw new Error('SELECT requires at least one selected field or include')\n }\n\n parts.push(fullSelectList)\n parts.push(SQL_TEMPLATES.FROM, from.table, from.alias)\n\n if (cursorCte) {\n const cteName = cursorCte.split(' AS ')[0].trim()\n parts.push('CROSS JOIN', cteName)\n }\n\n pushJoinGroups(parts, whereJoins, countJoins)\n\n if (isNonEmptyArray(includeJoins)) {\n parts.push(includeJoins.join(' '))\n }\n\n const conditions = buildConditions(whereClause, cursorClause)\n pushWhere(parts, conditions)\n\n let finalOrderBy = orderBy\n if (dialect === 'postgres' && isNonEmptyArray(distinct)) {\n finalOrderBy = ensurePostgresDistinctOrderBy({\n orderBy: orderBy || '',\n distinct: [...distinct],\n fromAlias: from.alias,\n model,\n })\n }\n\n if (isNonEmptyString(finalOrderBy))\n parts.push(SQL_TEMPLATES.ORDER_BY, finalOrderBy)\n\n let sql = parts.join(' ').trim()\n sql = appendPagination(sql, spec)\n return finalizeSql(sql, params, dialect)\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 isNonEmptyString,\n} from './shared/validators/type-guards'\nimport { assertScalarField } from './shared/validators/field-assertions'\nimport {\n getScalarFieldSet,\n getRelationFieldSet,\n} from './shared/model-field-cache'\n\ntype OrderByValue =\n | 'asc'\n | 'desc'\n | { direction: 'asc' | 'desc'; nulls?: 'first' | 'last' }\n\ntype OrderByItem = Record<string, OrderByValue>\n\nfunction normalizeOrderByInput(\n orderBy: PrismaQueryArgs['orderBy'],\n): OrderByItem[] {\n return normalizeOrderByShared(orderBy, parseOrderByValue)\n}\n\nfunction normalizeDistinctFields(\n distinct: PrismaQueryArgs['distinct'],\n): string[] {\n if (!isNonEmptyArray(distinct)) return []\n return distinct\n .filter((f) => typeof f === 'string')\n .map((f) => f.trim())\n .filter((f) => f.length > 0)\n}\n\nfunction mapFirstOrderByByField(\n existing: OrderByItem[],\n): Map<string, OrderByItem> {\n const m = new Map<string, OrderByItem>()\n for (const obj of existing) {\n const field = Object.keys(obj)[0]\n if (field && !m.has(field)) m.set(field, obj)\n }\n return m\n}\n\nfunction buildPostgresDistinctOrderBy(\n distinctFields: string[],\n existing: OrderByItem[],\n): OrderByItem[] {\n const firstByField = mapFirstOrderByByField(existing)\n\n const next: OrderByItem[] = []\n for (const f of distinctFields) {\n next.push(firstByField.get(f) ?? { [f]: 'asc' })\n }\n\n const distinctSet = new Set(distinctFields)\n for (const obj of existing) {\n const field = Object.keys(obj)[0]\n if (!distinctSet.has(field)) next.push(obj)\n }\n\n return next\n}\n\nfunction applyPostgresDistinctOrderBy(args: PrismaQueryArgs): PrismaQueryArgs {\n const distinctFields = normalizeDistinctFields(args.distinct)\n if (distinctFields.length === 0) return args\n if (!isNotNullish(args.orderBy)) return args\n\n const existing = normalizeOrderByInput(args.orderBy)\n if (existing.length === 0) return args\n\n return {\n ...args,\n orderBy: buildPostgresDistinctOrderBy(distinctFields, existing),\n }\n}\n\nfunction validateDistinct(\n model: Model,\n distinct: PrismaQueryArgs['distinct'],\n): void {\n if (!isNotNullish(distinct) || !isNonEmptyArray(distinct)) return\n\n const seen = new Set<string>()\n const scalarSet = getScalarFieldSet(model)\n\n for (const raw of distinct) {\n if (typeof raw !== 'string') {\n throw new Error(\n `distinct values must be strings. Got ${typeof raw}: ${JSON.stringify(raw)}`,\n )\n }\n\n const f = String(raw).trim()\n\n if (f.length === 0) {\n throw new Error('distinct field name cannot be empty')\n }\n\n if (f.length > 255) {\n throw new Error(\n `distinct field name too long (${f.length} chars, max 255): ${f.slice(0, 50)}...`,\n )\n }\n\n if (seen.has(f)) {\n throw new Error(`distinct must not contain duplicates (field: '${f}')`)\n }\n\n seen.add(f)\n\n if (!scalarSet.has(f)) {\n const relationSet = getRelationFieldSet(model)\n if (relationSet.has(f)) {\n throw new Error(\n `distinct field '${f}' is a relation. Only scalar fields are allowed.\\n` +\n `Available scalar fields: ${[...scalarSet].join(', ')}`,\n )\n }\n throw new Error(\n `distinct field '${f}' does not exist on model ${model.name}.\\n` +\n `Available fields: ${[...scalarSet].join(', ')}`,\n )\n }\n\n assertScalarField(model, f, 'distinct')\n }\n}\n\nfunction validateOrderBy(\n model: Model,\n orderBy: PrismaQueryArgs['orderBy'],\n): void {\n if (!isNotNullish(orderBy)) return\n\n const items = normalizeOrderByInput(orderBy)\n if (items.length === 0) return\n\n const scalarSet = getScalarFieldSet(model)\n const relationSet = getRelationFieldSet(model)\n\n for (const it of items) {\n const entries = Object.entries(it)\n if (entries.length !== 1) {\n throw new Error(\n 'orderBy array entries must have exactly one field. ' +\n `Got ${entries.length} fields: ${Object.keys(it).join(', ')}`,\n )\n }\n\n const [fieldName, value] = entries[0]\n const f = String(fieldName).trim()\n\n if (f.length === 0) {\n throw new Error('orderBy field name cannot be empty')\n }\n\n if (f.length > 255) {\n throw new Error(\n `orderBy field name too long (${f.length} chars, max 255): ${f.slice(0, 50)}...`,\n )\n }\n\n if (!scalarSet.has(f)) {\n if (relationSet.has(f)) {\n throw new Error(\n `orderBy field '${f}' is a relation. Only scalar fields are allowed.\\n` +\n `Available scalar fields: ${[...scalarSet].join(', ')}`,\n )\n }\n throw new Error(\n `orderBy field '${f}' does not exist on model ${model.name}.\\n` +\n `Available fields: ${[...scalarSet].join(', ')}`,\n )\n }\n\n assertScalarField(model, f, 'orderBy')\n parseOrderByValue(value, f)\n }\n}\n\nfunction validateCursor(\n model: Model,\n cursor: unknown,\n distinct?: unknown,\n): 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\n const definedEntries = entries.filter(([_, value]) => value !== undefined)\n if (definedEntries.length === 0) {\n throw new Error('cursor must have at least one field with defined value')\n }\n\n for (const [fieldName] of definedEntries) {\n const f = String(fieldName).trim()\n if (f.length === 0) {\n throw new Error('cursor field name cannot be empty')\n }\n assertScalarField(model, f, 'cursor')\n }\n\n if (isNotNullish(distinct) && isNonEmptyArray(distinct)) {\n const cursorFields = new Set(definedEntries.map(([k]) => k))\n const distinctSet = new Set(distinct.map((d) => String(d)))\n\n for (const cursorField of cursorFields) {\n if (!distinctSet.has(cursorField)) {\n throw new Error(\n `Cursor field '${cursorField}' must be included in distinct fields.\\n` +\n `Current distinct: [${[...distinctSet].join(', ')}]\\n` +\n `Cursor fields: [${[...cursorFields].join(', ')}]`,\n )\n }\n }\n }\n}\n\nfunction resolveDialect(dialect?: SqlDialect): SqlDialect {\n return dialect ?? getGlobalDialect()\n}\n\nfunction normalizeArgsForNegativeTake(\n method: string,\n args: PrismaQueryArgs,\n): PrismaQueryArgs {\n if (method !== 'findMany') return args\n if (typeof args.take !== 'number') return args\n if (!Number.isInteger(args.take)) return args\n if (args.take >= 0) return args\n\n if (!isNotNullish(args.orderBy)) {\n throw new Error('Negative take requires orderBy for deterministic results')\n }\n\n return {\n ...args,\n take: Math.abs(args.take),\n orderBy: reverseOrderByInput(args.orderBy),\n }\n}\n\nfunction normalizeArgsForDialect(\n dialect: SqlDialect,\n args: PrismaQueryArgs,\n): PrismaQueryArgs {\n if (dialect !== 'postgres') return args\n return applyPostgresDistinctOrderBy(args)\n}\n\nfunction buildCursorClauseIfAny(input: {\n cursor: unknown\n orderBy: PrismaQueryArgs['orderBy']\n tableName: string\n alias: string\n params: ReturnType<typeof createParamStoreFrom>\n dialect: SqlDialect\n model: Model\n}): { cte?: string; condition?: string } {\n const { cursor, orderBy, tableName, alias, params, dialect, model } = input\n if (!isNotNullish(cursor)) return {}\n return buildCursorCondition(\n cursor,\n orderBy,\n tableName,\n alias,\n params,\n dialect,\n model,\n )\n}\n\nfunction buildSelectSpec(input: {\n method: string\n normalizedArgs: PrismaQueryArgs\n model: Model\n schemas: Model[]\n tableName: string\n alias: string\n whereResult: WhereClauseResult\n dialect: SqlDialect\n}): SelectQuerySpec {\n const {\n method,\n normalizedArgs,\n model,\n schemas,\n tableName,\n alias,\n whereResult,\n dialect,\n } = input\n\n const selectFields = buildSelectFields(\n { select: normalizedArgs.select },\n model,\n alias,\n )\n\n const orderByClause = buildOrderByClause(\n normalizedArgs,\n alias,\n dialect,\n model,\n )\n const { take, skip, cursor } = getPaginationParams(method, normalizedArgs)\n\n const params = createParamStoreFrom(\n whereResult.params,\n whereResult.paramMappings,\n whereResult.nextParamIndex,\n dialect,\n )\n\n const outerHasLimit = isNotNullish(take)\n\n const includes = buildIncludeSql(\n normalizedArgs,\n model,\n schemas,\n alias,\n params,\n dialect,\n outerHasLimit,\n )\n\n const cursorResult = buildCursorClauseIfAny({\n cursor,\n orderBy: normalizedArgs.orderBy,\n tableName,\n alias,\n params,\n dialect,\n model,\n })\n\n if (\n dialect === 'sqlite' &&\n isNonEmptyArray(normalizedArgs.distinct) &&\n cursorResult.condition\n ) {\n throw new Error(\n 'Cursor pagination with distinct is not supported in SQLite due to window function limitations. ' +\n 'Use findMany with skip/take instead, or remove distinct.',\n )\n }\n\n return {\n select: selectFields,\n includes,\n from: { table: tableName, alias },\n whereClause: whereResult.clause,\n whereJoins: whereResult.joins,\n orderBy: orderByClause,\n pagination: { take, skip },\n distinct: normalizedArgs.distinct,\n method,\n cursorCte: cursorResult.cte,\n cursorClause: cursorResult.condition,\n params,\n dialect,\n model,\n schemas,\n args: normalizedArgs,\n }\n}\n\ntype BuildSelectSqlInput = {\n method: string\n args: PrismaQueryArgs\n model: Model\n schemas: Model[]\n from: { tableName: string; alias: string }\n whereResult: WhereClauseResult\n dialect?: SqlDialect\n}\n\nexport function buildSelectSql(input: BuildSelectSqlInput): SqlResult {\n const { method, args, model, schemas, from, whereResult, dialect } = input\n\n assertSafeAlias(from.alias)\n assertSafeTableRef(from.tableName)\n\n const dialectToUse = resolveDialect(dialect)\n\n const argsForSql = normalizeArgsForNegativeTake(method, args)\n const normalizedArgs = normalizeArgsForDialect(dialectToUse, argsForSql)\n\n validateDistinct(model, normalizedArgs.distinct)\n validateOrderBy(model, normalizedArgs.orderBy)\n validateCursor(model, normalizedArgs.cursor, normalizedArgs.distinct)\n\n const spec = buildSelectSpec({\n method,\n normalizedArgs,\n model,\n schemas,\n tableName: from.tableName,\n alias: from.alias,\n whereResult,\n dialect: dialectToUse,\n })\n\n return constructFinalSql(spec)\n}\n","import { ParamStore } from './param-store'\nimport { SqlDialect } from '../../sql-builder-dialect'\n\ntype ComparisonBuilder = (\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n) => string\n\nconst DEFAULT_EXCLUDE_KEYS: ReadonlySet<string> = new Set(['mode'])\n\nexport function buildComparisons(\n expr: string,\n filter: Record<string, unknown>,\n params: ParamStore,\n dialect: SqlDialect,\n builder: ComparisonBuilder,\n excludeKeys: ReadonlySet<string> = DEFAULT_EXCLUDE_KEYS,\n): string[] {\n const out: string[] = []\n\n for (const op in filter) {\n if (!Object.prototype.hasOwnProperty.call(filter, op)) continue\n if (excludeKeys.has(op)) continue\n\n const val = filter[op]\n if (val === undefined) continue\n\n const built = builder(expr, op, val, params, dialect)\n if (built && built.trim().length > 0) out.push(built)\n }\n\n return out\n}\n","import { PrismaQueryArgs, Model } from '../types'\nimport {\n SQL_TEMPLATES,\n SQL_SEPARATORS,\n Ops,\n LogicalOps,\n LIMITS,\n} from './shared/constants'\nimport {\n assertSafeAlias,\n assertSafeTableRef,\n col,\n quote,\n colWithAlias,\n} from './shared/sql-utils'\nimport { createParamStore, ParamStore } from './shared/param-store'\nimport { WhereClauseResult, SqlResult } from './shared/types'\nimport {\n isValidWhereClause,\n validateSelectQuery,\n validateParamConsistency,\n} from './shared/validators/sql-validators'\nimport {\n isNotNullish,\n isNonEmptyArray,\n isPlainObject,\n} from './shared/validators/type-guards'\nimport { SqlDialect, getGlobalDialect } from '../sql-builder-dialect'\nimport { isDynamicParameter } from '@dee-wan/schema-parser'\nimport { addAutoScoped } from './shared/dynamic-params'\nimport { buildNotComposite } from './where/operators-scalar'\nimport {\n assertScalarField,\n assertNumericField,\n} from './shared/validators/field-assertions'\nimport { buildComparisons } from './shared/comparison-builder'\nimport { buildOrderBy } from './pagination'\nimport { buildSelectSql } from './select'\nimport { getPrimaryKeyFields } from './shared/primary-key-utils'\nimport { tryBuildNullComparison } from './shared/null-comparison'\nimport { buildInCondition } from './shared/in-operator-builder'\n\ntype AggregateKey = '_count' | '_sum' | '_avg' | '_min' | '_max'\ntype LogicalKey = 'AND' | 'OR' | 'NOT'\n\nconst MAX_NOT_DEPTH = 50\n\nconst AGGREGATES: ReadonlyArray<[Exclude<AggregateKey, '_count'>, string]> = [\n ['_sum', 'SUM'],\n ['_avg', 'AVG'],\n ['_min', 'MIN'],\n ['_max', 'MAX'],\n]\n\nconst COMPARISON_OPS: Record<string, string> = {\n [Ops.EQUALS]: '=',\n [Ops.NOT]: '<>',\n [Ops.GT]: '>',\n [Ops.GTE]: '>=',\n [Ops.LT]: '<',\n [Ops.LTE]: '<=',\n}\n\nconst HAVING_ALLOWED_OPS = new Set<string>([\n Ops.EQUALS,\n Ops.NOT,\n Ops.GT,\n Ops.GTE,\n Ops.LT,\n Ops.LTE,\n Ops.IN,\n Ops.NOT_IN,\n])\n\nconst HAVING_FIELD_FIRST_AGG_KEYS: readonly AggregateKey[] = Object.freeze([\n '_count',\n '_sum',\n '_avg',\n '_min',\n '_max',\n] as const)\n\nfunction hasAnyOwnKey(obj: Record<string, unknown>): boolean {\n for (const k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) return true\n }\n return false\n}\n\nfunction isTruthySelection(v: unknown): boolean {\n return v === true\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 assertHavingOp(op: string): void {\n if (!HAVING_ALLOWED_OPS.has(op)) {\n throw new Error(\n `Unsupported HAVING operator '${op}'. Allowed: ${[...HAVING_ALLOWED_OPS].join(', ')}`,\n )\n }\n}\n\nfunction aggExprForField(\n aggKey: AggregateKey,\n field: string,\n alias: string,\n model?: Model,\n): string {\n if (aggKey === '_count') {\n return field === '_all'\n ? 'COUNT(*)'\n : 'COUNT(' + col(alias, field, model) + ')'\n }\n if (field === '_all') {\n throw new Error(`'${aggKey}' does not support '_all'`)\n }\n if (aggKey === '_sum') return 'SUM(' + col(alias, field, model) + ')'\n if (aggKey === '_avg') return 'AVG(' + col(alias, field, model) + ')'\n if (aggKey === '_min') return 'MIN(' + col(alias, field, model) + ')'\n return 'MAX(' + col(alias, field, model) + ')'\n}\n\nfunction buildComparisonOp(op: string): string {\n const sqlOp = COMPARISON_OPS[op]\n if (!sqlOp) {\n throw new Error(`Unsupported HAVING operator: ${op}`)\n }\n return sqlOp\n}\n\nfunction addHavingParam(\n params: ParamStore,\n op: string,\n value: unknown,\n): string {\n return addAutoScoped(params, value, `having.${op}`)\n}\n\nfunction normalizeLogicalValue(\n operator: LogicalKey,\n value: unknown,\n): Record<string, unknown>[] {\n if (Array.isArray(value)) {\n const out: Record<string, unknown>[] = []\n for (const v of value) {\n if (!isPlainObject(v)) {\n throw new Error(`${operator} entries must be objects in HAVING`)\n }\n out.push(v)\n }\n return out\n }\n\n if (isPlainObject(value)) return [value]\n\n throw new Error(`${operator} must be an object or array of objects in HAVING`)\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 depth: number = 0,\n): string {\n assertHavingOp(op)\n\n if (depth > MAX_NOT_DEPTH) {\n throw new Error(\n `NOT operator nesting too deep in HAVING (max ${MAX_NOT_DEPTH} levels).`,\n )\n }\n\n const nullCheck = tryBuildNullComparison(expr, op, val, 'HAVING')\n if (nullCheck) return nullCheck\n\n if (op === Ops.NOT && isPlainObject(val)) {\n return buildNotComposite(\n expr,\n val,\n params,\n dialect,\n (e, subOp, subVal, p, d) =>\n buildSimpleComparison(e, subOp, subVal, p, d, depth + 1),\n SQL_SEPARATORS.CONDITION_AND,\n )\n }\n\n if (op === Ops.IN || op === Ops.NOT_IN) {\n return buildInCondition(\n expr,\n op === Ops.IN ? 'in' : 'notIn',\n val,\n params,\n dialect,\n 'HAVING',\n )\n }\n\n return buildBinaryComparison(expr, op, val, params)\n}\n\nfunction negateClauses(subClauses: string[]): string {\n if (subClauses.length === 1) return SQL_TEMPLATES.NOT + ' ' + subClauses[0]\n return (\n SQL_TEMPLATES.NOT +\n ' (' +\n subClauses.join(SQL_SEPARATORS.CONDITION_AND) +\n ')'\n )\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 buildHavingNode(\n node: Record<string, unknown>,\n alias: string,\n params: ParamStore,\n dialect: SqlDialect,\n model: Model,\n depth: number = 0,\n): string {\n if (depth > LIMITS.MAX_HAVING_DEPTH) {\n throw new Error(\n `HAVING clause nesting too deep (max ${LIMITS.MAX_HAVING_DEPTH} levels). This usually indicates a circular reference.`,\n )\n }\n\n const clauses: string[] = []\n\n for (const key in node) {\n if (!Object.prototype.hasOwnProperty.call(node, key)) continue\n const value = node[key]\n const built = buildHavingEntry(\n key,\n value,\n alias,\n params,\n dialect,\n model,\n depth,\n )\n for (const c of built) {\n if (c && c.length > 0) clauses.push(c)\n }\n }\n\n return clauses.join(SQL_SEPARATORS.CONDITION_AND)\n}\n\nfunction buildLogicalClause(\n key: LogicalKey,\n value: unknown,\n alias: string,\n params: ParamStore,\n dialect: SqlDialect,\n model: Model,\n depth: number = 0,\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, depth + 1)\n if (c && c.length > 0) subClauses.push('(' + c + ')')\n }\n\n if (subClauses.length === 0) return ''\n\n return combineLogical(key, subClauses)\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 return\n }\n\n if (aggKey === '_sum' || aggKey === '_avg') {\n assertNumericField(model, field, 'HAVING')\n } else {\n assertScalarField(model, field, 'HAVING')\n }\n}\n\nfunction buildHavingOpsForExpr(\n expr: string,\n filter: Record<string, unknown>,\n params: ParamStore,\n dialect: SqlDialect,\n): string[] {\n return buildComparisons(expr, filter, params, dialect, buildSimpleComparison)\n}\n\ntype HavingShape = 'aggregate-first' | 'field-first'\n\ninterface NormalizedHavingEntry {\n aggKey: AggregateKey\n fieldName: string\n filter: Record<string, unknown>\n}\n\nfunction normalizeHavingTarget(\n target: Record<string, unknown>,\n shape: HavingShape,\n model: Model,\n): NormalizedHavingEntry[] {\n const entries: NormalizedHavingEntry[] = []\n\n if (shape === 'aggregate-first') {\n for (const aggKey in target) {\n if (!Object.prototype.hasOwnProperty.call(target, aggKey)) continue\n if (!isAggregateKey(aggKey)) continue\n\n const aggTarget = target[aggKey]\n if (!isPlainObject(aggTarget)) continue\n\n for (const fieldName in aggTarget) {\n if (!Object.prototype.hasOwnProperty.call(aggTarget, fieldName))\n continue\n\n const filter = aggTarget[fieldName]\n if (!isPlainObject(filter)) continue\n if (!hasAnyOwnKey(filter)) continue\n\n entries.push({ aggKey: aggKey as AggregateKey, fieldName, filter })\n }\n }\n } else {\n for (const fieldName in target) {\n if (!Object.prototype.hasOwnProperty.call(target, fieldName)) continue\n\n const fieldTarget = target[fieldName]\n if (!isPlainObject(fieldTarget)) continue\n\n for (const aggKey of HAVING_FIELD_FIRST_AGG_KEYS) {\n const aggFilter = (fieldTarget as any)[aggKey]\n if (!isPlainObject(aggFilter)) continue\n if (!hasAnyOwnKey(aggFilter)) continue\n\n entries.push({ aggKey, fieldName, filter: aggFilter })\n }\n }\n }\n\n return entries\n}\n\nfunction validateHavingTarget(\n aggKey: AggregateKey,\n fieldName: string,\n model: Model,\n): void {\n if (fieldName === '_all') {\n if (aggKey !== '_count')\n throw new Error(`HAVING '${aggKey}' does not support '_all'`)\n return\n }\n\n if (aggKey === '_sum' || aggKey === '_avg') {\n assertNumericField(model, fieldName, 'HAVING')\n } else {\n assertScalarField(model, fieldName, 'HAVING')\n }\n}\n\nfunction buildHavingForShape(\n shape: HavingShape,\n target: unknown,\n alias: string,\n params: ParamStore,\n dialect: SqlDialect,\n model: Model,\n): string[] {\n if (!isPlainObject(target)) {\n const shapeLabel = shape === 'aggregate-first' ? 'aggregate key' : 'field'\n throw new Error(`HAVING '${shapeLabel}' must be an object`)\n }\n\n const entries = normalizeHavingTarget(target, shape, model)\n const out: string[] = []\n\n for (const { aggKey, fieldName, filter } of entries) {\n validateHavingTarget(aggKey, fieldName, model)\n const expr = aggExprForField(aggKey, fieldName, alias, model)\n out.push(...buildHavingOpsForExpr(expr, filter, params, dialect))\n }\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 return buildHavingForShape(\n 'aggregate-first',\n { [aggKey]: target },\n alias,\n params,\n dialect,\n model,\n )\n}\n\nfunction buildHavingEntry(\n key: string,\n value: unknown,\n alias: string,\n params: ParamStore,\n dialect: SqlDialect,\n model: Model,\n depth: number = 0,\n): string[] {\n if (isLogicalKey(key)) {\n const logical = buildLogicalClause(\n key,\n value,\n alias,\n params,\n dialect,\n model,\n depth,\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 buildHavingForShape(\n 'field-first',\n { [key]: value },\n alias,\n params,\n dialect,\n model,\n )\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 const d = dialect ?? getGlobalDialect()\n if (!isPlainObject(having)) throw new Error('having must be an object')\n return buildHavingNode(having, alias, params, d, model, 0)\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 +\n ' ' +\n SQL_TEMPLATES.AS +\n ' ' +\n quote('_count._all'),\n )\n}\n\nfunction pushCountField(\n fields: string[],\n alias: string,\n fieldName: string,\n model?: Model,\n): void {\n const outAlias = '_count.' + fieldName\n fields.push(\n 'COUNT(' +\n col(alias, fieldName, model) +\n ') ' +\n SQL_TEMPLATES.AS +\n ' ' +\n quote(outAlias),\n )\n}\n\nfunction addCountFields(\n fields: string[],\n countArg: Record<string, unknown> | true | undefined,\n alias: string,\n model: Model,\n): void {\n if (!isNotNullish(countArg)) return\n\n if (countArg === true) {\n pushCountAllField(fields)\n return\n }\n\n if (!isPlainObject(countArg)) {\n throw new Error(`_count must be true or an object, got ${typeof countArg}`)\n }\n\n if (countArg._all === true) {\n pushCountAllField(fields)\n }\n\n for (const f in countArg) {\n if (!Object.prototype.hasOwnProperty.call(countArg, f)) continue\n if (f === '_all') continue\n const v = countArg[f]\n if (isTruthySelection(v)) {\n assertScalarField(model, f, '_count')\n pushCountField(fields, alias, f, model)\n }\n }\n}\n\nfunction getAggregateSelectionObject(\n args: PrismaQueryArgs,\n agg: AggregateKey,\n): Record<string, unknown> | undefined {\n const obj = args[agg]\n return isPlainObject(obj) ? obj : undefined\n}\n\nfunction assertAggregatableScalarField(\n model: Model,\n agg: AggregateKey,\n fieldName: string,\n): void {\n if (agg === '_sum' || agg === '_avg') {\n assertNumericField(model, fieldName, agg)\n } else {\n assertScalarField(model, fieldName, agg)\n }\n}\n\nfunction pushAggregateFieldSql(\n fields: string[],\n aggFn: string,\n alias: string,\n agg: AggregateKey,\n fieldName: string,\n model?: Model,\n): void {\n const outAlias = agg + '.' + fieldName\n fields.push(\n aggFn +\n '(' +\n col(alias, fieldName, model) +\n ') ' +\n SQL_TEMPLATES.AS +\n ' ' +\n quote(outAlias),\n )\n}\n\nfunction addAggregateFields(\n fields: string[],\n args: PrismaQueryArgs,\n alias: string,\n model: Model,\n): void {\n for (const [agg, aggFn] of AGGREGATES) {\n const obj = getAggregateSelectionObject(args, agg)\n if (!obj) continue\n\n for (const fieldName in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, fieldName)) continue\n\n const selection = obj[fieldName]\n if (fieldName === '_all')\n throw new Error(`'${agg}' does not support '_all'`)\n if (!isTruthySelection(selection)) continue\n\n assertAggregatableScalarField(model, agg, fieldName)\n pushAggregateFieldSql(fields, aggFn, alias, agg, fieldName, model)\n }\n }\n}\n\nfunction buildAggregateFields(\n args: PrismaQueryArgs,\n alias: string,\n model: Model,\n): string[] {\n const fields: string[] = []\n\n const countArg = normalizeCountArg(args._count)\n addCountFields(fields, countArg, alias, model)\n addAggregateFields(fields, args, alias, model)\n\n return fields\n}\n\nexport function buildAggregateSql(\n args: PrismaQueryArgs,\n whereResult: WhereClauseResult,\n tableName: string,\n alias: string,\n model: Model,\n): SqlResult {\n assertSafeAlias(alias)\n assertSafeTableRef(tableName)\n\n const aggFields = buildAggregateFields(args, alias, model)\n if (!isNonEmptyArray(aggFields)) {\n throw new Error('buildAggregateSql requires at least one aggregate field')\n }\n\n const selectClause = aggFields.join(SQL_SEPARATORS.FIELD_LIST)\n\n const joinsPart =\n whereResult.joins && whereResult.joins.length > 0\n ? whereResult.joins.join(' ')\n : ''\n\n const whereClause = isValidWhereClause(whereResult.clause)\n ? SQL_TEMPLATES.WHERE + ' ' + whereResult.clause\n : ''\n\n const parts: string[] = [\n SQL_TEMPLATES.SELECT,\n selectClause,\n SQL_TEMPLATES.FROM,\n tableName,\n alias,\n ]\n if (joinsPart) parts.push(joinsPart)\n if (whereClause) parts.push(whereClause)\n\n const sql = parts.join(' ').trim()\n\n validateSelectQuery(sql)\n validateParamConsistency(sql, whereResult.params)\n\n return {\n sql,\n params: [...whereResult.params],\n paramMappings: [...whereResult.paramMappings],\n }\n}\n\nfunction assertGroupByBy(args: PrismaQueryArgs, model: Model): string[] {\n if (!isNotNullish(args.by) || !isNonEmptyArray(args.by)) {\n throw new Error('buildGroupBySql: by is required and cannot be empty')\n }\n\n const byFields = args.by.map((f: string) => String(f))\n const bySet = new Set(byFields)\n if (bySet.size !== byFields.length) {\n throw new Error('buildGroupBySql: by must not contain duplicates')\n }\n\n for (const f of byFields) {\n assertScalarField(model, f, 'groupBy.by')\n }\n\n return byFields\n}\n\nfunction buildGroupBySelectParts(\n args: PrismaQueryArgs,\n alias: string,\n model: Model,\n byFields: string[],\n): { groupCols: string[]; groupFields: string; selectFields: string } {\n const groupCols = byFields.map((f) => col(alias, f, model))\n const selectCols = byFields.map((f) => colWithAlias(alias, f, model))\n const groupFields = groupCols.join(SQL_SEPARATORS.FIELD_LIST)\n\n const aggFields = buildAggregateFields(args, alias, model)\n const selectFields = isNonEmptyArray(aggFields)\n ? selectCols.concat(aggFields).join(SQL_SEPARATORS.FIELD_LIST)\n : selectCols.join(SQL_SEPARATORS.FIELD_LIST)\n\n return { groupCols, groupFields, selectFields }\n}\n\nfunction buildGroupByHaving(\n args: PrismaQueryArgs,\n alias: string,\n params: ParamStore,\n model: Model,\n dialect: SqlDialect,\n): string {\n if (!isNotNullish(args.having)) return ''\n if (!isPlainObject(args.having)) throw new Error('having must be an object')\n\n const h = buildHavingClause(args.having, alias, params, model, dialect)\n if (!h || h.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, d)\n\n const { groupFields, selectFields } = buildGroupBySelectParts(\n args,\n alias,\n model,\n byFields,\n )\n const havingClause = buildGroupByHaving(args, alias, params, model, d)\n\n const joinsPart =\n whereResult.joins && whereResult.joins.length > 0\n ? whereResult.joins.join(' ')\n : ''\n\n const whereClause = isValidWhereClause(whereResult.clause)\n ? SQL_TEMPLATES.WHERE + ' ' + whereResult.clause\n : ''\n\n const orderBySql = isNotNullish(args.orderBy)\n ? buildOrderBy(args.orderBy, alias, d, model)\n : ''\n\n const parts: string[] = [\n SQL_TEMPLATES.SELECT,\n selectFields,\n SQL_TEMPLATES.FROM,\n tableName,\n alias,\n ]\n if (joinsPart) parts.push(joinsPart)\n if (whereClause) parts.push(whereClause)\n parts.push(SQL_TEMPLATES.GROUP_BY, groupFields)\n if (havingClause) parts.push(havingClause)\n\n if (orderBySql) {\n parts.push(SQL_TEMPLATES.ORDER_BY, orderBySql)\n }\n\n if (isNotNullish(args.take)) {\n const ph = addAutoScoped(params, args.take, 'groupBy.take')\n parts.push(SQL_TEMPLATES.LIMIT, ph)\n }\n\n if (isNotNullish(args.skip)) {\n const ph = addAutoScoped(params, args.skip, 'groupBy.skip')\n parts.push(SQL_TEMPLATES.OFFSET, ph)\n }\n\n const sql = parts.join(' ').trim()\n\n const snapshot = params.snapshot()\n\n const allParams = [...whereResult.params, ...snapshot.params]\n const allMappings = [...whereResult.paramMappings, ...snapshot.mappings]\n\n validateSelectQuery(sql)\n validateParamConsistency(sql, allParams)\n\n return {\n sql,\n params: allParams,\n paramMappings: allMappings,\n }\n}\n\nfunction normalizeCountArgs(argsOrSkip: unknown): PrismaQueryArgs {\n if (isPlainObject(argsOrSkip)) return argsOrSkip as PrismaQueryArgs\n if (argsOrSkip === undefined || argsOrSkip === null) return {}\n return { skip: argsOrSkip as any }\n}\n\nfunction assertNoNegativeTake(args: PrismaQueryArgs): void {\n if (typeof args.take === 'number' && args.take < 0) {\n throw new Error('Negative take is not supported for count()')\n }\n}\n\nfunction buildSimpleCountSql(\n whereResult: WhereClauseResult,\n tableName: string,\n alias: string,\n): SqlResult {\n const joinsPart =\n whereResult.joins && whereResult.joins.length > 0\n ? whereResult.joins.join(' ')\n : ''\n\n const whereClause = isValidWhereClause(whereResult.clause)\n ? SQL_TEMPLATES.WHERE + ' ' + whereResult.clause\n : ''\n\n const parts: string[] = [\n SQL_TEMPLATES.SELECT,\n SQL_TEMPLATES.COUNT_ALL,\n SQL_TEMPLATES.AS,\n quote('_count._all'),\n SQL_TEMPLATES.FROM,\n tableName,\n alias,\n ]\n if (joinsPart) parts.push(joinsPart)\n if (whereClause) parts.push(whereClause)\n\n const sql = parts.join(' ').trim()\n\n validateSelectQuery(sql)\n validateParamConsistency(sql, whereResult.params)\n\n return {\n sql,\n params: [...whereResult.params],\n paramMappings: [...whereResult.paramMappings],\n }\n}\n\nexport function buildCountSql(\n whereResult: WhereClauseResult,\n tableName: string,\n alias: string,\n argsOrSkip?: PrismaQueryArgs | number | string,\n dialect?: SqlDialect,\n model?: Model,\n schemas?: Model[],\n): SqlResult {\n assertSafeAlias(alias)\n assertSafeTableRef(tableName)\n\n const args = normalizeCountArgs(argsOrSkip)\n assertNoNegativeTake(args)\n\n if (!model) {\n return buildSimpleCountSql(whereResult, tableName, alias)\n }\n\n const pkFields = getPrimaryKeyFields(model)\n const distinctFields = isNonEmptyArray((args as any).distinct)\n ? (args as any).distinct.map((x: any) => String(x)).filter((x: string) => x)\n : []\n\n const selectFields = distinctFields.length > 0 ? distinctFields : pkFields\n if (selectFields.length === 0) {\n return buildSimpleCountSql(whereResult, tableName, alias)\n }\n\n const select: Record<string, boolean> = {}\n for (const f of selectFields) select[f] = true\n\n const subArgs: PrismaQueryArgs = {\n ...(args as any),\n include: undefined,\n select,\n }\n\n const d = dialect ?? getGlobalDialect()\n const subSchemas =\n Array.isArray(schemas) && schemas.length > 0 ? schemas : [model]\n\n const sub = buildSelectSql({\n method: 'findMany',\n args: subArgs,\n model,\n schemas: subSchemas,\n from: { tableName, alias },\n whereResult,\n dialect: d,\n })\n\n const countAlias = quote('__count_sub')\n const sql =\n `${SQL_TEMPLATES.SELECT} ${SQL_TEMPLATES.COUNT_ALL} ${SQL_TEMPLATES.AS} ${quote(\n '_count._all',\n )} ` +\n `${SQL_TEMPLATES.FROM} (${sub.sql}) ${SQL_TEMPLATES.AS} ${countAlias}`\n\n validateSelectQuery(sql)\n validateParamConsistency(sql, sub.params)\n\n return {\n sql,\n params: sub.params,\n paramMappings: sub.paramMappings,\n }\n}\n","import { getModelByName } from './builder/joins'\nimport { buildSelectSql } from './builder/select'\nimport {\n buildAggregateSql,\n buildCountSql,\n buildGroupBySql,\n} from './builder/aggregates'\nimport { getGlobalDialect, SqlDialect } from './sql-builder-dialect'\nimport { buildWhereClause } from './builder/where'\nimport { buildTableReference } from './builder/shared/sql-utils'\nimport { SQL_TEMPLATES, SQL_RESERVED_WORDS } from './builder/shared/constants'\nimport { validateParamConsistencyByDialect } from './builder/shared/validators/sql-validators'\nimport {\n ParamMap,\n DirectiveProps,\n convertDMMFToModels,\n} from '@dee-wan/schema-parser'\nimport { PrismaMethod } from './types'\nimport { isPlainObject } from './builder/shared/validators/type-guards'\nimport { SqlResult } from './builder/shared/types'\n\nexport interface SQLDirective {\n method: PrismaMethod\n sql: string\n staticParams: any[]\n dynamicKeys: string[]\n paramOrder: string\n paramMappings: readonly ParamMap[]\n requiresReduction: boolean\n includeSpec: Record<string, any>\n originalDirective: DirectiveProps\n}\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 resolveMethod(directive: DirectiveProps): PrismaMethod {\n const m = (directive as any)?.method\n if (isPrismaMethod(m)) return m\n const pm = (directive as any)?.query?.processed?.method\n if (isPrismaMethod(pm)) return pm\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}): SqlResult {\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(\n processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n dialect,\n )\n }\n\n if (method === 'count') {\n return buildCountSql(\n whereResult,\n tableName,\n alias,\n processed,\n dialect,\n modelDef,\n schemaModels,\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 paramOrder: string\n} {\n const sorted = [...mappings].sort((a, b) => a.index - b.index)\n const staticParams: any[] = []\n const dynamicKeys: string[] = []\n let paramOrder = ''\n\n for (const m of sorted) {\n if (m.dynamicName !== undefined) {\n dynamicKeys.push(m.dynamicName)\n paramOrder += 'd'\n } else if (m.value !== undefined) {\n staticParams.push(m.value)\n paramOrder += 's'\n } else {\n throw new Error(\n `CRITICAL: ParamMap ${m.index} has neither dynamicName nor value`,\n )\n }\n }\n\n return { staticParams, dynamicKeys, paramOrder }\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 extractIncludeSpec(\n processed: Record<string, any>,\n modelDef: any,\n): Record<string, any> {\n const includeSpec: Record<string, any> = {}\n const relationSet = new Set<string>(\n Array.isArray(modelDef?.fields)\n ? modelDef.fields\n .filter((f: any) => f && f.isRelation && typeof f.name === 'string')\n .map((f: any) => f.name)\n : [],\n )\n\n if (processed.include && isPlainObject(processed.include)) {\n for (const [key, value] of Object.entries(processed.include)) {\n if (!relationSet.has(key)) continue\n if (value !== false) {\n includeSpec[key] = value\n }\n }\n }\n\n if (processed.select && isPlainObject(processed.select)) {\n for (const [key, value] of Object.entries(processed.select)) {\n if (!relationSet.has(key)) continue\n if (value === false) continue\n\n if (value === true) {\n includeSpec[key] = true\n continue\n }\n\n if (isPlainObject(value)) {\n const selectVal = value as Record<string, any>\n if (selectVal.include || selectVal.select) {\n includeSpec[key] = value\n } else {\n includeSpec[key] = true\n }\n } else {\n includeSpec[key] = true\n }\n }\n }\n\n return includeSpec\n}\n\nfunction buildAndNormalizeSql(args: {\n method: PrismaMethod\n processed: Record<string, any>\n whereResult: ReturnType<typeof buildWhereClause>\n tableName: string\n alias: string\n modelDef: any\n schemaModels: any\n dialect: SqlDialect\n}): {\n sql: string\n paramMappings: readonly ParamMap[]\n requiresReduction: boolean\n includeSpec: Record<string, any>\n} {\n const {\n method,\n processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n schemaModels,\n dialect,\n } = args\n\n const sqlResult = buildSqlResult({\n method,\n processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n schemaModels,\n dialect,\n })\n\n const normalized = normalizeSqlAndMappingsForDialect(\n sqlResult.sql,\n sqlResult.paramMappings!,\n dialect,\n )\n\n const includeSpec =\n (sqlResult.includeSpec && isPlainObject(sqlResult.includeSpec)\n ? (sqlResult.includeSpec as Record<string, any>)\n : null) ?? extractIncludeSpec(processed, modelDef)\n\n const requiresReduction = sqlResult.requiresReduction === true\n\n return {\n sql: normalized.sql,\n paramMappings: normalized.paramMappings,\n requiresReduction,\n includeSpec,\n }\n}\n\nfunction finalizeDirective(args: {\n directive: DirectiveProps\n method: PrismaMethod\n normalizedSql: string\n normalizedMappings: readonly ParamMap[]\n dialect: SqlDialect\n requiresReduction: boolean\n includeSpec: Record<string, any>\n}): SQLDirective {\n const {\n directive,\n method,\n normalizedSql,\n normalizedMappings,\n dialect,\n requiresReduction,\n includeSpec,\n } = args\n\n const params = normalizedMappings.map((m) => m.value ?? undefined)\n validateParamConsistencyByDialect(normalizedSql, params, dialect)\n\n const { staticParams, dynamicKeys, paramOrder } =\n buildParamsFromMappings(normalizedMappings)\n\n return {\n method,\n sql: normalizedSql,\n staticParams,\n dynamicKeys,\n paramOrder,\n paramMappings: normalizedMappings,\n requiresReduction,\n includeSpec,\n originalDirective: directive,\n }\n}\n\nexport function generateSQL(directive: DirectiveProps): SQLDirective {\n const { query } = directive\n\n const { schemaModels, modelDef } = resolveModelContext(directive)\n\n const dialect = getGlobalDialect()\n\n const { tableName, alias } = buildMainTableAndAlias({ modelDef, dialect })\n\n const whereResult = buildMainWhere({\n processed: query.processed,\n alias,\n schemaModels,\n modelDef,\n dialect,\n })\n\n const method = resolveMethod(directive)\n\n const built = buildAndNormalizeSql({\n method,\n processed: query.processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n schemaModels,\n dialect,\n })\n\n return finalizeDirective({\n directive,\n method,\n normalizedSql: built.sql,\n normalizedMappings: built.paramMappings,\n dialect,\n requiresReduction: built.requiresReduction,\n includeSpec: built.includeSpec,\n })\n}\n","interface Node<K, V> {\n key: K\n value: V\n freq: number\n queue: 'small' | 'main'\n prev: Node<K, V> | null\n next: Node<K, V> | null\n}\n\nfunction withDispose<T>(it: IterableIterator<T>): MapIterator<T> {\n const anyIt = it as any\n if (anyIt[Symbol.dispose] === undefined) {\n anyIt[Symbol.dispose] = () => {}\n }\n return it as unknown as MapIterator<T>\n}\n\nclass BoundedCache<K, V> implements Map<K, V> {\n private map: Map<K, Node<K, V>> = new Map()\n private ghost: Set<K> = new Set()\n\n private smallHead: Node<K, V> | null = null\n private smallTail: Node<K, V> | null = null\n private smallSize = 0\n\n private mainHead: Node<K, V> | null = null\n private mainTail: Node<K, V> | null = null\n private mainSize = 0\n\n private readonly maxSize: number\n private readonly smallLimit: number\n private readonly mainLimit: number\n private readonly ghostLimit: number\n\n constructor(maxSize: number) {\n this.maxSize = maxSize\n this.smallLimit = Math.max(1, Math.floor(maxSize * 0.1))\n this.mainLimit = maxSize - this.smallLimit\n this.ghostLimit = this.mainLimit\n }\n\n get size(): number {\n return this.map.size\n }\n\n get(key: K): V | undefined {\n const node = this.map.get(key)\n if (!node) return undefined\n\n node.freq = Math.min(node.freq + 1, 3)\n return node.value\n }\n\n set(key: K, value: V): this {\n const existing = this.map.get(key)\n\n if (existing) {\n existing.value = value\n return this\n }\n\n if (this.ghost.has(key)) {\n this.ghost.delete(key)\n const node = this.createNode(key, value, 'main')\n this.map.set(key, node)\n this.pushMain(node)\n\n if (this.mainSize > this.mainLimit) this.evictMain()\n return this\n }\n\n const node = this.createNode(key, value, 'small')\n this.map.set(key, node)\n this.pushSmall(node)\n\n if (this.size > this.maxSize) {\n if (this.smallSize > this.smallLimit) this.evictSmall()\n else this.evictMain()\n }\n\n return this\n }\n\n has(key: K): boolean {\n return this.map.has(key)\n }\n\n delete(key: K): boolean {\n const node = this.map.get(key)\n if (!node) return false\n\n this.map.delete(key)\n this.removeNode(node)\n return true\n }\n\n clear(): void {\n this.map.clear()\n this.ghost.clear()\n this.smallHead = this.smallTail = null\n this.mainHead = this.mainTail = null\n this.smallSize = this.mainSize = 0\n }\n\n keys(): MapIterator<K> {\n return withDispose(\n (function* (self: BoundedCache<K, V>) {\n for (const key of self.map.keys()) yield key\n })(this),\n )\n }\n\n values(): MapIterator<V> {\n return withDispose(\n (function* (self: BoundedCache<K, V>) {\n for (const node of self.map.values()) yield node.value\n })(this),\n )\n }\n\n entries(): MapIterator<[K, V]> {\n return withDispose(\n (function* (self: BoundedCache<K, V>) {\n for (const [key, node] of self.map.entries())\n yield [key, node.value] as [K, V]\n })(this),\n )\n }\n\n forEach(\n callbackfn: (value: V, key: K, map: Map<K, V>) => void,\n thisArg?: any,\n ): void {\n for (const [key, node] of this.map.entries()) {\n callbackfn.call(thisArg, node.value, key, this)\n }\n }\n\n [Symbol.iterator](): MapIterator<[K, V]> {\n return this.entries()\n }\n\n get [Symbol.toStringTag](): string {\n return 'BoundedCache'\n }\n\n private createNode(key: K, value: V, queue: 'small' | 'main'): Node<K, V> {\n return { key, value, freq: 0, queue, prev: null, next: null }\n }\n\n private pushSmall(node: Node<K, V>): void {\n node.next = this.smallHead\n node.prev = null\n\n if (this.smallHead) this.smallHead.prev = node\n else this.smallTail = node\n\n this.smallHead = node\n this.smallSize++\n }\n\n private pushMain(node: Node<K, V>): void {\n node.next = this.mainHead\n node.prev = null\n\n if (this.mainHead) this.mainHead.prev = node\n else this.mainTail = node\n\n this.mainHead = node\n this.mainSize++\n }\n\n private popSmall(): Node<K, V> | null {\n if (!this.smallTail) return null\n\n const node = this.smallTail\n this.smallTail = node.prev\n\n if (this.smallTail) this.smallTail.next = null\n else this.smallHead = null\n\n node.prev = null\n node.next = null\n this.smallSize--\n return node\n }\n\n private popMain(): Node<K, V> | null {\n if (!this.mainTail) return null\n\n const node = this.mainTail\n this.mainTail = node.prev\n\n if (this.mainTail) this.mainTail.next = null\n else this.mainHead = null\n\n node.prev = null\n node.next = null\n this.mainSize--\n return node\n }\n\n private removeNode(node: Node<K, V>): void {\n this.unlinkNode(node)\n\n if (node.queue === 'small') {\n if (node === this.smallHead) this.smallHead = node.next\n if (node === this.smallTail) this.smallTail = node.prev\n this.smallSize--\n } else {\n if (node === this.mainHead) this.mainHead = node.next\n if (node === this.mainTail) this.mainTail = node.prev\n this.mainSize--\n }\n\n node.prev = null\n node.next = null\n }\n\n private unlinkNode(node: Node<K, V>): void {\n if (node.prev) node.prev.next = node.next\n if (node.next) node.next.prev = node.prev\n }\n\n private shouldPromoteFromSmall(node: Node<K, V>): boolean {\n return node.freq > 1\n }\n\n private shouldRetryInMain(node: Node<K, V>): boolean {\n return node.freq >= 1\n }\n\n private promoteToMain(node: Node<K, V>): void {\n node.queue = 'main'\n this.pushMain(node)\n }\n\n private addToGhost(key: K): void {\n this.ghost.add(key)\n\n if (this.ghost.size <= this.ghostLimit) return\n\n const firstGhost = this.ghost.values().next().value\n if (firstGhost !== undefined) this.ghost.delete(firstGhost)\n }\n\n private evictFromCache(node: Node<K, V>): void {\n this.map.delete(node.key)\n }\n\n private evictSmall(): void {\n while (this.smallSize > 0) {\n const node = this.popSmall()\n if (!node) return\n\n if (this.shouldPromoteFromSmall(node)) {\n this.promoteToMain(node)\n\n if (this.mainSize > this.mainLimit) {\n this.evictMain()\n return\n }\n\n continue\n }\n\n this.evictFromCache(node)\n this.addToGhost(node.key)\n return\n }\n }\n\n private evictMain(): void {\n while (this.mainSize > 0) {\n const node = this.popMain()\n if (!node) return\n\n if (this.shouldRetryInMain(node)) {\n node.freq--\n this.pushMain(node)\n continue\n }\n\n this.evictFromCache(node)\n return\n }\n }\n}\n\nexport function createBoundedCache<K, V>(maxSize: number): Map<K, V> {\n return new BoundedCache<K, V>(maxSize)\n}\n","import type { Model } from './types'\nimport type { SqlDialect } from './sql-builder-dialect'\nimport { buildTableReference, quote } from './builder/shared/sql-utils'\nimport { SQL_TEMPLATES } from './builder/shared/constants'\nimport { isPlainObject } from './builder/shared/validators/type-guards'\nimport { normalizeValue } from './utils/normalize-value'\nimport { makeAlias } from './query-cache'\n\ninterface SqlResult {\n sql: string\n params: unknown[]\n}\n\nfunction getIdField(model: Model): { name: string; dbName: string } | null {\n const idField = model.fields.find((f) => f.name === 'id' && !f.isRelation)\n if (!idField) return null\n return {\n name: 'id',\n dbName: idField.dbName || 'id',\n }\n}\n\nfunction buildColumnList(model: Model, alias: string): string {\n const cols: string[] = []\n for (const f of model.fields) {\n if (f.isRelation) continue\n if (f.name.startsWith('@') || f.name.startsWith('//')) continue\n const dbName = f.dbName || f.name\n if (dbName !== f.name) {\n cols.push(`${alias}.${quote(dbName)} AS ${quote(f.name)}`)\n } else {\n cols.push(`${alias}.${quote(dbName)}`)\n }\n }\n return cols.join(', ')\n}\n\nfunction getTableAndAlias(\n model: Model,\n dialect: SqlDialect,\n): { tableName: string; alias: string } {\n const tableName = buildTableReference(\n SQL_TEMPLATES.PUBLIC_SCHEMA,\n model.tableName,\n dialect,\n )\n const alias = makeAlias(model.tableName)\n return { tableName, alias }\n}\n\nfunction buildSimpleQuery(\n model: Model,\n dialect: SqlDialect,\n where: string,\n params: unknown[],\n suffix: string = '',\n): SqlResult {\n const { tableName, alias } = getTableAndAlias(model, dialect)\n const columns = buildColumnList(model, alias)\n const sql = `SELECT ${columns} FROM ${tableName} ${alias} ${where}${suffix}`\n return { sql, params }\n}\n\nfunction norm(value: unknown): unknown {\n return normalizeValue(value)\n}\n\nfunction isScalar(value: unknown): boolean {\n return value !== null && typeof value !== 'object'\n}\n\nfunction tryFindUniqueById(\n model: Model,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult | null {\n const where = args.where\n if (\n !isPlainObject(where) ||\n Object.keys(where).length !== 1 ||\n !('id' in where) ||\n !isScalar(where.id) ||\n args.select ||\n args.include\n ) {\n return null\n }\n\n const idField = getIdField(model)\n if (!idField) return null\n\n const { alias } = getTableAndAlias(model, dialect)\n\n const whereClause =\n dialect === 'sqlite'\n ? `WHERE ${alias}.${quote(idField.dbName)} = ?`\n : `WHERE ${alias}.${quote(idField.dbName)} = $1`\n\n return buildSimpleQuery(\n model,\n dialect,\n whereClause,\n [norm(where.id)],\n ' LIMIT 1',\n )\n}\n\nfunction tryFindManyById(\n model: Model,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult | null {\n const where = args.where\n if (\n !isPlainObject(where) ||\n Object.keys(where).length !== 1 ||\n !('id' in where) ||\n !isScalar(where.id) ||\n args.select ||\n args.include ||\n args.orderBy ||\n args.take ||\n args.skip ||\n args.distinct ||\n args.cursor\n ) {\n return null\n }\n\n const idField = getIdField(model)\n if (!idField) return null\n\n const { alias } = getTableAndAlias(model, dialect)\n\n const whereClause =\n dialect === 'sqlite'\n ? `WHERE ${alias}.${quote(idField.dbName)} = ?`\n : `WHERE ${alias}.${quote(idField.dbName)} = $1`\n\n return buildSimpleQuery(model, dialect, whereClause, [norm(where.id)])\n}\n\nfunction tryCountAll(\n model: Model,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult | null {\n const where = args.where\n if ((where && Object.keys(where).length > 0) || args.select || args.skip) {\n return null\n }\n\n const { tableName, alias } = getTableAndAlias(model, dialect)\n const sql = `SELECT COUNT(*) AS ${quote('_count._all')} FROM ${tableName} ${alias}`\n return { sql, params: [] }\n}\n\nfunction tryFindManyWithLimit(\n model: Model,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult | null {\n const where = args.where\n if (\n (where && Object.keys(where).length > 0) ||\n args.select ||\n args.include ||\n args.orderBy ||\n args.skip ||\n args.distinct ||\n args.cursor ||\n typeof args.take !== 'number' ||\n !Number.isInteger(args.take) ||\n args.take <= 0\n ) {\n return null\n }\n\n const { tableName, alias } = getTableAndAlias(model, dialect)\n const columns = buildColumnList(model, alias)\n const sql =\n dialect === 'sqlite'\n ? `SELECT ${columns} FROM ${tableName} ${alias} LIMIT ?`\n : `SELECT ${columns} FROM ${tableName} ${alias} LIMIT $1`\n\n return { sql, params: [norm(args.take)] }\n}\n\nfunction tryFindFirstBySingleField(\n model: Model,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult | null {\n const where = args.where\n if (\n !isPlainObject(where) ||\n Object.keys(where).length !== 1 ||\n args.select ||\n args.include ||\n args.orderBy ||\n args.skip\n ) {\n return null\n }\n\n const field = Object.keys(where)[0]\n const value = where[field]\n if (value === null || typeof value === 'object') {\n return null\n }\n\n const fieldDef = model.fields.find((f) => f.name === field)\n if (!fieldDef || fieldDef.isRelation) {\n return null\n }\n\n const { alias } = getTableAndAlias(model, dialect)\n const columnName = fieldDef.dbName || field\n\n const whereClause =\n dialect === 'sqlite'\n ? `WHERE ${alias}.${quote(columnName)} = ?`\n : `WHERE ${alias}.${quote(columnName)} = $1`\n\n return buildSimpleQuery(\n model,\n dialect,\n whereClause,\n [norm(value)],\n ' LIMIT 1',\n )\n}\n\nfunction tryFindManyBySingleField(\n model: Model,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult | null {\n const where = args.where\n if (\n !isPlainObject(where) ||\n Object.keys(where).length !== 1 ||\n args.select ||\n args.include ||\n args.orderBy ||\n args.take ||\n args.skip ||\n args.distinct ||\n args.cursor\n ) {\n return null\n }\n\n const field = Object.keys(where)[0]\n const value = where[field]\n if (value === null || typeof value === 'object') {\n return null\n }\n\n const fieldDef = model.fields.find((f) => f.name === field)\n if (!fieldDef || fieldDef.isRelation) {\n return null\n }\n\n const { alias } = getTableAndAlias(model, dialect)\n const columnName = fieldDef.dbName || field\n\n const whereClause =\n dialect === 'sqlite'\n ? `WHERE ${alias}.${quote(columnName)} = ?`\n : `WHERE ${alias}.${quote(columnName)} = $1`\n\n return buildSimpleQuery(model, dialect, whereClause, [norm(value)])\n}\n\nfunction tryFindManyAll(\n model: Model,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult | null {\n const where = args.where\n if (\n (where && Object.keys(where).length > 0) ||\n args.select ||\n args.include ||\n args.orderBy ||\n args.take !== undefined ||\n args.skip !== undefined ||\n args.distinct ||\n args.cursor\n ) {\n return null\n }\n\n const { tableName, alias } = getTableAndAlias(model, dialect)\n const columns = buildColumnList(model, alias)\n const sql = `SELECT ${columns} FROM ${tableName} ${alias}`\n return { sql, params: [] }\n}\n\nexport function tryFastPath(\n model: Model,\n method: string,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult | null {\n if (method === 'findUnique') {\n return tryFindUniqueById(model, args, dialect)\n }\n\n if (method === 'count') {\n return tryCountAll(model, args, dialect)\n }\n\n if (method === 'findFirst') {\n return tryFindFirstBySingleField(model, args, dialect)\n }\n\n if (method === 'findMany') {\n return (\n tryFindManyById(model, args, dialect) ||\n tryFindManyWithLimit(model, args, dialect) ||\n tryFindManyBySingleField(model, args, dialect) ||\n tryFindManyAll(model, args, dialect)\n )\n }\n\n return null\n}\n","import type { Model, PrismaMethod } from './types'\nimport type { SqlDialect } from './sql-builder-dialect'\nimport type { ParamMap } 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 { createBoundedCache } from './utils/s3-fifo'\nimport { tryFastPath } from './fast-path'\n\ninterface SqlResult {\n sql: string\n params: unknown[]\n paramMappings?: readonly ParamMap[]\n requiresReduction?: boolean\n includeSpec?: Record<string, any>\n}\n\ninterface CacheStats {\n hits: number\n misses: number\n size: number\n}\n\nclass QueryCacheStats {\n #hits = 0\n #misses = 0\n\n hit(): void {\n this.#hits++\n }\n\n miss(): void {\n this.#misses++\n }\n\n reset(): void {\n this.#hits = 0\n this.#misses = 0\n }\n\n get snapshot(): CacheStats {\n return Object.freeze({\n hits: this.#hits,\n misses: this.#misses,\n size: queryCache.size,\n })\n }\n}\n\nexport const queryCache = createBoundedCache<string, SqlResult>(1000)\n\nexport const queryCacheStats = new QueryCacheStats()\n\nexport function 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\ntype SqliteScanMode = 'normal' | 'single' | 'double'\n\ninterface ScanState {\n mode: SqliteScanMode\n position: number\n output: string\n reorderedParams: unknown[]\n}\n\nfunction handleSingleQuote(sql: string, state: ScanState): ScanState {\n const n = sql.length\n let i = state.position\n let out = state.output + sql[i]\n i++\n\n while (i < n) {\n out += sql[i]\n if (sql.charCodeAt(i) === 39) {\n if (i + 1 < n && sql.charCodeAt(i + 1) === 39) {\n out += sql[i + 1]\n i += 2\n continue\n }\n return { ...state, mode: 'normal', position: i + 1, output: out }\n }\n i++\n }\n\n return { ...state, position: i, output: out }\n}\n\nfunction handleDoubleQuote(sql: string, state: ScanState): ScanState {\n const n = sql.length\n let i = state.position\n let out = state.output + sql[i]\n i++\n\n while (i < n) {\n out += sql[i]\n if (sql.charCodeAt(i) === 34) {\n if (i + 1 < n && sql.charCodeAt(i + 1) === 34) {\n out += sql[i + 1]\n i += 2\n continue\n }\n return { ...state, mode: 'normal', position: i + 1, output: out }\n }\n i++\n }\n\n return { ...state, position: i, output: out }\n}\n\nfunction extractParameterNumber(\n sql: string,\n startPos: number,\n): { num: number; nextPos: number } | null {\n const n = sql.length\n let j = startPos + 1\n let num = 0\n let hasDigit = false\n\n while (j < n) {\n const d = sql.charCodeAt(j)\n if (d >= 48 && d <= 57) {\n num = num * 10 + (d - 48)\n hasDigit = true\n j++\n } else {\n break\n }\n }\n\n if (hasDigit && num >= 1) {\n return { num, nextPos: j }\n }\n\n return null\n}\n\nfunction handleParameterSubstitution(\n sql: string,\n params: readonly unknown[],\n state: ScanState,\n): ScanState {\n const result = extractParameterNumber(sql, state.position)\n\n if (result) {\n return {\n ...state,\n position: result.nextPos,\n output: state.output + '?',\n reorderedParams: [...state.reorderedParams, params[result.num - 1]],\n }\n }\n\n return {\n ...state,\n position: state.position + 1,\n output: state.output + sql[state.position],\n }\n}\n\nfunction toSqliteParams(sql: string, params: readonly unknown[]): SqlResult {\n const n = sql.length\n let state: ScanState = {\n mode: 'normal',\n position: 0,\n output: '',\n reorderedParams: [],\n }\n\n while (state.position < n) {\n const ch = sql.charCodeAt(state.position)\n\n if (state.mode === 'single') {\n state = handleSingleQuote(sql, state)\n continue\n }\n\n if (state.mode === 'double') {\n state = handleDoubleQuote(sql, state)\n continue\n }\n\n if (ch === 39) {\n state = { ...state, mode: 'single' }\n continue\n }\n\n if (ch === 34) {\n state = { ...state, mode: 'double' }\n continue\n }\n\n if (ch === 36) {\n state = handleParameterSubstitution(sql, params, state)\n continue\n }\n\n state = {\n ...state,\n position: state.position + 1,\n output: state.output + sql[state.position],\n }\n }\n\n return { sql: state.output, params: state.reorderedParams }\n}\n\nfunction canonicalizeReplacer(key: string, value: unknown): unknown {\n if (typeof value === 'bigint') return `__bigint__${value.toString()}`\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const obj = value as Record<string, unknown>\n const sorted: Record<string, unknown> = {}\n for (const k of Object.keys(obj).sort()) {\n sorted[k] = obj[k]\n }\n return sorted\n }\n return value\n}\n\nfunction canonicalizeQuery(\n modelName: string,\n method: PrismaMethod,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): string {\n if (!args) return `${dialect}:${modelName}:${method}:{}`\n return `${dialect}:${modelName}:${method}:${JSON.stringify(args, canonicalizeReplacer)}`\n}\n\nfunction buildSQLFull(\n model: Model,\n models: Model[],\n method: PrismaMethod,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult {\n const tableName = buildTableReference(\n SQL_TEMPLATES.PUBLIC_SCHEMA,\n model.tableName,\n dialect,\n )\n const alias = makeAlias(model.tableName)\n\n const whereResult = buildWhereClause(\n (args.where || {}) as Record<string, unknown>,\n {\n alias,\n schemaModels: models,\n model,\n path: ['where'],\n isSubquery: false,\n dialect,\n },\n )\n\n const withMethod = { ...args, method }\n\n let result: {\n sql: string\n params: readonly unknown[]\n paramMappings?: readonly ParamMap[]\n requiresReduction?: boolean\n includeSpec?: Record<string, any>\n }\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 const sqlResult =\n dialect === 'sqlite'\n ? toSqliteParams(result.sql, result.params)\n : { sql: result.sql, params: [...result.params] }\n\n return {\n ...sqlResult,\n paramMappings: result.paramMappings,\n requiresReduction: result.requiresReduction,\n includeSpec: result.includeSpec,\n }\n}\n\nexport function buildSQLWithCache(\n model: Model,\n models: Model[],\n method: PrismaMethod,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult {\n const cacheKey = canonicalizeQuery(model.name, method, args, dialect)\n\n const cached = queryCache.get(cacheKey)\n if (cached) {\n queryCacheStats.hit()\n return {\n sql: cached.sql,\n params: [...cached.params],\n paramMappings: cached.paramMappings,\n requiresReduction: cached.requiresReduction,\n includeSpec: cached.includeSpec,\n }\n }\n\n queryCacheStats.miss()\n\n const fastResult = tryFastPath(model, method, args, dialect)\n if (fastResult) {\n queryCache.set(cacheKey, {\n sql: fastResult.sql,\n params: [...fastResult.params],\n })\n return fastResult\n }\n\n const result = buildSQLFull(model, models, method, args, dialect)\n\n queryCache.set(cacheKey, {\n sql: result.sql,\n params: [...result.params],\n paramMappings: result.paramMappings,\n requiresReduction: result.requiresReduction,\n includeSpec: result.includeSpec,\n })\n\n return result\n}\n","import { PrismaMethod } from './types'\n\nexport function transformQueryResults(\n method: string,\n results: unknown,\n): unknown {\n if (method === 'findFirst' || method === 'findUnique') {\n if (Array.isArray(results)) {\n return results[0] ?? null\n }\n }\n\n if (method === 'count') {\n if (Array.isArray(results) && results.length > 0) {\n const row = results[0]\n\n // If the row is already a number or bigint, return it\n if (typeof row === 'number' || typeof row === 'bigint') {\n return row\n }\n\n // If it's an object with _count._all, extract the simple count\n if (row && typeof row === 'object' && '_count._all' in row) {\n return (row as any)['_count._all']\n }\n\n // Otherwise return the row as-is (for count with select)\n return row\n }\n return 0\n }\n\n return results\n}\n","import type { Model, PrismaMethod } from './types'\nimport type { SqlDialect } from './sql-builder-dialect'\n\nimport { buildSQLWithCache } from './query-cache'\nimport { transformQueryResults } from './result-transformers'\nimport { assertSafeAlias } from './builder/shared/sql-utils'\n\nexport interface BatchQuery {\n model: string\n method: PrismaMethod\n args?: Record<string, unknown>\n}\n\nexport interface BatchCountQuery {\n model: string\n method: 'count'\n args?: { where?: Record<string, unknown> }\n}\n\nexport interface BatchResult {\n sql: string\n params: unknown[]\n}\n\nfunction quoteBatchIdent(id: string): string {\n const raw = String(id)\n assertSafeAlias(raw)\n return `\"${raw.replace(/\"/g, '\"\"')}\"`\n}\n\nfunction makeBatchAlias(i: number): string {\n return `k${i}`\n}\n\ntype ScanMode =\n | 'normal'\n | 'single'\n | 'double'\n | 'lineComment'\n | 'blockComment'\n | 'dollar'\n\ninterface ScanState {\n mode: ScanMode\n dollarTag: string | null\n}\n\ninterface ProcessResult {\n consumed: number\n output: string\n newState?: ScanState\n shouldExitMode?: boolean\n}\n\nfunction isDigit(charCode: number): boolean {\n return charCode >= 48 && charCode <= 57\n}\n\nfunction isAlphaNumericOrUnderscore(charCode: number): boolean {\n return (\n isDigit(charCode) ||\n (charCode >= 65 && charCode <= 90) ||\n (charCode >= 97 && charCode <= 122) ||\n charCode === 95\n )\n}\n\nfunction readDollarTag(s: string, pos: number, n: number): string | null {\n if (s.charCodeAt(pos) !== 36) return null\n let j = pos + 1\n while (j < n && isAlphaNumericOrUnderscore(s.charCodeAt(j))) {\n j++\n }\n if (j < n && s.charCodeAt(j) === 36 && j > pos) {\n return s.slice(pos, j + 1)\n }\n if (pos + 1 < n && s.charCodeAt(pos + 1) === 36) {\n return '$$'\n }\n return null\n}\n\nfunction parseParamPlaceholder(\n s: string,\n i: number,\n n: number,\n replace: (oldIndex: number) => string,\n): { consumed: number; output: string } {\n let j = i + 1\n if (j >= n) {\n return { consumed: 1, output: s[i] }\n }\n\n const c1 = s.charCodeAt(j)\n if (!isDigit(c1)) {\n return { consumed: 1, output: s[i] }\n }\n\n while (j < n && isDigit(s.charCodeAt(j))) {\n j++\n }\n\n const numStr = s.slice(i + 1, j)\n const oldIndex = Number(numStr)\n if (!Number.isInteger(oldIndex) || oldIndex < 1) {\n throw new Error(`Invalid param placeholder: $${numStr}`)\n }\n\n return { consumed: j - i, output: replace(oldIndex) }\n}\n\nfunction handleDollarInNormalMode(\n s: string,\n i: number,\n n: number,\n state: ScanState,\n replace: (oldIndex: number) => string,\n): ProcessResult {\n const tag = readDollarTag(s, i, n)\n if (tag) {\n return {\n consumed: tag.length,\n output: tag,\n newState: { mode: 'dollar', dollarTag: tag },\n }\n }\n\n const placeholder = parseParamPlaceholder(s, i, n, replace)\n return { ...placeholder, newState: state }\n}\n\nfunction handleCommentStart(\n s: string,\n i: number,\n n: number,\n ch: number,\n): ProcessResult | null {\n if (ch === 45 && i + 1 < n && s.charCodeAt(i + 1) === 45) {\n return {\n consumed: 2,\n output: '--',\n newState: { mode: 'lineComment', dollarTag: null },\n }\n }\n\n if (ch === 47 && i + 1 < n && s.charCodeAt(i + 1) === 42) {\n return {\n consumed: 2,\n output: '/*',\n newState: { mode: 'blockComment', dollarTag: null },\n }\n }\n\n return null\n}\n\nfunction processNormalMode(\n s: string,\n i: number,\n n: number,\n state: ScanState,\n replace: (oldIndex: number) => string,\n): ProcessResult {\n const ch = s.charCodeAt(i)\n\n if (ch === 39) {\n return {\n consumed: 1,\n output: s[i],\n newState: { mode: 'single', dollarTag: null },\n }\n }\n\n if (ch === 34) {\n return {\n consumed: 1,\n output: s[i],\n newState: { mode: 'double', dollarTag: null },\n }\n }\n\n const commentResult = handleCommentStart(s, i, n, ch)\n if (commentResult) return commentResult\n\n if (ch === 36) {\n return handleDollarInNormalMode(s, i, n, state, replace)\n }\n\n return { consumed: 1, output: s[i], newState: state }\n}\n\nfunction processQuoteMode(\n s: string,\n i: number,\n n: number,\n quoteChar: number,\n): ProcessResult {\n const ch = s.charCodeAt(i)\n\n if (ch === quoteChar) {\n if (i + 1 < n && s.charCodeAt(i + 1) === quoteChar) {\n return { consumed: 2, output: s[i] + s[i + 1], shouldExitMode: false }\n }\n return { consumed: 1, output: s[i], shouldExitMode: true }\n }\n\n return { consumed: 1, output: s[i], shouldExitMode: false }\n}\n\nfunction processBlockCommentMode(\n s: string,\n i: number,\n n: number,\n): ProcessResult {\n const ch = s.charCodeAt(i)\n\n if (ch === 42 && i + 1 < n && s.charCodeAt(i + 1) === 47) {\n return { consumed: 2, output: '*/', shouldExitMode: true }\n }\n\n return { consumed: 1, output: s[i], shouldExitMode: false }\n}\n\nfunction processDollarMode(\n s: string,\n i: number,\n dollarTag: string,\n): ProcessResult {\n if (s.slice(i, i + dollarTag.length) === dollarTag) {\n return {\n consumed: dollarTag.length,\n output: dollarTag,\n shouldExitMode: true,\n }\n }\n\n return { consumed: 1, output: s[i], shouldExitMode: false }\n}\n\nfunction processLineCommentMode(ch: number): { shouldExitMode: boolean } {\n return { shouldExitMode: ch === 10 }\n}\n\nfunction processCharacter(\n s: string,\n i: number,\n n: number,\n state: ScanState,\n replace: (oldIndex: number) => string,\n): ProcessResult {\n const ch = s.charCodeAt(i)\n\n switch (state.mode) {\n case 'normal':\n return processNormalMode(s, i, n, state, replace)\n case 'single':\n return processQuoteMode(s, i, n, 39)\n case 'double':\n return processQuoteMode(s, i, n, 34)\n case 'lineComment': {\n const result = processLineCommentMode(ch)\n return {\n consumed: 1,\n output: s[i],\n shouldExitMode: result.shouldExitMode,\n }\n }\n case 'blockComment':\n return processBlockCommentMode(s, i, n)\n case 'dollar':\n return state.dollarTag\n ? processDollarMode(s, i, state.dollarTag)\n : { consumed: 1, output: s[i], shouldExitMode: false }\n default:\n return { consumed: 1, output: s[i], shouldExitMode: false }\n }\n}\n\nfunction updateStateAfterProcessing(\n currentState: ScanState,\n result: ProcessResult,\n): ScanState {\n if (result.newState) {\n return result.newState\n }\n\n if (result.shouldExitMode) {\n return { mode: 'normal', dollarTag: null }\n }\n\n return currentState\n}\n\nfunction replacePgPlaceholders(\n sql: string,\n replace: (oldIndex: number) => string,\n): string {\n const s = String(sql)\n const n = s.length\n let i = 0\n let state: ScanState = { mode: 'normal', dollarTag: null }\n let out = ''\n\n while (i < n) {\n const result = processCharacter(s, i, n, state, replace)\n out += result.output\n i += result.consumed\n state = updateStateAfterProcessing(state, result)\n }\n\n return out\n}\n\nfunction containsPgPlaceholder(sql: string): boolean {\n let found = false\n replacePgPlaceholders(sql, (oldIndex) => {\n found = true\n return `$${oldIndex}`\n })\n return found\n}\n\nfunction reindexParams(\n sql: string,\n params: readonly unknown[],\n offset: number,\n): { sql: string; params: unknown[] } {\n if (!Number.isInteger(offset) || offset < 0) {\n throw new Error(`Invalid param offset: ${offset}`)\n }\n\n const newParams: unknown[] = []\n const paramMap = new Map<number, number>()\n\n const reindexed = replacePgPlaceholders(sql, (oldIndex) => {\n const existing = paramMap.get(oldIndex)\n if (existing !== undefined) return `$${existing}`\n\n const pos = oldIndex - 1\n if (pos >= params.length) {\n throw new Error(\n `Param placeholder $${oldIndex} exceeds params length (${params.length})`,\n )\n }\n\n const newIndex = offset + newParams.length + 1\n paramMap.set(oldIndex, newIndex)\n newParams.push(params[pos])\n return `$${newIndex}`\n })\n\n return { sql: reindexed, params: newParams }\n}\n\nfunction wrapQueryForMethod(\n method: PrismaMethod,\n cteName: string,\n resultAlias: string,\n): string {\n const outKey = quoteBatchIdent(resultAlias)\n\n switch (method) {\n case 'findMany':\n case 'groupBy':\n return `(SELECT COALESCE(json_agg(row_to_json(t)), '[]'::json) FROM ${cteName} t) AS ${outKey}`\n case 'findFirst':\n case 'findUnique':\n return `(SELECT row_to_json(t) FROM ${cteName} t LIMIT 1) AS ${outKey}`\n case 'count':\n return `(SELECT * FROM ${cteName}) AS ${outKey}`\n case 'aggregate':\n return `(SELECT row_to_json(t) FROM ${cteName} t) AS ${outKey}`\n default:\n throw new Error(`Unsupported batch method: ${method}`)\n }\n}\n\nfunction isAllCountQueries(\n queries: Record<string, BatchQuery>,\n keys: string[],\n) {\n for (const key of keys) {\n if (queries[key]?.method !== 'count') return false\n }\n return true\n}\n\nfunction looksTooComplexForFilter(sql: string): boolean {\n const s = sql.toLowerCase()\n const complexKeywords = [\n ' group by ',\n ' having ',\n ' union ',\n ' intersect ',\n ' except ',\n ' window ',\n ' distinct ',\n ]\n return complexKeywords.some((keyword) => s.includes(keyword))\n}\n\nfunction skipWhitespace(s: string, i: number): number {\n while (i < s.length && /\\s/.test(s[i])) {\n i++\n }\n return i\n}\n\nfunction matchKeyword(s: string, i: number, keyword: string): number {\n const lower = s.slice(i).toLowerCase()\n if (!lower.startsWith(keyword)) return -1\n const endPos = i + keyword.length\n if (endPos < s.length && /[a-z0-9_]/i.test(s[endPos])) return -1\n return endPos\n}\n\nfunction parseQuotedIdentifier(\n s: string,\n i: number,\n): { value: string; endPos: number } | null {\n let j = i + 1\n while (j < s.length) {\n if (s[j] === '\"') {\n if (j + 1 < s.length && s[j + 1] === '\"') {\n j += 2\n continue\n }\n return { value: s.slice(i, j + 1), endPos: j + 1 }\n }\n j++\n }\n return null\n}\n\nfunction parseUnquotedIdentifier(\n s: string,\n i: number,\n): { value: string; endPos: number } | null {\n if (!/[a-z_]/i.test(s[i])) return null\n\n let j = i\n while (j < s.length && /[a-z0-9_.]/i.test(s[j])) {\n j++\n }\n return { value: s.slice(i, j), endPos: j }\n}\n\nfunction parseIdentifier(\n s: string,\n i: number,\n): { value: string; endPos: number } | null {\n if (i >= s.length) return null\n\n if (s[i] === '\"') {\n return parseQuotedIdentifier(s, i)\n }\n\n return parseUnquotedIdentifier(s, i)\n}\n\nfunction findFromClauseEnd(s: string, fromStart: number): number {\n const lower = s.slice(fromStart).toLowerCase()\n const whereIdx = lower.indexOf(' where ')\n return whereIdx === -1 ? s.length : fromStart + whereIdx\n}\n\nfunction parseSimpleCountSql(\n sql: string,\n): { fromSql: string; whereSql: string | null } | null {\n const trimmed = sql.trim().replace(/;$/, '').trim()\n const lower = trimmed.toLowerCase()\n\n if (!lower.startsWith('select')) return null\n if (!lower.includes('count(*)')) return null\n if (looksTooComplexForFilter(trimmed)) return null\n\n let pos = matchKeyword(trimmed, 0, 'select')\n if (pos === -1) return null\n\n pos = skipWhitespace(trimmed, pos)\n\n const countMatch = trimmed.slice(pos).match(/^count\\(\\*\\)/i)\n if (!countMatch) return null\n pos += countMatch[0].length\n\n pos = skipWhitespace(trimmed, pos)\n\n const castMatch = trimmed.slice(pos).match(/^::\\s*\\w+/)\n if (castMatch) {\n pos += castMatch[0].length\n pos = skipWhitespace(trimmed, pos)\n }\n\n const asPos = matchKeyword(trimmed, pos, 'as')\n if (asPos === -1) return null\n pos = skipWhitespace(trimmed, asPos)\n\n const ident = parseIdentifier(trimmed, pos)\n if (!ident) return null\n pos = skipWhitespace(trimmed, ident.endPos)\n\n const fromPos = matchKeyword(trimmed, pos, 'from')\n if (fromPos === -1) return null\n pos = skipWhitespace(trimmed, fromPos)\n\n const fromEnd = findFromClauseEnd(trimmed, pos)\n const fromSql = trimmed.slice(pos, fromEnd).trim()\n if (!fromSql) return null\n\n let whereSql: string | null = null\n if (fromEnd < trimmed.length) {\n const adjustedPos = skipWhitespace(trimmed, fromEnd)\n const wherePos = matchKeyword(trimmed, adjustedPos, 'where')\n if (wherePos !== -1) {\n whereSql = trimmed.slice(skipWhitespace(trimmed, wherePos)).trim()\n }\n }\n\n return { fromSql, whereSql }\n}\n\ninterface CountQueryItem {\n key: string\n alias: string\n args: Record<string, unknown>\n}\n\ninterface CountSubquery {\n alias: string\n sql: string\n params: unknown[]\n keys: string[]\n aliases: string[]\n}\n\nfunction processCountQuery(\n item: CountQueryItem,\n model: Model,\n models: Model[],\n dialect: SqlDialect,\n sharedFrom: string | null,\n localParams: unknown[],\n): {\n expression: string\n reindexedParams: unknown[]\n sharedFrom: string\n} | null {\n const built = buildSQLWithCache(model, models, 'count', item.args, dialect)\n const parsed = parseSimpleCountSql(built.sql)\n\n if (!parsed) return null\n if (containsPgPlaceholder(parsed.fromSql)) return null\n\n const currentFrom = parsed.fromSql\n if (sharedFrom !== null && sharedFrom !== currentFrom) return null\n\n if (!parsed.whereSql) {\n if (built.params.length > 0) return null\n return {\n expression: `count(*) AS ${quoteBatchIdent(item.alias)}`,\n reindexedParams: [],\n sharedFrom: currentFrom,\n }\n }\n\n const re = reindexParams(parsed.whereSql, built.params, localParams.length)\n return {\n expression: `count(*) FILTER (WHERE ${re.sql}) AS ${quoteBatchIdent(item.alias)}`,\n reindexedParams: re.params,\n sharedFrom: currentFrom,\n }\n}\n\nfunction buildCountSubqueriesForModel(\n items: CountQueryItem[],\n model: Model,\n models: Model[],\n dialect: SqlDialect,\n aliasIndex: number,\n): CountSubquery | null {\n let sharedFrom: string | null = null\n const expressions: string[] = []\n const localParams: unknown[] = []\n const localKeys: string[] = []\n const localAliases: string[] = []\n\n for (const item of items) {\n const result = processCountQuery(\n item,\n model,\n models,\n dialect,\n sharedFrom,\n localParams,\n )\n\n if (!result) return null\n\n sharedFrom = result.sharedFrom\n expressions.push(result.expression)\n for (const param of result.reindexedParams) {\n localParams.push(param)\n }\n localKeys.push(item.key)\n localAliases.push(item.alias)\n }\n\n if (!sharedFrom) return null\n\n const alias = `m_${aliasIndex}`\n const subSql = `(SELECT ${expressions.join(', ')} FROM ${sharedFrom}) ${alias}`\n\n return {\n alias,\n sql: subSql,\n params: localParams,\n keys: localKeys,\n aliases: localAliases,\n }\n}\n\nfunction groupQueriesByModel(\n queries: Record<string, BatchQuery>,\n keys: string[],\n aliasesByKey: Map<string, string>,\n): Map<string, CountQueryItem[]> | null {\n const modelGroups = new Map<string, CountQueryItem[]>()\n\n for (const key of keys) {\n const q = queries[key]\n const alias = aliasesByKey.get(key)\n if (!alias) return null\n\n if (!modelGroups.has(q.model)) {\n modelGroups.set(q.model, [])\n }\n\n const items = modelGroups.get(q.model)\n if (items) {\n items.push({\n key,\n alias,\n args: q.args || {},\n })\n }\n }\n\n return modelGroups\n}\n\nfunction buildSubqueriesFromGroups(\n modelGroups: Map<string, CountQueryItem[]>,\n modelMap: Map<string, Model>,\n models: Model[],\n dialect: SqlDialect,\n): CountSubquery[] | null {\n const subqueries: CountSubquery[] = []\n let aliasIndex = 0\n\n for (const [modelName, items] of modelGroups) {\n const model = modelMap.get(modelName)\n if (!model) return null\n\n const subquery = buildCountSubqueriesForModel(\n items,\n model,\n models,\n dialect,\n aliasIndex++,\n )\n\n if (!subquery) return null\n subqueries.push(subquery)\n }\n\n return subqueries.length > 0 ? subqueries : null\n}\n\nfunction reindexSubqueries(subqueries: CountSubquery[]): {\n sql: string[]\n params: unknown[]\n} {\n let offset = 0\n const rewrittenSubs: string[] = []\n const finalParams: unknown[] = []\n\n for (const sq of subqueries) {\n const re = reindexParams(sq.sql, sq.params, offset)\n offset += re.params.length\n rewrittenSubs.push(re.sql)\n for (const p of re.params) {\n finalParams.push(p)\n }\n }\n\n return { sql: rewrittenSubs, params: finalParams }\n}\n\nfunction buildSelectParts(subqueries: CountSubquery[]): string[] {\n const selectParts: string[] = []\n\n for (const sq of subqueries) {\n for (const outAlias of sq.aliases) {\n selectParts.push(\n `${sq.alias}.${quoteBatchIdent(outAlias)} AS ${quoteBatchIdent(outAlias)}`,\n )\n }\n }\n\n return selectParts\n}\n\nfunction buildMergedCountBatchSql(\n queries: Record<string, BatchQuery>,\n keys: string[],\n aliasesByKey: Map<string, string>,\n modelMap: Map<string, Model>,\n models: Model[],\n dialect: SqlDialect,\n): (BatchResult & { keys: string[]; aliases: string[] }) | null {\n const modelGroups = groupQueriesByModel(queries, keys, aliasesByKey)\n if (!modelGroups) return null\n\n const subqueries = buildSubqueriesFromGroups(\n modelGroups,\n modelMap,\n models,\n dialect,\n )\n if (!subqueries) return null\n\n const { sql: rewrittenSubs, params: finalParams } =\n reindexSubqueries(subqueries)\n const selectParts = buildSelectParts(subqueries)\n\n const fromSql = rewrittenSubs.join(' CROSS JOIN ')\n const sql = `SELECT ${selectParts.join(', ')} FROM ${fromSql}`\n const aliases = keys.map((k) => aliasesByKey.get(k) ?? '')\n\n return { sql, params: finalParams, keys, aliases }\n}\n\nfunction buildAliasesForKeys(keys: string[]): {\n aliases: string[]\n aliasesByKey: Map<string, string>\n} {\n const aliases = new Array(keys.length)\n const aliasesByKey = new Map<string, string>()\n\n for (let i = 0; i < keys.length; i++) {\n const a = makeBatchAlias(i)\n aliases[i] = a\n aliasesByKey.set(keys[i], a)\n }\n\n return { aliases, aliasesByKey }\n}\n\nfunction buildRegularBatchQueries(\n queries: Record<string, BatchQuery>,\n keys: string[],\n aliases: string[],\n modelMap: Map<string, Model>,\n models: Model[],\n dialect: SqlDialect,\n): { sql: string; params: unknown[] } {\n const ctes: string[] = new Array(keys.length)\n const selects: string[] = new Array(keys.length)\n const allParams: unknown[] = []\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n const query = queries[key]\n\n const model = modelMap.get(query.model)\n if (!model) {\n throw new Error(\n `Model '${query.model}' not found. Available: ${[...modelMap.keys()].join(', ')}`,\n )\n }\n\n const { sql: querySql, params: queryParams } = buildSQLWithCache(\n model,\n models,\n query.method,\n query.args || {},\n dialect,\n )\n\n const { sql: reindexedSql, params: reindexedParams } = reindexParams(\n querySql,\n queryParams,\n allParams.length,\n )\n\n for (const p of reindexedParams) {\n allParams.push(p)\n }\n\n const cteName = `batch_${i}`\n ctes[i] = `${cteName} AS (${reindexedSql})`\n selects[i] = wrapQueryForMethod(query.method, cteName, aliases[i])\n }\n\n const sql = `WITH ${ctes.join(', ')} SELECT ${selects.join(', ')}`\n return { sql, params: allParams }\n}\n\nexport function buildBatchSql(\n queries: Record<string, BatchQuery>,\n modelMap: Map<string, Model>,\n models: Model[],\n dialect: SqlDialect,\n): BatchResult & { keys: string[]; aliases: string[] } {\n const keys = Object.keys(queries)\n\n if (keys.length === 0) {\n throw new Error('buildBatchSql requires at least one query')\n }\n\n if (dialect !== 'postgres') {\n throw new Error('Batch queries are only supported for postgres dialect')\n }\n\n const { aliases, aliasesByKey } = buildAliasesForKeys(keys)\n\n if (isAllCountQueries(queries, keys)) {\n const merged = buildMergedCountBatchSql(\n queries,\n keys,\n aliasesByKey,\n modelMap,\n models,\n dialect,\n )\n if (merged) return merged\n }\n\n const result = buildRegularBatchQueries(\n queries,\n keys,\n aliases,\n modelMap,\n models,\n dialect,\n )\n\n return { ...result, keys, aliases }\n}\n\nexport function buildBatchCountSql(\n queries: BatchCountQuery[],\n modelMap: Map<string, Model>,\n models: Model[],\n dialect: SqlDialect,\n): BatchResult {\n if (queries.length === 0) {\n throw new Error('buildBatchCountSql requires at least one query')\n }\n\n if (dialect !== 'postgres') {\n throw new Error(\n 'Batch count queries are only supported for postgres dialect',\n )\n }\n\n const ctes: string[] = new Array(queries.length)\n const selects: string[] = new Array(queries.length)\n const allParams: unknown[] = []\n\n for (let i = 0; i < queries.length; i++) {\n const query = queries[i]\n\n const model = modelMap.get(query.model)\n if (!model) {\n throw new Error(\n `Model '${query.model}' not found. Available: ${[...modelMap.keys()].join(', ')}`,\n )\n }\n\n const { sql: querySql, params: queryParams } = buildSQLWithCache(\n model,\n models,\n 'count',\n (query.args || {}) as Record<string, unknown>,\n dialect,\n )\n\n const { sql: reindexedSql, params: reindexedParams } = reindexParams(\n querySql,\n queryParams,\n allParams.length,\n )\n\n for (const p of reindexedParams) {\n allParams.push(p)\n }\n\n const cteName = `count_${i}`\n const resultKey = `count_${i}`\n ctes[i] = `${cteName} AS (${reindexedSql})`\n selects[i] = `(SELECT * FROM ${cteName}) AS ${quoteBatchIdent(resultKey)}`\n }\n\n const sql = `WITH ${ctes.join(', ')} SELECT ${selects.join(', ')}`\n return { sql, params: allParams }\n}\n\nfunction looksLikeJsonString(s: string): boolean {\n const t = s.trim()\n if (t.length === 0) return false\n const c0 = t.charCodeAt(0)\n const cN = t.charCodeAt(t.length - 1)\n if (c0 === 123 && cN === 125) return true\n if (c0 === 91 && cN === 93) return true\n if (t === 'null' || t === 'true' || t === 'false') return true\n return false\n}\n\nfunction parseJsonValue(value: unknown): unknown {\n if (typeof value !== 'string') return value\n if (!looksLikeJsonString(value)) return value\n try {\n return JSON.parse(value)\n } catch {\n return value\n }\n}\n\nfunction findCountKey(obj: Record<string, unknown>): string | undefined {\n if (Object.prototype.hasOwnProperty.call(obj, 'count')) {\n return 'count'\n }\n if (Object.prototype.hasOwnProperty.call(obj, '_count')) {\n return '_count'\n }\n return Object.keys(obj).find((k) => k.endsWith('_count'))\n}\n\nfunction extractNumericValue(value: unknown): number {\n if (typeof value === 'number') return value\n\n if (typeof value === 'bigint') {\n const n = Number(value)\n return Number.isSafeInteger(n) ? n : 0\n }\n\n if (typeof value === 'string') {\n const n = Number.parseInt(value, 10)\n return Number.isFinite(n) ? n : 0\n }\n\n return 0\n}\n\nfunction parseCountValue(value: unknown): number {\n if (value === null || value === undefined) return 0\n if (typeof value === 'number') return value\n if (typeof value === 'bigint' || typeof value === 'string') {\n return extractNumericValue(value)\n }\n\n if (typeof value === 'object') {\n const obj = value as Record<string, unknown>\n const countKey = findCountKey(obj)\n if (countKey !== undefined) {\n return extractNumericValue(obj[countKey])\n }\n }\n\n return 0\n}\n\nexport function parseBatchCountResults(\n row: Record<string, unknown>,\n count: number,\n): number[] {\n const results: number[] = []\n for (let i = 0; i < count; i++) {\n const key = `count_${i}`\n const value = row[key]\n results.push(parseCountValue(value))\n }\n return results\n}\n\nfunction isDateTimeFieldType(type: string): boolean {\n const base = type.replace(/\\[\\]|\\?/g, '')\n return base === 'DateTime'\n}\n\nfunction coerceDateTime(value: unknown): unknown {\n if (typeof value !== 'string') return value\n const d = new Date(value)\n if (Number.isFinite(d.getTime())) return d\n return value\n}\n\nfunction coerceFieldValue(\n value: unknown,\n field: {\n name: string\n type: string\n isRelation?: boolean\n relatedModel?: string\n },\n modelMap: Map<string, Model>,\n): { value: unknown; changed: boolean } {\n if (field.isRelation && field.relatedModel) {\n const relModel = modelMap.get(field.relatedModel)\n if (relModel) {\n const coerced = coerceBatchRowTypes(value, relModel, modelMap)\n return { value: coerced, changed: coerced !== value }\n }\n return { value, changed: false }\n }\n\n if (isDateTimeFieldType(field.type)) {\n const coerced = coerceDateTime(value)\n return { value: coerced, changed: coerced !== value }\n }\n\n return { value, changed: false }\n}\n\nfunction coerceBatchRowTypes(\n obj: unknown,\n model: Model | undefined,\n modelMap: Map<string, Model>,\n): unknown {\n if (!model || obj === null || obj === undefined) return obj\n\n if (Array.isArray(obj)) {\n return obj.map((item) => coerceBatchRowTypes(item, model, modelMap))\n }\n\n if (typeof obj !== 'object') return obj\n\n const record = obj as Record<string, unknown>\n const result: Record<string, unknown> = {}\n let changed = false\n\n for (const key in record) {\n if (!Object.prototype.hasOwnProperty.call(record, key)) continue\n\n const val = record[key]\n const field = model.fields.find((f) => f.name === key)\n\n if (!field) {\n result[key] = val\n continue\n }\n\n const coerced = coerceFieldValue(val, field, modelMap)\n result[key] = coerced.value\n if (coerced.changed) changed = true\n }\n\n return changed ? result : obj\n}\n\nfunction coerceBatchValue(\n value: unknown,\n method: PrismaMethod,\n modelName: string,\n modelMap?: Map<string, Model>,\n): unknown {\n if (!modelMap || method === 'count') return value\n\n const model = modelMap.get(modelName)\n if (!model) return value\n\n if (Array.isArray(value)) {\n return value.map((item) => coerceBatchRowTypes(item, model, modelMap))\n }\n\n if (value !== null && typeof value === 'object') {\n return coerceBatchRowTypes(value, model, modelMap)\n }\n\n return value\n}\n\nfunction coerceAggSubFields(\n inner: Record<string, unknown>,\n model: Model,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n let changed = false\n\n for (const fieldName in inner) {\n if (!Object.prototype.hasOwnProperty.call(inner, fieldName)) continue\n const fieldVal = inner[fieldName]\n const field = model.fields.find((f) => f.name === fieldName)\n\n if (field && isDateTimeFieldType(field.type)) {\n const coerced = coerceDateTime(fieldVal)\n result[fieldName] = coerced\n if (coerced !== fieldVal) changed = true\n } else {\n result[fieldName] = fieldVal\n }\n }\n\n return changed ? result : inner\n}\n\nfunction coerceAggregateResult(\n obj: unknown,\n modelName: string,\n modelMap?: Map<string, Model>,\n): unknown {\n if (!modelMap || obj === null || obj === undefined || typeof obj !== 'object')\n return obj\n\n const model = modelMap.get(modelName)\n if (!model) return obj\n\n const record = obj as Record<string, unknown>\n const result: Record<string, unknown> = {}\n let changed = false\n\n for (const key in record) {\n if (!Object.prototype.hasOwnProperty.call(record, key)) continue\n const val = record[key]\n\n if (\n (key === '_min' || key === '_max') &&\n val !== null &&\n val !== undefined &&\n typeof val === 'object'\n ) {\n const coerced = coerceAggSubFields(val as Record<string, unknown>, model)\n result[key] = coerced\n if (coerced !== val) changed = true\n } else {\n result[key] = val\n }\n }\n\n return changed ? result : obj\n}\n\nfunction coerceGroupByResults(\n arr: unknown,\n modelName: string,\n modelMap?: Map<string, Model>,\n): unknown {\n if (!modelMap || !Array.isArray(arr)) return arr\n\n const model = modelMap.get(modelName)\n if (!model) return arr\n\n return arr.map((item) => {\n if (item === null || item === undefined || typeof item !== 'object')\n return item\n\n const record = item as Record<string, unknown>\n const result: Record<string, unknown> = {}\n let changed = false\n\n for (const key in record) {\n if (!Object.prototype.hasOwnProperty.call(record, key)) continue\n const val = record[key]\n\n if (\n (key === '_min' || key === '_max') &&\n val !== null &&\n val !== undefined &&\n typeof val === 'object'\n ) {\n const coerced = coerceAggSubFields(\n val as Record<string, unknown>,\n model,\n )\n result[key] = coerced\n if (coerced !== val) changed = true\n } else {\n const field = model.fields.find((f) => f.name === key)\n if (field && isDateTimeFieldType(field.type)) {\n const coerced = coerceDateTime(val)\n result[key] = coerced\n if (coerced !== val) changed = true\n } else {\n result[key] = val\n }\n }\n }\n\n return changed ? result : item\n })\n}\n\nfunction parseBatchValue(\n rawValue: unknown,\n method: PrismaMethod,\n modelName: string,\n modelMap?: Map<string, Model>,\n): unknown {\n switch (method) {\n case 'findMany': {\n const parsed = parseJsonValue(rawValue)\n const arr = Array.isArray(parsed) ? parsed : []\n return coerceBatchValue(arr, 'findMany', modelName, modelMap)\n }\n case 'findFirst':\n case 'findUnique': {\n const parsed = parseJsonValue(rawValue)\n const val = parsed ?? null\n return val === null\n ? null\n : coerceBatchValue(val, method, modelName, modelMap)\n }\n case 'count': {\n return parseCountValue(rawValue)\n }\n case 'aggregate': {\n const parsed = parseJsonValue(rawValue)\n const obj = (parsed ?? {}) as Record<string, unknown>\n const transformed = transformQueryResults('aggregate', [obj])\n return coerceAggregateResult(transformed, modelName, modelMap)\n }\n case 'groupBy': {\n const parsed = parseJsonValue(rawValue)\n const arr = Array.isArray(parsed) ? parsed : []\n const transformed = transformQueryResults('groupBy', arr)\n return coerceGroupByResults(transformed, modelName, modelMap)\n }\n default:\n return rawValue\n }\n}\n\nexport function parseBatchResults(\n row: Record<string, unknown>,\n keys: string[],\n queries: Record<string, BatchQuery>,\n aliases?: string[],\n modelMap?: Map<string, Model>,\n): Record<string, unknown> {\n const results: Record<string, unknown> = {}\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n const columnKey = aliases?.[i] ?? key\n const rawValue = row[columnKey]\n const query = queries[key]\n\n results[key] = parseBatchValue(\n rawValue,\n query.method,\n query.model,\n modelMap,\n )\n }\n\n return results\n}\n","import type { Model, PrismaMethod } from './types'\nimport type { SqlDialect } from './sql-builder-dialect'\nimport { buildSQLWithCache } from './query-cache'\nimport { transformQueryResults } from './result-transformers'\n\nexport interface TransactionQuery {\n model: string\n method: PrismaMethod\n args?: Record<string, unknown>\n}\n\nexport interface TransactionOptions {\n isolationLevel?: 'ReadCommitted' | 'RepeatableRead' | 'Serializable'\n timeout?: number\n}\n\ninterface TransactionExecutor {\n execute(\n queries: TransactionQuery[],\n options?: TransactionOptions,\n ): Promise<unknown[]>\n}\n\nfunction isolationLevelToPostgresKeyword(\n level: TransactionOptions['isolationLevel'],\n): string | undefined {\n switch (level) {\n case 'ReadCommitted':\n return 'read committed'\n case 'RepeatableRead':\n return 'repeatable read'\n case 'Serializable':\n return 'serializable'\n default:\n return undefined\n }\n}\n\nfunction validateTimeout(timeout: unknown): number {\n if (typeof timeout !== 'number') {\n throw new Error(\n `Transaction timeout must be a number, got ${typeof timeout}`,\n )\n }\n if (!Number.isFinite(timeout)) {\n throw new Error(`Transaction timeout must be finite, got ${timeout}`)\n }\n if (timeout < 0) {\n throw new Error(`Transaction timeout must be non-negative, got ${timeout}`)\n }\n return Math.floor(timeout)\n}\n\nexport function createTransactionExecutor(deps: {\n modelMap: Map<string, Model>\n allModels: Model[]\n dialect: SqlDialect\n executeRaw: (sql: string, params?: unknown[]) => Promise<unknown[]>\n postgresClient?: any\n}): TransactionExecutor {\n const { modelMap, allModels, dialect, postgresClient } = deps\n\n return {\n async execute(\n queries: TransactionQuery[],\n options?: TransactionOptions,\n ): Promise<unknown[]> {\n if (queries.length === 0) return []\n\n if (dialect !== 'postgres') {\n throw new Error('$transaction is only supported for postgres dialect')\n }\n\n if (!postgresClient) {\n throw new Error('postgresClient is required for transactions')\n }\n\n const transactionCallback = async (sql: any) => {\n const results: unknown[] = []\n\n const isolationLevel = isolationLevelToPostgresKeyword(\n options?.isolationLevel,\n )\n\n if (isolationLevel) {\n await sql.unsafe(\n `SET TRANSACTION ISOLATION LEVEL ${isolationLevel.toUpperCase()}`,\n )\n }\n\n if (options?.timeout !== undefined && options.timeout !== null) {\n const validatedTimeout = validateTimeout(options.timeout)\n await sql.unsafe(`SET LOCAL statement_timeout = $1`, [\n validatedTimeout,\n ])\n }\n\n for (const q of queries) {\n const model = modelMap.get(q.model)\n if (!model) {\n throw new Error(\n `Model '${q.model}' not found. Available: ${[...modelMap.keys()].join(', ')}`,\n )\n }\n\n const { sql: sqlStr, params } = buildSQLWithCache(\n model,\n allModels,\n q.method,\n q.args || {},\n dialect,\n )\n\n const rawResults = await sql.unsafe(sqlStr, params as any[])\n results.push(transformQueryResults(q.method, rawResults))\n }\n\n return results\n }\n\n return await postgresClient.begin(transactionCallback)\n },\n }\n}\n","export function buildCompositeKey(row: any, fields: string[]): string | null {\n if (fields.length === 0) return null\n\n if (fields.length === 1) {\n const val = row[fields[0]]\n if (val == null) return null\n\n const t = typeof val\n if (t === 'string') return `s:${val}`\n if (t === 'number') return Number.isFinite(val) ? `n:${val}` : null\n if (t === 'boolean') return val ? 'b:1' : 'b:0'\n if (t === 'bigint') return `i:${val}`\n return `o:${val}`\n }\n\n const parts = new Array<string>(fields.length)\n\n for (let i = 0; i < fields.length; i++) {\n const val = row[fields[i]]\n if (val == null) return null\n\n const t = typeof val\n if (t === 'string') {\n parts[i] = `s:${val}`\n } else if (t === 'number') {\n if (!Number.isFinite(val)) return null\n parts[i] = `n:${val}`\n } else if (t === 'boolean') {\n parts[i] = val ? 'b:1' : 'b:0'\n } else if (t === 'bigint') {\n parts[i] = `i:${val}`\n } else {\n parts[i] = `o:${val}`\n }\n }\n\n return parts.join('\\u001f')\n}\n","import { Model } from '../../types'\nimport {\n getJsonFieldSet,\n getRelationFieldSet,\n maybeParseJson,\n parseJsonIfNeeded,\n} from '../shared/model-field-cache'\nimport { getPrimaryKeyFields } from '../shared/primary-key-utils'\nimport { extractRelationEntries } from '../shared/relation-extraction-utils'\nimport { isPlainObject } from '../shared/validators/type-guards'\nimport { buildCompositeKey } from '../shared/key-utils'\n\nimport { getScalarFieldNames } from '../shared/model-field-cache'\nimport {\n extractScalarSelection,\n extractNestedIncludeSpec,\n} from '../shared/relation-utils'\n\nexport interface ReducerConfig {\n parentModel: Model\n includedRelations: RelationMetadata[]\n allModels: readonly Model[]\n}\n\ninterface ScalarColSpec {\n fieldName: string\n colName: string\n isJson: boolean\n}\n\nexport interface RelationMetadata {\n name: string\n cardinality: 'one' | 'many'\n relatedModel: Model\n primaryKeyFields: string[]\n includeAllScalars: boolean\n selectedScalarFields: string[]\n nestedIncludes?: ReducerConfig | null\n\n path: string\n keyCols: string[]\n scalarCols: ScalarColSpec[]\n}\n\nfunction buildRelationScalarCols(\n relModel: Model,\n relPath: string,\n includeAllScalars: boolean,\n selectedScalarFields: string[],\n): ScalarColSpec[] {\n const jsonSet = getJsonFieldSet(relModel)\n const scalarFields = includeAllScalars\n ? getScalarFieldNames(relModel)\n : selectedScalarFields\n\n const out: ScalarColSpec[] = []\n for (const fieldName of scalarFields) {\n out.push({\n fieldName,\n colName: `${relPath}.${fieldName}`,\n isJson: jsonSet.has(fieldName),\n })\n }\n return out\n}\n\nexport function buildReducerConfig(\n parentModel: Model,\n includeSpec: Record<string, any>,\n allModels: readonly Model[],\n prefix: string = '',\n depth: number = 0,\n): ReducerConfig {\n if (depth > 10) {\n throw new Error(\n `Reducer config exceeded maximum depth of 10 at path '${prefix}'`,\n )\n }\n\n const includedRelations: RelationMetadata[] = []\n const modelMap = new Map(allModels.map((m) => [m.name, m]))\n\n for (const [incName, incValue] of Object.entries(includeSpec)) {\n if (incValue === false) continue\n\n const field = parentModel.fields.find((f) => f.name === incName)\n if (!field || !field.isRelation) {\n throw new Error(\n `Field '${incName}' is not a relation on model ${parentModel.name}`,\n )\n }\n\n const relatedModel = modelMap.get(field.relatedModel!)\n if (!relatedModel) {\n throw new Error(\n `Related model '${field.relatedModel}' not found for relation '${incName}'`,\n )\n }\n\n const isList = typeof field.type === 'string' && field.type.endsWith('[]')\n const primaryKeyFields = getPrimaryKeyFields(relatedModel)\n const scalarSel = extractScalarSelection(incValue, relatedModel)\n\n const relPath = prefix ? `${prefix}.${incName}` : incName\n\n let nestedIncludes: ReducerConfig | null = null\n const nestedSpec = extractNestedIncludeSpec(incValue, relatedModel)\n if (Object.keys(nestedSpec).length > 0) {\n nestedIncludes = buildReducerConfig(\n relatedModel,\n nestedSpec,\n allModels,\n relPath,\n depth + 1,\n )\n }\n\n const keyCols = primaryKeyFields.map((f) => `${relPath}.${f}`)\n\n const scalarCols = buildRelationScalarCols(\n relatedModel,\n relPath,\n scalarSel.includeAllScalars,\n scalarSel.selectedScalarFields,\n )\n\n includedRelations.push({\n name: incName,\n cardinality: isList ? 'many' : 'one',\n relatedModel,\n primaryKeyFields,\n includeAllScalars: scalarSel.includeAllScalars,\n selectedScalarFields: scalarSel.selectedScalarFields,\n nestedIncludes,\n\n path: relPath,\n keyCols,\n scalarCols,\n })\n }\n\n return {\n parentModel,\n includedRelations,\n allModels,\n }\n}\n\ntype ManyIndex = Map<string, any>\ntype IndexByPath = Map<string, ManyIndex>\n\nfunction getIndexForParent(\n store: WeakMap<object, IndexByPath>,\n parentObj: object,\n path: string,\n): ManyIndex {\n let byPath = store.get(parentObj)\n if (!byPath) {\n byPath = new Map()\n store.set(parentObj, byPath)\n }\n\n let idx = byPath.get(path)\n if (!idx) {\n idx = new Map()\n byPath.set(path, idx)\n }\n\n return idx\n}\n\nfunction initNestedPlaceholders(\n obj: any,\n nested: ReducerConfig | null | undefined,\n): void {\n if (!nested) return\n for (const r of nested.includedRelations) {\n obj[r.name] = r.cardinality === 'many' ? [] : null\n }\n}\n\nfunction materializeRelationObject(\n row: any,\n rel: RelationMetadata,\n): any | null {\n const relKey = buildCompositeKey(row, rel.keyCols)\n if (relKey == null) return null\n\n const obj: any = {}\n for (const c of rel.scalarCols) {\n obj[c.fieldName] = parseJsonIfNeeded(c.isJson, row[c.colName])\n }\n\n initNestedPlaceholders(obj, rel.nestedIncludes)\n return obj\n}\n\nfunction processNestedRelations(\n obj: any,\n rel: RelationMetadata,\n row: any,\n manyStore: WeakMap<object, IndexByPath>,\n): void {\n if (!rel.nestedIncludes) return\n for (const nestedRel of rel.nestedIncludes.includedRelations) {\n processRelation(obj, nestedRel, row, manyStore)\n }\n}\n\nfunction processRelation(\n parentObj: any,\n rel: RelationMetadata,\n row: any,\n manyStore: WeakMap<object, IndexByPath>,\n): void {\n const relKey = buildCompositeKey(row, rel.keyCols)\n if (relKey == null) return\n\n if (rel.cardinality === 'one') {\n let current = parentObj[rel.name]\n if (current == null) {\n const created = materializeRelationObject(row, rel)\n if (!created) return\n parentObj[rel.name] = created\n current = created\n }\n\n processNestedRelations(current, rel, row, manyStore)\n return\n }\n\n const arr = parentObj[rel.name] as any[]\n const idx = getIndexForParent(manyStore, parentObj, rel.path)\n\n const existing = idx.get(relKey)\n if (existing) {\n processNestedRelations(existing, rel, row, manyStore)\n return\n }\n\n const created = materializeRelationObject(row, rel)\n if (!created) return\n\n arr.push(created)\n idx.set(relKey, created)\n\n processNestedRelations(created, rel, row, manyStore)\n}\n\nfunction pickParentScalarFieldsFromRows(\n parentModel: Model,\n rows: any[],\n): string[] {\n const all = getScalarFieldNames(parentModel)\n if (rows.length === 0) return all\n\n const row0 = rows[0]\n const picked: string[] = []\n for (const f of all) {\n if (Object.prototype.hasOwnProperty.call(row0, f)) picked.push(f)\n }\n return picked.length > 0 ? picked : all\n}\n\nexport function reduceFlatRows(rows: any[], config: ReducerConfig): any[] {\n if (rows.length === 0) return []\n\n const { parentModel, includedRelations } = config\n const parentPkFields = getPrimaryKeyFields(parentModel)\n\n const parentKeyCols = parentPkFields\n const parentScalarFields = pickParentScalarFieldsFromRows(parentModel, rows)\n const parentJsonSet = getJsonFieldSet(parentModel)\n\n const resultMap = new Map<string, any>()\n const manyStore = new WeakMap<object, IndexByPath>()\n\n for (let rowIdx = 0; rowIdx < rows.length; rowIdx++) {\n const row = rows[rowIdx]\n const parentKey = buildCompositeKey(row, parentKeyCols)\n\n if (parentKey == null) continue\n\n let record = resultMap.get(parentKey)\n if (!record) {\n record = {}\n for (const fieldName of parentScalarFields) {\n record[fieldName] = maybeParseJson(\n row[fieldName],\n parentJsonSet,\n fieldName,\n )\n }\n for (const rel of includedRelations) {\n record[rel.name] = rel.cardinality === 'many' ? [] : null\n }\n resultMap.set(parentKey, record)\n }\n\n for (const rel of includedRelations) {\n processRelation(record, rel, row, manyStore)\n }\n }\n\n return Array.from(resultMap.values())\n}\n","import { RelStats } from '../../cardinality-planner'\nimport { isPlainObject } from '../shared/validators/type-guards'\nimport { extractRelationEntries } from '../shared/relation-extraction-utils'\nimport { resolveRelationKeys } from '../shared/relation-key-utils'\nimport { Field, Model } from '../../types'\nimport { getRelationFieldSet } from '../shared/model-field-cache'\nimport { hasChildPagination } from '../shared/relation-utils'\n\nexport interface WhereInSegment {\n relationName: string\n relArgs: unknown\n childModelName: string\n fkFieldName: string\n parentKeyFieldName: string\n isList: boolean\n}\n\nexport interface QueryPlan {\n filteredArgs: any\n whereInSegments: WhereInSegment[]\n}\n\ntype RelationStatsLike = Record<string, Record<string, RelStats>>\n\nconst HARD_FANOUT_CAP = 5000\nconst MAX_ESTIMATED_ROWS = Number.MAX_SAFE_INTEGER / 1000\n\nfunction isList(field: Field): boolean {\n return typeof field.type === 'string' && field.type.endsWith('[]')\n}\n\nfunction resolveRelation(\n model: Model,\n relName: string,\n allModels: readonly Model[],\n): { field: Field; relModel: Model } | null {\n const field = model.fields.find((f) => f.name === relName)\n if (!field || !field.isRelation || !field.relatedModel) return null\n\n const relModel = allModels.find((m) => m.name === field.relatedModel)\n if (!relModel) return null\n\n return { field: field as Field, relModel }\n}\n\nfunction effectiveFanout(stats: RelStats): number {\n return 1 + stats.coverage * (stats.avg - 1)\n}\n\nfunction estimateFlatRows(\n parentCount: number,\n relations: Array<{ modelName: string; relName: string; field: Field }>,\n stats?: RelationStatsLike,\n): number {\n let rows = parentCount\n for (const rel of relations) {\n const relStats = stats?.[rel.modelName]?.[rel.relName]\n const fanout = relStats ? effectiveFanout(relStats) : 10\n const next = rows * fanout\n if (next > MAX_ESTIMATED_ROWS) {\n return MAX_ESTIMATED_ROWS\n }\n rows = next\n }\n return Math.ceil(rows)\n}\n\nfunction collectOneToManyRelations(\n entries: Array<{ name: string; value: unknown }>,\n model: Model,\n allModels: readonly Model[],\n): Array<{\n name: string\n relArgs: unknown\n field: Field\n relModel: Model\n hasPagination: boolean\n}> {\n const out: Array<{\n name: string\n relArgs: unknown\n field: Field\n relModel: Model\n hasPagination: boolean\n }> = []\n\n for (const entry of entries) {\n const resolved = resolveRelation(model, entry.name, allModels)\n if (!resolved) continue\n if (!isList(resolved.field)) continue\n\n out.push({\n name: entry.name,\n relArgs: entry.value,\n field: resolved.field,\n relModel: resolved.relModel,\n hasPagination: hasChildPagination(entry.value),\n })\n }\n\n return out\n}\n\nfunction getParentCount(method: string, args: any): number | null {\n if (method === 'findFirst' || method === 'findUnique') return 1\n\n if (args?.take !== undefined && args?.take !== null) {\n const take = typeof args.take === 'number' ? Math.abs(args.take) : null\n if (take !== null) return take\n }\n\n return null\n}\n\nfunction buildWhereInSegment(\n name: string,\n relArgs: unknown,\n field: Field,\n relModel: Model,\n): WhereInSegment | null {\n const keys = resolveRelationKeys(field, 'whereIn')\n if (keys.childKeys.length !== 1) return null\n\n return {\n relationName: name,\n relArgs,\n childModelName: relModel.name,\n fkFieldName: keys.childKeys[0],\n parentKeyFieldName: keys.parentKeys[0],\n isList: true,\n }\n}\n\nfunction deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') return obj\n if (obj instanceof Date) return new Date(obj.getTime()) as any\n if (obj instanceof RegExp) return new RegExp(obj.source, obj.flags) as any\n if (Array.isArray(obj)) return obj.map((item) => deepClone(item)) as any\n\n const cloned: any = {}\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n cloned[key] = deepClone((obj as any)[key])\n }\n }\n return cloned\n}\n\nfunction removeRelationsFromArgs(args: any, names: Set<string>): any {\n if (!args) return args\n\n const filtered = deepClone(args)\n\n if (filtered.include && isPlainObject(filtered.include)) {\n for (const name of names) {\n delete filtered.include[name]\n }\n if (Object.keys(filtered.include).length === 0) {\n delete filtered.include\n }\n }\n\n if (filtered.select && isPlainObject(filtered.select)) {\n for (const name of names) {\n delete filtered.select[name]\n }\n }\n\n return filtered\n}\n\nexport function planQueryStrategy(params: {\n model: Model\n method: string\n args: any\n allModels: readonly Model[]\n relationStats?: RelationStatsLike\n dialect: 'postgres' | 'sqlite'\n}): QueryPlan {\n const { model, method, args, allModels, relationStats } = params\n\n const entries = extractRelationEntries(args, model)\n if (entries.length === 0) {\n return { filteredArgs: args, whereInSegments: [] }\n }\n\n const oneToManyRels = collectOneToManyRelations(entries, model, allModels)\n\n const unpaginatedOneToMany = oneToManyRels.filter((r) => !r.hasPagination)\n\n if (unpaginatedOneToMany.length === 0) {\n return { filteredArgs: args, whereInSegments: [] }\n }\n\n const parentCount = getParentCount(method, args)\n const whereInSegments: WhereInSegment[] = []\n const toRemove = new Set<string>()\n\n if (unpaginatedOneToMany.length > 1) {\n for (const rel of unpaginatedOneToMany) {\n const segment = buildWhereInSegment(\n rel.name,\n rel.relArgs,\n rel.field,\n rel.relModel,\n )\n if (segment) {\n whereInSegments.push(segment)\n toRemove.add(rel.name)\n }\n }\n } else if (unpaginatedOneToMany.length === 1) {\n const rel = unpaginatedOneToMany[0]\n\n if (parentCount === null) {\n const segment = buildWhereInSegment(\n rel.name,\n rel.relArgs,\n rel.field,\n rel.relModel,\n )\n if (segment) {\n whereInSegments.push(segment)\n toRemove.add(rel.name)\n }\n } else {\n const estimated = estimateFlatRows(\n parentCount,\n [{ modelName: model.name, relName: rel.name, field: rel.field }],\n relationStats,\n )\n\n if (estimated > HARD_FANOUT_CAP) {\n const segment = buildWhereInSegment(\n rel.name,\n rel.relArgs,\n rel.field,\n rel.relModel,\n )\n if (segment) {\n whereInSegments.push(segment)\n toRemove.add(rel.name)\n }\n }\n }\n }\n\n if (toRemove.size === 0) {\n return { filteredArgs: args, whereInSegments: [] }\n }\n\n const filteredArgs = removeRelationsFromArgs(args, toRemove)\n\n return { filteredArgs, whereInSegments }\n}\n","import type { Model } from '../../types'\nimport { buildSQL } from '../..'\nimport { buildReducerConfig, reduceFlatRows } from '../select/reducer'\nimport type { WhereInSegment } from '../select/segment-planner'\nimport { isPlainObject } from './validators/type-guards'\n\nexport interface ExecuteWhereInParams {\n segments: WhereInSegment[]\n parentRows: any[]\n parentModel: Model\n allModels: readonly Model[]\n modelMap: Map<string, Model>\n dialect: 'postgres' | 'sqlite'\n execute: (sql: string, params: unknown[]) => Promise<any[]>\n}\n\nfunction getParamLimit(dialect: 'postgres' | 'sqlite'): number {\n return dialect === 'postgres' ? 32000 : 900\n}\n\nfunction chunkArray<T>(arr: T[], size: number): T[][] {\n if (arr.length <= size) return [arr]\n const chunks: T[][] = []\n for (let i = 0; i < arr.length; i += size) {\n chunks.push(arr.slice(i, i + size))\n }\n return chunks\n}\n\nexport function buildChildArgs(\n relArgs: unknown,\n fkFieldName: string,\n parentIds: unknown[],\n): any {\n const base: any =\n relArgs === true || !isPlainObject(relArgs) ? {} : { ...(relArgs as any) }\n\n const existingWhere = base.where\n\n const inCondition = { [fkFieldName]: { in: parentIds } }\n\n base.where = existingWhere\n ? { AND: [existingWhere, inCondition] }\n : inCondition\n\n return base\n}\n\nfunction ensureFkInSelect(childArgs: any, fkFieldName: string): boolean {\n if (!childArgs.select) return false\n if (childArgs.select[fkFieldName]) return false\n\n childArgs.select = { ...childArgs.select, [fkFieldName]: true }\n return true\n}\n\nexport function stitchResults(\n parentRows: any[],\n segment: WhereInSegment,\n childRows: any[],\n stripFk: boolean,\n): void {\n const grouped = new Map<unknown, any[]>()\n\n for (const child of childRows) {\n const fk = child[segment.fkFieldName]\n if (fk == null) continue\n\n let arr = grouped.get(fk)\n if (!arr) {\n arr = []\n grouped.set(fk, arr)\n }\n\n if (stripFk) {\n const cleaned = { ...child }\n delete cleaned[segment.fkFieldName]\n arr.push(cleaned)\n } else {\n arr.push(child)\n }\n }\n\n for (const parent of parentRows) {\n const pk = parent[segment.parentKeyFieldName]\n const children = grouped.get(pk) || []\n\n if (segment.isList) {\n parent[segment.relationName] = children\n } else {\n parent[segment.relationName] = children[0] || null\n }\n }\n}\n\nexport async function executeSegmentBase(\n segment: WhereInSegment,\n parentRows: any[],\n allModels: readonly Model[],\n modelMap: Map<string, Model>,\n dialect: 'postgres' | 'sqlite',\n execute: (sql: string, params: unknown[]) => Promise<any[]>,\n): Promise<void> {\n const parentIds = parentRows\n .map((r) => r[segment.parentKeyFieldName])\n .filter((v) => v != null)\n\n if (parentIds.length === 0) {\n for (const parent of parentRows) {\n parent[segment.relationName] = segment.isList ? [] : null\n }\n return\n }\n\n const uniqueIds = [...new Set(parentIds)]\n const paramLimit = getParamLimit(dialect)\n const chunks = chunkArray(uniqueIds, paramLimit)\n\n const childModel = modelMap.get(segment.childModelName)\n if (!childModel) {\n for (const parent of parentRows) {\n parent[segment.relationName] = segment.isList ? [] : null\n }\n return\n }\n\n const allChildRows: any[] = []\n let needsStripFk = false\n\n for (const chunk of chunks) {\n const childArgs = buildChildArgs(\n segment.relArgs,\n segment.fkFieldName,\n chunk,\n )\n const stripFk = ensureFkInSelect(childArgs, segment.fkFieldName)\n if (stripFk) needsStripFk = true\n\n const result = buildSQL(\n childModel,\n allModels as Model[],\n 'findMany',\n childArgs,\n dialect,\n )\n\n let rows = await execute(result.sql, result.params as unknown[])\n\n if (result.requiresReduction && result.includeSpec) {\n const config = buildReducerConfig(\n childModel,\n result.includeSpec as Record<string, any>,\n allModels,\n )\n rows = reduceFlatRows(rows, config)\n }\n\n for (const row of rows) {\n allChildRows.push(row)\n }\n }\n\n stitchResults(parentRows, segment, allChildRows, needsStripFk)\n}\n","import {\n ExecuteWhereInParams,\n executeSegmentBase,\n} from './shared/where-in-executor-base'\n\nexport async function executeWhereInSegments(\n params: ExecuteWhereInParams,\n): Promise<void> {\n const { segments, parentRows, allModels, modelMap, dialect, execute } = params\n\n if (segments.length === 0) return\n if (parentRows.length === 0) return\n\n for (const segment of segments) {\n await executeSegmentBase(\n segment,\n parentRows,\n allModels,\n modelMap,\n dialect,\n execute,\n )\n }\n}\n","import type { Model } from '../../types'\nimport type { RelationMetadata } from './reducer'\nimport { getPrimaryKeyFields } from '../shared/primary-key-utils'\nimport { buildCompositeKey } from '../shared/key-utils'\nimport {\n maybeParseJson,\n parseJsonIfNeeded,\n getJsonFieldSet,\n} from '../shared/model-field-cache'\n\nexport interface CoreReducerConfig {\n parentModel: Model\n includedRelations: RelationMetadata[]\n}\n\nexport interface CoreReducer {\n processRow(row: any): string | null\n getParent(key: string): any | null\n getAllParents(): any[]\n getParentMap(): Map<string, any>\n}\n\ntype IndexByPath = Map<string, Map<string, any>>\n\nconst getOrCreateRelationMap = (\n relationMaps: WeakMap<object, IndexByPath>,\n parent: object,\n): IndexByPath => {\n let relMap = relationMaps.get(parent)\n if (!relMap) {\n relMap = new Map()\n relationMaps.set(parent, relMap)\n }\n return relMap\n}\n\nconst getOrCreateChildMap = (\n relMap: IndexByPath,\n path: string,\n): Map<string, any> => {\n let childMap = relMap.get(path)\n if (!childMap) {\n childMap = new Map()\n relMap.set(path, childMap)\n }\n return childMap\n}\n\nconst createParentObject = (\n row: any,\n scalarFields: any[],\n jsonSet: ReadonlySet<string>,\n includedRelations: readonly RelationMetadata[],\n): any => {\n const parent: any = {}\n\n for (const field of scalarFields) {\n if (!(field.name in row)) continue\n parent[field.name] = maybeParseJson(row[field.name], jsonSet, field.name)\n }\n\n for (const rel of includedRelations) {\n parent[rel.name] = rel.cardinality === 'many' ? [] : null\n }\n\n return parent\n}\n\nconst createChildObject = (row: any, rel: RelationMetadata): any => {\n const child: any = {}\n\n for (const spec of rel.scalarCols) {\n if (!(spec.colName in row)) continue\n child[spec.fieldName] = parseJsonIfNeeded(spec.isJson, row[spec.colName])\n }\n\n if (rel.nestedIncludes) {\n for (const nested of rel.nestedIncludes.includedRelations) {\n child[nested.name] = nested.cardinality === 'many' ? [] : null\n }\n }\n\n return child\n}\n\nconst extractChildKey = (row: any, rel: RelationMetadata): string | null => {\n const cols = rel.primaryKeyFields.map((f) => `${rel.path}.${f}`)\n return buildCompositeKey(row, cols)\n}\n\nconst attachChildToParent = (\n parent: any,\n child: any,\n rel: RelationMetadata,\n): void => {\n if (rel.cardinality === 'many') {\n parent[rel.name].push(child)\n } else {\n parent[rel.name] = child\n }\n}\n\nconst createRelationProcessor = (\n relationMaps: WeakMap<object, IndexByPath>,\n) => {\n const processRelation = (\n parent: any,\n rel: RelationMetadata,\n row: any,\n ): void => {\n const childKey = extractChildKey(row, rel)\n if (!childKey) return\n\n const relMap = getOrCreateRelationMap(relationMaps, parent)\n const childMap = getOrCreateChildMap(relMap, rel.path)\n\n if (childMap.has(childKey)) {\n const existing = childMap.get(childKey)!\n\n if (rel.nestedIncludes) {\n for (const nested of rel.nestedIncludes.includedRelations) {\n processRelation(existing, nested, row)\n }\n }\n return\n }\n\n const child = createChildObject(row, rel)\n childMap.set(childKey, child)\n\n attachChildToParent(parent, child, rel)\n\n if (rel.nestedIncludes) {\n for (const nested of rel.nestedIncludes.includedRelations) {\n processRelation(child, nested, row)\n }\n }\n }\n\n return processRelation\n}\n\nexport const createCoreReducer = (config: CoreReducerConfig): CoreReducer => {\n const parentMap = new Map<string, any>()\n const relationMaps = new WeakMap<object, IndexByPath>()\n\n const scalarFields = config.parentModel.fields.filter((f) => !f.isRelation)\n const jsonSet = getJsonFieldSet(config.parentModel)\n const parentPkFields = getPrimaryKeyFields(config.parentModel)\n const includedRelations = config.includedRelations\n\n const extractParentKey = (row: any): string | null =>\n buildCompositeKey(row, parentPkFields)\n\n const processRelation = createRelationProcessor(relationMaps)\n\n const processRow = (row: any): string | null => {\n const parentKey = extractParentKey(row)\n if (!parentKey) return null\n\n const parent = parentMap.has(parentKey)\n ? parentMap.get(parentKey)!\n : (() => {\n const newParent = createParentObject(\n row,\n scalarFields,\n jsonSet,\n includedRelations,\n )\n parentMap.set(parentKey, newParent)\n return newParent\n })()\n\n for (const rel of includedRelations) {\n processRelation(parent, rel, row)\n }\n\n return parentKey\n }\n\n return {\n processRow,\n getParent: (key: string) => parentMap.get(key) ?? null,\n getAllParents: () => Array.from(parentMap.values()),\n getParentMap: () => parentMap,\n }\n}\n","import { ReducerConfig } from './reducer'\nimport { createCoreReducer } from './core-reducer'\n\nexport function createStreamingReducer(config: ReducerConfig) {\n const coreReducer = createCoreReducer({\n parentModel: config.parentModel,\n includedRelations: config.includedRelations,\n })\n\n return {\n processRow(row: any): void {\n coreReducer.processRow(row)\n },\n\n getResults(): any[] {\n return coreReducer.getAllParents()\n },\n\n getParentMap(): Map<string, any> {\n return coreReducer.getParentMap()\n },\n }\n}\n","import type { ReducerConfig } from './reducer'\nimport { createCoreReducer } from './core-reducer'\n\ninterface ProgressiveReducer {\n processRow(row: any): void\n getCurrentParentKey(row: any): string | null\n getCompletedParent(parentKey: string): any | null\n getRemainingParents(): any[]\n}\n\nexport function createProgressiveReducer(\n config: ReducerConfig,\n): ProgressiveReducer {\n const coreReducer = createCoreReducer({\n parentModel: config.parentModel,\n includedRelations: config.includedRelations,\n })\n\n const completedKeys = new Set<string>()\n\n return {\n processRow(row: any): void {\n coreReducer.processRow(row)\n },\n\n getCurrentParentKey(row: any): string | null {\n return coreReducer.processRow(row)\n },\n\n getCompletedParent(parentKey: string): any | null {\n if (completedKeys.has(parentKey)) return null\n const parent = coreReducer.getParent(parentKey)\n if (!parent) return null\n completedKeys.add(parentKey)\n return parent\n },\n\n getRemainingParents(): any[] {\n const remaining: any[] = []\n for (const [key, parent] of coreReducer.getParentMap()) {\n if (!completedKeys.has(key)) {\n remaining.push(parent)\n completedKeys.add(key)\n }\n }\n return remaining\n },\n }\n}\n","import type { Model } from '../../types'\nimport { getPrimaryKeyField } from '../shared/primary-key-utils'\nimport {\n ExecuteWhereInParams,\n buildChildArgs,\n} from '../shared/where-in-executor-base'\nimport { buildSQL } from '../..'\nimport { buildReducerConfig, reduceFlatRows } from './reducer'\n\ninterface StreamingWhereInParams extends ExecuteWhereInParams {\n parentSql: string\n parentParams: unknown[]\n batchSize?: number\n maxConcurrency?: number\n}\n\nexport async function executeWhereInSegmentsStreaming(\n params: StreamingWhereInParams,\n): Promise<any[]> {\n const {\n segments,\n parentSql,\n parentParams,\n parentModel,\n allModels,\n modelMap,\n dialect,\n execute,\n batchSize = 100,\n maxConcurrency = 10,\n } = params\n\n if (segments.length === 0) {\n throw new Error('executeWhereInSegmentsStreaming requires segments')\n }\n\n if (dialect !== 'postgres') {\n throw new Error('Streaming WHERE IN requires postgres dialect')\n }\n\n const parentMap = new Map<string, any>()\n const batches = new Map<string, unknown[]>()\n const inFlightMap = new Map<Promise<void>, string>()\n\n for (const seg of segments) {\n batches.set(seg.relationName, [])\n }\n\n const pkField = getPrimaryKeyField(parentModel)\n\n const parentRows = await execute(parentSql, parentParams)\n\n for (const row of parentRows) {\n const pk = row[pkField]\n parentMap.set(pk, { ...row })\n\n for (const seg of segments) {\n row[seg.relationName] = seg.isList ? [] : null\n }\n\n for (const seg of segments) {\n const batch = batches.get(seg.relationName)!\n const parentKey = row[seg.parentKeyFieldName]\n batch.push(parentKey)\n\n if (batch.length >= batchSize) {\n const idsToFetch = [...batch]\n batch.length = 0\n\n const promise = fetchAndAttachChildren(\n seg,\n idsToFetch,\n parentMap,\n allModels,\n modelMap,\n dialect,\n execute,\n )\n\n inFlightMap.set(promise, seg.relationName)\n\n promise.finally(() => {\n inFlightMap.delete(promise)\n })\n\n if (inFlightMap.size >= maxConcurrency) {\n await Promise.race(inFlightMap.keys())\n }\n }\n }\n }\n\n for (const seg of segments) {\n const batch = batches.get(seg.relationName)!\n if (batch.length > 0) {\n const promise = fetchAndAttachChildren(\n seg,\n batch,\n parentMap,\n allModels,\n modelMap,\n dialect,\n execute,\n )\n\n inFlightMap.set(promise, seg.relationName)\n\n promise.finally(() => {\n inFlightMap.delete(promise)\n })\n }\n }\n\n await Promise.all(inFlightMap.keys())\n\n return Array.from(parentMap.values())\n}\n\nasync function fetchAndAttachChildren(\n segment: any,\n parentIds: unknown[],\n parentMap: Map<string, any>,\n allModels: readonly Model[],\n modelMap: Map<string, Model>,\n dialect: 'postgres' | 'sqlite',\n execute: (sql: string, params: unknown[]) => Promise<any[]>,\n): Promise<void> {\n const childModel = modelMap.get(segment.childModelName)\n if (!childModel) return\n\n const childArgs = buildChildArgs(\n segment.relArgs,\n segment.fkFieldName,\n parentIds,\n )\n const result = buildSQL(\n childModel,\n allModels as Model[],\n 'findMany',\n childArgs,\n dialect,\n )\n\n let children = await execute(result.sql, result.params as unknown[])\n\n if (result.requiresReduction && result.includeSpec) {\n const config = buildReducerConfig(childModel, result.includeSpec, allModels)\n children = reduceFlatRows(children, config)\n }\n\n for (const child of children) {\n const fkValue = child[segment.fkFieldName]\n const parent = parentMap.get(fkValue)\n if (!parent) continue\n\n if (segment.isList) {\n if (!Array.isArray(parent[segment.relationName])) {\n parent[segment.relationName] = []\n }\n parent[segment.relationName].push(child)\n } else {\n parent[segment.relationName] = child\n }\n }\n}\n","import { AGGREGATE_PREFIXES } from '../shared/constants'\n\nexport function transformAggregateRow(row: any): any {\n if (!row || typeof row !== 'object') return row\n\n const result: any = {}\n\n for (const key in row) {\n if (!Object.prototype.hasOwnProperty.call(row, key)) continue\n\n const value = row[key]\n const dotIndex = key.indexOf('.')\n\n if (dotIndex === -1) {\n result[key] = value\n continue\n }\n\n const prefix = key.slice(0, dotIndex)\n const suffix = key.slice(dotIndex + 1)\n\n if (AGGREGATE_PREFIXES.has(prefix)) {\n if (!result[prefix]) {\n result[prefix] = {}\n }\n result[prefix][suffix] = value\n } else {\n result[key] = value\n }\n }\n\n return result\n}\n\nexport function extractCountValue(row: any): number | bigint {\n if (!row || typeof row !== 'object') return 0\n\n if ('_count._all' in row) {\n return row['_count._all'] as number | bigint\n }\n\n if ('_count' in row && row['_count'] && typeof row['_count'] === 'object') {\n const countObj = row['_count'] as Record<string, unknown>\n if ('_all' in countObj) {\n return countObj['_all'] as number | bigint\n }\n }\n\n const keys = Object.keys(row)\n for (const key of keys) {\n if (key.includes('count') || key.includes('COUNT')) {\n const value = row[key]\n if (typeof value === 'number' || typeof value === 'bigint') {\n return value\n }\n }\n }\n\n return 0\n}\n\nexport function getRowTransformer(method: string): ((row: any) => any) | null {\n if (method === 'count') {\n return extractCountValue\n }\n\n if (method === 'groupBy' || method === 'aggregate') {\n return transformAggregateRow\n }\n\n return null\n}\n","import {\n transformAggregateRow,\n extractCountValue,\n buildReducerConfig,\n reduceFlatRows,\n normalizeValue,\n} from './index'\n\nexport const SQLITE_STMT_CACHE = new WeakMap<any, Map<string, any>>()\n\nexport function getOrPrepareStatement(client: any, sql: string): any {\n let cache = SQLITE_STMT_CACHE.get(client)\n if (!cache) {\n cache = new Map()\n SQLITE_STMT_CACHE.set(client, cache)\n }\n\n let stmt = cache.get(sql)\n if (!stmt) {\n stmt = client.prepare(sql)\n cache.set(sql, stmt)\n\n if (cache.size > 1000) {\n const firstKey = cache.keys().next().value\n cache.delete(firstKey!)\n }\n }\n\n return stmt\n}\n\nexport function shouldSqliteUseGet(method: string): boolean {\n return (\n method === 'count' ||\n method === 'findFirst' ||\n method === 'findUnique' ||\n method === 'aggregate'\n )\n}\n\nexport function normalizeParams(params: unknown[]): unknown[] {\n return params.map((p) => normalizeValue(p))\n}\n\nexport async function executePostgresQuery(\n client: any,\n sql: string,\n params: unknown[],\n method: string,\n requiresReduction: boolean,\n includeSpec: Record<string, any> | undefined,\n model: any | undefined,\n allModels: readonly any[],\n): Promise<unknown[]> {\n const normalizedParams = normalizeParams(params)\n const query = client.unsafe(sql, normalizedParams)\n\n if (requiresReduction && includeSpec && model) {\n const config = buildReducerConfig(model, includeSpec, allModels)\n const { createStreamingReducer } = await import('./index')\n const reducer = createStreamingReducer(config)\n\n await query.forEach((row: any) => {\n reducer.processRow(row)\n })\n\n return reducer.getResults()\n }\n\n if (method === 'count') {\n const results: any[] = []\n await query.forEach((row: any) => {\n results.push(extractCountValue(row))\n })\n return results\n }\n\n if (method === 'groupBy' || method === 'aggregate') {\n const results: any[] = []\n await query.forEach((row: any) => {\n results.push(transformAggregateRow(row))\n })\n return results\n }\n\n const results: any[] = []\n await query.forEach((row: any) => {\n results.push(row)\n })\n return results\n}\n\nexport function executeSqliteQuery(\n client: any,\n sql: string,\n params: unknown[],\n method: string,\n requiresReduction: boolean,\n includeSpec: Record<string, any> | undefined,\n model: any | undefined,\n allModels: readonly any[],\n): unknown[] {\n const normalizedParams = normalizeParams(params)\n const stmt = getOrPrepareStatement(client, sql)\n\n if (shouldSqliteUseGet(method)) {\n const row = stmt.get(...normalizedParams)\n if (row === undefined) {\n return method === 'count' ? [0] : []\n }\n\n if (method === 'count') {\n return [extractCountValue(row)]\n }\n\n if (method === 'aggregate') {\n return [transformAggregateRow(row)]\n }\n\n return [row]\n }\n\n const rows = stmt.all(...normalizedParams)\n\n if (method === 'count') {\n if (rows.length === 0) return [0]\n return [extractCountValue(rows[0])]\n }\n\n if (method === 'groupBy' || method === 'aggregate') {\n return rows.map((row: any) => transformAggregateRow(row))\n }\n\n if (requiresReduction && includeSpec && model) {\n const config = buildReducerConfig(model, includeSpec, allModels)\n return reduceFlatRows(rows as any[], config)\n }\n\n return rows\n}\n\nexport async function executeRaw(\n client: any,\n sql: string,\n params: unknown[] | undefined,\n dialect: string,\n): Promise<unknown[]> {\n if (dialect === 'postgres') {\n return await client.unsafe(sql, (params || []) as any[])\n }\n throw new Error('Raw execution for sqlite not supported in transactions')\n}\n","import { DirectiveProps, convertDMMFToModels } from '@dee-wan/schema-parser'\nimport { DMMF } from '@prisma/generator-helper'\nimport { setGlobalDialect, SqlDialect } from './sql-builder-dialect'\nimport {\n generateSQL as generateSQLInternal,\n SQLDirective,\n} from './sql-generator'\nimport { buildSQLWithCache } from './query-cache'\nimport {\n buildBatchSql,\n parseBatchResults,\n buildBatchCountSql,\n parseBatchCountResults,\n type BatchQuery,\n type BatchCountQuery,\n} from './batch'\nimport {\n createTransactionExecutor,\n type TransactionQuery,\n type TransactionOptions,\n} from './transaction'\nimport { transformQueryResults } from './result-transformers'\nimport { buildReducerConfig, reduceFlatRows } from './builder/select/reducer'\nimport {\n Model,\n PrismaMethod,\n PrismaSQLConfig,\n PrismaSQLResult,\n SqlResult,\n} from './types'\nimport { planQueryStrategy } from './builder/select/segment-planner'\nimport { executeWhereInSegments } from './builder/where-in-executor'\n\nexport function buildSQL(\n model: Model,\n models: Model[],\n method: PrismaMethod,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult {\n return buildSQLWithCache(model, models, method, args, dialect) as any\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(\n modelsOrDmmf: Model[] | DMMF.Document,\n dialect: SqlDialect,\n): (\n model: string,\n method: PrismaMethod,\n args?: Record<string, unknown>,\n) => SqlResult {\n const models = Array.isArray(modelsOrDmmf)\n ? modelsOrDmmf\n : convertDMMFToModels(modelsOrDmmf.datamodel)\n\n return createToSQLFunction(models, dialect)\n}\n\nexport function createPrismaSQL<TClient>(\n config: PrismaSQLConfig<TClient>,\n): PrismaSQLResult<TClient> {\n const { client, models: providedModels, dmmf, dialect, execute } = config\n\n let models: Model[]\n\n if (providedModels) {\n models = providedModels\n } else if (dmmf) {\n models = convertDMMFToModels(dmmf.datamodel)\n } else {\n throw new Error('createPrismaSQL requires either models or dmmf parameter')\n }\n\n if (!Array.isArray(models) || models.length === 0) {\n throw new Error('createPrismaSQL: models array is empty or invalid')\n }\n\n const toSQL = createToSQLFunction(models, dialect)\n const modelMap = new Map(models.map((m) => [m.name, m]))\n\n async function query<T = unknown[]>(\n model: string,\n method: PrismaMethod,\n args: Record<string, unknown> = {},\n ): Promise<T> {\n const sqlResult = toSQL(model, method, args)\n let results = await execute(client, sqlResult.sql, [...sqlResult.params])\n\n if (sqlResult.requiresReduction && sqlResult.includeSpec) {\n const modelDef = modelMap.get(model)\n if (modelDef) {\n const config = buildReducerConfig(\n modelDef,\n sqlResult.includeSpec,\n models,\n )\n results = reduceFlatRows(results as any[], config)\n }\n }\n\n return transformQueryResults(method, results) as T\n }\n\n function batchSql(queries: Record<string, BatchQuery>): SqlResult {\n const { sql, params } = buildBatchSql(queries, modelMap, models, dialect)\n return { sql, params }\n }\n\n return { toSQL, query, batchSql, client }\n}\n\nexport function generateSQL(directive: DirectiveProps): SQLDirective {\n return generateSQLInternal(directive)\n}\n\nexport function generateAllSQL(directives: DirectiveProps[]): SQLDirective[] {\n const results: SQLDirective[] = []\n const errors: Array<{ directive: DirectiveProps; error: Error }> = []\n\n for (const directive of directives) {\n try {\n results.push(generateSQL(directive))\n } catch (error) {\n errors.push({\n directive,\n error: error instanceof Error ? error : new Error(String(error)),\n })\n }\n }\n\n if (errors.length > 0) {\n console.warn(\n `[generateAllSQL] ${errors.length} directive(s) failed SQL generation`,\n )\n for (const { directive, error } of errors) {\n console.warn(\n ` - ${directive.modelName}.${directive.method}: ${error.message}`,\n )\n }\n }\n\n return results\n}\n\nexport function generateSQLByModel(\n directives: DirectiveProps[],\n): Map<string, SQLDirective[]> {\n const byModel = new Map<string, SQLDirective[]>()\n\n for (const directive of directives) {\n const sql = generateSQL(directive)\n\n if (!byModel.has(directive.modelName)) {\n byModel.set(directive.modelName, [])\n }\n\n byModel.get(directive.modelName)!.push(sql)\n }\n\n return byModel\n}\n\nexport {\n buildBatchSql,\n parseBatchResults,\n buildBatchCountSql,\n parseBatchCountResults,\n type BatchQuery,\n type BatchCountQuery,\n}\n\nexport {\n type TransactionQuery,\n type TransactionOptions,\n type Model,\n type PrismaMethod,\n type PrismaSQLConfig,\n type PrismaSQLResult,\n type SqlResult,\n}\n\nexport {\n transformQueryResults,\n planQueryStrategy,\n createTransactionExecutor,\n executeWhereInSegments,\n}\nexport { buildReducerConfig, reduceFlatRows } from './builder/select/reducer'\nexport type { ReducerConfig } from './builder/select/reducer'\nexport { normalizeValue } from './utils/normalize-value'\nexport { createStreamingReducer } from './builder/select/streaming-reducer'\nexport { createProgressiveReducer } from './builder/select/streaming-progressive-reducer'\nexport { executeWhereInSegmentsStreaming } from './builder/select/streaming-where-in-executor'\nexport {\n transformAggregateRow,\n extractCountValue,\n getRowTransformer,\n} from './builder/select/row-transformers'\nexport {\n getOrPrepareStatement,\n shouldSqliteUseGet,\n normalizeParams,\n executePostgresQuery,\n executeSqliteQuery,\n executeRaw,\n} from './generated-runtime'\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/normalize-value.ts","../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/validators/sql-validators.ts","../src/builder/shared/sql-utils.ts","../src/builder/shared/model-field-cache.ts","../src/builder/joins.ts","../src/builder/shared/int-like.ts","../src/builder/shared/dynamic-params.ts","../src/builder/shared/order-by-utils.ts","../src/builder/shared/order-by-determinism.ts","../src/builder/shared/primary-key-utils.ts","../src/builder/shared/validators/field-assertions.ts","../src/builder/pagination.ts","../src/builder/shared/null-comparison.ts","../src/builder/shared/in-operator-builder.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/array-utils.ts","../src/builder/where/builder.ts","../src/builder/shared/alias-generator.ts","../src/builder/shared/param-store.ts","../src/builder/shared/state.ts","../src/builder/where.ts","../src/builder/select/fields.ts","../src/builder/shared/relation-key-utils.ts","../src/builder/shared/relation-extraction-utils.ts","../src/builder/select/includes.ts","../src/builder/shared/string-builder.ts","../src/builder/shared/relation-utils.ts","../src/builder/select/flat-join.ts","../src/builder/select/assembly.ts","../src/builder/select.ts","../src/builder/shared/comparison-builder.ts","../src/builder/aggregates.ts","../src/sql-generator.ts","../src/utils/s3-fifo.ts","../src/fast-path.ts","../src/query-cache.ts","../src/builder/select/row-transformers.ts","../src/result-transformers.ts","../src/batch.ts","../src/transaction.ts","../src/builder/shared/key-utils.ts","../src/builder/select/reducer.ts","../src/builder/select/segment-planner.ts","../src/builder/shared/where-in-executor-base.ts","../src/builder/where-in-executor.ts","../src/builder/select/core-reducer.ts","../src/builder/select/streaming-reducer.ts","../src/builder/select/streaming-progressive-reducer.ts","../src/builder/select/streaming-where-in-executor.ts","../src/generated-runtime.ts","../src/index.ts"],"names":["s","isDynamicParameter","extractDynamicName","normalizeField","e","c","cursorField","ph","separator","placeholder","COMPARISON_OPS","base","clause","selectExpr","sql","isList","hasNestedIncludes","parts","normalizeOrderByInput","MAX_NOT_DEPTH","normalizeLogicalValue","buildLogicalClause","convertDMMFToModels","extractIncludeSpec","node","created","processRelation","buildChildArgs","stmt","useGet","rawResults","results","config","generateSQL"],"mappings":"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","file":"index.cjs","sourcesContent":["const MAX_DEPTH = 20\n\nexport function normalizeValue(\n value: unknown,\n seen = new WeakSet<object>(),\n depth = 0,\n): unknown {\n if (depth > MAX_DEPTH) {\n throw new Error(`Max normalization depth exceeded (${MAX_DEPTH} levels)`)\n }\n if (value instanceof Date) {\n return normalizeDateValue(value)\n }\n if (typeof value === 'bigint') {\n return value.toString()\n }\n if (Array.isArray(value)) {\n return normalizeArrayValue(value, seen, depth)\n }\n if (value && typeof value === 'object') {\n return normalizeObjectValue(value, seen, depth)\n }\n return value\n}\n\nfunction normalizeDateValue(date: Date): string {\n const t = date.getTime()\n if (!Number.isFinite(t)) {\n throw new Error('Invalid Date value in SQL params')\n }\n return date.toISOString()\n}\n\nfunction normalizeArrayValue(\n value: unknown[],\n seen: WeakSet<object>,\n depth: number,\n): unknown[] {\n const arrRef = value as unknown as object\n if (seen.has(arrRef)) {\n throw new Error('Circular reference in SQL params')\n }\n seen.add(arrRef)\n const out = value.map((v) => normalizeValue(v, seen, depth + 1))\n seen.delete(arrRef)\n return out\n}\n\nfunction normalizeObjectValue(\n value: object,\n seen: WeakSet<object>,\n depth: number,\n): unknown {\n if (value instanceof Uint8Array) return value\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) return value\n\n const proto = Object.getPrototypeOf(value)\n const isPlain = proto === Object.prototype || proto === null\n if (!isPlain) return value\n\n const obj = value as Record<string, unknown>\n if (seen.has(obj)) {\n throw new Error('Circular reference in SQL params')\n }\n seen.add(obj)\n const out: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(obj)) {\n out[k] = normalizeValue(v, seen, depth + 1)\n }\n seen.delete(obj)\n return out\n}\n","import { normalizeValue } from './utils/normalize-value'\n\nexport type SqlDialect = 'postgres' | 'sqlite'\n\nlet globalDialect: SqlDialect = 'postgres'\n\nexport function setGlobalDialect(dialect: SqlDialect): void {\n if (dialect !== 'postgres' && dialect !== 'sqlite') {\n throw new Error(\n `Invalid dialect: ${dialect}. Must be 'postgres' or 'sqlite'`,\n )\n }\n globalDialect = dialect\n}\n\nexport function getGlobalDialect(): SqlDialect {\n return globalDialect\n}\n\nexport function withDialect<T>(dialect: SqlDialect, fn: () => T): T {\n const prev = globalDialect\n globalDialect = dialect\n try {\n const result = fn()\n if (result instanceof Promise) {\n throw new Error(\n 'withDialect cannot be used with async functions. ' +\n 'Pass dialect explicitly to buildSQL() instead of relying on global state.',\n )\n }\n return result\n } finally {\n globalDialect = prev\n }\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 if (dialect === 'postgres') {\n return `${column} @> ARRAY[${value}]::${arrayType}`\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 if (dialect === 'postgres') {\n return `${column} && ${value}::${arrayType}`\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 if (dialect === 'postgres') {\n return `${column} @> ${value}::${arrayType}`\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 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 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 if (dialect === 'postgres') {\n return `${column} = ${value}::${arrayType}`\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 if (dialect === 'postgres') {\n return `${column} ILIKE ${pattern}`\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 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 if (dialect === 'postgres') {\n const p = String(path).trim()\n const pathExpr = /^\\$\\d+$/.test(p) ? `${p}::text[]` : p\n return `${column}#>>${pathExpr}`\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 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 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 if (dialect === 'postgres') {\n return `${column} = ANY(${value})`\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 if (dialect === 'postgres') {\n return `${column} != ALL(${value})`\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 if (dialect === 'sqlite') {\n return 'TEXT'\n }\n const baseType = prismaType.replace(/\\[\\]|\\?/g, '')\n switch (baseType) {\n case 'String':\n return 'text[]'\n case 'Int':\n return 'integer[]'\n case 'Float':\n return 'double precision[]'\n case 'Decimal':\n return 'numeric[]'\n case 'Boolean':\n return 'boolean[]'\n case 'BigInt':\n return 'bigint[]'\n case 'DateTime':\n return 'timestamptz[]'\n default:\n return `\"${baseType}\"[]`\n }\n}\n\nexport function jsonAgg(content: string, dialect: SqlDialect): string {\n assertNonEmpty(content, 'jsonAgg content')\n if (dialect === 'postgres') {\n return `json_agg(${content})`\n }\n return `json_group_array(${content})`\n}\n\nexport function jsonBuildObject(pairs: string, dialect: SqlDialect): string {\n const safePairs = (pairs ?? '').trim()\n if (dialect === 'postgres') {\n return safePairs.length > 0\n ? `json_build_object(${safePairs})`\n : `json_build_object()`\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 if (dialect === 'postgres') {\n return value.map((v) => normalizeValue(v))\n }\n return JSON.stringify(value.map((v) => normalizeValue(v)))\n}\n","export const IS_PRODUCTION = process.env.NODE_ENV === 'production'\n\nexport const SQL_SEPARATORS = Object.freeze({\n FIELD_LIST: ', ',\n CONDITION_AND: ' AND ',\n CONDITION_OR: ' OR ',\n ORDER_BY: ', ',\n} as const)\n\nexport const ALIAS_FORBIDDEN_KEYWORDS = new Set([\n 'select',\n 'from',\n 'where',\n 'having',\n 'order',\n 'group',\n 'limit',\n 'offset',\n 'join',\n 'inner',\n 'left',\n 'right',\n 'outer',\n 'cross',\n 'full',\n 'and',\n 'or',\n 'not',\n 'by',\n 'as',\n 'on',\n 'union',\n 'intersect',\n 'except',\n 'case',\n 'when',\n 'then',\n 'else',\n 'end',\n])\n\nexport const SQL_KEYWORDS = new Set([\n ...ALIAS_FORBIDDEN_KEYWORDS,\n 'user',\n 'users',\n 'table',\n 'column',\n 'index',\n 'values',\n 'in',\n 'like',\n 'between',\n 'is',\n 'exists',\n 'null',\n 'true',\n 'false',\n 'all',\n 'any',\n 'some',\n 'update',\n 'insert',\n 'delete',\n 'create',\n 'drop',\n 'alter',\n 'truncate',\n 'grant',\n 'revoke',\n 'exec',\n 'execute',\n])\n\nexport const SQL_RESERVED_WORDS = SQL_KEYWORDS\n\nexport const DEFAULT_WHERE_CLAUSE = '1=1' as const\n\nexport const SPECIAL_FIELDS = Object.freeze({\n ID: 'id',\n} as const)\n\nexport const SQL_TEMPLATES = Object.freeze({\n PUBLIC_SCHEMA: 'public',\n WHERE: 'WHERE',\n SELECT: 'SELECT',\n FROM: 'FROM',\n ORDER_BY: 'ORDER BY',\n GROUP_BY: 'GROUP BY',\n HAVING: 'HAVING',\n LIMIT: 'LIMIT',\n OFFSET: 'OFFSET',\n COUNT_ALL: 'COUNT(*)',\n AS: 'AS',\n DISTINCT_ON: 'DISTINCT ON',\n IS_NULL: 'IS NULL',\n IS_NOT_NULL: 'IS NOT NULL',\n LIKE: 'LIKE',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n} as const)\n\nexport const SCHEMA_PREFIXES = Object.freeze({\n INTERNAL: '@',\n COMMENT: '//',\n} as const)\n\nexport const Ops = Object.freeze({\n EQUALS: 'equals',\n NOT: 'not',\n GT: 'gt',\n GTE: 'gte',\n LT: 'lt',\n LTE: 'lte',\n IN: 'in',\n NOT_IN: 'notIn',\n CONTAINS: 'contains',\n STARTS_WITH: 'startsWith',\n ENDS_WITH: 'endsWith',\n HAS: 'has',\n HAS_SOME: 'hasSome',\n HAS_EVERY: 'hasEvery',\n IS_EMPTY: 'isEmpty',\n PATH: 'path',\n STRING_CONTAINS: 'string_contains',\n STRING_STARTS_WITH: 'string_starts_with',\n STRING_ENDS_WITH: 'string_ends_with',\n} as const)\n\nexport const LogicalOps = Object.freeze({\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n} as const)\n\nexport const RelationFilters = Object.freeze({\n SOME: 'some',\n EVERY: 'every',\n NONE: 'none',\n} as const)\n\nexport const Modes = Object.freeze({\n INSENSITIVE: 'insensitive',\n DEFAULT: 'default',\n} as const)\n\nexport const Wildcards: Readonly<Record<string, (v: string) => string>> =\n Object.freeze({\n [Ops.CONTAINS]: (v: string) => `%${v}%`,\n [Ops.STARTS_WITH]: (v: string) => `${v}%`,\n [Ops.ENDS_WITH]: (v: string) => `%${v}`,\n })\n\nexport const REGEX_CACHE = {\n PARAM_PLACEHOLDER: /\\$(\\d+)/g,\n VALID_IDENTIFIER: /^[a-z_][a-z0-9_]*$/,\n} as const\n\nexport const LIMITS = Object.freeze({\n MAX_QUERY_DEPTH: 50,\n MAX_ARRAY_SIZE: 10000,\n MAX_STRING_LENGTH: 10000,\n MAX_HAVING_DEPTH: 50,\n} as const)\n\nexport const AGGREGATE_PREFIXES = new Set([\n '_count',\n '_sum',\n '_avg',\n '_min',\n '_max',\n]) as ReadonlySet<string>\n","/**\n * Type Guards and Checks\n * Pure type checking with no business logic\n */\nexport function isNotNullish<T>(\n value: T | null | undefined,\n): value is NonNullable<T> {\n return value !== null && value !== undefined\n}\n\nexport function isNonEmptyString(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0\n}\n\nexport function isEmptyString(value: unknown): boolean {\n return typeof value === 'string' && value.trim().length === 0\n}\n\nexport function isNonEmptyArray<T>(value: unknown): value is T[] {\n return Array.isArray(value) && value.length > 0\n}\n\nexport function isEmptyArray(value: unknown): boolean {\n return Array.isArray(value) && value.length === 0\n}\n\nexport function isPlainObject(val: unknown): val is Record<string, unknown> {\n if (!isNotNullish(val)) return false\n if (Array.isArray(val)) return false\n if (typeof val !== 'object') return false\n return Object.prototype.toString.call(val) === '[object Object]'\n}\n\nexport function hasProperty<K extends string>(\n obj: unknown,\n key: K,\n): obj is Record<K, unknown> {\n return isPlainObject(obj) && key in obj\n}\n\nexport function isArrayType(t: string | undefined): boolean {\n if (!isNotNullish(t)) return false\n const normalized = t.replace(/\\?$/, '')\n return normalized.endsWith('[]')\n}\n\nexport function isJsonType(t: string | undefined): boolean {\n return isNotNullish(t) && (t === 'Json' || t === 'Json?')\n}\n\nexport function hasValidContent(sql: string): boolean {\n return isNotNullish(sql) && sql.trim().length > 0\n}\n\nexport function hasRequiredKeywords(sql: string): boolean {\n const upper = sql.toUpperCase()\n const hasSelect = upper.includes('SELECT')\n const hasFrom = upper.includes('FROM')\n return hasSelect && hasFrom && upper.indexOf('SELECT') < upper.indexOf('FROM')\n}\n","import { ErrorContext } from './types'\nimport { isNonEmptyArray, isNotNullish } from './validators/type-guards'\n\ntype SqlBuilderErrorCode =\n | 'FIELD_NOT_FOUND'\n | 'INVALID_OPERATOR'\n | 'INVALID_VALUE'\n | 'RELATION_ERROR'\n | 'PARAM_ERROR'\n | 'SQL_ERROR'\n | 'VALIDATION_ERROR'\n | 'CRITICAL'\n\nclass SqlBuilderError extends Error {\n public readonly code: SqlBuilderErrorCode\n public readonly context?: ErrorContext\n\n constructor(\n message: string,\n code: SqlBuilderErrorCode,\n context?: ErrorContext,\n ) {\n super(message)\n this.name = 'SqlBuilderError'\n this.code = code\n this.context = context\n }\n}\n\nexport function createError(\n message: string,\n ctx: ErrorContext,\n code: SqlBuilderErrorCode = 'VALIDATION_ERROR',\n): SqlBuilderError {\n const parts = [message]\n\n if (isNonEmptyArray(ctx.path)) {\n parts.push(`Path: ${ctx.path.join('.')}`)\n }\n\n if (isNotNullish(ctx.modelName)) {\n parts.push(`Model: ${ctx.modelName}`)\n }\n\n if (isNonEmptyArray(ctx.availableFields)) {\n parts.push(`Available fields: ${ctx.availableFields.join(', ')}`)\n }\n\n return new SqlBuilderError(parts.join('\\n'), code, ctx)\n}\n","import {\n DEFAULT_WHERE_CLAUSE,\n REGEX_CACHE,\n SQL_KEYWORDS,\n IS_PRODUCTION,\n} from '../constants'\nimport {\n isNotNullish,\n hasValidContent,\n hasRequiredKeywords,\n} from './type-guards'\nimport { SqlDialect } from '../../../sql-builder-dialect'\n\nexport function isValidWhereClause(clause: string): boolean {\n return (\n isNotNullish(clause) &&\n clause.trim().length > 0 &&\n clause !== DEFAULT_WHERE_CLAUSE\n )\n}\n\nexport function isEmptyWhere(\n where: Record<string, unknown> | null | undefined,\n): boolean {\n if (!isNotNullish(where)) return true\n return Object.keys(where).length === 0\n}\n\nfunction sqlPreview(sql: string): string {\n const s = String(sql)\n if (s.length <= 160) return s\n return `${s.slice(0, 160)}...`\n}\n\nexport function validateSelectQuery(sql: string): void {\n if (IS_PRODUCTION) return\n\n if (!hasValidContent(sql)) {\n throw new Error('CRITICAL: Generated empty SQL query')\n }\n\n if (!hasRequiredKeywords(sql)) {\n throw new Error(`CRITICAL: Invalid SQL structure. SQL: ${sqlPreview(sql)}`)\n }\n}\n\ntype DollarScan = {\n min: number\n max: number\n seen: Uint8Array\n sawAny: boolean\n}\n\nfunction parseDollarNumber(\n sql: string,\n start: number,\n): { next: number; num: number } {\n const n = sql.length\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 }\n return { next: i, num }\n}\n\nconst MAX_PARAMS = 32767\n\nfunction scanDollarPlaceholders(sql: string, markUpTo: number): DollarScan {\n if (markUpTo > MAX_PARAMS) {\n throw new Error(`Parameter count ${markUpTo} exceeds maximum ${MAX_PARAMS}`)\n }\n\n const seen = new Uint8Array(markUpTo + 1)\n let min = Number.POSITIVE_INFINITY\n let max = 0\n let sawAny = false\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 parsed = parseDollarNumber(sql, i + 1)\n i = parsed.next\n\n const num = parsed.num\n if (num === 0) continue\n\n sawAny = true\n if (num < min) min = num\n if (num > max) max = num\n if (num <= markUpTo) seen[num] = 1\n }\n\n if (!sawAny) {\n return { min: 0, max: 0, seen, sawAny: false }\n }\n\n return { min, max, seen, sawAny: true }\n}\n\nfunction assertNoGapsDollar(\n scan: DollarScan,\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 if (IS_PRODUCTION) return\n\n const paramLen = params.length\n const scan = scanDollarPlaceholders(sql, paramLen)\n\n if (paramLen === 0) {\n if (scan.sawAny) {\n throw new Error(\n `CRITICAL: SQL contains placeholders but params is empty. SQL: ${sqlPreview(sql)}`,\n )\n }\n return\n }\n\n if (!scan.sawAny) {\n throw new Error(\n `CRITICAL: SQL is missing placeholders ($1..$${paramLen}) but params has length ${paramLen}. SQL: ${sqlPreview(sql)}`,\n )\n }\n\n if (scan.min !== 1) {\n throw new Error(\n `CRITICAL: Placeholder range must start at $1, got min=$${scan.min}. SQL: ${sqlPreview(sql)}`,\n )\n }\n\n if (scan.max !== paramLen) {\n throw new Error(\n `CRITICAL: Placeholder max must match params length. max=$${scan.max}, params=${paramLen}. SQL: ${sqlPreview(sql)}`,\n )\n }\n\n assertNoGapsDollar(scan, 1, paramLen, sql)\n}\n\nfunction countQuestionMarkPlaceholders(sql: string): number {\n const s = String(sql)\n let count = 0\n for (let i = 0; i < s.length; i++) {\n if (s.charCodeAt(i) === 63) count++\n }\n return count\n}\n\nfunction validateQuestionMarkConsistency(\n sql: string,\n params: readonly unknown[],\n): void {\n if (IS_PRODUCTION) return\n\n const expected = params.length\n const found = countQuestionMarkPlaceholders(sql)\n\n if (expected !== found) {\n throw new Error(\n `CRITICAL: Parameter mismatch - expected ${expected} '?' placeholders, found ${found}. SQL: ${sqlPreview(sql)}`,\n )\n }\n}\n\nexport function validateParamConsistencyByDialect(\n sql: string,\n params: readonly unknown[],\n dialect: SqlDialect,\n): void {\n if (IS_PRODUCTION) return\n\n if (dialect === 'postgres') {\n validateParamConsistency(sql, params)\n return\n }\n\n if (dialect === 'sqlite') {\n validateQuestionMarkConsistency(sql, params)\n return\n }\n\n if ((dialect as any) === 'mysql' || (dialect as any) === 'mariadb') {\n validateQuestionMarkConsistency(sql, params)\n return\n }\n\n validateParamConsistency(sql, params)\n}\n\nexport function needsQuoting(identifier: string): boolean {\n if (!REGEX_CACHE.VALID_IDENTIFIER.test(identifier)) return true\n if (SQL_KEYWORDS.has(identifier.toLowerCase())) return true\n return false\n}\n","import { SqlDialect } from '../../sql-builder-dialect'\nimport { needsQuoting } from './validators/sql-validators'\nimport { isEmptyString, isNotNullish } from './validators/type-guards'\nimport type { Model } from '../../types'\nimport { getColumnMap, getQuotedColumn } from './model-field-cache'\nimport { ALIAS_FORBIDDEN_KEYWORDS } from './constants'\n\nconst COL_EXPR_CACHE = new WeakMap<Model, Map<string, string>>()\nconst COL_WITH_ALIAS_CACHE = new WeakMap<Model, Map<string, string>>()\n\nfunction containsControlChars(s: string): boolean {\n for (let i = 0; i < s.length; i++) {\n const code = s.charCodeAt(i)\n if ((code >= 0 && code <= 31) || code === 127) {\n return true\n }\n }\n return false\n}\n\nfunction assertNoControlChars(label: string, s: string): void {\n if (containsControlChars(s)) {\n throw new Error(\n `${label} contains invalid characters: ${JSON.stringify(s)}`,\n )\n }\n}\n\nfunction quoteRawIdent(id: string): string {\n return `\"${id.replace(/\"/g, '\"\"')}\"`\n}\n\nfunction isIdentCharCode(c: number): boolean {\n return (\n (c >= 48 && c <= 57) ||\n (c >= 65 && c <= 90) ||\n (c >= 97 && c <= 122) ||\n c === 95\n )\n}\n\nfunction isIdentStartCharCode(c: number): boolean {\n return (c >= 65 && c <= 90) || (c >= 97 && c <= 122) || c === 95\n}\n\nconst MAX_PARSE_ITERATIONS = 10000\n\nfunction parseQuotedPart(input: string, start: number): number {\n const n = input.length\n let i = start + 1\n let sawAny = false\n let iterations = 0\n\n while (i < n) {\n if (++iterations > MAX_PARSE_ITERATIONS) {\n throw new Error('Table name parsing exceeded complexity limit')\n }\n\n const c = input.charCodeAt(i)\n if (c === 34) {\n const next = i + 1\n if (next < n && input.charCodeAt(next) === 34) {\n sawAny = true\n i += 2\n continue\n }\n if (!sawAny) {\n throw new Error(\n `qualified name has empty quoted identifier part: ${JSON.stringify(input)}`,\n )\n }\n return i + 1\n }\n if (c === 10 || c === 13 || c === 0) {\n throw new Error(\n `qualified name contains invalid characters: ${JSON.stringify(input)}`,\n )\n }\n sawAny = true\n i++\n }\n\n throw new Error(\n `qualified name has unterminated quoted identifier: ${JSON.stringify(input)}`,\n )\n}\n\nfunction parseUnquotedPart(input: string, start: number): number {\n const n = input.length\n let i = start\n\n if (i >= n) {\n throw new Error(`qualified name is invalid: ${JSON.stringify(input)}`)\n }\n\n const c0 = input.charCodeAt(i)\n if (!isIdentStartCharCode(c0)) {\n throw new Error(\n `qualified name must use identifiers (or quoted identifiers). Got: ${JSON.stringify(input)}`,\n )\n }\n i++\n\n while (i < n) {\n const c = input.charCodeAt(i)\n if (c === 46) break\n if (!isIdentCharCode(c)) {\n throw new Error(\n `qualified name contains invalid identifier characters: ${JSON.stringify(input)}`,\n )\n }\n i++\n }\n\n return i\n}\n\nfunction validateQualifiedNameFormat(trimmed: string): void {\n for (let i = 0; i < trimmed.length; i++) {\n const c = trimmed.charCodeAt(i)\n if (c === 9 || c === 11 || c === 12 || c === 32) {\n throw new Error(\n `tableName/tableRef must not contain whitespace: ${JSON.stringify(trimmed)}`,\n )\n }\n if (c === 59) {\n throw new Error(\n `tableName/tableRef must not contain ';': ${JSON.stringify(trimmed)}`,\n )\n }\n if (c === 40 || c === 41) {\n throw new Error(\n `tableName/tableRef must not contain parentheses: ${JSON.stringify(trimmed)}`,\n )\n }\n }\n}\n\nfunction parseQualifiedNameParts(trimmed: string): void {\n let i = 0\n const n = trimmed.length\n let parts = 0\n\n while (i < n) {\n const c = trimmed.charCodeAt(i)\n if (c === 46) {\n throw new Error(\n `tableName/tableRef has empty identifier part: ${JSON.stringify(trimmed)}`,\n )\n }\n\n if (c === 34) {\n i = parseQuotedPart(trimmed, i)\n } else {\n i = parseUnquotedPart(trimmed, i)\n }\n\n parts++\n if (parts > 2) {\n throw new Error(\n `tableName/tableRef must be 'table' or 'schema.table' (max 2 parts). Got: ${JSON.stringify(trimmed)}`,\n )\n }\n\n if (i === n) break\n\n if (trimmed.charCodeAt(i) !== 46) {\n throw new Error(\n `tableName/tableRef is invalid: ${JSON.stringify(trimmed)}`,\n )\n }\n i++\n\n if (i === n) {\n throw new Error(\n `tableName/tableRef cannot end with '.': ${JSON.stringify(trimmed)}`,\n )\n }\n }\n}\n\nfunction assertSafeQualifiedName(input: string): void {\n const raw = String(input)\n const trimmed = raw.trim()\n\n if (trimmed.length === 0) {\n throw new Error('tableName/tableRef is required and cannot be empty')\n }\n\n if (raw !== trimmed) {\n throw new Error(\n `tableName/tableRef must not contain leading/trailing whitespace: ${JSON.stringify(raw)}`,\n )\n }\n\n assertNoControlChars('tableName/tableRef', trimmed)\n validateQualifiedNameFormat(trimmed)\n parseQualifiedNameParts(trimmed)\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 quoteRawIdent(id)\n }\n\n return id\n}\n\nexport function quoteColumn(\n model: Model | undefined,\n fieldName: string,\n): string {\n if (!model) return quote(fieldName)\n const cached = getQuotedColumn(model, fieldName)\n return cached || quote(fieldName)\n}\n\nfunction getOrCreateCache<K extends object, V>(\n weakMap: WeakMap<K, Map<string, V>>,\n key: K,\n): Map<string, V> {\n let cache = weakMap.get(key)\n if (!cache) {\n cache = new Map()\n weakMap.set(key, cache)\n }\n return cache\n}\n\nexport function col(alias: string, field: string, model?: Model): string {\n if (!model) return `${alias}.${quote(field)}`\n\n const cache = getOrCreateCache(COL_EXPR_CACHE, model)\n const cacheKey = `${alias}.${field}`\n\n let cached = cache.get(cacheKey)\n if (cached) return cached\n\n const quotedCol = getQuotedColumn(model, field) || quote(field)\n cached = `${alias}.${quotedCol}`\n cache.set(cacheKey, cached)\n return cached\n}\n\nexport function colWithAlias(\n alias: string,\n field: string,\n model?: Model,\n): string {\n if (isEmptyString(alias)) {\n throw new Error('colWithAlias: alias is required and cannot be empty')\n }\n\n if (isEmptyString(field)) {\n throw new Error('colWithAlias: field is required and cannot be empty')\n }\n\n if (!model) {\n return `${alias}.${quote(field)} AS ${quote(field)}`\n }\n\n const cache = getOrCreateCache(COL_WITH_ALIAS_CACHE, model)\n const cacheKey = `${alias}.${field}`\n\n let cached = cache.get(cacheKey)\n if (cached) return cached\n\n const columnMap = getColumnMap(model)\n const columnName = columnMap.get(field) || field\n const quotedCol = getQuotedColumn(model, field) || quote(columnName)\n const columnRef = `${alias}.${quotedCol}`\n\n if (columnName !== field) {\n cached = `${columnRef} AS ${quote(field)}`\n } else {\n cached = columnRef\n }\n\n cache.set(cacheKey, cached)\n return cached\n}\n\nexport function sqlStringLiteral(value: string): string {\n if (containsControlChars(value)) {\n throw new Error('sqlStringLiteral: value contains invalid characters')\n }\n return `'${value.replace(/'/g, \"''\")}'`\n}\n\nexport function buildTableReference(\n schemaName: string,\n tableName: string,\n dialect?: SqlDialect,\n): string {\n if (isEmptyString(tableName)) {\n throw new Error(\n 'buildTableReference: tableName is required and cannot be empty',\n )\n }\n\n if (containsControlChars(tableName)) {\n throw new Error(\n 'buildTableReference: tableName contains invalid characters',\n )\n }\n\n const d = dialect ?? 'postgres'\n if (d === 'sqlite') {\n return quote(tableName)\n }\n\n if (isEmptyString(schemaName)) {\n throw new Error(\n 'buildTableReference: schemaName is required and cannot be empty',\n )\n }\n\n if (containsControlChars(schemaName)) {\n throw new Error(\n 'buildTableReference: schemaName contains invalid characters',\n )\n }\n\n const safeSchema = schemaName.replace(/\"/g, '\"\"')\n const safeTable = tableName.replace(/\"/g, '\"\"')\n return `\"${safeSchema}\".\"${safeTable}\"`\n}\n\nexport function assertSafeAlias(alias: string): void {\n if (typeof alias !== 'string') {\n throw new Error(`Invalid alias: expected string, got ${typeof alias}`)\n }\n\n const a = alias.trim()\n\n if (a.length === 0) {\n throw new Error('Invalid alias: required and cannot be empty')\n }\n\n if (a !== alias) {\n throw new Error('Invalid alias: leading/trailing whitespace')\n }\n\n if (containsControlChars(a)) {\n throw new Error(\n 'Invalid alias: contains unsafe characters (control characters)',\n )\n }\n\n if (a.includes('\"') || a.includes(\"'\") || a.includes('`')) {\n throw new Error('Invalid alias: contains unsafe characters (quotes)')\n }\n\n if (a.includes(';')) {\n throw new Error('Invalid alias: contains unsafe characters (semicolon)')\n }\n\n if (a.includes('--') || a.includes('/*') || a.includes('*/')) {\n throw new Error(\n 'Invalid alias: contains unsafe characters (SQL comment tokens)',\n )\n }\n\n if (/\\s/.test(a)) {\n throw new Error(\n 'Invalid alias: must be a simple identifier without whitespace',\n )\n }\n\n if (!/^[A-Za-z_]\\w*$/.test(a)) {\n throw new Error(\n `Invalid alias: must be a simple identifier (alphanumeric with underscores): \"${alias}\"`,\n )\n }\n\n const lowered = a.toLowerCase()\n if (ALIAS_FORBIDDEN_KEYWORDS.has(lowered)) {\n throw new Error(\n `Invalid alias: '${alias}' is a SQL keyword that would break query parsing. ` +\n `Forbidden aliases: ${[...ALIAS_FORBIDDEN_KEYWORDS].join(', ')}`,\n )\n }\n}\n\nexport function assertSafeTableRef(tableRef: string): void {\n assertSafeQualifiedName(tableRef)\n}\n\nexport function normalizeKeyList(input: unknown): string[] {\n if (!isNotNullish(input)) return []\n\n if (Array.isArray(input)) {\n const out: string[] = []\n for (const v of input) {\n const s = String(v).trim()\n if (s.length > 0) out.push(s)\n }\n return out\n }\n\n if (typeof input === 'string') {\n const raw = input.trim()\n if (raw.length === 0) return []\n if (raw.includes(',')) {\n return raw\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0)\n }\n return [raw]\n }\n\n const s = String(input).trim()\n return s.length > 0 ? [s] : []\n}\n","import { Model, Field } from '../../types'\nimport { Field as ParsedField } from '@dee-wan/schema-parser'\nimport { quote } from './sql-utils'\n\ninterface FieldIndices {\n scalarFields: ReadonlyMap<string, Field>\n relationFields: ReadonlyMap<string, Field>\n scalarNames: readonly string[]\n relationNames: readonly string[]\n jsonFields: ReadonlySet<string>\n pkFields: readonly string[]\n columnMap: ReadonlyMap<string, string>\n quotedColumns: ReadonlyMap<string, string>\n}\n\nconst FIELD_INDICES_CACHE = new WeakMap<Model, FieldIndices>()\n\nfunction normalizeField(field: ParsedField): Field {\n return field as unknown as Field\n}\n\nexport function getFieldIndices(model: Model): FieldIndices {\n let cached = FIELD_INDICES_CACHE.get(model)\n if (cached) return cached\n\n const scalarFields = new Map<string, Field>()\n const relationFields = new Map<string, Field>()\n const scalarNames: string[] = []\n const relationNames: string[] = []\n const jsonFields = new Set<string>()\n const pkFields: string[] = []\n const columnMap = new Map<string, string>()\n const quotedColumns = new Map<string, string>()\n\n for (const rawField of model.fields) {\n const field = normalizeField(rawField)\n\n if (field.isRelation) {\n relationFields.set(field.name, field)\n relationNames.push(field.name)\n } else {\n scalarFields.set(field.name, field)\n scalarNames.push(field.name)\n\n const fieldType = String((field as any).type ?? '').toLowerCase()\n if (fieldType === 'json') {\n jsonFields.add(field.name)\n }\n\n if (\n (field as any).isId ||\n (field as any).isPrimaryKey ||\n (field as any).primaryKey\n ) {\n pkFields.push(field.name)\n }\n\n if (field.dbName && field.dbName !== field.name) {\n columnMap.set(field.name, field.dbName)\n }\n\n const columnName = field.dbName || field.name\n quotedColumns.set(field.name, quote(columnName))\n }\n }\n\n cached = Object.freeze({\n scalarFields,\n relationFields,\n scalarNames,\n relationNames,\n jsonFields,\n pkFields,\n columnMap,\n quotedColumns,\n })\n\n FIELD_INDICES_CACHE.set(model, cached)\n return cached\n}\n\nexport function getRelationFieldSet(model: Model): ReadonlySet<string> {\n return new Set(getFieldIndices(model).relationNames)\n}\n\nexport function getScalarFieldSet(model: Model): ReadonlySet<string> {\n return new Set(getFieldIndices(model).scalarNames)\n}\n\nexport function getColumnMap(model: Model): ReadonlyMap<string, string> {\n return getFieldIndices(model).columnMap\n}\n\nexport function getScalarFieldNames(model: Model): string[] {\n return [...getFieldIndices(model).scalarNames]\n}\n\nexport function getQuotedColumn(\n model: Model,\n fieldName: string,\n): string | undefined {\n return getFieldIndices(model).quotedColumns.get(fieldName)\n}\n\nexport function getJsonFieldSet(model: Model): ReadonlySet<string> {\n return getFieldIndices(model).jsonFields\n}\n\nexport function parseJsonIfNeeded(isJson: boolean, value: any): any {\n if (!isJson) return value\n if (value == null) return value\n if (typeof value !== 'string') return value\n try {\n return JSON.parse(value)\n } catch {\n return value\n }\n}\n\nexport function maybeParseJson(\n value: any,\n jsonSet: ReadonlySet<string>,\n fieldName: string,\n): any {\n if (!jsonSet.has(fieldName)) return value\n if (value == null) return value\n if (typeof value !== 'string') return value\n try {\n return JSON.parse(value)\n } catch {\n return value\n }\n}\n","import { Model, Field } from '../types'\nimport { SPECIAL_FIELDS } from './shared/constants'\nimport { createError } from './shared/errors'\nimport { getRelationFieldSet } from './shared/model-field-cache'\nimport {\n assertSafeAlias,\n normalizeKeyList,\n quoteColumn,\n} from './shared/sql-utils'\n\nimport { isNotNullish } from './shared/validators/type-guards'\n\nexport function isRelationField(fieldName: string, model: Model): boolean {\n return getRelationFieldSet(model).has(fieldName)\n}\n\nexport function isValidRelationField(field: Field | undefined): field is Field {\n if (!isNotNullish(field)) return false\n if (!field.isRelation) return false\n if (\n !isNotNullish(field.relatedModel) ||\n field.relatedModel.trim().length === 0\n )\n return false\n\n const fk = normalizeKeyList(field.foreignKey)\n if (fk.length === 0) return false\n\n const refs = normalizeKeyList(field.references)\n\n if (refs.length === 0) {\n return fk.length === 1\n }\n\n if (refs.length !== fk.length) return false\n\n return true\n}\n\nfunction getReferenceFieldNames(\n field: Field,\n foreignKeyCount: number,\n): string[] {\n const refs = normalizeKeyList(field.references)\n\n if (refs.length === 0) {\n if (foreignKeyCount === 1) return [SPECIAL_FIELDS.ID]\n return []\n }\n\n if (refs.length !== foreignKeyCount) return []\n return refs\n}\n\nexport function joinCondition(\n field: Field,\n parentModel: Model,\n childModel: Model,\n parentAlias: string,\n childAlias: string,\n): string {\n assertSafeAlias(parentAlias)\n assertSafeAlias(childAlias)\n\n const fkFields = normalizeKeyList(field.foreignKey)\n\n if (fkFields.length === 0) {\n throw createError(\n `Relation '${field.name}' is missing foreignKey. This indicates a schema parsing error. Relations must specify fields/references.`,\n { field: field.name },\n )\n }\n\n const refFields = getReferenceFieldNames(field, fkFields.length)\n\n if (refFields.length !== fkFields.length) {\n throw createError(\n `Relation '${field.name}' is missing references (or references count does not match foreignKey count). This is required to support non-id and composite keys.`,\n { field: field.name },\n )\n }\n\n const parts: string[] = []\n\n for (let i = 0; i < fkFields.length; i++) {\n const fk = fkFields[i]\n const ref = refFields[i]\n\n const left = field.isForeignKeyLocal\n ? `${childAlias}.${quoteColumn(childModel, ref)}`\n : `${childAlias}.${quoteColumn(childModel, fk)}`\n const right = field.isForeignKeyLocal\n ? `${parentAlias}.${quoteColumn(parentModel, fk)}`\n : `${parentAlias}.${quoteColumn(parentModel, ref)}`\n\n parts.push(`${left} = ${right}`)\n }\n\n return parts.length === 1 ? parts[0] : `(${parts.join(' AND ')})`\n}\n\nexport function getModelByName(\n schemas: Model[],\n name: string,\n): Model | undefined {\n return schemas.find((m) => m.name === name)\n}\n","import { isDynamicParameter } from '@dee-wan/schema-parser'\nimport { isNotNullish } from './validators/type-guards'\n\ntype NormalizeIntLikeOptions = {\n min?: number\n max?: number\n allowZero?: boolean\n}\n\nexport function normalizeIntLike(\n name: string,\n v: unknown,\n opts: NormalizeIntLikeOptions = {},\n): number | string | undefined {\n if (!isNotNullish(v)) return undefined\n if (isDynamicParameter(v)) return v as string\n\n if (typeof v !== 'number' || !Number.isFinite(v) || !Number.isInteger(v)) {\n throw new Error(`${name} must be an integer`)\n }\n\n const min = opts.min ?? 0\n const allowZero = opts.allowZero ?? true\n\n if (!allowZero && v === 0) {\n throw new Error(`${name} must be > 0`)\n }\n if (v < min) {\n throw new Error(`${name} must be >= ${min}`)\n }\n\n if (typeof opts.max === 'number' && v > opts.max) {\n throw new Error(`${name} must be <= ${opts.max}`)\n }\n\n return v\n}\n","import { extractDynamicName, isDynamicParameter } from '@dee-wan/schema-parser'\nimport { ParamStore } from './param-store'\n\nfunction scopeName(scope: string, dynamicName: string): string {\n const s = String(scope).trim()\n const dn = String(dynamicName).trim()\n if (s.length === 0) return dn\n return `${s}:${dn}`\n}\n\nexport function addAutoScoped(\n params: ParamStore,\n value: unknown,\n scope: string,\n): string {\n if (isDynamicParameter(value)) {\n const dn = extractDynamicName(value as string)\n console.log(`[PARAM] ${scope} = ${JSON.stringify(value)}`)\n return params.add(undefined, scopeName(scope, dn))\n }\n return params.add(value)\n}\n","import { isNotNullish, isPlainObject } from './validators/type-guards'\nimport { Model } from '../../types'\nimport { getScalarFieldSet } from './model-field-cache'\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'\n\nexport type OrderBySortObject = {\n direction: OrderByDirection\n nulls?: OrderByNulls\n}\n\ntype NormalizedOrderByValue = OrderByDirection | OrderBySortObject\ntype NormalizedOrderBy = Array<Record<string, NormalizedOrderByValue>>\n\ntype ParseOrderByValue = (\n v: unknown,\n field?: string,\n) => { direction: OrderByDirection; nulls?: OrderByNulls }\n\nexport interface OrderByEntry {\n field: string\n direction: OrderByDirection\n nulls?: OrderByNulls\n}\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 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 out: Record<string, unknown> = { ...obj }\n\n const hasSort = Object.prototype.hasOwnProperty.call(obj, 'sort')\n const hasDirection = Object.prototype.hasOwnProperty.call(obj, 'direction')\n\n if (hasSort) {\n out.sort = getNextSort(obj.sort)\n } else if (hasDirection) {\n out.direction = getNextSort(obj.direction)\n } else {\n out.sort = getNextSort(obj.sort)\n }\n\n if (typeof obj.nulls === 'string') {\n out.nulls = flipNulls(obj.nulls)\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 ? { direction: 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\nexport function normalizeAndValidateOrderBy(\n orderBy: unknown,\n model: Model,\n parseValue: ParseOrderByValue,\n): OrderByEntry[] {\n if (!isNotNullish(orderBy)) return []\n\n const normalized = normalizeOrderByInput(orderBy, parseValue)\n const entries: OrderByEntry[] = []\n const scalarSet = getScalarFieldSet(model)\n\n for (const item of normalized) {\n const [[field, value]] = Object.entries(item)\n\n if (!scalarSet.has(field)) {\n throw new Error(\n `orderBy field '${field}' not found on model ${model.name}`,\n )\n }\n\n if (typeof value === 'string') {\n entries.push({ field, direction: value as OrderByDirection })\n } else {\n entries.push({\n field,\n direction: (value as OrderBySortObject).direction,\n nulls: (value as OrderBySortObject).nulls,\n })\n }\n }\n\n return entries\n}\n","import { Model } from '../../types'\nimport { getScalarFieldSet } from './model-field-cache'\nimport { isNotNullish } from './validators/type-guards'\nimport { normalizeOrderByInput } from './order-by-utils'\n\ntype OrderByDirection = 'asc' | 'desc'\ntype NullsPosition = 'first' | 'last'\n\ntype ParsedOrderByValue = {\n direction: OrderByDirection\n nulls?: NullsPosition\n}\n\ntype ParseOrderByValue = (v: unknown, field?: string) => ParsedOrderByValue\n\nfunction findTiebreakerField(model?: Model): string | null {\n if (!model) return null\n\n const scalarSet = getScalarFieldSet(model)\n\n for (const f of model.fields) {\n if ((f as any).isId && !f.isRelation && scalarSet.has(f.name)) return f.name\n }\n\n if (scalarSet.has('id')) return 'id'\n\n return null\n}\n\nfunction hasTiebreaker(\n orderBy: unknown,\n parse: ParseOrderByValue,\n field: string,\n): boolean {\n if (!isNotNullish(orderBy)) return false\n const normalized = normalizeOrderByInput(orderBy, parse)\n return normalized.some((obj) =>\n Object.prototype.hasOwnProperty.call(obj, field),\n )\n}\n\nfunction addTiebreaker(orderBy: unknown, field: string): unknown {\n if (Array.isArray(orderBy)) return [...orderBy, { [field]: 'asc' }]\n return [orderBy, { [field]: 'asc' }]\n}\n\nexport function ensureDeterministicOrderByInput(args: {\n orderBy: unknown\n model?: Model\n parseValue: ParseOrderByValue\n}): unknown {\n const { orderBy, model, parseValue } = args\n\n const tiebreaker = findTiebreakerField(model)\n if (!tiebreaker) return orderBy\n\n if (!isNotNullish(orderBy)) {\n return { [tiebreaker]: 'asc' }\n }\n\n if (hasTiebreaker(orderBy, parseValue, tiebreaker)) return orderBy\n return addTiebreaker(orderBy, tiebreaker)\n}\n","import { Field, Model } from '../../types'\nimport { Field as ParsedField } from '@dee-wan/schema-parser'\nimport { getFieldIndices } from './model-field-cache'\n\nconst FIELD_BY_NAME_CACHE = new WeakMap<Model, Map<string, Field>>()\n\nfunction normalizeField(field: ParsedField): Field {\n return field as unknown as Field\n}\n\nexport function getPrimaryKeyFields(model: Model): string[] {\n const cached = getFieldIndices(model).pkFields\n if (cached.length > 0) return [...cached]\n\n const idField = model.fields.find(\n (f: any) => f.name === 'id' && !f.isRelation,\n )\n if (idField) return ['id']\n\n throw new Error(\n `Model ${model.name} has no primary key field. Models must have either fields with isId=true or a field named 'id'.`,\n )\n}\n\nexport function getPrimaryKeyField(model: Model): string {\n const fields = getPrimaryKeyFields(model)\n if (fields.length !== 1) {\n throw new Error(\n `getPrimaryKeyField requires single-field PK, but ${model.name} has ${fields.length} fields`,\n )\n }\n return fields[0]\n}\n\nexport function getFieldByName(\n model: Model,\n fieldName: string,\n): Field | undefined {\n let cache = FIELD_BY_NAME_CACHE.get(model)\n if (!cache) {\n cache = new Map()\n for (const rawField of model.fields) {\n const field = normalizeField(rawField)\n cache.set(field.name, field)\n }\n FIELD_BY_NAME_CACHE.set(model, cache)\n }\n\n return cache.get(fieldName)\n}\n","import { Model, Field } from '../../../types'\nimport { createError } from '../errors'\nimport { getFieldByName } from '../primary-key-utils'\n\nexport function assertFieldExists(\n fieldName: string,\n model: Model,\n context: string,\n path: readonly string[] = [],\n): Field {\n const field = getFieldByName(model, fieldName)\n if (!field) {\n throw createError(\n `${context}: field '${fieldName}' does not exist on model '${model.name}'`,\n {\n field: fieldName,\n modelName: model.name,\n path,\n availableFields: model.fields.map((f) => f.name),\n },\n )\n }\n return field\n}\n\nexport function assertScalarField(\n model: Model,\n fieldName: string,\n context: string,\n): Field {\n const field = assertFieldExists(fieldName, model, context)\n\n if (field.isRelation) {\n throw createError(\n `${context}: field '${fieldName}' is a relation field, expected scalar field`,\n { field: fieldName, modelName: model.name },\n )\n }\n\n return field\n}\n\nexport function assertNumericField(\n model: Model,\n fieldName: string,\n context: string,\n): Field {\n const field = assertScalarField(model, fieldName, context)\n\n const numericTypes = new Set([\n 'Int',\n 'BigInt',\n 'Float',\n 'Decimal',\n 'Int?',\n 'BigInt?',\n 'Float?',\n 'Decimal?',\n ])\n\n if (!numericTypes.has(field.type)) {\n throw createError(\n `${context}: field '${fieldName}' must be numeric (Int, BigInt, Float, Decimal), got '${field.type}'`,\n { field: fieldName, modelName: model.name },\n )\n }\n\n return field\n}\n\nexport function assertValidOperator(\n fieldName: string,\n operator: string,\n fieldType: string,\n path: readonly string[],\n modelName: string,\n): void {\n const stringOps = new Set([\n 'equals',\n 'not',\n 'in',\n 'notIn',\n 'lt',\n 'lte',\n 'gt',\n 'gte',\n 'contains',\n 'startsWith',\n 'endsWith',\n 'mode',\n 'search',\n ])\n\n const numericOps = new Set([\n 'equals',\n 'not',\n 'in',\n 'notIn',\n 'lt',\n 'lte',\n 'gt',\n 'gte',\n ])\n\n const jsonOps = new Set([\n 'equals',\n 'not',\n 'path',\n 'string_contains',\n 'string_starts_with',\n 'string_ends_with',\n 'array_contains',\n 'array_starts_with',\n 'array_ends_with',\n ])\n\n const isString = fieldType === 'String' || fieldType === 'String?'\n const isNumeric = ['Int', 'BigInt', 'Float', 'Decimal'].some(\n (t) => fieldType === t || fieldType === `${t}?`,\n )\n const isJson = fieldType === 'Json' || fieldType === 'Json?'\n\n if (isString && !stringOps.has(operator)) {\n throw createError(\n `Operator '${operator}' is not valid for String field '${fieldName}'`,\n { field: fieldName, modelName, path, operator },\n )\n }\n\n if (isNumeric && !numericOps.has(operator)) {\n throw createError(\n `Operator '${operator}' is not valid for numeric field '${fieldName}'`,\n { field: fieldName, modelName, path, operator },\n )\n }\n\n if (isJson && !jsonOps.has(operator)) {\n throw createError(\n `Operator '${operator}' is not valid for Json field '${fieldName}'`,\n { field: fieldName, modelName, path, operator },\n )\n }\n}\n","import { PrismaQueryArgs, Model } from '../types'\nimport { SQL_SEPARATORS } from './shared/constants'\nimport {\n col,\n quoteColumn,\n assertSafeAlias,\n assertSafeTableRef,\n} from './shared/sql-utils'\nimport { ParamStore } from './shared/param-store'\nimport { SqlDialect, getGlobalDialect } from '../sql-builder-dialect'\nimport {\n isNotNullish,\n isNonEmptyString,\n isPlainObject,\n} from './shared/validators/type-guards'\nimport { normalizeIntLike } from './shared/int-like'\nimport { addAutoScoped } from './shared/dynamic-params'\nimport { isDynamicParameter } from '@dee-wan/schema-parser'\nimport {\n normalizeAndValidateOrderBy,\n normalizeOrderByInput,\n} from './shared/order-by-utils'\nimport { ensureDeterministicOrderByInput } from './shared/order-by-determinism'\nimport { assertScalarField } from './shared/validators/field-assertions'\n\ntype OrderByDirection = 'asc' | 'desc'\ntype NullsPosition = 'first' | 'last'\n\ntype OrderByValueObject = { direction: OrderByDirection; nulls?: NullsPosition }\n\ntype OrderByEntry = {\n field: string\n direction: OrderByDirection\n nulls?: NullsPosition\n}\n\ntype IntOrDynamic = number | string\ntype MaybeIntOrDynamic = IntOrDynamic | undefined\ntype OrderByInput = unknown\ntype IncludeSelectArgs = Pick<PrismaQueryArgs, 'include' | 'select'>\n\nconst MAX_LIMIT_OFFSET = 2147483647\nconst ORDER_BY_ALLOWED_KEYS = new Set(['sort', 'nulls'])\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 for (const k of Object.keys(obj)) {\n if (!ORDER_BY_ALLOWED_KEYS.has(k)) {\n throw new Error(\n fieldName\n ? `Unsupported orderBy key '${k}' for field '${fieldName}'`\n : `Unsupported orderBy key '${k}'`,\n )\n }\n }\n}\n\nexport function parseOrderByValue(\n v: unknown,\n fieldName?: string,\n): OrderByValueObject {\n const errorPrefix = fieldName ? `orderBy for '${fieldName}'` : 'orderBy value'\n\n if (typeof v === 'string') {\n return { direction: parseDirectionRaw(v, `${errorPrefix} direction`) }\n }\n\n const obj = requireOrderByObject(v, errorPrefix)\n\n const direction = parseDirectionRaw(obj.sort, `${errorPrefix}.sort`)\n const nulls = parseNullsRaw(obj.nulls, `${errorPrefix}.nulls`)\n\n assertAllowedOrderByKeys(obj, fieldName)\n\n return { direction, nulls }\n}\n\nfunction normalizeNonNegativeInt(name: 'skip', v: unknown): IntOrDynamic {\n if (isDynamicParameter(v)) return v as string\n const result = normalizeIntLike(name, v, {\n min: 0,\n max: MAX_LIMIT_OFFSET,\n allowZero: true,\n })\n if (result === undefined)\n throw new Error(`${name} normalization returned undefined`)\n return result\n}\n\nconst MIN_NEGATIVE_TAKE = -10000\nfunction normalizeIntAllowNegative(name: 'take', v: unknown): IntOrDynamic {\n if (isDynamicParameter(v)) return v as string\n const result = normalizeIntLike(name, v, {\n min: MIN_NEGATIVE_TAKE,\n max: MAX_LIMIT_OFFSET,\n allowZero: true,\n })\n if (result === undefined)\n throw new Error(`${name} normalization returned undefined`)\n return result\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\nexport function readSkipTake(relArgs: unknown): {\n hasSkip: boolean\n hasTake: boolean\n skipVal: MaybeIntOrDynamic\n takeVal: MaybeIntOrDynamic\n} {\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 ? normalizeIntAllowNegative('take', obj.take)\n : undefined\n\n return { hasSkip, hasTake, skipVal, takeVal }\n}\n\nfunction buildOrderByFragment(\n entries: OrderByEntry[],\n alias: string,\n dialect: SqlDialect,\n model?: Model,\n): string {\n if (entries.length === 0) return ''\n\n const out: string[] = []\n for (const e of entries) {\n const dir = e.direction.toUpperCase()\n const c = col(alias, e.field, model)\n\n if (dialect === 'postgres') {\n const nulls = isNotNullish(e.nulls)\n ? ` NULLS ${e.nulls.toUpperCase()}`\n : ''\n out.push(c + ' ' + dir + nulls)\n continue\n }\n\n if (isNotNullish(e.nulls)) {\n const isNullExpr = `(${c} IS NULL)`\n const nullRankDir = e.nulls === 'first' ? 'DESC' : 'ASC'\n out.push(isNullExpr + ' ' + nullRankDir)\n out.push(c + ' ' + dir)\n continue\n }\n\n out.push(c + ' ' + dir)\n }\n\n return out.join(SQL_SEPARATORS.ORDER_BY)\n}\n\nfunction defaultNullsFor(\n dialect: SqlDialect,\n direction: OrderByDirection,\n): NullsPosition {\n if (dialect === 'postgres') return direction === 'asc' ? 'last' : 'first'\n return direction === 'asc' ? 'first' : 'last'\n}\n\nfunction ensureCursorFieldsInOrder(\n orderEntries: OrderByEntry[],\n cursorEntries: Array<[string, unknown]>,\n): OrderByEntry[] {\n if (cursorEntries.length === 0) return orderEntries\n\n const existing = new Set<string>()\n for (const entry of orderEntries) existing.add(entry.field)\n\n let out: OrderByEntry[] | null = null\n\n for (const [field] of cursorEntries) {\n if (!existing.has(field)) {\n if (!out) out = orderEntries.slice()\n out.push({ field, direction: 'asc' })\n existing.add(field)\n }\n }\n\n return out ?? orderEntries\n}\n\nfunction buildCursorFilterParts(\n cursor: Record<string, unknown>,\n cursorAlias: string,\n params: ParamStore,\n model?: Model,\n): { whereSql: string } {\n const parts: string[] = []\n\n for (const field in cursor) {\n if (!Object.prototype.hasOwnProperty.call(cursor, field)) continue\n\n const value = cursor[field]\n\n if (value === undefined) continue\n\n const c = cursorAlias + '.' + quoteColumn(model, field)\n\n if (value === null) {\n parts.push(c + ' IS NULL')\n continue\n }\n\n const ph = addAutoScoped(params, value, `cursor.filter.${field}`)\n parts.push(c + ' = ' + ph)\n }\n\n if (parts.length === 0) {\n throw new Error('cursor must have at least one field with defined value')\n }\n\n return {\n whereSql: parts.length === 1 ? parts[0] : '(' + parts.join(' AND ') + ')',\n }\n}\n\nfunction buildCursorEqualityExpr(\n columnExpr: string,\n cursorField: string,\n): string {\n return `((${cursorField} IS NULL AND ${columnExpr} IS NULL) OR (${cursorField} IS NOT NULL AND ${columnExpr} = ${cursorField}))`\n}\n\nfunction buildCursorInequalityExpr(\n columnExpr: string,\n direction: OrderByDirection,\n nulls: NullsPosition,\n cursorField: string,\n): string {\n const op = direction === 'asc' ? '>' : '<'\n\n if (nulls === 'first') {\n return `(CASE WHEN ${cursorField} IS NULL THEN (${columnExpr} IS NOT NULL) ELSE (${columnExpr} ${op} ${cursorField}) END)`\n }\n\n return `(CASE WHEN ${cursorField} IS NULL THEN 0=1 ELSE ((${columnExpr} ${op} ${cursorField}) OR (${columnExpr} IS NULL)) END)`\n}\n\nfunction buildCursorCteSelectList(\n cursorEntries: Array<[string, unknown]>,\n orderEntries: OrderByEntry[],\n model?: Model,\n): string {\n const seen = new Set<string>()\n const ordered: string[] = []\n\n for (const [f] of cursorEntries) {\n if (!seen.has(f)) {\n seen.add(f)\n ordered.push(f)\n }\n }\n\n for (const e of orderEntries) {\n if (!seen.has(e.field)) {\n seen.add(e.field)\n ordered.push(e.field)\n }\n }\n\n if (ordered.length === 0) throw new Error('cursor cte select list is empty')\n\n return ordered\n .map((f) => quoteColumn(model, f))\n .join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nfunction truncateIdent(name: string, maxLen: number): string {\n const s = String(name)\n return s.length <= maxLen ? s : s.slice(0, maxLen)\n}\n\nfunction buildCursorNames(outerAlias: string): {\n cteName: string\n srcAlias: string\n} {\n const maxLen = 63\n const base = outerAlias.toLowerCase()\n const cteName = truncateIdent(`__tp_cursor_${base}`, maxLen)\n const srcAlias = truncateIdent(`__tp_cursor_src_${base}`, maxLen)\n\n if (cteName === outerAlias || srcAlias === outerAlias) {\n return {\n cteName: truncateIdent(`__tp_cursor_${base}_x`, maxLen),\n srcAlias: truncateIdent(`__tp_cursor_src_${base}_x`, maxLen),\n }\n }\n\n return { cteName, srcAlias }\n}\n\nfunction assertCursorAndOrderFieldsScalar(\n model: Model | undefined,\n cursor: Record<string, unknown>,\n orderEntries: OrderByEntry[],\n): void {\n if (!model) return\n for (const k in cursor) {\n if (!Object.prototype.hasOwnProperty.call(cursor, k)) continue\n assertScalarField(model, k, 'cursor')\n }\n for (const e of orderEntries) {\n assertScalarField(model, e.field, 'orderBy')\n }\n}\n\nexport function buildCursorCondition(\n cursor: Record<string, unknown>,\n orderBy: unknown,\n tableName: string,\n alias: string,\n params: ParamStore,\n dialect?: SqlDialect,\n model?: Model,\n): { cte: string; condition: string } {\n assertSafeTableRef(tableName)\n assertSafeAlias(alias)\n\n const d = dialect ?? getGlobalDialect()\n\n const cursorEntries: Array<[string, unknown]> = []\n for (const k in cursor) {\n if (Object.prototype.hasOwnProperty.call(cursor, k)) {\n const value = cursor[k]\n if (value !== undefined) {\n cursorEntries.push([k, value])\n }\n }\n }\n\n if (cursorEntries.length === 0)\n throw new Error('cursor must have at least one field with defined value')\n\n const { cteName, srcAlias } = buildCursorNames(alias)\n assertSafeAlias(cteName)\n assertSafeAlias(srcAlias)\n\n const deterministicOrderBy = ensureDeterministicOrderByInput({\n orderBy,\n model,\n parseValue: parseOrderByValue,\n })\n\n let orderEntries = normalizeAndValidateOrderBy(\n orderBy,\n model!,\n parseOrderByValue,\n )\n if (orderEntries.length === 0) {\n orderEntries = cursorEntries.map(([field]) => ({\n field,\n direction: 'asc' as const,\n }))\n } else {\n orderEntries = ensureCursorFieldsInOrder(orderEntries, cursorEntries)\n }\n\n assertCursorAndOrderFieldsScalar(model, cursor, orderEntries)\n\n const { whereSql: cursorWhereSql } = buildCursorFilterParts(\n cursor,\n srcAlias,\n params,\n model,\n )\n\n const cursorOrderBy = orderEntries\n .map(\n (e) =>\n srcAlias +\n '.' +\n quoteColumn(model, e.field) +\n ' ' +\n e.direction.toUpperCase(),\n )\n .join(', ')\n\n const selectList = buildCursorCteSelectList(\n cursorEntries,\n orderEntries,\n model,\n )\n\n const cte =\n cteName +\n ' AS (\\n SELECT ' +\n selectList +\n ' FROM ' +\n tableName +\n ' ' +\n srcAlias +\n '\\n WHERE ' +\n cursorWhereSql +\n '\\n ORDER BY ' +\n cursorOrderBy +\n '\\n LIMIT 1\\n )'\n\n const existsExpr = 'EXISTS (SELECT 1 FROM ' + cteName + ')'\n\n const orClauses: string[] = []\n\n for (let level = 0; level < orderEntries.length; level++) {\n const andParts: string[] = []\n\n for (let i = 0; i < level; i++) {\n const e = orderEntries[i]\n const c = col(alias, e.field, model)\n const cursorField = cteName + '.' + quoteColumn(model, e.field)\n andParts.push(buildCursorEqualityExpr(c, cursorField))\n }\n\n const e = orderEntries[level]\n const c = col(alias, e.field, model)\n const cursorField = cteName + '.' + quoteColumn(model, e.field)\n const nulls = e.nulls ?? defaultNullsFor(d, e.direction)\n andParts.push(buildCursorInequalityExpr(c, e.direction, nulls, cursorField))\n\n orClauses.push('(' + andParts.join(SQL_SEPARATORS.CONDITION_AND) + ')')\n }\n\n const exclusive = orClauses.join(SQL_SEPARATORS.CONDITION_OR)\n\n const outerMatchParts: string[] = []\n for (const [field, value] of cursorEntries) {\n const c = col(alias, field, model)\n if (value === null) {\n outerMatchParts.push(c + ' IS NULL')\n continue\n }\n const ph = addAutoScoped(params, value, `cursor.outerMatch.${field}`)\n outerMatchParts.push(c + ' = ' + ph)\n }\n const outerCursorMatch =\n outerMatchParts.length === 1\n ? outerMatchParts[0]\n : '(' + outerMatchParts.join(SQL_SEPARATORS.CONDITION_AND) + ')'\n\n const condition =\n '(' +\n existsExpr +\n SQL_SEPARATORS.CONDITION_AND +\n '((' +\n exclusive +\n ')' +\n SQL_SEPARATORS.CONDITION_OR +\n '(' +\n outerCursorMatch +\n ')))'\n\n return { cte, condition }\n}\n\nexport function buildOrderBy(\n orderBy: unknown,\n alias: string,\n dialect?: SqlDialect,\n model?: Model,\n): string {\n assertSafeAlias(alias)\n\n const entries = normalizeAndValidateOrderBy(\n orderBy,\n model!,\n parseOrderByValue,\n )\n if (entries.length === 0) return ''\n\n const d = dialect ?? getGlobalDialect()\n return buildOrderByFragment(entries, alias, d, model)\n}\n\nexport function buildOrderByClause(\n args: PrismaQueryArgs,\n alias: string,\n dialect?: SqlDialect,\n model?: Model,\n): string {\n if (!isNotNullish(args.orderBy)) return ''\n\n const result = buildOrderBy(args.orderBy, alias, dialect, model)\n if (!isNonEmptyString(result)) {\n throw new Error(\n 'buildOrderByClause: orderBy specified but produced empty result',\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 === 0) return 0\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\nfunction buildOrderEntries(orderBy: unknown, model: Model): OrderByEntry[] {\n return normalizeAndValidateOrderBy(orderBy, model, parseOrderByValue)\n}\n","import { Ops, SQL_TEMPLATES } from './constants'\nimport { createError } from './errors'\n\nexport function buildNullComparison(\n expr: string,\n op: string,\n allowNull: boolean = false,\n): string | 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 return null\n}\n\nexport function tryBuildNullComparison(\n expr: string,\n op: string,\n val: unknown,\n context: string,\n): string | null {\n if (val !== null) return null\n\n const clause = buildNullComparison(expr, op)\n if (clause === null) {\n throw createError(`Operator '${op}' doesn't support null in ${context}`, {\n operator: op,\n })\n }\n return clause\n}\n","import { isDynamicParameter } from '@dee-wan/schema-parser'\nimport {\n inArray,\n notInArray,\n prepareArrayParam,\n SqlDialect,\n} from '../../sql-builder-dialect'\nimport { createError } from './errors'\nimport { ParamStore } from './param-store'\n\nexport function buildInCondition(\n expr: string,\n op: 'in' | 'notIn',\n val: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n context: string,\n): string {\n if (isDynamicParameter(val)) {\n const ph = params.addAuto(val)\n return op === 'in'\n ? inArray(expr, ph, dialect)\n : notInArray(expr, ph, dialect)\n }\n\n if (!Array.isArray(val)) {\n throw createError(`${context} requires array value`, {\n operator: op,\n value: val,\n })\n }\n\n if (val.length === 0) {\n return op === 'in' ? '0=1' : '1=1'\n }\n\n if (dialect === 'sqlite' && val.length <= 30) {\n const phs = val.map((item) => params.add(item))\n const list = phs.join(', ')\n return op === 'in' ? `${expr} IN (${list})` : `${expr} NOT IN (${list})`\n }\n\n const paramValue = prepareArrayParam(val, dialect)\n const ph = params.add(paramValue)\n return op === 'in'\n ? inArray(expr, ph, dialect)\n : notInArray(expr, ph, dialect)\n}\n","import { isDynamicParameter } from '@dee-wan/schema-parser'\nimport {\n caseInsensitiveLike,\n caseInsensitiveEquals,\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'\nimport { tryBuildNullComparison } from '../shared/null-comparison'\nimport { buildInCondition } from '../shared/in-operator-builder'\n\nconst MAX_NOT_DEPTH = 50\n\ninterface ScalarOperatorOptions {\n mode?: ModeType\n fieldType?: string\n dialect?: SqlDialect\n depth?: number\n}\n\ntype ModeType = 'insensitive' | 'default' | undefined\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\nfunction validateOperatorRequirements(\n op: string,\n mode: ModeType,\n dialect: SqlDialect | undefined,\n): void {\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) && !isNotNullish(dialect)) {\n throw createError(`Like operators require a SQL dialect`, { operator: op })\n }\n\n if ((op === Ops.IN || op === Ops.NOT_IN) && !isNotNullish(dialect)) {\n throw createError(`IN operators require a SQL dialect`, { operator: op })\n }\n\n if (\n op === Ops.EQUALS &&\n mode === Modes.INSENSITIVE &&\n !isNotNullish(dialect)\n ) {\n throw createError(`Insensitive equals requires a SQL dialect`, {\n operator: op,\n })\n }\n}\n\nfunction routeOperatorHandler(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n mode: ModeType,\n dialect: SqlDialect | undefined,\n): string | null {\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 return handleLikeOperator(expr, op, val, params, mode, dialect!)\n }\n\n if (op === Ops.IN || op === Ops.NOT_IN) {\n return buildInCondition(\n expr,\n op === Ops.IN ? 'in' : 'notIn',\n val,\n params,\n dialect!,\n 'WHERE clause',\n )\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 return null\n}\n\nexport function buildScalarOperator(\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n options: ScalarOperatorOptions = {},\n): string {\n const { mode, fieldType, dialect, depth = 0 } = options\n\n if (val === undefined) return ''\n\n if (depth > MAX_NOT_DEPTH) {\n throw new Error(\n `NOT operator nesting too deep (max ${MAX_NOT_DEPTH} levels). This usually indicates a circular reference or adversarial input.`,\n )\n }\n\n const nullCheck = tryBuildNullComparison(expr, op, val, 'WHERE clause')\n if (nullCheck) return nullCheck\n\n if (op === Ops.NOT && isPlainObject(val)) {\n return handleNotOperator(expr, val, params, mode, fieldType, dialect, depth)\n }\n\n if (op === Ops.NOT) {\n const placeholder = params.addAuto(val)\n return `${expr} <> ${placeholder}`\n }\n\n validateOperatorRequirements(op, mode, dialect)\n\n const specialHandler = routeOperatorHandler(\n expr,\n op,\n val,\n params,\n mode,\n dialect,\n )\n if (specialHandler !== null) {\n return specialHandler\n }\n\n return handleComparisonOperator(expr, op, val, params)\n}\n\nfunction normalizeMode(v: unknown): ModeType {\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?: ModeType,\n fieldType?: string,\n dialect?: SqlDialect,\n depth: number = 0,\n): string {\n const innerMode = normalizeMode(val.mode)\n const effectiveMode = innerMode ?? outerMode\n\n const entries = Object.entries(val).filter(\n ([k, v]) => k !== 'mode' && v !== undefined,\n )\n if (entries.length === 0) return ''\n\n if (!isNotNullish(dialect)) {\n const clauses: string[] = []\n for (const [subOp, subVal] of entries) {\n const sub = buildScalarOperator(expr, subOp, subVal, params, {\n mode: effectiveMode,\n fieldType,\n dialect: undefined,\n depth: depth + 1,\n })\n if (sub && sub.trim().length > 0) clauses.push(`(${sub})`)\n }\n\n if (clauses.length === 0) return ''\n if (clauses.length === 1) return `${SQL_TEMPLATES.NOT} ${clauses[0]}`\n const separator = ` ${SQL_TEMPLATES.AND} `\n return `${SQL_TEMPLATES.NOT} (${clauses.join(separator)})`\n }\n\n const separator = ` ${SQL_TEMPLATES.AND} `\n return buildNotComposite(\n expr,\n val,\n params,\n dialect,\n (e, subOp, subVal, p, d) =>\n buildScalarOperator(e, subOp, subVal, p, {\n mode: effectiveMode,\n fieldType,\n dialect: d,\n depth: depth + 1,\n }),\n separator,\n )\n}\n\nfunction buildDynamicLikePattern(op: string, placeholder: string): string {\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: ModeType,\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)\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 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'\nimport { tryBuildNullComparison } from '../shared/null-comparison'\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 if (val.length > LIMITS.MAX_ARRAY_SIZE) {\n throw createError(\n `Array too large (${val.length} elements, max ${LIMITS.MAX_ARRAY_SIZE})`,\n { value: `[${val.length} items]` },\n )\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 const nullCheck = tryBuildNullComparison(expr, op, val, 'array operators')\n if (nullCheck) return nullCheck\n\n const cast = getArrayType(fieldType, dialect)\n\n if (op === Ops.EQUALS) {\n return handleArrayEquals(expr, val, params, cast, dialect)\n }\n\n if (op === Ops.NOT) {\n return handleArrayNot(expr, val, params, cast, dialect)\n }\n\n switch (op) {\n case Ops.HAS:\n return handleArrayHas(expr, val, params, cast, dialect)\n case Ops.HAS_SOME:\n return handleArrayHasSome(expr, val, params, cast, dialect)\n case Ops.HAS_EVERY:\n return handleArrayHasEvery(expr, val, params, cast, dialect)\n case Ops.IS_EMPTY:\n return handleArrayIsEmpty(expr, val, dialect)\n default:\n throw createError(`Unknown array operator: ${op}`, { operator: op })\n }\n}\n\nfunction handleArrayEquals(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (isEmptyArray(val)) {\n return arrayIsEmpty(expr, dialect)\n }\n\n const placeholder = buildArrayParam(val, params, dialect)\n return arrayEquals(expr, placeholder, cast, dialect)\n}\n\nfunction handleArrayNot(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n let target: unknown = val\n\n if (isPlainObject(val)) {\n const entries = Object.entries(val).filter(([, v]) => v !== undefined)\n if (entries.length === 1 && entries[0][0] === Ops.EQUALS) {\n target = entries[0][1]\n } else {\n throw createError(`Array NOT only supports { equals: ... } shape`, {\n operator: Ops.NOT,\n value: val,\n })\n }\n }\n\n if (target === null) {\n return `${expr} ${SQL_TEMPLATES.IS_NOT_NULL}`\n }\n\n if (isEmptyArray(target)) {\n return arrayIsNotEmpty(expr, dialect)\n }\n\n const placeholder = buildArrayParam(target, params, dialect)\n return `${T.NOT} (${arrayEquals(expr, placeholder, cast, dialect)})`\n}\n\nfunction handleArrayHas(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (val === null) {\n throw createError(`has requires scalar value`, {\n operator: Ops.HAS,\n value: val,\n })\n }\n\n if (!isDynamicParameter(val) && Array.isArray(val)) {\n throw createError(`has requires scalar value (single element), not array`, {\n operator: Ops.HAS,\n value: val,\n })\n }\n\n if (isPlainObject(val)) {\n throw createError(`has requires scalar value`, {\n operator: Ops.HAS,\n value: val,\n })\n }\n\n const placeholder = params.addAuto(val)\n return arrayContains(expr, placeholder, cast, dialect)\n}\n\nfunction handleArrayHasSome(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n if (isDynamicParameter(val)) {\n const placeholder = params.addAuto(val)\n return arrayOverlaps(expr, placeholder, cast, dialect)\n }\n\n if (!Array.isArray(val)) {\n throw createError(`hasSome requires array value`, {\n operator: Ops.HAS_SOME,\n value: val,\n })\n }\n\n if (val.length > LIMITS.MAX_ARRAY_SIZE) {\n throw createError(\n `Array too large (${val.length} elements, max ${LIMITS.MAX_ARRAY_SIZE})`,\n { operator: Ops.HAS_SOME, value: `[${val.length} items]` },\n )\n }\n\n if (val.length === 0) return '0=1'\n\n const paramValue = prepareArrayParam(val as unknown[], dialect)\n const placeholder = params.add(paramValue)\n return arrayOverlaps(expr, placeholder, cast, dialect)\n}\n\nfunction handleArrayHasEvery(\n expr: string,\n val: unknown,\n params: ParamStore,\n cast: string,\n dialect: SqlDialect,\n): string {\n if (val === undefined) return ''\n\n const placeholder = buildArrayParam(val, params, dialect)\n return arrayContainsAll(expr, placeholder, cast, dialect)\n}\n\nfunction handleArrayIsEmpty(\n expr: string,\n val: unknown,\n dialect: SqlDialect,\n): string {\n if (typeof val !== 'boolean') {\n throw createError(`isEmpty requires boolean value`, {\n operator: Ops.IS_EMPTY,\n value: val,\n })\n }\n\n return val === true\n ? arrayIsEmpty(expr, dialect)\n : arrayIsNotEmpty(expr, dialect)\n}\n","import {\n jsonExtractText,\n jsonExtractNumeric,\n jsonToText,\n caseInsensitiveLike,\n SqlDialect,\n} from '../../sql-builder-dialect'\nimport { LIMITS, Ops, SQL_TEMPLATES } from '../shared/constants'\nimport { createError } from '../shared/errors'\nimport { ParamStore } from '../shared/param-store'\nimport { isNotNullish, isPlainObject } from '../shared/validators/type-guards'\n\nconst SAFE_JSON_PATH_SEGMENT = /^[a-zA-Z_]\\w*$/\nconst MAX_PATH_SEGMENT_LENGTH = 255\nconst MAX_PATH_SEGMENTS = 100\n\nfunction sanitizeForError(s: string): string {\n let result = ''\n for (let i = 0; i < s.length; i++) {\n const code = s.charCodeAt(i)\n if ((code >= 0 && code <= 31) || code === 127) {\n result += `\\\\x${code.toString(16).padStart(2, '0')}`\n } else {\n result += s[i]\n }\n }\n return result\n}\n\nfunction validateJsonPathSegments(segments: string[]): void {\n if (segments.length > MAX_PATH_SEGMENTS) {\n throw createError(`JSON path too long: max ${MAX_PATH_SEGMENTS} segments`, {\n operator: Ops.PATH,\n })\n }\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i]\n\n if (typeof segment !== 'string') {\n throw createError(`JSON path segment at index ${i} must be string`, {\n operator: Ops.PATH,\n })\n }\n\n if (segment.length > MAX_PATH_SEGMENT_LENGTH) {\n throw createError(\n `JSON path segment at index ${i} too long: max ${MAX_PATH_SEGMENT_LENGTH} characters`,\n { operator: Ops.PATH },\n )\n }\n\n if (!SAFE_JSON_PATH_SEGMENT.test(segment)) {\n throw createError(\n `Invalid JSON path segment at index ${i}: '${sanitizeForError(segment)}'`,\n { operator: Ops.PATH },\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 quoteColumn,\n} from '../shared/sql-utils'\nimport { BuildContext, QueryResult } from '../shared/types'\nimport { isNotNullish, isPlainObject } from '../shared/validators/type-guards'\nimport { Field, Model } from '../../types'\nimport { getFieldByName } from '../shared/primary-key-utils'\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[] = []\n\nfunction isListRelation(fieldType: unknown): boolean {\n return typeof fieldType === 'string' && fieldType.endsWith('[]')\n}\n\nfunction buildToOneNullCheck(\n field: Field,\n parentModel: Model,\n parentAlias: string,\n relTable: string,\n relAlias: string,\n join: string,\n wantNull: boolean,\n): string {\n const isLocal = field.isForeignKeyLocal === true\n const fkFields = normalizeKeyList(field.foreignKey)\n\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 expr = `${parentAlias}.${quoteColumn(parentModel, fk)}`\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 tryOptimizeNoneFilter(\n noneValue: unknown,\n ctx: BuildContext,\n relModel: Model,\n relTable: string,\n relAlias: string,\n join: string,\n sub: QueryResult,\n): QueryResult | null {\n const isEmptyFilter =\n isPlainObject(noneValue) && Object.keys(noneValue).length === 0\n\n const canOptimize =\n !ctx.isSubquery &&\n isEmptyFilter &&\n sub.clause === DEFAULT_WHERE_CLAUSE &&\n sub.joins.length === 0\n\n if (!canOptimize) return null\n\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) return null\n\n const leftJoinSql = `LEFT JOIN ${relTable} ${relAlias} ON ${join}`\n const whereClause = `${relAlias}.${quoteColumn(relModel, checkField.name)} IS NULL`\n\n return {\n clause: whereClause,\n joins: [leftJoinSql],\n }\n}\n\nfunction processRelationFilter(\n key:\n | typeof RelationFilters.SOME\n | typeof RelationFilters.EVERY\n | typeof RelationFilters.NONE,\n wrap: (c: string, j: string) => string,\n args: RelationFilterArgs,\n): string | null {\n const { value, fieldName, ctx, relAlias, relModel, whereBuilder } = args\n const raw = value[key]\n if (raw === undefined || raw === null) return null\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 return wrap(sub.clause, j)\n}\n\nfunction buildListRelationFilters(args: RelationFilterArgs): QueryResult {\n const {\n fieldName,\n value,\n ctx,\n whereBuilder,\n relModel,\n relTable,\n relAlias,\n join,\n } = args\n\n const noneValue = value[RelationFilters.NONE]\n\n if (noneValue !== undefined && noneValue !== null) {\n const isEmptyFilter =\n isPlainObject(noneValue) && Object.keys(noneValue).length === 0\n\n if (isEmptyFilter && !ctx.isSubquery) {\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}.${quoteColumn(relModel, checkField.name)} IS NULL`\n return { clause: whereClause, joins: [leftJoinSql] }\n }\n }\n }\n\n const filters: Array<{\n key:\n | typeof RelationFilters.SOME\n | typeof RelationFilters.EVERY\n | typeof RelationFilters.NONE\n wrap: (c: string, j: string) => string\n }> = [\n {\n key: RelationFilters.SOME,\n wrap: (c, j) =>\n `EXISTS (${SQL_TEMPLATES.SELECT} 1 ${SQL_TEMPLATES.FROM} ${relTable} ${relAlias}${j} ${SQL_TEMPLATES.WHERE} ${join} ${SQL_TEMPLATES.AND} ${c})`,\n },\n {\n key: RelationFilters.EVERY,\n wrap: (c, j) =>\n `${SQL_TEMPLATES.NOT} EXISTS (${SQL_TEMPLATES.SELECT} 1 ${SQL_TEMPLATES.FROM} ${relTable} ${relAlias}${j} ${SQL_TEMPLATES.WHERE} ${join} ${SQL_TEMPLATES.AND} ${SQL_TEMPLATES.NOT} (${c}))`,\n },\n {\n key: RelationFilters.NONE,\n wrap: (c, j) => {\n const condition =\n c === DEFAULT_WHERE_CLAUSE ? '' : ` ${SQL_TEMPLATES.AND} ${c}`\n return `${SQL_TEMPLATES.NOT} EXISTS (${SQL_TEMPLATES.SELECT} 1 ${SQL_TEMPLATES.FROM} ${relTable} ${relAlias}${j} ${SQL_TEMPLATES.WHERE} ${join}${condition})`\n },\n },\n ]\n\n const clauses: string[] = []\n\n for (const { key, wrap } of filters) {\n const clause = processRelationFilter(key, wrap, args)\n if (clause) clauses.push(clause)\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 {\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 {\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.model,\n ctx.alias,\n relTable,\n relAlias,\n join,\n wantNull,\n )\n return {\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 {\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 = getFieldByName(ctx.model, 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\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\n const relAlias = ctx.aliasGen.next(fieldName)\n\n const join = joinCondition(field, ctx.model, relModel, ctx.alias, relAlias)\n\n const args: RelationFilterArgs = {\n fieldName,\n value,\n ctx,\n whereBuilder,\n field,\n relModel,\n relTable,\n relAlias,\n join,\n }\n\n if (isListRelation(field.type)) return buildListRelationFilters(args)\n return buildToOneRelationFilters(args)\n}\n\nexport function buildTopLevelRelation(\n fieldName: string,\n value: Record<string, unknown>,\n ctx: BuildContext,\n whereBuilder: IWhereBuilder,\n): QueryResult {\n ensureRelationFilterObject(fieldName, value, ctx)\n return buildRelation(fieldName, value, ctx, whereBuilder)\n}\n\nexport function buildNestedRelation(\n fieldName: string,\n value: Record<string, unknown>,\n ctx: BuildContext,\n whereBuilder: IWhereBuilder,\n): QueryResult {\n return buildTopLevelRelation(fieldName, value, ctx, whereBuilder)\n}\n","export function deduplicatePreserveOrder<T>(items: readonly T[]): readonly T[] {\n if (items.length <= 1) return Object.freeze([...items])\n\n const seen = new Set<T>()\n const out: T[] = []\n\n for (const item of items) {\n if (!seen.has(item)) {\n seen.add(item)\n out.push(item)\n }\n }\n\n return out\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 { assertFieldExists } from '../shared/validators/field-assertions'\nimport { isValidWhereClause } from '../shared/validators/sql-validators'\nimport {\n isNonEmptyArray,\n isArrayType,\n isJsonType,\n isPlainObject,\n} from '../shared/validators/type-guards'\nimport { deduplicatePreserveOrder } from '../shared/array-utils'\nimport { buildNullComparison } from '../shared/null-comparison'\n\ntype LogicalOperator = 'AND' | 'OR' | 'NOT'\n\nconst MAX_QUERY_DEPTH = 50\nconst EMPTY_JOINS: readonly string[] = []\nconst JSON_OPS = new Set([\n Ops.PATH,\n Ops.STRING_CONTAINS,\n Ops.STRING_STARTS_WITH,\n Ops.STRING_ENDS_WITH,\n])\n\nclass WhereBuilder implements IWhereBuilder {\n build(where: Record<string, unknown>, ctx: BuildContext): QueryResult {\n if (!isPlainObject(where)) {\n throw createError('where must be an object', {\n path: ctx.path,\n modelName: ctx.model.name,\n })\n }\n return buildWhereInternal(where, ctx, this)\n }\n}\n\nexport const whereBuilderInstance = new WhereBuilder()\n\nfunction createResult(\n clause: string,\n joins: readonly string[] = EMPTY_JOINS,\n): QueryResult {\n return { clause, joins }\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 buildSimpleEquality(\n expr: string,\n value: unknown,\n ctx: BuildContext,\n): string {\n if (value === null) return `${expr} ${SQL_TEMPLATES.IS_NULL}`\n const placeholder = ctx.params.addAuto(value)\n return `${expr} = ${placeholder}`\n}\n\nfunction isSimpleWhere(where: Record<string, unknown>): boolean {\n const keys = Object.keys(where)\n if (keys.length !== 1) return false\n\n const key = keys[0]\n const value = where[key]\n\n if (value === null) return true\n if (value === undefined) return false\n if (typeof value === 'string') return true\n if (typeof value === 'number') return true\n if (typeof value === 'boolean') return true\n\n return false\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 (!isPlainObject(where) || Object.keys(where).length === 0) {\n return createResult(DEFAULT_WHERE_CLAUSE, EMPTY_JOINS)\n }\n\n if (isSimpleWhere(where)) {\n const key = Object.keys(where)[0]\n const value = where[key]\n assertFieldExists(key, ctx.model, 'WHERE', ctx.path)\n const expr = col(ctx.alias, key, ctx.model)\n const clause = buildSimpleEquality(expr, value, ctx)\n return createResult(clause, EMPTY_JOINS)\n }\n\n const allJoins: string[] = []\n const clauses: string[] = []\n\n for (const key in where) {\n const value = where[key]\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 const dedupedJoins = deduplicatePreserveOrder(allJoins)\n\n return createResult(finalClause, dedupedJoins)\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 const dedupedJoins = deduplicatePreserveOrder(allJoins)\n\n return {\n joins: dedupedJoins,\n 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 createResult(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 createResult(clause, joins)\n}\n\nfunction buildScalarField(\n fieldName: string,\n value: unknown,\n ctx: BuildContext,\n): QueryResult {\n const field = assertFieldExists(fieldName, ctx.model, 'WHERE', ctx.path)\n const expr = col(ctx.alias, fieldName, ctx.model)\n\n if (value === null) {\n return createResult(`${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 createResult(DEFAULT_WHERE_CLAUSE, EMPTY_JOINS)\n }\n\n const parts: string[] = []\n for (const [op, val] of ops) {\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 createResult(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 createResult(clause || DEFAULT_WHERE_CLAUSE, EMPTY_JOINS)\n}\n\nfunction buildOperator(\n expr: string,\n op: string,\n val: unknown,\n ctx: BuildContext,\n mode?: 'insensitive' | 'default',\n fieldType?: string,\n): string {\n if (fieldType && isArrayType(fieldType)) {\n return buildArrayOperator(expr, op, val, ctx.params, fieldType, ctx.dialect)\n }\n\n if (fieldType && isJsonType(fieldType) && JSON_OPS.has(op as any)) {\n return buildJsonOperator(expr, op, val, ctx.params, ctx.dialect)\n }\n\n return buildScalarOperator(expr, op, val, ctx.params, {\n mode,\n fieldType,\n dialect: ctx.dialect,\n })\n}\n","import { AliasGenerator } from './types'\nimport { ALIAS_FORBIDDEN_KEYWORDS } from './constants'\n\nconst SAFE_IDENTIFIER_CACHE = new Map<string, string>()\n\nfunction toSafeSqlIdentifier(input: string): string {\n const cached = SAFE_IDENTIFIER_CACHE.get(input)\n if (cached !== undefined) return cached\n\n const raw = String(input)\n const n = raw.length\n\n if (n === 0) {\n SAFE_IDENTIFIER_CACHE.set(input, '_t')\n return '_t'\n }\n\n let out = ''\n for (let i = 0; i < n; i++) {\n const c = raw.charCodeAt(i)\n const isAZ = (c >= 65 && c <= 90) || (c >= 97 && c <= 122)\n const is09 = c >= 48 && c <= 57\n const isUnderscore = c === 95\n\n out += isAZ || is09 || isUnderscore ? raw[i] : '_'\n }\n\n const c0 = out.charCodeAt(0)\n const startsOk =\n (c0 >= 65 && c0 <= 90) || (c0 >= 97 && c0 <= 122) || c0 === 95\n const lowered = (startsOk ? out : `_${out}`).toLowerCase()\n\n const result = ALIAS_FORBIDDEN_KEYWORDS.has(lowered) ? `_${lowered}` : lowered\n\n if (SAFE_IDENTIFIER_CACHE.size < 1000) {\n SAFE_IDENTIFIER_CACHE.set(input, result)\n }\n\n return result\n}\n\nexport function createAliasGenerator(\n maxAliases: number = 10000,\n): AliasGenerator {\n let counter = 0\n const usedAliases = new Set<string>()\n\n const maxLen = 63\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 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 )\n }\n usedAliases.add(alias)\n\n return alias\n },\n }\n}\n","import {\n extractDynamicName,\n isDynamicParameter,\n ParamMap,\n} from '@dee-wan/schema-parser'\nimport { normalizeValue } from '../../utils/normalize-value'\nimport { SqlDialect } from '../../sql-builder-dialect'\n\nexport interface ParamStore {\n add(value: unknown, dynamicName?: string): string\n addAuto(value: unknown): string\n snapshot(): ParamSnapshot\n readonly index: number\n readonly dialect: SqlDialect\n}\n\ninterface ParamSnapshot {\n readonly index: number\n readonly params: readonly unknown[]\n readonly mappings: readonly ParamMap[]\n readonly dynamicNameIndex: ReadonlyMap<string, number>\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 validateMappings(mappings: readonly ParamMap[]): void {\n const seenDynamic = new Set<string>()\n for (let i = 0; i < mappings.length; i++) {\n const m = mappings[i]\n assertSequentialIndex(m.index, i + 1)\n assertExactlyOneOfDynamicOrValue(m)\n\n if (typeof m.dynamicName === 'string') {\n const dn = normalizeDynamicNameOrThrow(m.dynamicName, m.index)\n if (seenDynamic.has(dn)) {\n throw new Error(`CRITICAL: Duplicate dynamic param name: ${dn}`)\n }\n seenDynamic.add(dn)\n }\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 if (mappings.length === 0) return\n validateMappings(mappings)\n assertNextIndexMatches(mappings.length, index)\n}\n\nfunction buildDynamicNameIndex(\n mappings: readonly ParamMap[],\n): Map<string, number> {\n const dynamicNameToIndex = new Map<string, number>()\n for (const m of mappings) {\n if (typeof m.dynamicName === 'string') {\n dynamicNameToIndex.set(m.dynamicName.trim(), m.index)\n }\n }\n return dynamicNameToIndex\n}\n\nfunction assertCanAddParam(currentIndex: number): void {\n if (currentIndex > MAX_PARAM_INDEX) {\n throw new Error(\n `CRITICAL: Cannot add param - would overflow MAX_SAFE_INTEGER. Current index: ${currentIndex}`,\n )\n }\n}\n\nconst POSTGRES_POSITION_CACHE = new Array(500)\nfor (let i = 0; i < 500; i++) {\n POSTGRES_POSITION_CACHE[i] = `$${i + 1}`\n}\n\nfunction formatPositionPostgres(position: number): string {\n if (position <= 500) return POSTGRES_POSITION_CACHE[position - 1]\n return `$${position}`\n}\n\nfunction formatPositionSqlite(_position: number): string {\n return '?'\n}\n\nfunction validateDynamicName(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\nfunction createStoreInternal(\n startIndex: number,\n dialect: SqlDialect,\n initialParams: unknown[] = [],\n initialMappings: ParamMap[] = [],\n cachedIndex?: ReadonlyMap<string, number>,\n): ParamStore {\n let index = startIndex\n let params: unknown[] = initialParams.length > 0 ? initialParams.slice() : []\n let mappings: ParamMap[] =\n initialMappings.length > 0 ? initialMappings.slice() : []\n let frozen = false\n\n let dynamicNameToIndex = cachedIndex\n ? new Map(cachedIndex)\n : buildDynamicNameIndex(mappings)\n\n let dirty = true\n let cachedSnapshot: ParamSnapshot | null = null\n\n const formatPosition =\n dialect === 'sqlite' ? formatPositionSqlite : formatPositionPostgres\n\n function ensureMutable(): void {\n if (frozen) {\n params = params.slice()\n mappings = mappings.slice()\n frozen = false\n }\n }\n\n function registerParam(paramValue: unknown, mapping: ParamMap): string {\n ensureMutable()\n const position = index\n params.push(paramValue)\n mappings.push(mapping)\n index++\n dirty = true\n return formatPosition(position)\n }\n\n function addDynamic(dynamicName: string): string {\n const dn = validateDynamicName(dynamicName)\n const existing = dynamicNameToIndex.get(dn)\n if (existing !== undefined) return formatPosition(existing)\n\n const position = index\n dynamicNameToIndex.set(dn, position)\n return registerParam(undefined, { index: position, dynamicName: dn })\n }\n\n function addStatic(value: unknown): string {\n const position = index\n const normalizedValue = normalizeValue(value)\n return registerParam(normalizedValue, {\n index: position,\n value: normalizedValue,\n })\n }\n\n function add(value: unknown, dynamicName?: string): string {\n assertCanAddParam(index)\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 if (!dirty && cachedSnapshot) return cachedSnapshot\n\n frozen = true\n\n const snap: ParamSnapshot = {\n index,\n params,\n mappings,\n dynamicNameIndex: new Map(dynamicNameToIndex),\n }\n\n cachedSnapshot = snap\n dirty = false\n return snap\n }\n\n return {\n add,\n addAuto,\n snapshot,\n get index() {\n return index\n },\n get dialect() {\n return dialect\n },\n }\n}\n\nexport function createParamStore(\n startIndex = 1,\n dialect: SqlDialect = 'postgres',\n): 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, dialect)\n}\n\nexport function createParamStoreFrom(\n existingParams: readonly unknown[],\n existingMappings: readonly ParamMap[],\n nextIndex: number,\n dialect: SqlDialect = 'postgres',\n): ParamStore {\n validateState(existingParams, existingMappings, nextIndex)\n\n const cachedIndex = buildDynamicNameIndex(existingMappings)\n\n return createStoreInternal(\n nextIndex,\n dialect,\n existingParams.slice(),\n existingMappings.slice(),\n cachedIndex,\n )\n}\n","import { DEFAULT_WHERE_CLAUSE } from './constants'\nimport { WhereClauseResult } from './types'\nimport { ParamStore } from './param-store'\n\nexport function toPublicResult(\n clause: string,\n joins: readonly string[],\n params: ParamStore,\n): WhereClauseResult {\n const snapshot = params.snapshot()\n\n return Object.freeze({\n clause: clause || DEFAULT_WHERE_CLAUSE,\n joins: Object.freeze([...joins]),\n params: snapshot.params,\n paramMappings: snapshot.mappings,\n nextParamIndex: snapshot.index,\n })\n}\n","import { SqlDialect, getGlobalDialect } from '../sql-builder-dialect'\nimport { Model } from '../types'\nimport { whereBuilderInstance } from './where/builder'\nimport { createAliasGenerator } from './shared/alias-generator'\nimport { createParamStore, ParamStore } from './shared/param-store'\nimport { toPublicResult } from './shared/state'\nimport { WhereClauseResult, BuildContext } from './shared/types'\nimport { assertSafeAlias } from './shared/sql-utils'\n\ninterface BuildWhereOptions {\n alias: string\n model: Model\n schemaModels?: Model[]\n path?: string[]\n params?: ParamStore\n isSubquery?: boolean\n aliasGen?: any\n dialect?: SqlDialect\n}\n\nexport function buildWhereClause(\n where: Record<string, unknown>,\n options: BuildWhereOptions,\n): WhereClauseResult {\n assertSafeAlias(options.alias)\n\n const dialect = options.dialect || getGlobalDialect()\n const params = options.params ?? createParamStore(1, dialect)\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 seenObjects: new WeakSet<object>(),\n }\n\n const result = whereBuilderInstance.build(where, ctx)\n const publicResult = toPublicResult(result.clause, result.joins, params)\n\n return publicResult\n}\n","import { Model } from '../../types'\nimport { SCHEMA_PREFIXES, SQL_SEPARATORS } from '../shared/constants'\nimport {\n getScalarFieldSet,\n getRelationFieldSet,\n} from '../shared/model-field-cache'\nimport { col, colWithAlias, sqlStringLiteral } from '../shared/sql-utils'\nimport {\n hasProperty,\n isNotNullish,\n isNonEmptyArray,\n isPlainObject,\n} from '../shared/validators/type-guards'\n\ntype SelectEntry = readonly [string, unknown]\n\nconst DEFAULT_SELECT_CACHE = new WeakMap<Model, Map<string, string>>()\n\nfunction toSelectEntries(select: Record<string, unknown>): SelectEntry[] {\n const out: SelectEntry[] = []\n for (const [k, v] of Object.entries(select)) {\n if (k === '_count') continue\n if (v !== false && v !== undefined) out.push([k, v])\n }\n return out\n}\n\nfunction analyzeSelectEntries(\n entries: readonly SelectEntry[],\n scalarSet: ReadonlySet<string>,\n relationSet: ReadonlySet<string>,\n): {\n scalarSelected: string[]\n hasRelationSelection: boolean\n hasCount: boolean\n} {\n const scalarSelected: string[] = []\n let hasRelationSelection = false\n let hasCount = false\n\n for (const [k, v] of entries) {\n if (k === '_count') {\n hasCount = true\n continue\n }\n if (relationSet.has(k)) hasRelationSelection = true\n if (scalarSet.has(k) && v === true) scalarSelected.push(k)\n }\n\n return { scalarSelected, hasRelationSelection, hasCount }\n}\n\nfunction buildDefaultScalarFields(model: Model, alias: string): string[] {\n const excludedPrefixes = [\n SCHEMA_PREFIXES.INTERNAL,\n SCHEMA_PREFIXES.COMMENT,\n ] as const\n\n const out: string[] = []\n for (const f of model.fields) {\n if (f.isRelation) continue\n const excluded = excludedPrefixes.some((p) => f.name.startsWith(p))\n if (!excluded) out.push(colWithAlias(alias, f.name, model))\n }\n\n if (!isNonEmptyArray(out)) {\n throw new Error(`Model ${model.name} has no selectable fields`)\n }\n\n return out\n}\n\nfunction getDefaultSelectCached(\n model: Model,\n alias: string,\n): string | undefined {\n return DEFAULT_SELECT_CACHE.get(model)?.get(alias)\n}\n\nfunction cacheDefaultSelect(model: Model, alias: string, sql: string): void {\n let cache = DEFAULT_SELECT_CACHE.get(model)\n if (!cache) {\n cache = new Map()\n DEFAULT_SELECT_CACHE.set(model, cache)\n }\n cache.set(alias, sql)\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 const cached = getDefaultSelectCached(model, alias)\n if (cached) return cached\n\n const result = buildDefaultScalarFields(model, alias).join(\n SQL_SEPARATORS.FIELD_LIST,\n )\n cacheDefaultSelect(model, alias, result)\n return result\n }\n\n const entries = toSelectEntries(args.select)\n validateFieldKeys(entries, scalarSet, relationSet, true)\n\n const { scalarSelected, hasRelationSelection, hasCount } =\n analyzeSelectEntries(entries, scalarSet, relationSet)\n\n const fields = scalarSelected.map((field) =>\n colWithAlias(alias, field, model),\n )\n\n if (!isNonEmptyArray(fields)) {\n if (hasRelationSelection) return ''\n if (!hasCount) {\n throw new Error('Select must have at least one scalar field set to true')\n }\n }\n\n return fields.join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nfunction buildAllScalarParts(model: Model, alias: string): string[] {\n const scalarFields = model.fields.filter((f) => !f.isRelation)\n if (!isNonEmptyArray(scalarFields)) {\n throw new Error(`Model ${model.name} has no scalar fields`)\n }\n\n const parts: string[] = []\n for (const field of scalarFields) {\n parts.push(\n `${sqlStringLiteral(field.name)}, ${col(alias, field.name, model)}`,\n )\n }\n return parts\n}\n\nfunction validateFieldKeys(\n entries: readonly SelectEntry[],\n scalarSet: ReadonlySet<string>,\n relationSet: ReadonlySet<string>,\n allowCount = false,\n): void {\n const unknown: string[] = []\n for (const [k] of entries) {\n if (allowCount && 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 buildSelectedScalarParts(\n entries: readonly SelectEntry[],\n scalarNames: ReadonlySet<string>,\n alias: string,\n model: Model,\n): string[] {\n const parts: string[] = []\n for (const [key, value] of entries) {\n if (!scalarNames.has(key)) continue\n if (value === true) {\n parts.push(`${sqlStringLiteral(key)}, ${col(alias, key, model)}`)\n }\n }\n return parts\n}\n\nexport function buildRelationSelect(\n relArgs: unknown,\n relModel: Model,\n relAlias: string,\n): string {\n if (relArgs === true) {\n return buildAllScalarParts(relModel, relAlias).join(\n SQL_SEPARATORS.FIELD_LIST,\n )\n }\n\n if (isPlainObject(relArgs) && hasProperty(relArgs, 'select')) {\n const sel = (relArgs as { select: Record<string, unknown> }).select\n if (!isPlainObject(sel)) {\n throw new Error(\n `Relation select must be an object for model ${relModel.name}`,\n )\n }\n\n const scalarNames = getScalarFieldSet(relModel)\n const relationNames = getRelationFieldSet(relModel)\n\n const entries = toSelectEntries(sel)\n validateFieldKeys(entries, scalarNames, relationNames, true)\n\n return buildSelectedScalarParts(\n entries,\n scalarNames,\n relAlias,\n relModel,\n ).join(SQL_SEPARATORS.FIELD_LIST)\n }\n\n return buildAllScalarParts(relModel, relAlias).join(SQL_SEPARATORS.FIELD_LIST)\n}\n","import { Field } from '../../types'\nimport { normalizeKeyList } from './sql-utils'\n\nexport interface RelationKeys {\n childKeys: string[]\n parentKeys: string[]\n}\n\nexport function resolveRelationKeys(\n field: Field,\n context: 'include' | 'count' | 'whereIn' = 'include',\n): RelationKeys {\n const fkFields = normalizeKeyList(field.foreignKey)\n\n if (fkFields.length === 0) {\n throw new Error(\n `Relation '${field.name}' is missing foreignKey for ${context}`,\n )\n }\n\n const refs = normalizeKeyList(field.references)\n const refFields = refs.length > 0 ? refs : fkFields.length === 1 ? ['id'] : []\n\n if (refFields.length !== fkFields.length) {\n throw new Error(\n `Relation '${field.name}' references count (${refFields.length}) ` +\n `doesn't match foreignKey count (${fkFields.length}) (context: ${context})`,\n )\n }\n\n const childKeys = field.isForeignKeyLocal ? refFields : fkFields\n const parentKeys = field.isForeignKeyLocal ? fkFields : refFields\n\n return { childKeys, parentKeys }\n}\n","import { Model } from '../../types'\nimport { getFieldIndices } from './model-field-cache'\nimport { isPlainObject } from './validators/type-guards'\n\nexport interface RelationEntry {\n name: string\n value: unknown\n}\n\nexport function extractRelationEntries(\n args: { include?: unknown; select?: unknown },\n model: Model,\n): RelationEntry[] {\n const indices = getFieldIndices(model)\n const entries: RelationEntry[] = []\n const seen = new Set<string>()\n\n const sources = [\n args.include && isPlainObject(args.include) ? args.include : null,\n args.select && isPlainObject(args.select) ? args.select : null,\n ]\n\n for (const source of sources) {\n if (!source) continue\n\n for (const key in source) {\n if (!Object.prototype.hasOwnProperty.call(source, key)) continue\n if (!indices.relationFields.has(key)) continue\n if (seen.has(key)) continue\n\n const value = (source as any)[key]\n if (value === false) continue\n\n seen.add(key)\n entries.push({ name: key, value })\n }\n }\n\n return entries\n}\n\nexport function extractRelationEntriesFromSelect(\n select: unknown,\n model: Model,\n): RelationEntry[] {\n if (!isPlainObject(select)) return []\n\n const indices = getFieldIndices(model)\n const entries: RelationEntry[] = []\n\n for (const key in select) {\n if (!Object.prototype.hasOwnProperty.call(select, key)) continue\n if (!indices.relationFields.has(key)) continue\n\n const value = (select as any)[key]\n if (value === false) continue\n if (value === true) continue\n if (!isPlainObject(value)) continue\n\n const v = value as Record<string, unknown>\n if (v.include || v.select) {\n entries.push({ name: key, value })\n }\n }\n\n return entries\n}\n","import { joinCondition, isValidRelationField } from '../joins'\nimport { buildOrderBy, readSkipTake, parseOrderByValue } from '../pagination'\nimport { buildWhereClause } from '../where'\nimport { jsonAgg, jsonBuildObject, SqlDialect } from '../../sql-builder-dialect'\nimport { buildRelationSelect } from './fields'\nimport { Model, PrismaQueryArgs, Field } from '../../types'\nimport { createAliasGenerator } from '../shared/alias-generator'\nimport { SQL_TEMPLATES, SQL_SEPARATORS } from '../shared/constants'\nimport {\n buildTableReference,\n quote,\n sqlStringLiteral,\n normalizeKeyList,\n quoteColumn,\n} from '../shared/sql-utils'\nimport { ParamStore } from '../shared/param-store'\nimport { IncludeSpec, AliasGenerator } from '../shared/types'\nimport { isValidWhereClause } from '../shared/validators/sql-validators'\nimport {\n hasProperty,\n isNonEmptyArray,\n isNotNullish,\n isPlainObject,\n} from '../shared/validators/type-guards'\nimport {\n reverseOrderByInput,\n normalizeOrderByInput,\n} from '../shared/order-by-utils'\nimport { addAutoScoped } from '../shared/dynamic-params'\nimport {\n getRelationFieldSet,\n getScalarFieldSet,\n} from '../shared/model-field-cache'\nimport { ensureDeterministicOrderByInput } from '../shared/order-by-determinism'\nimport { isDynamicParameter } from '@dee-wan/schema-parser'\nimport { resolveRelationKeys } from '../shared/relation-key-utils'\nimport {\n extractRelationEntries,\n RelationEntry,\n} from '../shared/relation-extraction-utils'\n\nconst MAX_INCLUDE_DEPTH = 5\nconst MAX_INCLUDES_PER_LEVEL = 10\nconst MAX_TOTAL_SUBQUERIES = 100\n\ninterface IncludeComplexityStats {\n totalIncludes: number\n totalSubqueries: number\n maxDepth: number\n}\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 schemaByName: Map<string, Model>\n parentAlias: string\n aliasGen: AliasGenerator\n dialect: SqlDialect\n params: ParamStore\n includePath: string[]\n visitSet: Set<string>\n depth: number\n stats: IncludeComplexityStats\n outerHasLimit?: boolean\n}\n\ninterface FlatJoinEligibility {\n canUse: boolean\n reason?: string\n}\n\nexport function canUseFlatJoinForInclude(\n relationName: string,\n relArgs: unknown,\n relModel: Model,\n depth: number,\n outerHasLimit: boolean,\n): FlatJoinEligibility {\n if (depth > 0) {\n return { canUse: false, reason: 'nested_depth' }\n }\n\n const { hasSkip, hasTake } = readSkipTake(relArgs)\n if (hasSkip || hasTake) {\n return { canUse: false, reason: 'child_pagination' }\n }\n\n if (hasNestedRelationInArgs(relArgs, relModel)) {\n return { canUse: false, reason: 'nested_includes' }\n }\n\n if (!outerHasLimit) {\n return { canUse: false, reason: 'no_outer_limit' }\n }\n\n return { canUse: true }\n}\n\nfunction buildIncludeScope(includePath: readonly string[]): string {\n if (includePath.length === 0) return 'include'\n let scope = 'include'\n for (let i = 0; i < includePath.length; i++) {\n scope += `.${includePath[i]}`\n if (i < includePath.length - 1) {\n scope += '.include'\n }\n }\n return scope\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 schemaByName: Map<string, Model>,\n relName: string,\n): { field: Field; relModel: Model } {\n const field = model.fields.find((f) => f.name === relName) as\n | Field\n | undefined\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 relatedModelName = field.relatedModel\n if (\n !isNotNullish(relatedModelName) ||\n String(relatedModelName).trim().length === 0\n ) {\n throw new Error(\n `Relation '${relName}' on model ${model.name} is missing relatedModel metadata.`,\n )\n }\n\n const relModel = schemaByName.get(relatedModelName)\n if (!isNotNullish(relModel)) {\n throw new Error(\n `Relation '${relName}' on model ${model.name} references missing model '${relatedModelName}'.`,\n )\n }\n\n return { field, relModel }\n}\n\nfunction validateOrderByForModel(model: Model, orderBy: unknown): void {\n if (!isNotNullish(orderBy)) return\n\n const scalarSet = getScalarFieldSet(model)\n const normalized = normalizeOrderByInput(orderBy, parseOrderByValue)\n\n for (const item of normalized) {\n const entries = Object.entries(item)\n if (entries.length !== 1) {\n throw new Error('orderBy array entries must have exactly one field')\n }\n\n const fieldName = String(entries[0][0]).trim()\n if (fieldName.length === 0) {\n throw new Error('orderBy field name cannot be empty')\n }\n if (!scalarSet.has(fieldName)) {\n throw new Error(\n `orderBy references unknown or non-scalar field '${fieldName}' on model ${model.name}`,\n )\n }\n }\n}\n\nfunction appendLimitOffset(\n sql: string,\n dialect: SqlDialect,\n params: ParamStore,\n takeVal: IntOrDynamic | undefined,\n skipVal: IntOrDynamic | undefined,\n scope: string,\n): string {\n const hasTake = isNotNullish(takeVal)\n const hasSkip = isNotNullish(skipVal)\n\n if (dialect === 'sqlite' && !hasTake && hasSkip) {\n const skipPh = addAutoScoped(params, skipVal, `${scope}.skip`)\n return `${sql} ${SQL_TEMPLATES.LIMIT} -1 ${SQL_TEMPLATES.OFFSET} ${skipPh}`\n }\n\n if (hasTake) {\n const takePh = addAutoScoped(params, takeVal, `${scope}.take`)\n sql = `${sql} ${SQL_TEMPLATES.LIMIT} ${takePh}`\n }\n\n if (hasSkip) {\n const skipPh = addAutoScoped(params, skipVal, `${scope}.skip`)\n sql = `${sql} ${SQL_TEMPLATES.OFFSET} ${skipPh}`\n }\n\n return sql\n}\n\nfunction readWhereInput(relArgs: unknown): Record<string, unknown> {\n if (!isPlainObject(relArgs)) return {}\n if (!hasProperty(relArgs, 'where')) return {}\n const w = (relArgs as Record<string, unknown>).where\n return isPlainObject(w) ? w : {}\n}\n\nfunction readOrderByInput(relArgs: unknown): {\n hasOrderBy: boolean\n orderBy: OrderByInput\n} {\n if (!isPlainObject(relArgs)) return { hasOrderBy: false, orderBy: undefined }\n if (!('orderBy' in relArgs)) return { hasOrderBy: false, orderBy: undefined }\n return {\n hasOrderBy: true,\n orderBy: (relArgs as any).orderBy,\n }\n}\n\nfunction extractRelationPaginationConfig(relArgs: unknown): {\n hasOrderBy: boolean\n orderBy: unknown\n hasSkip: boolean\n hasTake: boolean\n skipVal: OptionalIntOrDynamic\n takeVal: OptionalIntOrDynamic\n} {\n const { hasOrderBy, orderBy: rawOrderByInput } = readOrderByInput(relArgs)\n const {\n hasSkip,\n hasTake,\n skipVal,\n takeVal: rawTakeVal,\n } = readSkipTake(relArgs)\n\n return {\n hasOrderBy,\n orderBy: rawOrderByInput,\n hasSkip,\n hasTake,\n skipVal,\n takeVal: rawTakeVal,\n }\n}\n\nfunction maybeReverseNegativeTake(\n takeVal: OptionalIntOrDynamic,\n hasOrderBy: boolean,\n orderByInput: unknown,\n): { takeVal: OptionalIntOrDynamic; orderByInput: unknown } {\n if (typeof takeVal !== 'number') return { takeVal, orderByInput }\n if (takeVal >= 0) return { takeVal, orderByInput }\n if (!hasOrderBy) {\n throw new Error('Negative take requires orderBy for deterministic results')\n }\n return {\n takeVal: Math.abs(takeVal),\n orderByInput: reverseOrderByInput(orderByInput),\n }\n}\n\nfunction finalizeOrderByForInclude(args: {\n relModel: Model\n hasOrderBy: boolean\n orderByInput: unknown\n hasPagination: boolean\n}): unknown {\n if (args.hasOrderBy && isNotNullish(args.orderByInput)) {\n validateOrderByForModel(args.relModel, args.orderByInput)\n }\n\n if (!args.hasPagination) return args.orderByInput\n\n return ensureDeterministicOrderByInput({\n orderBy: args.hasOrderBy ? args.orderByInput : undefined,\n model: args.relModel,\n parseValue: parseOrderByValue,\n })\n}\n\nfunction buildSelectWithNestedIncludes(\n relArgs: unknown,\n relModel: Model,\n relAlias: string,\n ctx: IncludeBuildContext,\n): string {\n let relSelect = buildRelationSelect(relArgs, relModel, relAlias)\n\n const nestedIncludes = isPlainObject(relArgs)\n ? buildIncludeSqlInternal(relArgs as PrismaQueryArgs, {\n ...ctx,\n model: relModel,\n parentAlias: relAlias,\n depth: ctx.depth + 1,\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; rawClause: 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 hasClause = isValidWhereClause(whereResult.clause)\n\n return {\n joins,\n whereClause: hasClause ? ` ${SQL_TEMPLATES.AND} ${whereResult.clause}` : '',\n rawClause: hasClause ? whereResult.clause : '',\n }\n}\n\nfunction limitOneSql(\n sql: string,\n params: ParamStore,\n skipVal: OptionalIntOrDynamic,\n scope: string,\n): string {\n if (isNotNullish(skipVal)) {\n const skipPh = addAutoScoped(params, skipVal, `${scope}.skip`)\n return `${sql} ${SQL_TEMPLATES.LIMIT} 1 ${SQL_TEMPLATES.OFFSET} ${skipPh}`\n }\n return `${sql} ${SQL_TEMPLATES.LIMIT} 1`\n}\n\nfunction buildOrderBySql(\n finalOrderByInput: unknown,\n relAlias: string,\n dialect: SqlDialect,\n relModel: Model,\n): string {\n return isNotNullish(finalOrderByInput)\n ? buildOrderBy(finalOrderByInput, relAlias, dialect, relModel)\n : ''\n}\n\nfunction buildBaseSql(args: {\n selectExpr: string\n relTable: string\n relAlias: string\n joins: string\n joinPredicate: string\n whereClause: string\n}): string {\n const joins = args.joins ? ` ${args.joins}` : ''\n const where = `${SQL_TEMPLATES.WHERE} ${args.joinPredicate}${args.whereClause}`\n return (\n `${SQL_TEMPLATES.SELECT} ${args.selectExpr} ` +\n `${SQL_TEMPLATES.FROM} ${args.relTable} ${args.relAlias}${joins} ` +\n where\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) sql += ` ${SQL_TEMPLATES.ORDER_BY} ${args.orderBySql}`\n\n const scopeBase = buildIncludeScope(args.ctx.includePath)\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 scopeBase,\n )\n }\n\n return limitOneSql(sql, args.ctx.params, args.skipVal, scopeBase)\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 const emptyJson =\n args.ctx.dialect === 'postgres' ? `'[]'::json` : `json('[]')`\n\n if (args.ctx.dialect === 'postgres' && noTake && noSkip) {\n const rawAgg = args.orderBySql\n ? `json_agg(${rowExpr} ORDER BY ${args.orderBySql})`\n : `json_agg(${rowExpr})`\n\n const selectExpr = `COALESCE(${rawAgg}, ${emptyJson})`\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({ name: args.relName, sql, isOneToOne: false })\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) base += ` ${SQL_TEMPLATES.ORDER_BY} ${args.orderBySql}`\n\n const scopeBase = buildIncludeScope(args.ctx.includePath)\n\n base = appendLimitOffset(\n base,\n args.ctx.dialect,\n args.ctx.params,\n args.takeVal,\n args.skipVal,\n scopeBase,\n )\n\n const agg = jsonAgg('row', args.ctx.dialect)\n const selectExpr = `COALESCE(${agg}, ${emptyJson})`\n\n const sql =\n `${SQL_TEMPLATES.SELECT} ${selectExpr} ` +\n `${SQL_TEMPLATES.FROM} (${base}) ${SQL_TEMPLATES.AS} ${rowAlias}`\n\n return Object.freeze({ name: args.relName, sql, isOneToOne: false })\n}\n\nfunction buildFkSelectList(\n relAlias: string,\n relModel: Model,\n relKeyFields: string[],\n): string {\n return relKeyFields\n .map((f, i) => `${relAlias}.${quoteColumn(relModel, f)} AS \"__fk${i}\"`)\n .join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nfunction buildFkGroupByUnqualified(relKeyFields: string[]): string {\n return relKeyFields\n .map((_, i) => `\"__fk${i}\"`)\n .join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nfunction buildJoinOnCondition(\n joinAlias: string,\n parentAlias: string,\n parentModel: Model,\n parentKeyFields: string[],\n): string {\n const parts = parentKeyFields.map(\n (f, i) =>\n `${joinAlias}.\"__fk${i}\" = ${parentAlias}.${quoteColumn(parentModel, f)}`,\n )\n return parts.length === 1 ? parts[0] : `(${parts.join(' AND ')})`\n}\n\nfunction buildPartitionBy(\n relAlias: string,\n relModel: Model,\n relKeyFields: string[],\n): string {\n return relKeyFields\n .map((f) => `${relAlias}.${quoteColumn(relModel, f)}`)\n .join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nexport function hasNestedRelationInArgs(\n relArgs: unknown,\n relModel: Model,\n): boolean {\n if (!isPlainObject(relArgs)) return false\n\n const relationSet = getRelationFieldSet(relModel)\n const checkSource = (src: unknown): boolean => {\n if (!isPlainObject(src)) return false\n for (const k of Object.keys(src)) {\n if (relationSet.has(k) && (src as Record<string, unknown>)[k] !== false)\n return true\n }\n return false\n }\n\n if (checkSource((relArgs as Record<string, unknown>).include)) return true\n if (checkSource((relArgs as Record<string, unknown>).select)) return true\n\n return false\n}\n\nfunction canUseJoinInclude(\n dialect: string,\n isList: boolean,\n takeVal: OptionalIntOrDynamic,\n skipVal: OptionalIntOrDynamic,\n depth: number,\n outerHasLimit: boolean,\n hasNestedIncludes: boolean,\n): boolean {\n if (dialect !== 'postgres') return false\n if (!isList) return false\n if (depth > 0) return false\n if (outerHasLimit) return false\n if (hasNestedIncludes) return false\n if (isDynamicParameter(takeVal) || isDynamicParameter(skipVal)) return false\n return true\n}\n\nfunction buildJoinBasedNonPaginated(args: {\n relName: string\n relTable: string\n relAlias: string\n relModel: Model\n field: Field\n whereJoins: string\n rawWhereClause: string\n orderBySql: string\n relSelect: string\n ctx: IncludeBuildContext\n}): IncludeSpec {\n const { childKeys: relKeyFields, parentKeys: parentKeyFields } =\n resolveRelationKeys(args.field, 'include')\n\n const joinAlias = args.ctx.aliasGen.next(`__inc_${args.relName}`)\n\n const fkSelect = buildFkSelectList(args.relAlias, args.relModel, relKeyFields)\n const fkGroupBy = buildPartitionBy(args.relAlias, args.relModel, relKeyFields)\n const rowExpr = jsonBuildObject(args.relSelect, args.ctx.dialect)\n\n const aggExpr = args.orderBySql\n ? `json_agg(${rowExpr} ORDER BY ${args.orderBySql})`\n : `json_agg(${rowExpr})`\n\n const joinsPart = args.whereJoins ? ` ${args.whereJoins}` : ''\n const wherePart = args.rawWhereClause\n ? ` ${SQL_TEMPLATES.WHERE} ${args.rawWhereClause}`\n : ''\n\n const subquery =\n `SELECT ${fkSelect}${SQL_SEPARATORS.FIELD_LIST}${aggExpr} AS __agg` +\n ` FROM ${args.relTable} ${args.relAlias}${joinsPart}${wherePart}` +\n ` GROUP BY ${fkGroupBy}`\n\n const onCondition = buildJoinOnCondition(\n joinAlias,\n args.ctx.parentAlias,\n args.ctx.model,\n parentKeyFields,\n )\n\n const joinSql = `LEFT JOIN (${subquery}) ${joinAlias} ON ${onCondition}`\n const selectExpr = `COALESCE(${joinAlias}.__agg, '[]'::json) AS ${quote(args.relName)}`\n\n return Object.freeze({\n name: args.relName,\n sql: '',\n isOneToOne: false,\n joinSql,\n selectExpr,\n })\n}\n\nfunction buildJoinBasedPaginated(args: {\n relName: string\n relTable: string\n relAlias: string\n relModel: Model\n field: Field\n whereJoins: string\n rawWhereClause: string\n orderBySql: string\n relSelect: string\n takeVal: number | undefined\n skipVal: number | undefined\n ctx: IncludeBuildContext\n}): IncludeSpec {\n const { childKeys: relKeyFields, parentKeys: parentKeyFields } =\n resolveRelationKeys(args.field, 'include')\n\n const joinAlias = args.ctx.aliasGen.next(`__inc_${args.relName}`)\n const rankedAlias = args.ctx.aliasGen.next(`__ranked_${args.relName}`)\n\n const fkSelect = buildFkSelectList(args.relAlias, args.relModel, relKeyFields)\n const partitionBy = buildPartitionBy(\n args.relAlias,\n args.relModel,\n relKeyFields,\n )\n const rowExpr = jsonBuildObject(args.relSelect, args.ctx.dialect)\n\n const orderExpr =\n args.orderBySql ||\n `${args.relAlias}.${quoteColumn(args.relModel, 'id')} ASC`\n\n const joinsPart = args.whereJoins ? ` ${args.whereJoins}` : ''\n const wherePart = args.rawWhereClause\n ? ` ${SQL_TEMPLATES.WHERE} ${args.rawWhereClause}`\n : ''\n\n const innerSql =\n `SELECT ${fkSelect}${SQL_SEPARATORS.FIELD_LIST}` +\n `${rowExpr} AS __row${SQL_SEPARATORS.FIELD_LIST}` +\n `ROW_NUMBER() OVER (PARTITION BY ${partitionBy} ORDER BY ${orderExpr}) AS __rn` +\n ` FROM ${args.relTable} ${args.relAlias}${joinsPart}${wherePart}`\n\n const scopeBase = buildIncludeScope(args.ctx.includePath)\n const rnFilterParts: string[] = []\n\n if (isNotNullish(args.skipVal) && args.skipVal > 0) {\n const skipPh = addAutoScoped(\n args.ctx.params,\n args.skipVal,\n `${scopeBase}.skip`,\n )\n rnFilterParts.push(`__rn > ${skipPh}`)\n\n if (isNotNullish(args.takeVal)) {\n const takePh = addAutoScoped(\n args.ctx.params,\n args.takeVal,\n `${scopeBase}.take`,\n )\n rnFilterParts.push(`__rn <= (${skipPh} + ${takePh})`)\n }\n } else if (isNotNullish(args.takeVal)) {\n const takePh = addAutoScoped(\n args.ctx.params,\n args.takeVal,\n `${scopeBase}.take`,\n )\n rnFilterParts.push(`__rn <= ${takePh}`)\n }\n\n const rnFilter =\n rnFilterParts.length > 0\n ? ` ${SQL_TEMPLATES.WHERE} ${rnFilterParts.join(SQL_SEPARATORS.CONDITION_AND)}`\n : ''\n\n const fkGroupByOuter = buildFkGroupByUnqualified(relKeyFields)\n\n const outerSql =\n `SELECT ${fkGroupByOuter}${SQL_SEPARATORS.FIELD_LIST}` +\n `json_agg(__row ORDER BY __rn) AS __agg` +\n ` FROM (${innerSql}) ${rankedAlias}${rnFilter}` +\n ` GROUP BY ${fkGroupByOuter}`\n\n const onCondition = buildJoinOnCondition(\n joinAlias,\n args.ctx.parentAlias,\n args.ctx.model,\n parentKeyFields,\n )\n\n const joinSql = `LEFT JOIN (${outerSql}) ${joinAlias} ON ${onCondition}`\n const selectExpr = `COALESCE(${joinAlias}.__agg, '[]'::json) AS ${quote(args.relName)}`\n\n return Object.freeze({\n name: args.relName,\n sql: '',\n isOneToOne: false,\n joinSql,\n selectExpr,\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 const relAlias = ctx.aliasGen.next(relName)\n\n const isList = typeof field.type === 'string' && field.type.endsWith('[]')\n const joinPredicate = joinCondition(\n field,\n ctx.model,\n relModel,\n ctx.parentAlias,\n relAlias,\n )\n\n const whereInput = readWhereInput(relArgs)\n const relSelect = buildSelectWithNestedIncludes(\n relArgs,\n relModel,\n relAlias,\n ctx,\n )\n const whereParts = buildWhereParts(whereInput, relModel, relAlias, ctx)\n\n const paginationConfig = extractRelationPaginationConfig(relArgs)\n\n if (\n !isList &&\n typeof paginationConfig.takeVal === 'number' &&\n paginationConfig.takeVal < 0\n ) {\n throw new Error('Negative take is only supported for list relations')\n }\n\n const adjusted = maybeReverseNegativeTake(\n paginationConfig.takeVal,\n paginationConfig.hasOrderBy,\n paginationConfig.orderBy,\n )\n\n const hasPagination = paginationConfig.hasSkip || paginationConfig.hasTake\n\n const finalOrderByInput = finalizeOrderByForInclude({\n relModel,\n hasOrderBy: paginationConfig.hasOrderBy,\n orderByInput: adjusted.orderByInput,\n hasPagination,\n })\n\n const orderBySql = buildOrderBySql(\n finalOrderByInput,\n relAlias,\n ctx.dialect,\n relModel,\n )\n\n if (!isList) {\n const sql = buildOneToOneIncludeSql({\n relName,\n relTable,\n relAlias,\n joins: whereParts.joins,\n joinPredicate,\n whereClause: whereParts.whereClause,\n orderBySql,\n relSelect,\n takeVal: adjusted.takeVal,\n skipVal: paginationConfig.skipVal,\n ctx,\n })\n return Object.freeze({ name: relName, sql, isOneToOne: true })\n }\n\n const depth = ctx.depth\n const outerHasLimit = ctx.outerHasLimit === true\n const nestedIncludes = hasNestedRelationInArgs(relArgs, relModel)\n\n if (\n canUseJoinInclude(\n ctx.dialect,\n isList,\n adjusted.takeVal,\n paginationConfig.skipVal,\n depth,\n outerHasLimit,\n nestedIncludes,\n )\n ) {\n const hasTakeOrSkip =\n isNotNullish(adjusted.takeVal) || isNotNullish(paginationConfig.skipVal)\n\n if (!hasTakeOrSkip) {\n return buildJoinBasedNonPaginated({\n relName,\n relTable,\n relAlias,\n relModel,\n field,\n whereJoins: whereParts.joins,\n rawWhereClause: whereParts.rawClause,\n orderBySql,\n relSelect,\n ctx,\n })\n }\n\n return buildJoinBasedPaginated({\n relName,\n relTable,\n relAlias,\n relModel,\n field,\n whereJoins: whereParts.joins,\n rawWhereClause: whereParts.rawClause,\n orderBySql,\n relSelect,\n takeVal: adjusted.takeVal as number | undefined,\n skipVal: paginationConfig.skipVal as number | undefined,\n ctx,\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 ctx: IncludeBuildContext,\n): IncludeSpec[] {\n const depth = ctx.depth\n\n if (depth > MAX_INCLUDE_DEPTH) {\n throw new Error(\n `Maximum include depth of ${MAX_INCLUDE_DEPTH} exceeded. ` +\n `Path: ${Array.from(ctx.visitSet).join(' -> ')}. ` +\n `Deep includes cause exponential SQL complexity and performance issues.`,\n )\n }\n\n const modelPath = ctx.includePath\n .map((p) => {\n const parts = p.split('.')\n return parts.length > 0 ? parts[0] : ''\n })\n .filter((p) => p.length > 0)\n\n const currentModelCount = modelPath.filter((m) => m === ctx.model.name).length\n if (currentModelCount > 2) {\n throw new Error(\n `Circular relation detected: Model '${ctx.model.name}' appears ${currentModelCount} times ` +\n `in include path: ${ctx.includePath.join(' -> ')}. ` +\n `Self-referential relations must be limited to 2 levels deep.`,\n )\n }\n\n ctx.stats.maxDepth = Math.max(ctx.stats.maxDepth, depth)\n\n const includes: IncludeSpec[] = []\n const entries = extractRelationEntries(args, ctx.model)\n\n if (entries.length > MAX_INCLUDES_PER_LEVEL) {\n throw new Error(\n `Too many includes at depth ${depth} (${entries.length} > ${MAX_INCLUDES_PER_LEVEL}). ` +\n `Path: ${Array.from(ctx.visitSet).join(' -> ')}`,\n )\n }\n\n for (const entry of entries) {\n const relName = entry.name\n const relArgs = entry.value\n\n if (relArgs === false) continue\n\n ctx.stats.totalIncludes++\n if (ctx.stats.totalIncludes > MAX_TOTAL_SUBQUERIES) {\n throw new Error(\n `Query complexity limit exceeded: ${ctx.stats.totalIncludes} includes generated. ` +\n `Maximum allowed: ${MAX_TOTAL_SUBQUERIES}. ` +\n `This indicates exponential include nesting. ` +\n `Stats: depth=${ctx.stats.maxDepth}, includes=${ctx.stats.totalIncludes}. ` +\n `Path: ${Array.from(ctx.visitSet).join(' -> ')}. ` +\n `Simplify your include structure or split into multiple queries.`,\n )\n }\n\n ctx.stats.totalSubqueries++\n\n const resolved = resolveRelationOrThrow(\n ctx.model,\n ctx.schemaByName,\n relName,\n )\n\n const relationPath = `${ctx.model.name}.${relName}`\n\n if (ctx.visitSet.has(relationPath)) {\n throw new Error(\n `Circular include detected: ${Array.from(ctx.visitSet).join(' -> ')} -> ${relationPath}. ` +\n `Relation '${relationPath}' creates an infinite loop.`,\n )\n }\n\n const nextIncludePath = [...ctx.includePath, relName]\n const nextVisitSet = new Set(ctx.visitSet)\n nextVisitSet.add(relationPath)\n\n includes.push(\n buildSingleInclude(relName, relArgs, resolved.field, resolved.relModel, {\n ...ctx,\n includePath: nextIncludePath,\n visitSet: nextVisitSet,\n depth: depth,\n }),\n )\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 outerHasLimit: boolean = true,\n): IncludeSpec[] {\n const aliasGen = createAliasGenerator()\n const stats: IncludeComplexityStats = {\n totalIncludes: 0,\n totalSubqueries: 0,\n maxDepth: 0,\n }\n\n const schemaByName = new Map<string, Model>()\n for (const m of schemas) schemaByName.set(m.name, m)\n\n return buildIncludeSqlInternal(args, {\n model,\n schemas,\n schemaByName,\n parentAlias,\n aliasGen,\n params,\n dialect,\n includePath: [],\n visitSet: new Set<string>(),\n depth: 0,\n stats,\n outerHasLimit,\n })\n}\n\ninterface RelationCountBuild {\n joins: string[]\n jsonPairs: string\n}\n\nfunction resolveCountRelationOrThrow(\n relName: string,\n model: Model,\n schemaByName: Map<string, 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) as\n | Field\n | undefined\n if (!field) {\n throw new Error(\n `_count.${relName} references unknown relation on model ${model.name}`,\n )\n }\n\n if (!isValidRelationField(field)) {\n throw new Error(\n `_count.${relName} has invalid relation metadata on model ${model.name}`,\n )\n }\n\n const relatedModelName = field.relatedModel\n if (\n !isNotNullish(relatedModelName) ||\n String(relatedModelName).trim().length === 0\n ) {\n throw new Error(\n `_count.${relName} is missing relatedModel metadata on model ${model.name}`,\n )\n }\n\n const relModel = schemaByName.get(relatedModelName)\n if (!relModel) {\n throw new Error(\n `Related model '${relatedModelName}' not found for _count.${relName}`,\n )\n }\n\n return { field, relModel }\n}\n\nfunction aliasQualifiedColumn(\n alias: string,\n model: Model,\n field: string,\n): string {\n return `${alias}.${quoteColumn(model, field)}`\n}\n\nfunction subqueryForCount(args: {\n dialect: SqlDialect\n relTable: string\n countAlias: string\n relModel: Model\n relKeyFields: string[]\n}): string {\n const selectKeys = args.relKeyFields\n .map(\n (f, i) =>\n `${aliasQualifiedColumn(args.countAlias, args.relModel, f)} AS \"__fk${i}\"`,\n )\n .join(SQL_SEPARATORS.FIELD_LIST)\n\n const groupByKeys = args.relKeyFields\n .map((f) => aliasQualifiedColumn(args.countAlias, args.relModel, f))\n .join(SQL_SEPARATORS.FIELD_LIST)\n\n const cntExpr =\n args.dialect === 'postgres' ? 'COUNT(*)::int AS __cnt' : 'COUNT(*) AS __cnt'\n\n return `(SELECT ${selectKeys}${SQL_SEPARATORS.FIELD_LIST}${cntExpr} FROM ${args.relTable} ${args.countAlias} GROUP BY ${groupByKeys})`\n}\n\nfunction leftJoinOnForCount(args: {\n joinAlias: string\n parentAlias: string\n parentModel: Model\n parentKeyFields: string[]\n}): string {\n const parts = args.parentKeyFields.map(\n (f, i) =>\n `${args.joinAlias}.\"__fk${i}\" = ${aliasQualifiedColumn(args.parentAlias, args.parentModel, f)}`,\n )\n return parts.length === 1 ? parts[0] : `(${parts.join(' AND ')})`\n}\n\nfunction nextAliasAvoiding(\n aliasGen: ReturnType<typeof createAliasGenerator>,\n base: string,\n forbidden: Set<string>,\n): string {\n let a = aliasGen.next(base)\n while (forbidden.has(a)) a = aliasGen.next(base)\n return a\n}\n\nfunction buildCountJoinAndPair(args: {\n relName: string\n field: Field\n relModel: Model\n parentModel: Model\n parentAlias: string\n dialect: SqlDialect\n aliasGen: ReturnType<typeof createAliasGenerator>\n}): { joinSql: string; pairSql: string } {\n const relTable = getRelationTableReference(args.relModel, args.dialect)\n const { childKeys: relKeyFields, parentKeys: parentKeyFields } =\n resolveRelationKeys(args.field, 'count')\n\n const forbidden = new Set<string>([args.parentAlias])\n\n const countAlias = nextAliasAvoiding(\n args.aliasGen,\n `__tp_cnt_${args.relName}`,\n forbidden,\n )\n forbidden.add(countAlias)\n\n const subquery = subqueryForCount({\n dialect: args.dialect,\n relTable,\n countAlias,\n relModel: args.relModel,\n relKeyFields,\n })\n\n const joinAlias = nextAliasAvoiding(\n args.aliasGen,\n `__tp_cnt_j_${args.relName}`,\n forbidden,\n )\n\n const leftJoinOn = leftJoinOnForCount({\n joinAlias,\n parentAlias: args.parentAlias,\n parentModel: args.parentModel,\n parentKeyFields,\n })\n\n return {\n joinSql: `LEFT JOIN ${subquery} ${joinAlias} ON ${leftJoinOn}`,\n pairSql: `${sqlStringLiteral(args.relName)}, COALESCE(${joinAlias}.__cnt, 0)`,\n }\n}\n\nexport function buildRelationCountSql(\n countSelect: Record<string, boolean>,\n model: Model,\n schemas: readonly Model[],\n parentAlias: string,\n _params: ParamStore,\n dialect: SqlDialect,\n): RelationCountBuild {\n const joins: string[] = []\n const pairs: string[] = []\n const aliasGen = createAliasGenerator()\n\n const schemaByName = new Map<string, Model>()\n for (const m of schemas) schemaByName.set(m.name, m)\n\n for (const [relName, shouldCount] of Object.entries(countSelect)) {\n if (!shouldCount) continue\n\n const resolved = resolveCountRelationOrThrow(relName, model, schemaByName)\n const built = buildCountJoinAndPair({\n relName,\n field: resolved.field,\n relModel: resolved.relModel,\n parentModel: model,\n parentAlias,\n dialect,\n aliasGen,\n })\n\n joins.push(built.joinSql)\n pairs.push(built.pairSql)\n }\n\n return { joins, jsonPairs: pairs.join(SQL_SEPARATORS.FIELD_LIST) }\n}\n","export class StringBuilder {\n private parts: string[] = []\n\n append(str: string): this {\n if (str) this.parts.push(str)\n return this\n }\n\n appendIf(condition: boolean, str: string): this {\n if (condition && str) this.parts.push(str)\n return this\n }\n\n join(separator: string): string {\n return this.parts.join(separator)\n }\n\n toString(): string {\n return this.parts.join('')\n }\n\n clear(): void {\n this.parts.length = 0\n }\n}\n\nexport function joinNonEmpty(parts: string[], sep: string): string {\n let result = ''\n for (const p of parts) {\n if (p) {\n if (result) result += sep\n result += p\n }\n }\n return result\n}\n","import { Model } from '../../types'\nimport { getRelationFieldSet } from './model-field-cache'\nimport { isPlainObject } from './validators/type-guards'\n\nexport function hasChildPagination(relArgs: unknown): boolean {\n if (!isPlainObject(relArgs)) return false\n const args = relArgs as Record<string, unknown>\n if (args.take !== undefined && args.take !== null) return true\n if (args.skip !== undefined && args.skip !== null) return true\n return false\n}\n\nexport function extractScalarSelection(\n relArgs: unknown,\n relModel: Model,\n): { includeAllScalars: boolean; selectedScalarFields: string[] } {\n const scalarFields = relModel.fields\n .filter((f) => !f.isRelation)\n .map((f) => f.name)\n const scalarSet = new Set(scalarFields)\n\n if (relArgs === true || !isPlainObject(relArgs)) {\n return { includeAllScalars: true, selectedScalarFields: scalarFields }\n }\n\n const obj = relArgs as Record<string, unknown>\n if (!isPlainObject(obj.select)) {\n return { includeAllScalars: true, selectedScalarFields: scalarFields }\n }\n\n const sel = obj.select as Record<string, unknown>\n const selected: string[] = []\n for (const [k, v] of Object.entries(sel)) {\n if (!scalarSet.has(k)) continue\n if (v === true) selected.push(k)\n }\n\n return { includeAllScalars: false, selectedScalarFields: selected }\n}\n\nexport function extractNestedIncludeSpec(\n relArgs: unknown,\n relModel: Model,\n): Record<string, any> {\n const relationSet = getRelationFieldSet(relModel)\n const out: Record<string, any> = {}\n\n if (!isPlainObject(relArgs)) return out\n const obj = relArgs as Record<string, unknown>\n\n if (isPlainObject(obj.include)) {\n for (const [k, v] of Object.entries(\n obj.include as Record<string, unknown>,\n )) {\n if (!relationSet.has(k)) continue\n if (v === false) continue\n out[k] = v\n }\n }\n\n if (isPlainObject(obj.select)) {\n for (const [k, v] of Object.entries(\n obj.select as Record<string, unknown>,\n )) {\n if (!relationSet.has(k)) continue\n if (v === false) continue\n if (v === true) {\n out[k] = true\n continue\n }\n if (isPlainObject(v)) {\n const vv = v as Record<string, unknown>\n if (isPlainObject(vv.include) || isPlainObject(vv.select)) {\n out[k] = v\n }\n }\n }\n }\n\n return out\n}\n\nexport interface RelationEntry {\n name: string\n value: unknown\n}\n\nexport function extractRelationEntries(\n args: { include?: unknown; select?: unknown },\n model: Model,\n): RelationEntry[] {\n const relationSet = getRelationFieldSet(model)\n const entries: RelationEntry[] = []\n const seen = new Set<string>()\n\n const scanSource = (source: unknown): void => {\n if (!isPlainObject(source)) return\n\n for (const [key, value] of Object.entries(source)) {\n if (!relationSet.has(key)) continue\n if (value === false) continue\n if (seen.has(key)) continue\n\n seen.add(key)\n entries.push({ name: key, value })\n }\n }\n\n scanSource(args.include)\n scanSource(args.select)\n\n return entries\n}\n","import { Model } from '../../types'\nimport { SQL_TEMPLATES, SQL_SEPARATORS } from '../shared/constants'\nimport { quote, buildTableReference, quoteColumn } from '../shared/sql-utils'\nimport { joinCondition, isValidRelationField } from '../joins'\nimport { SelectQuerySpec } from '../shared/types'\nimport {\n getFieldIndices,\n getRelationFieldSet,\n} from '../shared/model-field-cache'\nimport { appendPagination } from './assembly'\nimport { isPlainObject } from '../shared/validators/type-guards'\nimport { SqlDialect } from '../../sql-builder-dialect'\nimport {\n getPrimaryKeyField,\n getPrimaryKeyFields,\n} from '../shared/primary-key-utils'\nimport { extractRelationEntries } from '../shared/relation-extraction-utils'\nimport {\n hasChildPagination,\n extractScalarSelection,\n extractNestedIncludeSpec,\n} from '../shared/relation-utils'\nimport { deduplicatePreserveOrder } from '../shared/array-utils'\nimport { Field } from '@dee-wan/schema-parser'\n\nexport interface FlatJoinBuildResult {\n sql: string\n requiresReduction: boolean\n includeSpec: Record<string, any>\n}\n\ninterface AliasCounter {\n count: number\n next(): number\n}\n\nfunction createAliasCounter(): AliasCounter {\n return {\n count: 0,\n next(): number {\n if (this.count >= Number.MAX_SAFE_INTEGER - 1000) {\n throw new Error(\n 'Alias counter overflow. This indicates an extremely complex query ' +\n 'or a potential infinite loop in relation traversal.',\n )\n }\n const current = this.count\n this.count++\n return current\n },\n }\n}\n\nfunction getRelationModel(\n parentModel: Model,\n relationName: string,\n schemas: readonly Model[],\n): Model {\n const field = parentModel.fields.find((f) => f.name === relationName)\n if (!field?.isRelation || !field.relatedModel) {\n throw new Error(`Invalid relation ${relationName} on ${parentModel.name}`)\n }\n\n const relModel = schemas.find((m) => m.name === field.relatedModel)\n if (!relModel) {\n throw new Error(`Related model ${field.relatedModel} not found`)\n }\n\n return relModel\n}\n\nfunction buildChildColumns(args: {\n relModel: Model\n relationName: string\n childAlias: string\n prefix: string\n relArgs: unknown\n}): string[] {\n const { relModel, relationName, childAlias, prefix, relArgs } = args\n const fullPrefix = prefix ? `${prefix}.${relationName}` : relationName\n\n const indices = getFieldIndices(relModel)\n const scalarSelection = extractScalarSelection(relArgs, relModel)\n\n const required = indices.pkFields.concat(\n scalarSelection.selectedScalarFields.filter(\n (f) => !indices.pkFields.includes(f),\n ),\n )\n\n const columns = new Array<string>(required.length)\n let idx = 0\n\n for (const fieldName of required) {\n const field = indices.scalarFields.get(fieldName)\n if (!field) continue\n\n const colName = field.dbName || field.name\n const quotedCol = quote(colName)\n\n columns[idx++] =\n `${childAlias}.${quotedCol} AS \"${fullPrefix}.${field.name}\"`\n }\n\n columns.length = idx\n return columns\n}\n\nfunction canUseNestedFlatJoin(relArgs: unknown, depth: number): boolean {\n if (depth > 10) return false\n if (!isPlainObject(relArgs)) return true\n if (hasChildPagination(relArgs)) return false\n\n const obj = relArgs as Record<string, unknown>\n\n if (obj.include && isPlainObject(obj.include)) {\n for (const childValue of Object.values(\n obj.include as Record<string, unknown>,\n )) {\n if (childValue !== false && !canUseNestedFlatJoin(childValue, depth + 1))\n return false\n }\n }\n\n if (obj.select && isPlainObject(obj.select)) {\n for (const childValue of Object.values(\n obj.select as Record<string, unknown>,\n )) {\n if (childValue !== false && !canUseNestedFlatJoin(childValue, depth + 1))\n return false\n }\n }\n\n return true\n}\n\nexport function canUseFlatJoinForAll(\n includeSpec: Record<string, any>,\n): boolean {\n for (const value of Object.values(includeSpec)) {\n if (value === false) continue\n if (!canUseNestedFlatJoin(value, 0)) return false\n }\n return true\n}\n\nfunction buildNestedJoins(\n parentModel: Model,\n parentAlias: string,\n includeSpec: Record<string, any>,\n schemas: readonly Model[],\n dialect: SqlDialect,\n prefix: string,\n aliasCounter: AliasCounter,\n depth: number = 0,\n): { joins: string[]; selects: string[]; orderBy: string[] } {\n if (depth > 10) {\n throw new Error(\n `Nested joins exceeded maximum depth of 10 at prefix '${prefix}'`,\n )\n }\n\n const joins: string[] = []\n const selects: string[] = []\n const orderBy: string[] = []\n\n for (const [relName, relValue] of Object.entries(includeSpec)) {\n if (relValue === false) continue\n\n const field = parentModel.fields.find((f) => f.name === relName)\n if (!isValidRelationField(field as any)) continue\n\n const relModel = getRelationModel(parentModel, relName, schemas)\n const relTable = buildTableReference(\n SQL_TEMPLATES.PUBLIC_SCHEMA,\n relModel.tableName,\n dialect,\n )\n\n const childAlias = `fj_${aliasCounter.next()}`\n const joinCond = joinCondition(\n field as any,\n parentModel,\n relModel,\n parentAlias,\n childAlias,\n )\n\n joins.push(`LEFT JOIN ${relTable} ${childAlias} ON ${joinCond}`)\n selects.push(\n ...buildChildColumns({\n relModel,\n relationName: relName,\n childAlias,\n prefix,\n relArgs: relValue,\n }),\n )\n\n const childPkFields = getPrimaryKeyFields(relModel)\n for (const pkField of childPkFields) {\n orderBy.push(\n `${childAlias}.${quoteColumn(relModel, pkField)} ASC NULLS LAST`,\n )\n }\n\n const nested = extractNestedIncludeSpec(relValue, relModel)\n if (Object.keys(nested).length > 0) {\n const nestedPrefix = prefix ? `${prefix}.${relName}` : relName\n const deeper = buildNestedJoins(\n relModel,\n childAlias,\n nested,\n schemas,\n dialect,\n nestedPrefix,\n aliasCounter,\n depth + 1,\n )\n\n joins.push(...deeper.joins)\n selects.push(...deeper.selects)\n orderBy.push(...deeper.orderBy)\n }\n }\n\n return { joins, selects, orderBy }\n}\n\nfunction buildSubqueryRawSelect(model: Model, alias: string): string {\n const cols: string[] = []\n for (const f of model.fields) {\n if (f.isRelation) continue\n cols.push(`${alias}.${quoteColumn(model, f.name)}`)\n }\n return cols.length > 0 ? cols.join(SQL_SEPARATORS.FIELD_LIST) : '*'\n}\n\nexport function buildFlatJoinSql(spec: SelectQuerySpec): FlatJoinBuildResult {\n const {\n select,\n from,\n whereClause,\n whereJoins,\n orderBy,\n dialect,\n model,\n schemas,\n args,\n } = spec\n\n const includeSpec = extractRelationEntries(args, model).reduce(\n (acc, { name, value }) => {\n acc[name] = value\n return acc\n },\n {} as Record<string, any>,\n )\n\n if (Object.keys(includeSpec).length === 0) {\n return { sql: '', requiresReduction: false, includeSpec: {} }\n }\n\n if (!canUseFlatJoinForAll(includeSpec)) {\n return { sql: '', requiresReduction: false, includeSpec: {} }\n }\n\n const baseJoins = whereJoins.length > 0 ? whereJoins.join(' ') : ''\n const baseWhere =\n whereClause && whereClause !== '1=1' ? `WHERE ${whereClause}` : ''\n const baseOrderBy = orderBy ? `ORDER BY ${orderBy}` : ''\n\n const subqueryScalarCols = buildSubqueryRawSelect(model, from.alias)\n let baseSubquery = `\n SELECT ${subqueryScalarCols} FROM ${from.table} ${from.alias}\n ${baseJoins}\n ${baseWhere}\n ${baseOrderBy}\n `.trim()\n baseSubquery = appendPagination(baseSubquery, spec)\n\n const aliasCounter = createAliasCounter()\n const built = buildNestedJoins(\n model,\n from.alias,\n includeSpec,\n schemas,\n dialect,\n '',\n aliasCounter,\n 0,\n )\n\n if (built.joins.length === 0) {\n return { sql: '', requiresReduction: false, includeSpec: {} }\n }\n\n const baseSelect = (select ?? '').trim()\n const allSelects = [baseSelect, ...built.selects]\n .filter((s) => s && s.trim().length > 0)\n .join(SQL_SEPARATORS.FIELD_LIST)\n\n if (!allSelects) {\n throw new Error('Flat-join SELECT requires at least one selected field')\n }\n\n const pkField = getPrimaryKeyField(model)\n\n const orderByParts: string[] = []\n orderByParts.push(`${from.alias}.${quoteColumn(model, pkField)} ASC`)\n orderByParts.push(...built.orderBy)\n\n const finalOrderBy = orderByParts.join(', ')\n\n const sql = `\n SELECT ${allSelects}\n FROM (${baseSubquery}) ${from.alias}\n ${built.joins.join(' ')}\n ORDER BY ${finalOrderBy}\n `.trim()\n\n return { sql, requiresReduction: true, includeSpec }\n}\n","import type { PrismaQueryArgs } from '../../types'\nimport { SQL_TEMPLATES, SQL_SEPARATORS } from '../shared/constants'\nimport { col, quote } from '../shared/sql-utils'\nimport { SelectQuerySpec, SqlResult } from '../shared/types'\nimport {\n validateSelectQuery,\n validateParamConsistencyByDialect,\n} from '../shared/validators/sql-validators'\nimport {\n isNotNullish,\n isNonEmptyArray,\n isNonEmptyString,\n isPlainObject,\n} from '../shared/validators/type-guards'\nimport { addAutoScoped } from '../shared/dynamic-params'\nimport { jsonBuildObject } from '../../sql-builder-dialect'\nimport { buildRelationCountSql } from './includes'\nimport { joinNonEmpty } from '../shared/string-builder'\nimport { getRelationFieldSet } from '../shared/model-field-cache'\nimport { parseOrderByValue } from '../pagination'\nimport {\n normalizeOrderByInput,\n OrderBySortObject,\n} from '../shared/order-by-utils'\nimport { buildFlatJoinSql, canUseFlatJoinForAll } from './flat-join'\nimport { isDynamicParameter } from '@dee-wan/schema-parser'\n\ntype DistinctOrderEntry = {\n field: string\n direction: 'asc' | 'desc'\n nulls?: 'first' | 'last'\n}\n\nconst SELECT_FIELD_REGEX =\n /^\\s*(\"(?:[^\"]|\"\")+\"|[a-z_][a-z0-9_]*)\\s*\\.\\s*(\"(?:[^\"]|\"\")+\"|[a-z_][a-z0-9_]*)(?:\\s+AS\\s+(\"(?:[^\"]|\"\")+\"|[a-z_][a-z0-9_]*))?\\s*$/i\n\nfunction buildWhereSql(conditions: readonly string[]): string {\n if (!isNonEmptyArray(conditions)) return ''\n return (\n ' ' +\n SQL_TEMPLATES.WHERE +\n ' ' +\n conditions.join(SQL_SEPARATORS.CONDITION_AND)\n )\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)) {\n for (const j of g) all.push(j)\n }\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) return extra\n if (!extra) return base\n return base + SQL_SEPARATORS.FIELD_LIST + extra\n}\n\nfunction finalizeSql(\n sql: string,\n params: SelectQuerySpec['params'],\n dialect: SelectQuerySpec['dialect'],\n): SqlResult {\n const snapshot = params.snapshot()\n validateSelectQuery(sql)\n validateParamConsistencyByDialect(sql, snapshot.params, dialect)\n return {\n sql,\n params: [...snapshot.params],\n paramMappings: [...snapshot.mappings],\n }\n}\n\nfunction unquoteIdent(s: string): string {\n if (s.startsWith('\"') && s.endsWith('\"')) {\n return s.slice(1, -1).replace(/\"\"/g, '\"')\n }\n return s\n}\n\nfunction parseSelectField(p: string, fromAlias: string): string {\n const match = SELECT_FIELD_REGEX.exec(p)\n if (!match) {\n throw new Error(\n `SQLite distinct emulation requires simple column references.\\n` +\n `Complex expressions, functions, and computed fields are not supported.\\n` +\n `Got: ${p}\\n\\n` +\n `Hint: When using distinct with SQLite:\\n` +\n ` - Use only direct field selections (e.g., { id: true, name: true })\\n` +\n ` - Remove computed fields from select\\n` +\n ` - Avoid selecting relation counts or aggregates\\n` +\n ` - Or switch to PostgreSQL which supports DISTINCT ON with expressions`,\n )\n }\n\n const [, alias, column, outputAlias] = match\n\n const actualAlias = unquoteIdent(alias)\n if (actualAlias.toLowerCase() !== fromAlias.toLowerCase()) {\n throw new Error(\n `Expected alias '${fromAlias}', got '${actualAlias}' in: ${p}`,\n )\n }\n\n if (outputAlias) {\n return unquoteIdent(outputAlias)\n }\n\n return unquoteIdent(column)\n}\n\nfunction parseSimpleScalarSelect(select: string, fromAlias: string): string[] {\n const raw = select.trim()\n if (raw.length === 0) return []\n\n const parts = raw.split(SQL_SEPARATORS.FIELD_LIST)\n const names: string[] = []\n\n for (const p of parts) {\n const trimmed = p.trim()\n if (trimmed.length === 0) continue\n names.push(parseSelectField(trimmed, fromAlias))\n }\n\n return names\n}\n\nfunction buildDistinctColumns(\n distinct: readonly string[],\n fromAlias: string,\n model?: any,\n): string {\n return distinct\n .map((f) => col(fromAlias, f, model))\n .join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nfunction buildOutputColumns(\n scalarNames: string[],\n includeNames: string[],\n hasCount: boolean,\n): string {\n const outputCols = hasCount\n ? [...scalarNames, ...includeNames, '_count']\n : [...scalarNames, ...includeNames]\n\n const formatted = outputCols\n .map((n) => quote(n))\n .join(SQL_SEPARATORS.FIELD_LIST)\n if (!isNonEmptyString(formatted)) {\n throw new Error('distinct emulation requires at least one output column')\n }\n return formatted\n}\n\nfunction buildWindowOrder(args: {\n baseOrder: string\n idField: any\n fromAlias: string\n model?: any\n}): string {\n const { baseOrder, idField, fromAlias, model } = args\n const fromLower = String(fromAlias).toLowerCase()\n\n const orderFields = baseOrder\n .split(SQL_SEPARATORS.ORDER_BY)\n .map((s) => s.trim().toLowerCase().replace(/\\s+/g, ' '))\n\n const hasIdInOrder = orderFields.some((f) => {\n return f.includes(`${fromLower}.id`) || f.includes(`${fromLower}.\"id\"`)\n })\n\n if (hasIdInOrder) return baseOrder\n\n const idTiebreaker = idField\n ? ', ' + col(fromAlias, 'id', model) + ' ASC'\n : ''\n return baseOrder + idTiebreaker\n}\n\nfunction extractDistinctOrderEntries(\n spec: SelectQuerySpec,\n): DistinctOrderEntry[] {\n if (isNotNullish(spec.args.orderBy)) {\n const normalized = normalizeOrderByInput(\n spec.args.orderBy,\n parseOrderByValue,\n )\n\n const entries: DistinctOrderEntry[] = []\n for (const item of normalized) {\n for (const field in item) {\n if (!Object.prototype.hasOwnProperty.call(item, field)) continue\n const value = item[field]\n\n if (typeof value === 'string') {\n entries.push({ field, direction: value as 'asc' | 'desc' })\n continue\n }\n\n const obj = value as OrderBySortObject\n entries.push({ field, direction: obj.direction, nulls: obj.nulls })\n }\n }\n if (entries.length > 0) return entries\n }\n\n if (isNotNullish(spec.distinct) && isNonEmptyArray(spec.distinct)) {\n return [...spec.distinct].map((f) => ({\n field: f,\n direction: 'asc' as const,\n }))\n }\n\n return []\n}\n\nfunction buildFieldNameOrderBy(\n entries: DistinctOrderEntry[],\n alias: string,\n): string {\n if (entries.length === 0) return ''\n\n const out: string[] = []\n for (const e of entries) {\n const dir = e.direction.toUpperCase()\n const c = `${alias}.${quote(e.field)}`\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 buildSqliteDistinctQuery(\n spec: SelectQuerySpec,\n selectWithIncludes: string,\n countJoins?: string[],\n): string {\n const { includes, from, whereClause, whereJoins, orderBy, distinct, model } =\n spec\n if (!isNotNullish(distinct) || !isNonEmptyArray(distinct)) {\n throw new Error('buildSqliteDistinctQuery requires distinct fields')\n }\n\n const scalarNames = parseSimpleScalarSelect(spec.select, from.alias)\n const includeNames = includes.map((i) => i.name)\n const hasCount = Boolean(spec.args?.select?._count)\n\n const outerSelectCols = buildOutputColumns(\n scalarNames,\n includeNames,\n hasCount,\n )\n const distinctCols = buildDistinctColumns([...distinct], from.alias, model)\n\n const fallbackOrder = [...distinct]\n .map((f) => col(from.alias, f, model) + ' ASC')\n .join(SQL_SEPARATORS.FIELD_LIST)\n\n const idField = model.fields.find(\n (f: any) => f.name === 'id' && !f.isRelation,\n )\n const baseOrder = isNonEmptyString(orderBy) ? orderBy : fallbackOrder\n\n const windowOrder = buildWindowOrder({\n baseOrder,\n idField,\n fromAlias: from.alias,\n model,\n })\n\n const outerEntries = extractDistinctOrderEntries(spec)\n const outerOrder = buildFieldNameOrderBy(outerEntries, '\"__tp_distinct\"')\n\n const joins = buildJoinsSql(whereJoins, countJoins)\n\n const conditions: string[] = []\n if (whereClause && whereClause !== '1=1') conditions.push(whereClause)\n const whereSql = buildWhereSql(conditions)\n\n const innerSelectList = selectWithIncludes.trim()\n const innerComma = innerSelectList.length > 0 ? SQL_SEPARATORS.FIELD_LIST : ''\n\n const innerParts: string[] = [\n SQL_TEMPLATES.SELECT,\n innerSelectList + innerComma,\n 'ROW_NUMBER() OVER (PARTITION BY ' +\n distinctCols +\n ' ORDER BY ' +\n windowOrder +\n ')',\n SQL_TEMPLATES.AS,\n '\"__tp_rn\"',\n SQL_TEMPLATES.FROM,\n from.table,\n from.alias,\n ]\n if (joins) innerParts.push(joins)\n if (whereSql) innerParts.push(whereSql)\n const inner = innerParts.join(' ')\n\n const outerParts: string[] = [\n SQL_TEMPLATES.SELECT,\n outerSelectCols,\n SQL_TEMPLATES.FROM,\n '(' + inner + ')',\n SQL_TEMPLATES.AS,\n '\"__tp_distinct\"',\n SQL_TEMPLATES.WHERE,\n '\"__tp_rn\" = 1',\n ]\n if (isNonEmptyString(outerOrder)) {\n outerParts.push(SQL_TEMPLATES.ORDER_BY, outerOrder)\n }\n return outerParts.join(' ')\n}\n\nfunction resolveCountSelect(\n countSelectRaw: unknown,\n model: SelectQuerySpec['model'],\n): Record<string, boolean> | null {\n if (countSelectRaw === true) {\n const relationSet = getRelationFieldSet(model)\n if (relationSet.size === 0) return null\n const allRelations: Record<string, boolean> = {}\n for (const name of relationSet) {\n allRelations[name] = true\n }\n return allRelations\n }\n\n if (isPlainObject(countSelectRaw) && 'select' in countSelectRaw) {\n return (countSelectRaw as { select: Record<string, boolean> }).select\n }\n\n return null\n}\n\nfunction buildIncludeColumns(spec: SelectQuerySpec): {\n includeCols: string\n selectWithIncludes: string\n countJoins: string[]\n includeJoins: 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 countSelectRaw = spec.args?.select?._count\n if (countSelectRaw) {\n const resolvedCountSelect = resolveCountSelect(countSelectRaw, model)\n\n if (resolvedCountSelect && Object.keys(resolvedCountSelect).length > 0) {\n const countBuild = buildRelationCountSql(\n resolvedCountSelect,\n model,\n schemas,\n from.alias,\n params,\n dialect,\n )\n if (countBuild.jsonPairs) {\n countCols =\n jsonBuildObject(countBuild.jsonPairs, dialect) +\n ' ' +\n SQL_TEMPLATES.AS +\n ' ' +\n 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 {\n includeCols: '',\n selectWithIncludes: baseSelect,\n countJoins: [],\n includeJoins: [],\n }\n }\n\n const emptyJson = dialect === 'postgres' ? `'[]'::json` : `json('[]')`\n\n const correlatedParts: string[] = []\n const joinIncludeJoins: string[] = []\n const joinIncludeSelects: string[] = []\n\n if (hasIncludes) {\n for (const inc of includes) {\n if (inc.joinSql && inc.selectExpr) {\n joinIncludeJoins.push(inc.joinSql)\n joinIncludeSelects.push(inc.selectExpr)\n } else {\n const expr = inc.isOneToOne\n ? '(' + inc.sql + ')'\n : 'COALESCE((' + inc.sql + '), ' + emptyJson + ')'\n correlatedParts.push(\n expr + ' ' + SQL_TEMPLATES.AS + ' ' + quote(inc.name),\n )\n }\n }\n }\n\n const correlatedCols = correlatedParts.join(SQL_SEPARATORS.FIELD_LIST)\n const joinSelectCols = joinIncludeSelects.join(SQL_SEPARATORS.FIELD_LIST)\n\n const allIncludeCols = joinNonEmpty(\n [correlatedCols, joinSelectCols, countCols],\n SQL_SEPARATORS.FIELD_LIST,\n )\n const selectWithIncludes = buildSelectList(baseSelect, allIncludeCols)\n\n return {\n includeCols: allIncludeCols,\n selectWithIncludes,\n countJoins,\n includeJoins: joinIncludeJoins,\n }\n}\n\nexport function appendPagination(sql: string, spec: SelectQuerySpec): string {\n const { method, pagination, params } = spec\n const isFindUniqueOrFirst = method === 'findUnique' || method === 'findFirst'\n\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 if (spec.dialect !== 'sqlite') return false\n const d = spec.distinct\n return isNotNullish(d) && isNonEmptyArray(d)\n}\n\nfunction hasAnyDistinct(spec: SelectQuerySpec): boolean {\n return isNotNullish(spec.distinct) && isNonEmptyArray(spec.distinct)\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 withCountJoins(\n spec: SelectQuerySpec,\n countJoins: string[],\n whereJoins?: readonly string[],\n): SelectQuerySpec {\n return {\n ...spec,\n whereJoins: [...(whereJoins || []), ...(countJoins || [])],\n }\n}\n\nfunction buildPostgresDistinctOnClause(\n fromAlias: string,\n distinct?: readonly string[],\n model?: any,\n): string | null {\n if (!isNonEmptyArray(distinct)) return null\n const distinctCols = buildDistinctColumns([...distinct], fromAlias, model)\n return SQL_TEMPLATES.DISTINCT_ON + ' (' + distinctCols + ')'\n}\n\nfunction pushJoinGroups(\n parts: string[],\n ...groups: Array<readonly string[] | undefined>\n): void {\n for (const g of groups) {\n if (isNonEmptyArray(g)) parts.push(g.join(' '))\n }\n}\n\nfunction buildConditions(\n whereClause?: string,\n cursorClause?: string,\n): string[] {\n const conditions: string[] = []\n if (whereClause && whereClause !== '1=1') conditions.push(whereClause)\n if (isNotNullish(cursorClause) && isNonEmptyString(cursorClause))\n conditions.push(cursorClause)\n return conditions\n}\n\nfunction pushWhere(parts: string[], conditions: string[]): void {\n if (!isNonEmptyArray(conditions)) return\n parts.push(SQL_TEMPLATES.WHERE, conditions.join(SQL_SEPARATORS.CONDITION_AND))\n}\n\nfunction extractIncludeSpec(args: PrismaQueryArgs): Record<string, any> {\n const includeSpec: Record<string, any> = {}\n\n if (args.include && isPlainObject(args.include)) {\n for (const [key, value] of Object.entries(args.include)) {\n if (value !== false) {\n includeSpec[key] = value\n }\n }\n }\n\n if (args.select && isPlainObject(args.select)) {\n for (const [key, value] of Object.entries(args.select)) {\n if (value !== false && value !== true && isPlainObject(value)) {\n const selectVal = value as Record<string, any>\n if (selectVal.include || selectVal.select) {\n includeSpec[key] = value\n }\n }\n }\n }\n\n return includeSpec\n}\n\nfunction hasNestedIncludes(includeSpec: Record<string, any>): boolean {\n return Object.keys(includeSpec).length > 0\n}\n\nfunction splitOrderByTerms(orderBy: string): string[] {\n const raw = orderBy.trim()\n if (raw.length === 0) return []\n return raw\n .split(SQL_SEPARATORS.ORDER_BY)\n .map((s) => s.trim())\n .filter((s) => s.length > 0)\n}\n\nfunction hasIdInOrderBy(orderBy: string, fromAlias: string): boolean {\n const lower = orderBy.toLowerCase()\n const aliasLower = fromAlias.toLowerCase()\n\n return (\n lower.includes(`${aliasLower}.id `) || lower.includes(`${aliasLower}.\"id\"`)\n )\n}\n\nfunction ensureIdTiebreakerOrderBy(\n orderBy: string,\n fromAlias: string,\n model: any,\n): string {\n const idField = model?.fields?.find?.(\n (f: any) => f.name === 'id' && !f.isRelation,\n )\n if (!idField) return orderBy\n if (hasIdInOrderBy(orderBy, fromAlias)) return orderBy\n const t = col(fromAlias, 'id', model) + ' ASC'\n return isNonEmptyString(orderBy) ? orderBy + ', ' + t : t\n}\n\nfunction ensurePostgresDistinctOrderBy(args: {\n orderBy: string\n distinct: readonly string[]\n fromAlias: string\n model: any\n}): string {\n const { orderBy, distinct, fromAlias, model } = args\n\n const distinctTerms = distinct.map((f) => col(fromAlias, f, model) + ' ASC')\n\n const existing = splitOrderByTerms(orderBy)\n const canKeepAsIs =\n existing.length >= distinctTerms.length &&\n distinctTerms.every((term, i) =>\n existing[i].toLowerCase().startsWith(term.split(' ASC')[0].toLowerCase()),\n )\n\n const merged = canKeepAsIs\n ? orderBy\n : [...distinctTerms, ...existing].join(SQL_SEPARATORS.ORDER_BY)\n\n return ensureIdTiebreakerOrderBy(merged, fromAlias, model)\n}\n\nexport function constructFinalSql(spec: SelectQuerySpec): SqlResult {\n const {\n select,\n from,\n whereClause,\n whereJoins,\n orderBy,\n distinct,\n method,\n cursorCte,\n cursorClause,\n params,\n dialect,\n model,\n includes,\n schemas,\n pagination,\n args,\n } = spec\n\n const useWindowDistinct = hasWindowDistinct(spec)\n assertDistinctAllowed(method, useWindowDistinct)\n\n const hasDistinct = hasAnyDistinct(spec)\n assertDistinctAllowed(method, hasDistinct)\n\n const includeSpec = extractIncludeSpec(args)\n const hasIncludes = hasNestedIncludes(includeSpec)\n\n const hasPagination = isNotNullish(pagination.take)\n\n const shouldUseFlatJoin =\n dialect === 'postgres' &&\n hasPagination &&\n hasIncludes &&\n canUseFlatJoinForAll(includeSpec)\n\n if (shouldUseFlatJoin) {\n const flatResult = buildFlatJoinSql(spec)\n\n if (flatResult.sql) {\n const baseSqlResult = finalizeSql(flatResult.sql, params, dialect)\n return {\n sql: baseSqlResult.sql,\n params: baseSqlResult.params,\n paramMappings: baseSqlResult.paramMappings,\n requiresReduction: true,\n includeSpec: flatResult.includeSpec,\n }\n }\n }\n\n const { includeCols, selectWithIncludes, countJoins, includeJoins } =\n buildIncludeColumns(spec)\n\n if (useWindowDistinct) {\n const allExtraJoins = [...countJoins, ...includeJoins]\n const spec2 = withCountJoins(spec, allExtraJoins, whereJoins)\n let sql = buildSqliteDistinctQuery(spec2, selectWithIncludes).trim()\n sql = appendPagination(sql, spec)\n return finalizeSql(sql, params, dialect)\n }\n\n const parts: string[] = []\n if (cursorCte) parts.push('WITH ' + cursorCte)\n\n parts.push(SQL_TEMPLATES.SELECT)\n\n const distinctOn =\n dialect === 'postgres'\n ? buildPostgresDistinctOnClause(from.alias, distinct, model)\n : null\n if (distinctOn) parts.push(distinctOn)\n\n const baseSelect = (select ?? '').trim()\n const fullSelectList = buildSelectList(baseSelect, includeCols)\n if (!isNonEmptyString(fullSelectList)) {\n throw new Error('SELECT requires at least one selected field or include')\n }\n\n parts.push(fullSelectList)\n parts.push(SQL_TEMPLATES.FROM, from.table, from.alias)\n\n if (cursorCte) {\n const cteName = cursorCte.split(' AS ')[0].trim()\n parts.push('CROSS JOIN', cteName)\n }\n\n pushJoinGroups(parts, whereJoins, countJoins)\n\n if (isNonEmptyArray(includeJoins)) {\n parts.push(includeJoins.join(' '))\n }\n\n const conditions = buildConditions(whereClause, cursorClause)\n pushWhere(parts, conditions)\n\n let finalOrderBy = orderBy\n if (dialect === 'postgres' && isNonEmptyArray(distinct)) {\n finalOrderBy = ensurePostgresDistinctOrderBy({\n orderBy: orderBy || '',\n distinct: [...distinct],\n fromAlias: from.alias,\n model,\n })\n }\n\n if (isNonEmptyString(finalOrderBy))\n parts.push(SQL_TEMPLATES.ORDER_BY, finalOrderBy)\n\n let sql = parts.join(' ').trim()\n sql = appendPagination(sql, spec)\n return finalizeSql(sql, params, dialect)\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 isNonEmptyString,\n} from './shared/validators/type-guards'\nimport { assertScalarField } from './shared/validators/field-assertions'\nimport {\n getScalarFieldSet,\n getRelationFieldSet,\n} from './shared/model-field-cache'\n\ntype OrderByValue =\n | 'asc'\n | 'desc'\n | { direction: 'asc' | 'desc'; nulls?: 'first' | 'last' }\n\ntype OrderByItem = Record<string, OrderByValue>\n\nfunction normalizeOrderByInput(\n orderBy: PrismaQueryArgs['orderBy'],\n): OrderByItem[] {\n return normalizeOrderByShared(orderBy, parseOrderByValue)\n}\n\nfunction normalizeDistinctFields(\n distinct: PrismaQueryArgs['distinct'],\n): string[] {\n if (!isNonEmptyArray(distinct)) return []\n return distinct\n .filter((f) => typeof f === 'string')\n .map((f) => f.trim())\n .filter((f) => f.length > 0)\n}\n\nfunction mapFirstOrderByByField(\n existing: OrderByItem[],\n): Map<string, OrderByItem> {\n const m = new Map<string, OrderByItem>()\n for (const obj of existing) {\n const field = Object.keys(obj)[0]\n if (field && !m.has(field)) m.set(field, obj)\n }\n return m\n}\n\nfunction buildPostgresDistinctOrderBy(\n distinctFields: string[],\n existing: OrderByItem[],\n): OrderByItem[] {\n const firstByField = mapFirstOrderByByField(existing)\n\n const next: OrderByItem[] = []\n for (const f of distinctFields) {\n next.push(firstByField.get(f) ?? { [f]: 'asc' })\n }\n\n const distinctSet = new Set(distinctFields)\n for (const obj of existing) {\n const field = Object.keys(obj)[0]\n if (!distinctSet.has(field)) next.push(obj)\n }\n\n return next\n}\n\nfunction applyPostgresDistinctOrderBy(args: PrismaQueryArgs): PrismaQueryArgs {\n const distinctFields = normalizeDistinctFields(args.distinct)\n if (distinctFields.length === 0) return args\n if (!isNotNullish(args.orderBy)) return args\n\n const existing = normalizeOrderByInput(args.orderBy)\n if (existing.length === 0) return args\n\n return {\n ...args,\n orderBy: buildPostgresDistinctOrderBy(distinctFields, existing),\n }\n}\n\nfunction validateDistinct(\n model: Model,\n distinct: PrismaQueryArgs['distinct'],\n): void {\n if (!isNotNullish(distinct) || !isNonEmptyArray(distinct)) return\n\n const seen = new Set<string>()\n const scalarSet = getScalarFieldSet(model)\n\n for (const raw of distinct) {\n if (typeof raw !== 'string') {\n throw new Error(\n `distinct values must be strings. Got ${typeof raw}: ${JSON.stringify(raw)}`,\n )\n }\n\n const f = String(raw).trim()\n\n if (f.length === 0) {\n throw new Error('distinct field name cannot be empty')\n }\n\n if (f.length > 255) {\n throw new Error(\n `distinct field name too long (${f.length} chars, max 255): ${f.slice(0, 50)}...`,\n )\n }\n\n if (seen.has(f)) {\n throw new Error(`distinct must not contain duplicates (field: '${f}')`)\n }\n\n seen.add(f)\n\n if (!scalarSet.has(f)) {\n const relationSet = getRelationFieldSet(model)\n if (relationSet.has(f)) {\n throw new Error(\n `distinct field '${f}' is a relation. Only scalar fields are allowed.\\n` +\n `Available scalar fields: ${[...scalarSet].join(', ')}`,\n )\n }\n throw new Error(\n `distinct field '${f}' does not exist on model ${model.name}.\\n` +\n `Available fields: ${[...scalarSet].join(', ')}`,\n )\n }\n\n assertScalarField(model, f, 'distinct')\n }\n}\n\nfunction validateOrderBy(\n model: Model,\n orderBy: PrismaQueryArgs['orderBy'],\n): void {\n if (!isNotNullish(orderBy)) return\n\n const items = normalizeOrderByInput(orderBy)\n if (items.length === 0) return\n\n const scalarSet = getScalarFieldSet(model)\n const relationSet = getRelationFieldSet(model)\n\n for (const it of items) {\n const entries = Object.entries(it)\n if (entries.length !== 1) {\n throw new Error(\n 'orderBy array entries must have exactly one field. ' +\n `Got ${entries.length} fields: ${Object.keys(it).join(', ')}`,\n )\n }\n\n const [fieldName, value] = entries[0]\n const f = String(fieldName).trim()\n\n if (f.length === 0) {\n throw new Error('orderBy field name cannot be empty')\n }\n\n if (f.length > 255) {\n throw new Error(\n `orderBy field name too long (${f.length} chars, max 255): ${f.slice(0, 50)}...`,\n )\n }\n\n if (!scalarSet.has(f)) {\n if (relationSet.has(f)) {\n throw new Error(\n `orderBy field '${f}' is a relation. Only scalar fields are allowed.\\n` +\n `Available scalar fields: ${[...scalarSet].join(', ')}`,\n )\n }\n throw new Error(\n `orderBy field '${f}' does not exist on model ${model.name}.\\n` +\n `Available fields: ${[...scalarSet].join(', ')}`,\n )\n }\n\n assertScalarField(model, f, 'orderBy')\n parseOrderByValue(value, f)\n }\n}\n\nfunction validateCursor(\n model: Model,\n cursor: unknown,\n distinct?: unknown,\n): 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\n const definedEntries = entries.filter(([_, value]) => value !== undefined)\n if (definedEntries.length === 0) {\n throw new Error('cursor must have at least one field with defined value')\n }\n\n for (const [fieldName] of definedEntries) {\n const f = String(fieldName).trim()\n if (f.length === 0) {\n throw new Error('cursor field name cannot be empty')\n }\n assertScalarField(model, f, 'cursor')\n }\n\n if (isNotNullish(distinct) && isNonEmptyArray(distinct)) {\n const cursorFields = new Set(definedEntries.map(([k]) => k))\n const distinctSet = new Set(distinct.map((d) => String(d)))\n\n for (const cursorField of cursorFields) {\n if (!distinctSet.has(cursorField)) {\n throw new Error(\n `Cursor field '${cursorField}' must be included in distinct fields.\\n` +\n `Current distinct: [${[...distinctSet].join(', ')}]\\n` +\n `Cursor fields: [${[...cursorFields].join(', ')}]`,\n )\n }\n }\n }\n}\n\nfunction resolveDialect(dialect?: SqlDialect): SqlDialect {\n return dialect ?? getGlobalDialect()\n}\n\nfunction normalizeArgsForNegativeTake(\n method: string,\n args: PrismaQueryArgs,\n): PrismaQueryArgs {\n if (method !== 'findMany') return args\n if (typeof args.take !== 'number') return args\n if (!Number.isInteger(args.take)) return args\n if (args.take >= 0) return args\n\n if (!isNotNullish(args.orderBy)) {\n throw new Error('Negative take requires orderBy for deterministic results')\n }\n\n return {\n ...args,\n take: Math.abs(args.take),\n orderBy: reverseOrderByInput(args.orderBy),\n }\n}\n\nfunction normalizeArgsForDialect(\n dialect: SqlDialect,\n args: PrismaQueryArgs,\n): PrismaQueryArgs {\n if (dialect !== 'postgres') return args\n return applyPostgresDistinctOrderBy(args)\n}\n\nfunction buildCursorClauseIfAny(input: {\n cursor: unknown\n orderBy: PrismaQueryArgs['orderBy']\n tableName: string\n alias: string\n params: ReturnType<typeof createParamStoreFrom>\n dialect: SqlDialect\n model: Model\n}): { cte?: string; condition?: string } {\n const { cursor, orderBy, tableName, alias, params, dialect, model } = input\n if (!isNotNullish(cursor)) return {}\n return buildCursorCondition(\n cursor,\n orderBy,\n tableName,\n alias,\n params,\n dialect,\n model,\n )\n}\n\nfunction buildSelectSpec(input: {\n method: string\n normalizedArgs: PrismaQueryArgs\n model: Model\n schemas: Model[]\n tableName: string\n alias: string\n whereResult: WhereClauseResult\n dialect: SqlDialect\n}): SelectQuerySpec {\n const {\n method,\n normalizedArgs,\n model,\n schemas,\n tableName,\n alias,\n whereResult,\n dialect,\n } = input\n\n const selectFields = buildSelectFields(\n { select: normalizedArgs.select },\n model,\n alias,\n )\n\n const orderByClause = buildOrderByClause(\n normalizedArgs,\n alias,\n dialect,\n model,\n )\n const { take, skip, cursor } = getPaginationParams(method, normalizedArgs)\n\n const params = createParamStoreFrom(\n whereResult.params,\n whereResult.paramMappings,\n whereResult.nextParamIndex,\n dialect,\n )\n\n const outerHasLimit = isNotNullish(take)\n\n const includes = buildIncludeSql(\n normalizedArgs,\n model,\n schemas,\n alias,\n params,\n dialect,\n outerHasLimit,\n )\n\n const cursorResult = buildCursorClauseIfAny({\n cursor,\n orderBy: normalizedArgs.orderBy,\n tableName,\n alias,\n params,\n dialect,\n model,\n })\n\n if (\n dialect === 'sqlite' &&\n isNonEmptyArray(normalizedArgs.distinct) &&\n cursorResult.condition\n ) {\n throw new Error(\n 'Cursor pagination with distinct is not supported in SQLite due to window function limitations. ' +\n 'Use findMany with skip/take instead, or remove distinct.',\n )\n }\n\n return {\n select: selectFields,\n includes,\n from: { table: tableName, alias },\n whereClause: whereResult.clause,\n whereJoins: whereResult.joins,\n orderBy: orderByClause,\n pagination: { take, skip },\n distinct: normalizedArgs.distinct,\n method,\n cursorCte: cursorResult.cte,\n cursorClause: cursorResult.condition,\n params,\n dialect,\n model,\n schemas,\n args: normalizedArgs,\n }\n}\n\ntype BuildSelectSqlInput = {\n method: string\n args: PrismaQueryArgs\n model: Model\n schemas: Model[]\n from: { tableName: string; alias: string }\n whereResult: WhereClauseResult\n dialect?: SqlDialect\n}\n\nexport function buildSelectSql(input: BuildSelectSqlInput): SqlResult {\n const { method, args, model, schemas, from, whereResult, dialect } = input\n\n assertSafeAlias(from.alias)\n assertSafeTableRef(from.tableName)\n\n const dialectToUse = resolveDialect(dialect)\n\n const argsForSql = normalizeArgsForNegativeTake(method, args)\n const normalizedArgs = normalizeArgsForDialect(dialectToUse, argsForSql)\n\n validateDistinct(model, normalizedArgs.distinct)\n validateOrderBy(model, normalizedArgs.orderBy)\n validateCursor(model, normalizedArgs.cursor, normalizedArgs.distinct)\n\n const spec = buildSelectSpec({\n method,\n normalizedArgs,\n model,\n schemas,\n tableName: from.tableName,\n alias: from.alias,\n whereResult,\n dialect: dialectToUse,\n })\n\n return constructFinalSql(spec)\n}\n","import { ParamStore } from './param-store'\nimport { SqlDialect } from '../../sql-builder-dialect'\n\ntype ComparisonBuilder = (\n expr: string,\n op: string,\n val: unknown,\n params: ParamStore,\n dialect: SqlDialect,\n) => string\n\nconst DEFAULT_EXCLUDE_KEYS: ReadonlySet<string> = new Set(['mode'])\n\nexport function buildComparisons(\n expr: string,\n filter: Record<string, unknown>,\n params: ParamStore,\n dialect: SqlDialect,\n builder: ComparisonBuilder,\n excludeKeys: ReadonlySet<string> = DEFAULT_EXCLUDE_KEYS,\n): string[] {\n const out: string[] = []\n\n for (const op in filter) {\n if (!Object.prototype.hasOwnProperty.call(filter, op)) continue\n if (excludeKeys.has(op)) continue\n\n const val = filter[op]\n if (val === undefined) continue\n\n const built = builder(expr, op, val, params, dialect)\n if (built && built.trim().length > 0) out.push(built)\n }\n\n return out\n}\n","import { PrismaQueryArgs, Model } from '../types'\nimport {\n SQL_TEMPLATES,\n SQL_SEPARATORS,\n Ops,\n LogicalOps,\n LIMITS,\n} from './shared/constants'\nimport {\n assertSafeAlias,\n assertSafeTableRef,\n col,\n quote,\n colWithAlias,\n} from './shared/sql-utils'\nimport { createParamStore, ParamStore } from './shared/param-store'\nimport { WhereClauseResult, SqlResult } from './shared/types'\nimport {\n isValidWhereClause,\n validateSelectQuery,\n validateParamConsistency,\n} from './shared/validators/sql-validators'\nimport {\n isNotNullish,\n isNonEmptyArray,\n isPlainObject,\n} from './shared/validators/type-guards'\nimport { SqlDialect, getGlobalDialect } from '../sql-builder-dialect'\nimport { addAutoScoped } from './shared/dynamic-params'\nimport { buildNotComposite } from './where/operators-scalar'\nimport {\n assertScalarField,\n assertNumericField,\n} from './shared/validators/field-assertions'\nimport { buildComparisons } from './shared/comparison-builder'\nimport { buildOrderBy } from './pagination'\nimport { buildSelectSql } from './select'\nimport { getPrimaryKeyFields } from './shared/primary-key-utils'\nimport { tryBuildNullComparison } from './shared/null-comparison'\nimport { buildInCondition } from './shared/in-operator-builder'\n\ntype AggregateKey = '_count' | '_sum' | '_avg' | '_min' | '_max'\ntype LogicalKey = 'AND' | 'OR' | 'NOT'\n\nconst MAX_NOT_DEPTH = 50\n\nconst AGGREGATES: ReadonlyArray<[Exclude<AggregateKey, '_count'>, string]> = [\n ['_sum', 'SUM'],\n ['_avg', 'AVG'],\n ['_min', 'MIN'],\n ['_max', 'MAX'],\n]\n\nconst COMPARISON_OPS: Record<string, string> = {\n [Ops.EQUALS]: '=',\n [Ops.NOT]: '<>',\n [Ops.GT]: '>',\n [Ops.GTE]: '>=',\n [Ops.LT]: '<',\n [Ops.LTE]: '<=',\n}\n\nconst HAVING_ALLOWED_OPS = new Set<string>([\n Ops.EQUALS,\n Ops.NOT,\n Ops.GT,\n Ops.GTE,\n Ops.LT,\n Ops.LTE,\n Ops.IN,\n Ops.NOT_IN,\n])\n\nconst HAVING_FIELD_FIRST_AGG_KEYS: readonly AggregateKey[] = Object.freeze([\n '_count',\n '_sum',\n '_avg',\n '_min',\n '_max',\n] as const)\n\nfunction hasAnyOwnKey(obj: Record<string, unknown>): boolean {\n for (const k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) return true\n }\n return false\n}\n\nfunction isTruthySelection(v: unknown): boolean {\n return v === true\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 assertHavingOp(op: string): void {\n if (!HAVING_ALLOWED_OPS.has(op)) {\n throw new Error(\n `Unsupported HAVING operator '${op}'. Allowed: ${[...HAVING_ALLOWED_OPS].join(', ')}`,\n )\n }\n}\n\nfunction aggExprForField(\n aggKey: AggregateKey,\n field: string,\n alias: string,\n model?: Model,\n): string {\n if (aggKey === '_count') {\n return field === '_all'\n ? 'COUNT(*)'\n : 'COUNT(' + col(alias, field, model) + ')'\n }\n if (field === '_all') {\n throw new Error(`'${aggKey}' does not support '_all'`)\n }\n if (aggKey === '_sum') return 'SUM(' + col(alias, field, model) + ')'\n if (aggKey === '_avg') return 'AVG(' + col(alias, field, model) + ')'\n if (aggKey === '_min') return 'MIN(' + col(alias, field, model) + ')'\n return 'MAX(' + col(alias, field, model) + ')'\n}\n\nfunction buildComparisonOp(op: string): string {\n const sqlOp = COMPARISON_OPS[op]\n if (!sqlOp) {\n throw new Error(`Unsupported HAVING operator: ${op}`)\n }\n return sqlOp\n}\n\nfunction addHavingParam(\n params: ParamStore,\n op: string,\n value: unknown,\n): string {\n return addAutoScoped(params, value, `having.${op}`)\n}\n\nfunction normalizeLogicalValue(\n operator: LogicalKey,\n value: unknown,\n): Record<string, unknown>[] {\n if (Array.isArray(value)) {\n const out: Record<string, unknown>[] = []\n for (const v of value) {\n if (!isPlainObject(v)) {\n throw new Error(`${operator} entries must be objects in HAVING`)\n }\n out.push(v)\n }\n return out\n }\n\n if (isPlainObject(value)) return [value]\n\n throw new Error(`${operator} must be an object or array of objects in HAVING`)\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 depth: number = 0,\n): string {\n assertHavingOp(op)\n\n if (depth > MAX_NOT_DEPTH) {\n throw new Error(\n `NOT operator nesting too deep in HAVING (max ${MAX_NOT_DEPTH} levels).`,\n )\n }\n\n const nullCheck = tryBuildNullComparison(expr, op, val, 'HAVING')\n if (nullCheck) return nullCheck\n\n if (op === Ops.NOT && isPlainObject(val)) {\n return buildNotComposite(\n expr,\n val,\n params,\n dialect,\n (e, subOp, subVal, p, d) =>\n buildSimpleComparison(e, subOp, subVal, p, d, depth + 1),\n SQL_SEPARATORS.CONDITION_AND,\n )\n }\n\n if (op === Ops.IN || op === Ops.NOT_IN) {\n return buildInCondition(\n expr,\n op === Ops.IN ? 'in' : 'notIn',\n val,\n params,\n dialect,\n 'HAVING',\n )\n }\n\n return buildBinaryComparison(expr, op, val, params)\n}\n\nfunction negateClauses(subClauses: string[]): string {\n if (subClauses.length === 1) return SQL_TEMPLATES.NOT + ' ' + subClauses[0]\n return (\n SQL_TEMPLATES.NOT +\n ' (' +\n subClauses.join(SQL_SEPARATORS.CONDITION_AND) +\n ')'\n )\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 buildHavingNode(\n node: Record<string, unknown>,\n alias: string,\n params: ParamStore,\n dialect: SqlDialect,\n model: Model,\n depth: number = 0,\n): string {\n if (depth > LIMITS.MAX_HAVING_DEPTH) {\n throw new Error(\n `HAVING clause nesting too deep (max ${LIMITS.MAX_HAVING_DEPTH} levels). This usually indicates a circular reference.`,\n )\n }\n\n const clauses: string[] = []\n\n for (const key in node) {\n if (!Object.prototype.hasOwnProperty.call(node, key)) continue\n const value = node[key]\n const built = buildHavingEntry(\n key,\n value,\n alias,\n params,\n dialect,\n model,\n depth,\n )\n for (const c of built) {\n if (c && c.length > 0) clauses.push(c)\n }\n }\n\n return clauses.join(SQL_SEPARATORS.CONDITION_AND)\n}\n\nfunction buildLogicalClause(\n key: LogicalKey,\n value: unknown,\n alias: string,\n params: ParamStore,\n dialect: SqlDialect,\n model: Model,\n depth: number = 0,\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, depth + 1)\n if (c && c.length > 0) subClauses.push('(' + c + ')')\n }\n\n if (subClauses.length === 0) return ''\n\n return combineLogical(key, subClauses)\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 return\n }\n\n if (aggKey === '_sum' || aggKey === '_avg') {\n assertNumericField(model, field, 'HAVING')\n } else {\n assertScalarField(model, field, 'HAVING')\n }\n}\n\nfunction buildHavingOpsForExpr(\n expr: string,\n filter: Record<string, unknown>,\n params: ParamStore,\n dialect: SqlDialect,\n): string[] {\n return buildComparisons(expr, filter, params, dialect, buildSimpleComparison)\n}\n\ntype HavingShape = 'aggregate-first' | 'field-first'\n\ninterface NormalizedHavingEntry {\n aggKey: AggregateKey\n fieldName: string\n filter: Record<string, unknown>\n}\n\nfunction normalizeHavingTarget(\n target: Record<string, unknown>,\n shape: HavingShape,\n model: Model,\n): NormalizedHavingEntry[] {\n const entries: NormalizedHavingEntry[] = []\n\n if (shape === 'aggregate-first') {\n for (const aggKey in target) {\n if (!Object.prototype.hasOwnProperty.call(target, aggKey)) continue\n if (!isAggregateKey(aggKey)) continue\n\n const aggTarget = target[aggKey]\n if (!isPlainObject(aggTarget)) continue\n\n for (const fieldName in aggTarget) {\n if (!Object.prototype.hasOwnProperty.call(aggTarget, fieldName))\n continue\n\n const filter = aggTarget[fieldName]\n if (!isPlainObject(filter)) continue\n if (!hasAnyOwnKey(filter)) continue\n\n entries.push({ aggKey: aggKey as AggregateKey, fieldName, filter })\n }\n }\n } else {\n for (const fieldName in target) {\n if (!Object.prototype.hasOwnProperty.call(target, fieldName)) continue\n\n const fieldTarget = target[fieldName]\n if (!isPlainObject(fieldTarget)) continue\n\n for (const aggKey of HAVING_FIELD_FIRST_AGG_KEYS) {\n const aggFilter = (fieldTarget as any)[aggKey]\n if (!isPlainObject(aggFilter)) continue\n if (!hasAnyOwnKey(aggFilter)) continue\n\n entries.push({ aggKey, fieldName, filter: aggFilter })\n }\n }\n }\n\n return entries\n}\n\nfunction validateHavingTarget(\n aggKey: AggregateKey,\n fieldName: string,\n model: Model,\n): void {\n if (fieldName === '_all') {\n if (aggKey !== '_count')\n throw new Error(`HAVING '${aggKey}' does not support '_all'`)\n return\n }\n\n if (aggKey === '_sum' || aggKey === '_avg') {\n assertNumericField(model, fieldName, 'HAVING')\n } else {\n assertScalarField(model, fieldName, 'HAVING')\n }\n}\n\nfunction buildHavingForShape(\n shape: HavingShape,\n target: unknown,\n alias: string,\n params: ParamStore,\n dialect: SqlDialect,\n model: Model,\n): string[] {\n if (!isPlainObject(target)) {\n const shapeLabel = shape === 'aggregate-first' ? 'aggregate key' : 'field'\n throw new Error(`HAVING '${shapeLabel}' must be an object`)\n }\n\n const entries = normalizeHavingTarget(target, shape, model)\n const out: string[] = []\n\n for (const { aggKey, fieldName, filter } of entries) {\n validateHavingTarget(aggKey, fieldName, model)\n const expr = aggExprForField(aggKey, fieldName, alias, model)\n out.push(...buildHavingOpsForExpr(expr, filter, params, dialect))\n }\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 return buildHavingForShape(\n 'aggregate-first',\n { [aggKey]: target },\n alias,\n params,\n dialect,\n model,\n )\n}\n\nfunction buildHavingEntry(\n key: string,\n value: unknown,\n alias: string,\n params: ParamStore,\n dialect: SqlDialect,\n model: Model,\n depth: number = 0,\n): string[] {\n if (isLogicalKey(key)) {\n const logical = buildLogicalClause(\n key,\n value,\n alias,\n params,\n dialect,\n model,\n depth,\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 buildHavingForShape(\n 'field-first',\n { [key]: value },\n alias,\n params,\n dialect,\n model,\n )\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 const d = dialect ?? getGlobalDialect()\n if (!isPlainObject(having)) throw new Error('having must be an object')\n return buildHavingNode(having, alias, params, d, model, 0)\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 +\n ' ' +\n SQL_TEMPLATES.AS +\n ' ' +\n quote('_count._all'),\n )\n}\n\nfunction pushCountField(\n fields: string[],\n alias: string,\n fieldName: string,\n model?: Model,\n): void {\n const outAlias = '_count.' + fieldName\n fields.push(\n 'COUNT(' +\n col(alias, fieldName, model) +\n ') ' +\n SQL_TEMPLATES.AS +\n ' ' +\n quote(outAlias),\n )\n}\n\nfunction addCountFields(\n fields: string[],\n countArg: Record<string, unknown> | true | undefined,\n alias: string,\n model: Model,\n): void {\n if (!isNotNullish(countArg)) return\n\n if (countArg === true) {\n pushCountAllField(fields)\n return\n }\n\n if (!isPlainObject(countArg)) {\n throw new Error(`_count must be true or an object, got ${typeof countArg}`)\n }\n\n if (countArg._all === true) {\n pushCountAllField(fields)\n }\n\n for (const f in countArg) {\n if (!Object.prototype.hasOwnProperty.call(countArg, f)) continue\n if (f === '_all') continue\n const v = countArg[f]\n if (isTruthySelection(v)) {\n assertScalarField(model, f, '_count')\n pushCountField(fields, alias, f, model)\n }\n }\n}\n\nfunction getAggregateSelectionObject(\n args: PrismaQueryArgs,\n agg: AggregateKey,\n): Record<string, unknown> | undefined {\n const obj = args[agg]\n return isPlainObject(obj) ? obj : undefined\n}\n\nfunction assertAggregatableScalarField(\n model: Model,\n agg: AggregateKey,\n fieldName: string,\n): void {\n if (agg === '_sum' || agg === '_avg') {\n assertNumericField(model, fieldName, agg)\n } else {\n assertScalarField(model, fieldName, agg)\n }\n}\n\nfunction pushAggregateFieldSql(\n fields: string[],\n aggFn: string,\n alias: string,\n agg: AggregateKey,\n fieldName: string,\n model?: Model,\n): void {\n const outAlias = agg + '.' + fieldName\n fields.push(\n aggFn +\n '(' +\n col(alias, fieldName, model) +\n ') ' +\n SQL_TEMPLATES.AS +\n ' ' +\n quote(outAlias),\n )\n}\n\nfunction addAggregateFields(\n fields: string[],\n args: PrismaQueryArgs,\n alias: string,\n model: Model,\n): void {\n for (const [agg, aggFn] of AGGREGATES) {\n const obj = getAggregateSelectionObject(args, agg)\n if (!obj) continue\n\n for (const fieldName in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, fieldName)) continue\n\n const selection = obj[fieldName]\n if (fieldName === '_all')\n throw new Error(`'${agg}' does not support '_all'`)\n if (!isTruthySelection(selection)) continue\n\n assertAggregatableScalarField(model, agg, fieldName)\n pushAggregateFieldSql(fields, aggFn, alias, agg, fieldName, model)\n }\n }\n}\n\nfunction buildAggregateFields(\n args: PrismaQueryArgs,\n alias: string,\n model: Model,\n): string[] {\n const fields: string[] = []\n\n const countArg = normalizeCountArg(args._count)\n addCountFields(fields, countArg, alias, model)\n addAggregateFields(fields, args, alias, model)\n\n return fields\n}\n\nexport function buildAggregateSql(\n args: PrismaQueryArgs,\n whereResult: WhereClauseResult,\n tableName: string,\n alias: string,\n model: Model,\n): SqlResult {\n assertSafeAlias(alias)\n assertSafeTableRef(tableName)\n\n const aggFields = buildAggregateFields(args, alias, model)\n if (!isNonEmptyArray(aggFields)) {\n throw new Error('buildAggregateSql requires at least one aggregate field')\n }\n\n const selectClause = aggFields.join(SQL_SEPARATORS.FIELD_LIST)\n\n const joinsPart =\n whereResult.joins && whereResult.joins.length > 0\n ? whereResult.joins.join(' ')\n : ''\n\n const whereClause = isValidWhereClause(whereResult.clause)\n ? SQL_TEMPLATES.WHERE + ' ' + whereResult.clause\n : ''\n\n const parts: string[] = [\n SQL_TEMPLATES.SELECT,\n selectClause,\n SQL_TEMPLATES.FROM,\n tableName,\n alias,\n ]\n if (joinsPart) parts.push(joinsPart)\n if (whereClause) parts.push(whereClause)\n\n const sql = parts.join(' ').trim()\n\n validateSelectQuery(sql)\n validateParamConsistency(sql, whereResult.params)\n\n return {\n sql,\n params: [...whereResult.params],\n paramMappings: [...whereResult.paramMappings],\n }\n}\n\nfunction assertGroupByBy(args: PrismaQueryArgs, model: Model): string[] {\n if (!isNotNullish(args.by) || !isNonEmptyArray(args.by)) {\n throw new Error('buildGroupBySql: by is required and cannot be empty')\n }\n\n const byFields = args.by.map((f: string) => String(f))\n const bySet = new Set(byFields)\n if (bySet.size !== byFields.length) {\n throw new Error('buildGroupBySql: by must not contain duplicates')\n }\n\n for (const f of byFields) {\n assertScalarField(model, f, 'groupBy.by')\n }\n\n return byFields\n}\n\nfunction buildGroupBySelectParts(\n args: PrismaQueryArgs,\n alias: string,\n model: Model,\n byFields: string[],\n): { groupCols: string[]; groupFields: string; selectFields: string } {\n const groupCols = byFields.map((f) => col(alias, f, model))\n const selectCols = byFields.map((f) => colWithAlias(alias, f, model))\n const groupFields = groupCols.join(SQL_SEPARATORS.FIELD_LIST)\n\n const aggFields = buildAggregateFields(args, alias, model)\n const selectFields = isNonEmptyArray(aggFields)\n ? selectCols.concat(aggFields).join(SQL_SEPARATORS.FIELD_LIST)\n : selectCols.join(SQL_SEPARATORS.FIELD_LIST)\n\n return { groupCols, groupFields, selectFields }\n}\n\nfunction buildGroupByHaving(\n args: PrismaQueryArgs,\n alias: string,\n params: ParamStore,\n model: Model,\n dialect: SqlDialect,\n): string {\n if (!isNotNullish(args.having)) return ''\n if (!isPlainObject(args.having)) throw new Error('having must be an object')\n\n const h = buildHavingClause(args.having, alias, params, model, dialect)\n if (!h || h.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, d)\n\n const { groupFields, selectFields } = buildGroupBySelectParts(\n args,\n alias,\n model,\n byFields,\n )\n const havingClause = buildGroupByHaving(args, alias, params, model, d)\n\n const joinsPart =\n whereResult.joins && whereResult.joins.length > 0\n ? whereResult.joins.join(' ')\n : ''\n\n const whereClause = isValidWhereClause(whereResult.clause)\n ? SQL_TEMPLATES.WHERE + ' ' + whereResult.clause\n : ''\n\n const orderBySql = isNotNullish(args.orderBy)\n ? buildOrderBy(args.orderBy, alias, d, model)\n : ''\n\n const parts: string[] = [\n SQL_TEMPLATES.SELECT,\n selectFields,\n SQL_TEMPLATES.FROM,\n tableName,\n alias,\n ]\n if (joinsPart) parts.push(joinsPart)\n if (whereClause) parts.push(whereClause)\n parts.push(SQL_TEMPLATES.GROUP_BY, groupFields)\n if (havingClause) parts.push(havingClause)\n\n if (orderBySql) {\n parts.push(SQL_TEMPLATES.ORDER_BY, orderBySql)\n }\n\n if (isNotNullish(args.take)) {\n const ph = addAutoScoped(params, args.take, 'groupBy.take')\n parts.push(SQL_TEMPLATES.LIMIT, ph)\n }\n\n if (isNotNullish(args.skip)) {\n const ph = addAutoScoped(params, args.skip, 'groupBy.skip')\n parts.push(SQL_TEMPLATES.OFFSET, ph)\n }\n\n const sql = parts.join(' ').trim()\n\n const snapshot = params.snapshot()\n\n const allParams = [...whereResult.params, ...snapshot.params]\n const allMappings = [...whereResult.paramMappings, ...snapshot.mappings]\n\n validateSelectQuery(sql)\n validateParamConsistency(sql, allParams)\n\n return {\n sql,\n params: allParams,\n paramMappings: allMappings,\n }\n}\n\nfunction normalizeCountArgs(argsOrSkip: unknown): PrismaQueryArgs {\n if (isPlainObject(argsOrSkip)) return argsOrSkip as PrismaQueryArgs\n if (argsOrSkip === undefined || argsOrSkip === null) return {}\n return { skip: argsOrSkip as any }\n}\n\nfunction assertNoNegativeTake(args: PrismaQueryArgs): void {\n if (typeof args.take === 'number' && args.take < 0) {\n throw new Error('Negative take is not supported for count()')\n }\n}\n\nfunction buildSimpleCountSql(\n whereResult: WhereClauseResult,\n tableName: string,\n alias: string,\n): SqlResult {\n const joinsPart =\n whereResult.joins && whereResult.joins.length > 0\n ? whereResult.joins.join(' ')\n : ''\n\n const whereClause = isValidWhereClause(whereResult.clause)\n ? SQL_TEMPLATES.WHERE + ' ' + whereResult.clause\n : ''\n\n const parts: string[] = [\n SQL_TEMPLATES.SELECT,\n SQL_TEMPLATES.COUNT_ALL,\n SQL_TEMPLATES.AS,\n quote('_count._all'),\n SQL_TEMPLATES.FROM,\n tableName,\n alias,\n ]\n if (joinsPart) parts.push(joinsPart)\n if (whereClause) parts.push(whereClause)\n\n const sql = parts.join(' ').trim()\n\n validateSelectQuery(sql)\n validateParamConsistency(sql, whereResult.params)\n\n return {\n sql,\n params: [...whereResult.params],\n paramMappings: [...whereResult.paramMappings],\n }\n}\n\nexport function buildCountSql(\n whereResult: WhereClauseResult,\n tableName: string,\n alias: string,\n argsOrSkip?: PrismaQueryArgs | number | string,\n dialect?: SqlDialect,\n model?: Model,\n schemas?: Model[],\n): SqlResult {\n assertSafeAlias(alias)\n assertSafeTableRef(tableName)\n\n const args = normalizeCountArgs(argsOrSkip)\n assertNoNegativeTake(args)\n\n if (!model) {\n return buildSimpleCountSql(whereResult, tableName, alias)\n }\n\n const pkFields = getPrimaryKeyFields(model)\n const distinctFields = isNonEmptyArray((args as any).distinct)\n ? (args as any).distinct.map((x: any) => String(x)).filter((x: string) => x)\n : []\n\n const selectFields = distinctFields.length > 0 ? distinctFields : pkFields\n if (selectFields.length === 0) {\n return buildSimpleCountSql(whereResult, tableName, alias)\n }\n\n const select: Record<string, boolean> = {}\n for (const f of selectFields) select[f] = true\n\n const subArgs: PrismaQueryArgs = {\n ...(args as any),\n include: undefined,\n select,\n }\n\n const d = dialect ?? getGlobalDialect()\n const subSchemas =\n Array.isArray(schemas) && schemas.length > 0 ? schemas : [model]\n\n const sub = buildSelectSql({\n method: 'findMany',\n args: subArgs,\n model,\n schemas: subSchemas,\n from: { tableName, alias },\n whereResult,\n dialect: d,\n })\n\n const countAlias = quote('__count_sub')\n const sql =\n `${SQL_TEMPLATES.SELECT} ${SQL_TEMPLATES.COUNT_ALL} ${SQL_TEMPLATES.AS} ${quote(\n '_count._all',\n )} ` +\n `${SQL_TEMPLATES.FROM} (${sub.sql}) ${SQL_TEMPLATES.AS} ${countAlias}`\n\n validateSelectQuery(sql)\n validateParamConsistency(sql, sub.params)\n\n return {\n sql,\n params: sub.params,\n paramMappings: sub.paramMappings,\n }\n}\n","import { getModelByName } from './builder/joins'\nimport { buildSelectSql } from './builder/select'\nimport {\n buildAggregateSql,\n buildCountSql,\n buildGroupBySql,\n} from './builder/aggregates'\nimport { getGlobalDialect, SqlDialect } from './sql-builder-dialect'\nimport { buildWhereClause } from './builder/where'\nimport { buildTableReference } from './builder/shared/sql-utils'\nimport { SQL_TEMPLATES, SQL_RESERVED_WORDS } from './builder/shared/constants'\nimport { validateParamConsistencyByDialect } from './builder/shared/validators/sql-validators'\nimport {\n ParamMap,\n DirectiveProps,\n convertDMMFToModels,\n} from '@dee-wan/schema-parser'\nimport { PrismaMethod } from './types'\nimport { isPlainObject } from './builder/shared/validators/type-guards'\nimport { SqlResult } from './builder/shared/types'\n\nexport interface SQLDirective {\n method: PrismaMethod\n sql: string\n staticParams: any[]\n dynamicKeys: string[]\n paramOrder: string\n paramMappings: readonly ParamMap[]\n requiresReduction: boolean\n includeSpec: Record<string, any>\n originalDirective: DirectiveProps\n}\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 resolveMethod(directive: DirectiveProps): PrismaMethod {\n const m = (directive as any)?.method\n if (isPrismaMethod(m)) return m\n const pm = (directive as any)?.query?.processed?.method\n if (isPrismaMethod(pm)) return pm\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}): SqlResult {\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(\n processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n dialect,\n )\n }\n\n if (method === 'count') {\n return buildCountSql(\n whereResult,\n tableName,\n alias,\n processed,\n dialect,\n modelDef,\n schemaModels,\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 paramOrder: string\n} {\n const sorted = [...mappings].sort((a, b) => a.index - b.index)\n const staticParams: any[] = []\n const dynamicKeys: string[] = []\n let paramOrder = ''\n\n for (const m of sorted) {\n if (m.dynamicName !== undefined) {\n dynamicKeys.push(m.dynamicName)\n paramOrder += 'd'\n } else if (m.value !== undefined) {\n staticParams.push(m.value)\n paramOrder += 's'\n } else {\n throw new Error(\n `CRITICAL: ParamMap ${m.index} has neither dynamicName nor value`,\n )\n }\n }\n\n return { staticParams, dynamicKeys, paramOrder }\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 extractIncludeSpec(\n processed: Record<string, any>,\n modelDef: any,\n): Record<string, any> {\n const includeSpec: Record<string, any> = {}\n const relationSet = new Set<string>(\n Array.isArray(modelDef?.fields)\n ? modelDef.fields\n .filter((f: any) => f && f.isRelation && typeof f.name === 'string')\n .map((f: any) => f.name)\n : [],\n )\n\n if (processed.include && isPlainObject(processed.include)) {\n for (const [key, value] of Object.entries(processed.include)) {\n if (!relationSet.has(key)) continue\n if (value !== false) {\n includeSpec[key] = value\n }\n }\n }\n\n if (processed.select && isPlainObject(processed.select)) {\n for (const [key, value] of Object.entries(processed.select)) {\n if (!relationSet.has(key)) continue\n if (value === false) continue\n\n if (value === true) {\n includeSpec[key] = true\n continue\n }\n\n if (isPlainObject(value)) {\n const selectVal = value as Record<string, any>\n if (selectVal.include || selectVal.select) {\n includeSpec[key] = value\n } else {\n includeSpec[key] = true\n }\n } else {\n includeSpec[key] = true\n }\n }\n }\n\n return includeSpec\n}\n\nfunction buildAndNormalizeSql(args: {\n method: PrismaMethod\n processed: Record<string, any>\n whereResult: ReturnType<typeof buildWhereClause>\n tableName: string\n alias: string\n modelDef: any\n schemaModels: any\n dialect: SqlDialect\n}): {\n sql: string\n paramMappings: readonly ParamMap[]\n requiresReduction: boolean\n includeSpec: Record<string, any>\n} {\n const {\n method,\n processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n schemaModels,\n dialect,\n } = args\n\n const sqlResult = buildSqlResult({\n method,\n processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n schemaModels,\n dialect,\n })\n\n const normalized = normalizeSqlAndMappingsForDialect(\n sqlResult.sql,\n sqlResult.paramMappings!,\n dialect,\n )\n\n const includeSpec =\n (sqlResult.includeSpec && isPlainObject(sqlResult.includeSpec)\n ? (sqlResult.includeSpec as Record<string, any>)\n : null) ?? extractIncludeSpec(processed, modelDef)\n\n const requiresReduction = sqlResult.requiresReduction === true\n\n return {\n sql: normalized.sql,\n paramMappings: normalized.paramMappings,\n requiresReduction,\n includeSpec,\n }\n}\n\nfunction finalizeDirective(args: {\n directive: DirectiveProps\n method: PrismaMethod\n normalizedSql: string\n normalizedMappings: readonly ParamMap[]\n dialect: SqlDialect\n requiresReduction: boolean\n includeSpec: Record<string, any>\n}): SQLDirective {\n const {\n directive,\n method,\n normalizedSql,\n normalizedMappings,\n dialect,\n requiresReduction,\n includeSpec,\n } = args\n\n const params = normalizedMappings.map((m) => m.value ?? undefined)\n validateParamConsistencyByDialect(normalizedSql, params, dialect)\n\n const { staticParams, dynamicKeys, paramOrder } =\n buildParamsFromMappings(normalizedMappings)\n\n return {\n method,\n sql: normalizedSql,\n staticParams,\n dynamicKeys,\n paramOrder,\n paramMappings: normalizedMappings,\n requiresReduction,\n includeSpec,\n originalDirective: directive,\n }\n}\n\nexport function generateSQL(directive: DirectiveProps): SQLDirective {\n const { query } = directive\n\n const { schemaModels, modelDef } = resolveModelContext(directive)\n\n const dialect = getGlobalDialect()\n\n const { tableName, alias } = buildMainTableAndAlias({ modelDef, dialect })\n\n const whereResult = buildMainWhere({\n processed: query.processed,\n alias,\n schemaModels,\n modelDef,\n dialect,\n })\n\n const method = resolveMethod(directive)\n\n const built = buildAndNormalizeSql({\n method,\n processed: query.processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n schemaModels,\n dialect,\n })\n\n return finalizeDirective({\n directive,\n method,\n normalizedSql: built.sql,\n normalizedMappings: built.paramMappings,\n dialect,\n requiresReduction: built.requiresReduction,\n includeSpec: built.includeSpec,\n })\n}\n","interface Node<K, V> {\n key: K\n value: V\n freq: number\n queue: 'small' | 'main'\n prev: Node<K, V> | null\n next: Node<K, V> | null\n}\n\nfunction withDispose<T>(it: IterableIterator<T>): MapIterator<T> {\n const anyIt = it as any\n if (anyIt[Symbol.dispose] === undefined) {\n anyIt[Symbol.dispose] = () => {}\n }\n return it as unknown as MapIterator<T>\n}\n\nclass BoundedCache<K, V> implements Map<K, V> {\n private map: Map<K, Node<K, V>> = new Map()\n private ghost: Set<K> = new Set()\n\n private smallHead: Node<K, V> | null = null\n private smallTail: Node<K, V> | null = null\n private smallSize = 0\n\n private mainHead: Node<K, V> | null = null\n private mainTail: Node<K, V> | null = null\n private mainSize = 0\n\n private readonly maxSize: number\n private readonly smallLimit: number\n private readonly mainLimit: number\n private readonly ghostLimit: number\n\n constructor(maxSize: number) {\n this.maxSize = maxSize\n this.smallLimit = Math.max(1, Math.floor(maxSize * 0.1))\n this.mainLimit = maxSize - this.smallLimit\n this.ghostLimit = this.mainLimit\n }\n\n get size(): number {\n return this.map.size\n }\n\n get(key: K): V | undefined {\n const node = this.map.get(key)\n if (!node) return undefined\n\n node.freq = Math.min(node.freq + 1, 3)\n return node.value\n }\n\n set(key: K, value: V): this {\n const existing = this.map.get(key)\n\n if (existing) {\n existing.value = value\n return this\n }\n\n if (this.ghost.has(key)) {\n this.ghost.delete(key)\n const node = this.createNode(key, value, 'main')\n this.map.set(key, node)\n this.pushMain(node)\n\n if (this.mainSize > this.mainLimit) this.evictMain()\n return this\n }\n\n const node = this.createNode(key, value, 'small')\n this.map.set(key, node)\n this.pushSmall(node)\n\n if (this.size > this.maxSize) {\n if (this.smallSize > this.smallLimit) this.evictSmall()\n else this.evictMain()\n }\n\n return this\n }\n\n has(key: K): boolean {\n return this.map.has(key)\n }\n\n delete(key: K): boolean {\n const node = this.map.get(key)\n if (!node) return false\n\n this.map.delete(key)\n this.removeNode(node)\n return true\n }\n\n clear(): void {\n this.map.clear()\n this.ghost.clear()\n this.smallHead = this.smallTail = null\n this.mainHead = this.mainTail = null\n this.smallSize = this.mainSize = 0\n }\n\n keys(): MapIterator<K> {\n return withDispose(\n (function* (self: BoundedCache<K, V>) {\n for (const key of self.map.keys()) yield key\n })(this),\n )\n }\n\n values(): MapIterator<V> {\n return withDispose(\n (function* (self: BoundedCache<K, V>) {\n for (const node of self.map.values()) yield node.value\n })(this),\n )\n }\n\n entries(): MapIterator<[K, V]> {\n return withDispose(\n (function* (self: BoundedCache<K, V>) {\n for (const [key, node] of self.map.entries())\n yield [key, node.value] as [K, V]\n })(this),\n )\n }\n\n forEach(\n callbackfn: (value: V, key: K, map: Map<K, V>) => void,\n thisArg?: any,\n ): void {\n for (const [key, node] of this.map.entries()) {\n callbackfn.call(thisArg, node.value, key, this)\n }\n }\n\n [Symbol.iterator](): MapIterator<[K, V]> {\n return this.entries()\n }\n\n get [Symbol.toStringTag](): string {\n return 'BoundedCache'\n }\n\n private createNode(key: K, value: V, queue: 'small' | 'main'): Node<K, V> {\n return { key, value, freq: 0, queue, prev: null, next: null }\n }\n\n private pushSmall(node: Node<K, V>): void {\n node.next = this.smallHead\n node.prev = null\n\n if (this.smallHead) this.smallHead.prev = node\n else this.smallTail = node\n\n this.smallHead = node\n this.smallSize++\n }\n\n private pushMain(node: Node<K, V>): void {\n node.next = this.mainHead\n node.prev = null\n\n if (this.mainHead) this.mainHead.prev = node\n else this.mainTail = node\n\n this.mainHead = node\n this.mainSize++\n }\n\n private popSmall(): Node<K, V> | null {\n if (!this.smallTail) return null\n\n const node = this.smallTail\n this.smallTail = node.prev\n\n if (this.smallTail) this.smallTail.next = null\n else this.smallHead = null\n\n node.prev = null\n node.next = null\n this.smallSize--\n return node\n }\n\n private popMain(): Node<K, V> | null {\n if (!this.mainTail) return null\n\n const node = this.mainTail\n this.mainTail = node.prev\n\n if (this.mainTail) this.mainTail.next = null\n else this.mainHead = null\n\n node.prev = null\n node.next = null\n this.mainSize--\n return node\n }\n\n private removeNode(node: Node<K, V>): void {\n this.unlinkNode(node)\n\n if (node.queue === 'small') {\n if (node === this.smallHead) this.smallHead = node.next\n if (node === this.smallTail) this.smallTail = node.prev\n this.smallSize--\n } else {\n if (node === this.mainHead) this.mainHead = node.next\n if (node === this.mainTail) this.mainTail = node.prev\n this.mainSize--\n }\n\n node.prev = null\n node.next = null\n }\n\n private unlinkNode(node: Node<K, V>): void {\n if (node.prev) node.prev.next = node.next\n if (node.next) node.next.prev = node.prev\n }\n\n private shouldPromoteFromSmall(node: Node<K, V>): boolean {\n return node.freq > 1\n }\n\n private shouldRetryInMain(node: Node<K, V>): boolean {\n return node.freq >= 1\n }\n\n private promoteToMain(node: Node<K, V>): void {\n node.queue = 'main'\n this.pushMain(node)\n }\n\n private addToGhost(key: K): void {\n this.ghost.add(key)\n\n if (this.ghost.size <= this.ghostLimit) return\n\n const firstGhost = this.ghost.values().next().value\n if (firstGhost !== undefined) this.ghost.delete(firstGhost)\n }\n\n private evictFromCache(node: Node<K, V>): void {\n this.map.delete(node.key)\n }\n\n private evictSmall(): void {\n while (this.smallSize > 0) {\n const node = this.popSmall()\n if (!node) return\n\n if (this.shouldPromoteFromSmall(node)) {\n this.promoteToMain(node)\n\n if (this.mainSize > this.mainLimit) {\n this.evictMain()\n return\n }\n\n continue\n }\n\n this.evictFromCache(node)\n this.addToGhost(node.key)\n return\n }\n }\n\n private evictMain(): void {\n while (this.mainSize > 0) {\n const node = this.popMain()\n if (!node) return\n\n if (this.shouldRetryInMain(node)) {\n node.freq--\n this.pushMain(node)\n continue\n }\n\n this.evictFromCache(node)\n return\n }\n }\n}\n\nexport function createBoundedCache<K, V>(maxSize: number): Map<K, V> {\n return new BoundedCache<K, V>(maxSize)\n}\n","import type { Model } from './types'\nimport type { SqlDialect } from './sql-builder-dialect'\nimport { buildTableReference, quote } from './builder/shared/sql-utils'\nimport { SQL_TEMPLATES } from './builder/shared/constants'\nimport { isPlainObject } from './builder/shared/validators/type-guards'\nimport { normalizeValue } from './utils/normalize-value'\nimport { makeAlias } from './query-cache'\n\ninterface SqlResult {\n sql: string\n params: unknown[]\n}\n\nfunction getIdField(model: Model): { name: string; dbName: string } | null {\n const idField = model.fields.find((f) => f.name === 'id' && !f.isRelation)\n if (!idField) return null\n return {\n name: 'id',\n dbName: idField.dbName || 'id',\n }\n}\n\nfunction buildColumnList(model: Model, alias: string): string {\n const cols: string[] = []\n for (const f of model.fields) {\n if (f.isRelation) continue\n if (f.name.startsWith('@') || f.name.startsWith('//')) continue\n const dbName = f.dbName || f.name\n if (dbName !== f.name) {\n cols.push(`${alias}.${quote(dbName)} AS ${quote(f.name)}`)\n } else {\n cols.push(`${alias}.${quote(dbName)}`)\n }\n }\n return cols.join(', ')\n}\n\nfunction getTableAndAlias(\n model: Model,\n dialect: SqlDialect,\n): { tableName: string; alias: string } {\n const tableName = buildTableReference(\n SQL_TEMPLATES.PUBLIC_SCHEMA,\n model.tableName,\n dialect,\n )\n const alias = makeAlias(model.tableName)\n return { tableName, alias }\n}\n\nfunction buildSimpleQuery(\n model: Model,\n dialect: SqlDialect,\n where: string,\n params: unknown[],\n suffix: string = '',\n): SqlResult {\n const { tableName, alias } = getTableAndAlias(model, dialect)\n const columns = buildColumnList(model, alias)\n const sql = `SELECT ${columns} FROM ${tableName} ${alias} ${where}${suffix}`\n return { sql, params }\n}\n\nfunction norm(value: unknown): unknown {\n return normalizeValue(value)\n}\n\nfunction isScalar(value: unknown): boolean {\n return value !== null && typeof value !== 'object'\n}\n\nfunction tryFindUniqueById(\n model: Model,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult | null {\n const where = args.where\n if (\n !isPlainObject(where) ||\n Object.keys(where).length !== 1 ||\n !('id' in where) ||\n !isScalar(where.id) ||\n args.select ||\n args.include\n ) {\n return null\n }\n\n const idField = getIdField(model)\n if (!idField) return null\n\n const { alias } = getTableAndAlias(model, dialect)\n\n const whereClause =\n dialect === 'sqlite'\n ? `WHERE ${alias}.${quote(idField.dbName)} = ?`\n : `WHERE ${alias}.${quote(idField.dbName)} = $1`\n\n return buildSimpleQuery(\n model,\n dialect,\n whereClause,\n [norm(where.id)],\n ' LIMIT 1',\n )\n}\n\nfunction tryFindManyById(\n model: Model,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult | null {\n const where = args.where\n if (\n !isPlainObject(where) ||\n Object.keys(where).length !== 1 ||\n !('id' in where) ||\n !isScalar(where.id) ||\n args.select ||\n args.include ||\n args.orderBy ||\n args.take ||\n args.skip ||\n args.distinct ||\n args.cursor\n ) {\n return null\n }\n\n const idField = getIdField(model)\n if (!idField) return null\n\n const { alias } = getTableAndAlias(model, dialect)\n\n const whereClause =\n dialect === 'sqlite'\n ? `WHERE ${alias}.${quote(idField.dbName)} = ?`\n : `WHERE ${alias}.${quote(idField.dbName)} = $1`\n\n return buildSimpleQuery(model, dialect, whereClause, [norm(where.id)])\n}\n\nfunction tryCountAll(\n model: Model,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult | null {\n const where = args.where\n if ((where && Object.keys(where).length > 0) || args.select || args.skip) {\n return null\n }\n\n const { tableName, alias } = getTableAndAlias(model, dialect)\n const sql = `SELECT COUNT(*) AS ${quote('_count._all')} FROM ${tableName} ${alias}`\n return { sql, params: [] }\n}\n\nfunction tryFindManyWithLimit(\n model: Model,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult | null {\n const where = args.where\n if (\n (where && Object.keys(where).length > 0) ||\n args.select ||\n args.include ||\n args.orderBy ||\n args.skip ||\n args.distinct ||\n args.cursor ||\n typeof args.take !== 'number' ||\n !Number.isInteger(args.take) ||\n args.take <= 0\n ) {\n return null\n }\n\n const { tableName, alias } = getTableAndAlias(model, dialect)\n const columns = buildColumnList(model, alias)\n const sql =\n dialect === 'sqlite'\n ? `SELECT ${columns} FROM ${tableName} ${alias} LIMIT ?`\n : `SELECT ${columns} FROM ${tableName} ${alias} LIMIT $1`\n\n return { sql, params: [norm(args.take)] }\n}\n\nfunction tryFindFirstBySingleField(\n model: Model,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult | null {\n const where = args.where\n if (\n !isPlainObject(where) ||\n Object.keys(where).length !== 1 ||\n args.select ||\n args.include ||\n args.orderBy ||\n args.skip\n ) {\n return null\n }\n\n const field = Object.keys(where)[0]\n const value = where[field]\n if (value === null || typeof value === 'object') {\n return null\n }\n\n const fieldDef = model.fields.find((f) => f.name === field)\n if (!fieldDef || fieldDef.isRelation) {\n return null\n }\n\n const { alias } = getTableAndAlias(model, dialect)\n const columnName = fieldDef.dbName || field\n\n const whereClause =\n dialect === 'sqlite'\n ? `WHERE ${alias}.${quote(columnName)} = ?`\n : `WHERE ${alias}.${quote(columnName)} = $1`\n\n return buildSimpleQuery(\n model,\n dialect,\n whereClause,\n [norm(value)],\n ' LIMIT 1',\n )\n}\n\nfunction tryFindManyBySingleField(\n model: Model,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult | null {\n const where = args.where\n if (\n !isPlainObject(where) ||\n Object.keys(where).length !== 1 ||\n args.select ||\n args.include ||\n args.orderBy ||\n args.take ||\n args.skip ||\n args.distinct ||\n args.cursor\n ) {\n return null\n }\n\n const field = Object.keys(where)[0]\n const value = where[field]\n if (value === null || typeof value === 'object') {\n return null\n }\n\n const fieldDef = model.fields.find((f) => f.name === field)\n if (!fieldDef || fieldDef.isRelation) {\n return null\n }\n\n const { alias } = getTableAndAlias(model, dialect)\n const columnName = fieldDef.dbName || field\n\n const whereClause =\n dialect === 'sqlite'\n ? `WHERE ${alias}.${quote(columnName)} = ?`\n : `WHERE ${alias}.${quote(columnName)} = $1`\n\n return buildSimpleQuery(model, dialect, whereClause, [norm(value)])\n}\n\nfunction tryFindManyAll(\n model: Model,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult | null {\n const where = args.where\n if (\n (where && Object.keys(where).length > 0) ||\n args.select ||\n args.include ||\n args.orderBy ||\n args.take !== undefined ||\n args.skip !== undefined ||\n args.distinct ||\n args.cursor\n ) {\n return null\n }\n\n const { tableName, alias } = getTableAndAlias(model, dialect)\n const columns = buildColumnList(model, alias)\n const sql = `SELECT ${columns} FROM ${tableName} ${alias}`\n return { sql, params: [] }\n}\n\nexport function tryFastPath(\n model: Model,\n method: string,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult | null {\n if (method === 'findUnique') {\n return tryFindUniqueById(model, args, dialect)\n }\n\n if (method === 'count') {\n return tryCountAll(model, args, dialect)\n }\n\n if (method === 'findFirst') {\n return tryFindFirstBySingleField(model, args, dialect)\n }\n\n if (method === 'findMany') {\n return (\n tryFindManyById(model, args, dialect) ||\n tryFindManyWithLimit(model, args, dialect) ||\n tryFindManyBySingleField(model, args, dialect) ||\n tryFindManyAll(model, args, dialect)\n )\n }\n\n return null\n}\n","import type { Model, PrismaMethod } from './types'\nimport type { SqlDialect } from './sql-builder-dialect'\nimport type { ParamMap } 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 { createBoundedCache } from './utils/s3-fifo'\nimport { tryFastPath } from './fast-path'\n\ninterface SqlResult {\n sql: string\n params: unknown[]\n paramMappings?: readonly ParamMap[]\n requiresReduction?: boolean\n includeSpec?: Record<string, any>\n}\n\ninterface CacheStats {\n hits: number\n misses: number\n size: number\n}\n\nclass QueryCacheStats {\n #hits = 0\n #misses = 0\n\n hit(): void {\n this.#hits++\n }\n\n miss(): void {\n this.#misses++\n }\n\n reset(): void {\n this.#hits = 0\n this.#misses = 0\n }\n\n get snapshot(): CacheStats {\n return Object.freeze({\n hits: this.#hits,\n misses: this.#misses,\n size: queryCache.size,\n })\n }\n}\n\nexport const queryCache = createBoundedCache<string, SqlResult>(1000)\n\nexport const queryCacheStats = new QueryCacheStats()\n\nexport function 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\ntype SqliteScanMode = 'normal' | 'single' | 'double'\n\ninterface ScanState {\n mode: SqliteScanMode\n position: number\n output: string\n reorderedParams: unknown[]\n}\n\nfunction handleSingleQuote(sql: string, state: ScanState): ScanState {\n const n = sql.length\n let i = state.position\n let out = state.output + sql[i]\n i++\n\n while (i < n) {\n out += sql[i]\n if (sql.charCodeAt(i) === 39) {\n if (i + 1 < n && sql.charCodeAt(i + 1) === 39) {\n out += sql[i + 1]\n i += 2\n continue\n }\n return { ...state, mode: 'normal', position: i + 1, output: out }\n }\n i++\n }\n\n return { ...state, position: i, output: out }\n}\n\nfunction handleDoubleQuote(sql: string, state: ScanState): ScanState {\n const n = sql.length\n let i = state.position\n let out = state.output + sql[i]\n i++\n\n while (i < n) {\n out += sql[i]\n if (sql.charCodeAt(i) === 34) {\n if (i + 1 < n && sql.charCodeAt(i + 1) === 34) {\n out += sql[i + 1]\n i += 2\n continue\n }\n return { ...state, mode: 'normal', position: i + 1, output: out }\n }\n i++\n }\n\n return { ...state, position: i, output: out }\n}\n\nfunction extractParameterNumber(\n sql: string,\n startPos: number,\n): { num: number; nextPos: number } | null {\n const n = sql.length\n let j = startPos + 1\n let num = 0\n let hasDigit = false\n\n while (j < n) {\n const d = sql.charCodeAt(j)\n if (d >= 48 && d <= 57) {\n num = num * 10 + (d - 48)\n hasDigit = true\n j++\n } else {\n break\n }\n }\n\n if (hasDigit && num >= 1) {\n return { num, nextPos: j }\n }\n\n return null\n}\n\nfunction handleParameterSubstitution(\n sql: string,\n params: readonly unknown[],\n state: ScanState,\n): ScanState {\n const result = extractParameterNumber(sql, state.position)\n\n if (result) {\n return {\n ...state,\n position: result.nextPos,\n output: state.output + '?',\n reorderedParams: [...state.reorderedParams, params[result.num - 1]],\n }\n }\n\n return {\n ...state,\n position: state.position + 1,\n output: state.output + sql[state.position],\n }\n}\n\nfunction toSqliteParams(sql: string, params: readonly unknown[]): SqlResult {\n const n = sql.length\n let state: ScanState = {\n mode: 'normal',\n position: 0,\n output: '',\n reorderedParams: [],\n }\n\n while (state.position < n) {\n const ch = sql.charCodeAt(state.position)\n\n if (state.mode === 'single') {\n state = handleSingleQuote(sql, state)\n continue\n }\n\n if (state.mode === 'double') {\n state = handleDoubleQuote(sql, state)\n continue\n }\n\n if (ch === 39) {\n state = { ...state, mode: 'single' }\n continue\n }\n\n if (ch === 34) {\n state = { ...state, mode: 'double' }\n continue\n }\n\n if (ch === 36) {\n state = handleParameterSubstitution(sql, params, state)\n continue\n }\n\n state = {\n ...state,\n position: state.position + 1,\n output: state.output + sql[state.position],\n }\n }\n\n return { sql: state.output, params: state.reorderedParams }\n}\n\nfunction canonicalizeReplacer(key: string, value: unknown): unknown {\n if (typeof value === 'bigint') return `__bigint__${value.toString()}`\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const obj = value as Record<string, unknown>\n const sorted: Record<string, unknown> = {}\n for (const k of Object.keys(obj).sort()) {\n sorted[k] = obj[k]\n }\n return sorted\n }\n return value\n}\n\nfunction canonicalizeQuery(\n modelName: string,\n method: PrismaMethod,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): string {\n if (!args) return `${dialect}:${modelName}:${method}:{}`\n return `${dialect}:${modelName}:${method}:${JSON.stringify(args, canonicalizeReplacer)}`\n}\n\nfunction buildSQLFull(\n model: Model,\n models: Model[],\n method: PrismaMethod,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult {\n const tableName = buildTableReference(\n SQL_TEMPLATES.PUBLIC_SCHEMA,\n model.tableName,\n dialect,\n )\n const alias = makeAlias(model.tableName)\n\n const whereResult = buildWhereClause(\n (args.where || {}) as Record<string, unknown>,\n {\n alias,\n schemaModels: models,\n model,\n path: ['where'],\n isSubquery: false,\n dialect,\n },\n )\n\n const withMethod = { ...args, method }\n\n let result: {\n sql: string\n params: readonly unknown[]\n paramMappings?: readonly ParamMap[]\n requiresReduction?: boolean\n includeSpec?: Record<string, any>\n }\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 const sqlResult =\n dialect === 'sqlite'\n ? toSqliteParams(result.sql, result.params)\n : { sql: result.sql, params: [...result.params] }\n\n return {\n ...sqlResult,\n paramMappings: result.paramMappings,\n requiresReduction: result.requiresReduction,\n includeSpec: result.includeSpec,\n }\n}\n\nexport function buildSQLWithCache(\n model: Model,\n models: Model[],\n method: PrismaMethod,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult {\n const cacheKey = canonicalizeQuery(model.name, method, args, dialect)\n\n const cached = queryCache.get(cacheKey)\n if (cached) {\n queryCacheStats.hit()\n return {\n sql: cached.sql,\n params: [...cached.params],\n paramMappings: cached.paramMappings,\n requiresReduction: cached.requiresReduction,\n includeSpec: cached.includeSpec,\n }\n }\n\n queryCacheStats.miss()\n\n const fastResult = tryFastPath(model, method, args, dialect)\n if (fastResult) {\n queryCache.set(cacheKey, {\n sql: fastResult.sql,\n params: [...fastResult.params],\n })\n return fastResult\n }\n\n const result = buildSQLFull(model, models, method, args, dialect)\n\n queryCache.set(cacheKey, {\n sql: result.sql,\n params: [...result.params],\n paramMappings: result.paramMappings,\n requiresReduction: result.requiresReduction,\n includeSpec: result.includeSpec,\n })\n\n return result\n}\n","import { AGGREGATE_PREFIXES } from '../shared/constants'\n\nexport function transformAggregateRow(row: any): any {\n if (!row || typeof row !== 'object') return row\n\n const result: any = {}\n\n for (const key in row) {\n if (!Object.prototype.hasOwnProperty.call(row, key)) continue\n\n let value = row[key]\n\n // Convert string numbers to actual numbers for consistency with Prisma\n if (typeof value === 'string' && /^-?\\d+(\\.\\d+)?$/.test(value)) {\n value = value.includes('.') ? parseFloat(value) : parseInt(value, 10)\n }\n\n const dotIndex = key.indexOf('.')\n\n if (dotIndex === -1) {\n result[key] = value\n continue\n }\n\n const prefix = key.slice(0, dotIndex)\n const suffix = key.slice(dotIndex + 1)\n\n if (AGGREGATE_PREFIXES.has(prefix)) {\n if (!result[prefix]) {\n result[prefix] = {}\n }\n result[prefix][suffix] = value\n } else {\n result[key] = value\n }\n }\n\n return result\n}\n\nexport function extractCountValue(row: any): number | bigint {\n if (!row || typeof row !== 'object') return 0\n\n if ('_count._all' in row) {\n const value = row['_count._all']\n if (typeof value === 'string') return parseInt(value, 10)\n return value as number | bigint\n }\n\n if ('_count' in row && row['_count'] && typeof row['_count'] === 'object') {\n const countObj = row['_count'] as Record<string, unknown>\n if ('_all' in countObj) {\n const value = countObj['_all']\n if (typeof value === 'string') return parseInt(value, 10)\n return value as number | bigint\n }\n }\n\n const keys = Object.keys(row)\n for (const key of keys) {\n if (key.includes('count') || key.includes('COUNT')) {\n const value = row[key]\n if (typeof value === 'number' || typeof value === 'bigint') {\n return value\n }\n if (typeof value === 'string') {\n return parseInt(value, 10)\n }\n }\n }\n\n return 0\n}\n\nexport function getRowTransformer(method: string): ((row: any) => any) | null {\n if (method === 'count') {\n return extractCountValue\n }\n\n if (method === 'groupBy' || method === 'aggregate') {\n return transformAggregateRow\n }\n\n return null\n}\n","import { PrismaMethod } from './types'\nimport {\n extractCountValue,\n getRowTransformer,\n} from './builder/select/row-transformers'\n\nexport function transformQueryResults(\n method: string,\n results: unknown,\n): unknown {\n if (method === 'findFirst' || method === 'findUnique') {\n if (Array.isArray(results)) {\n return results[0] ?? null\n }\n }\n\n if (method === 'aggregate') {\n if (Array.isArray(results)) {\n return results[0] ?? null\n }\n }\n\n if (method === 'count') {\n if (Array.isArray(results) && results.length > 0) {\n const first = results[0]\n if (typeof first === 'number' || typeof first === 'bigint') {\n return first\n }\n return extractCountValue(first)\n }\n return 0\n }\n\n return results\n}\n","import type { Model, PrismaMethod } from './types'\nimport type { SqlDialect } from './sql-builder-dialect'\n\nimport { buildSQLWithCache } from './query-cache'\nimport { transformQueryResults } from './result-transformers'\nimport { assertSafeAlias } from './builder/shared/sql-utils'\n\nexport interface BatchQuery {\n model: string\n method: PrismaMethod\n args?: Record<string, unknown>\n}\n\nexport interface BatchCountQuery {\n model: string\n method: 'count'\n args?: { where?: Record<string, unknown> }\n}\n\nexport interface BatchResult {\n sql: string\n params: unknown[]\n}\n\nfunction quoteBatchIdent(id: string): string {\n const raw = String(id)\n assertSafeAlias(raw)\n return `\"${raw.replace(/\"/g, '\"\"')}\"`\n}\n\nfunction makeBatchAlias(i: number): string {\n return `k${i}`\n}\n\ntype ScanMode =\n | 'normal'\n | 'single'\n | 'double'\n | 'lineComment'\n | 'blockComment'\n | 'dollar'\n\ninterface ScanState {\n mode: ScanMode\n dollarTag: string | null\n}\n\ninterface ProcessResult {\n consumed: number\n output: string\n newState?: ScanState\n shouldExitMode?: boolean\n}\n\nfunction isDigit(charCode: number): boolean {\n return charCode >= 48 && charCode <= 57\n}\n\nfunction isAlphaNumericOrUnderscore(charCode: number): boolean {\n return (\n isDigit(charCode) ||\n (charCode >= 65 && charCode <= 90) ||\n (charCode >= 97 && charCode <= 122) ||\n charCode === 95\n )\n}\n\nfunction readDollarTag(s: string, pos: number, n: number): string | null {\n if (s.charCodeAt(pos) !== 36) return null\n let j = pos + 1\n while (j < n && isAlphaNumericOrUnderscore(s.charCodeAt(j))) {\n j++\n }\n if (j < n && s.charCodeAt(j) === 36 && j > pos) {\n return s.slice(pos, j + 1)\n }\n if (pos + 1 < n && s.charCodeAt(pos + 1) === 36) {\n return '$$'\n }\n return null\n}\n\nfunction parseParamPlaceholder(\n s: string,\n i: number,\n n: number,\n replace: (oldIndex: number) => string,\n): { consumed: number; output: string } {\n let j = i + 1\n if (j >= n) {\n return { consumed: 1, output: s[i] }\n }\n\n const c1 = s.charCodeAt(j)\n if (!isDigit(c1)) {\n return { consumed: 1, output: s[i] }\n }\n\n while (j < n && isDigit(s.charCodeAt(j))) {\n j++\n }\n\n const numStr = s.slice(i + 1, j)\n const oldIndex = Number(numStr)\n if (!Number.isInteger(oldIndex) || oldIndex < 1) {\n throw new Error(`Invalid param placeholder: $${numStr}`)\n }\n\n return { consumed: j - i, output: replace(oldIndex) }\n}\n\nfunction handleDollarInNormalMode(\n s: string,\n i: number,\n n: number,\n state: ScanState,\n replace: (oldIndex: number) => string,\n): ProcessResult {\n const tag = readDollarTag(s, i, n)\n if (tag) {\n return {\n consumed: tag.length,\n output: tag,\n newState: { mode: 'dollar', dollarTag: tag },\n }\n }\n\n const placeholder = parseParamPlaceholder(s, i, n, replace)\n return { ...placeholder, newState: state }\n}\n\nfunction handleCommentStart(\n s: string,\n i: number,\n n: number,\n ch: number,\n): ProcessResult | null {\n if (ch === 45 && i + 1 < n && s.charCodeAt(i + 1) === 45) {\n return {\n consumed: 2,\n output: '--',\n newState: { mode: 'lineComment', dollarTag: null },\n }\n }\n\n if (ch === 47 && i + 1 < n && s.charCodeAt(i + 1) === 42) {\n return {\n consumed: 2,\n output: '/*',\n newState: { mode: 'blockComment', dollarTag: null },\n }\n }\n\n return null\n}\n\nfunction processNormalMode(\n s: string,\n i: number,\n n: number,\n state: ScanState,\n replace: (oldIndex: number) => string,\n): ProcessResult {\n const ch = s.charCodeAt(i)\n\n if (ch === 39) {\n return {\n consumed: 1,\n output: s[i],\n newState: { mode: 'single', dollarTag: null },\n }\n }\n\n if (ch === 34) {\n return {\n consumed: 1,\n output: s[i],\n newState: { mode: 'double', dollarTag: null },\n }\n }\n\n const commentResult = handleCommentStart(s, i, n, ch)\n if (commentResult) return commentResult\n\n if (ch === 36) {\n return handleDollarInNormalMode(s, i, n, state, replace)\n }\n\n return { consumed: 1, output: s[i], newState: state }\n}\n\nfunction processQuoteMode(\n s: string,\n i: number,\n n: number,\n quoteChar: number,\n): ProcessResult {\n const ch = s.charCodeAt(i)\n\n if (ch === quoteChar) {\n if (i + 1 < n && s.charCodeAt(i + 1) === quoteChar) {\n return { consumed: 2, output: s[i] + s[i + 1], shouldExitMode: false }\n }\n return { consumed: 1, output: s[i], shouldExitMode: true }\n }\n\n return { consumed: 1, output: s[i], shouldExitMode: false }\n}\n\nfunction processBlockCommentMode(\n s: string,\n i: number,\n n: number,\n): ProcessResult {\n const ch = s.charCodeAt(i)\n\n if (ch === 42 && i + 1 < n && s.charCodeAt(i + 1) === 47) {\n return { consumed: 2, output: '*/', shouldExitMode: true }\n }\n\n return { consumed: 1, output: s[i], shouldExitMode: false }\n}\n\nfunction processDollarMode(\n s: string,\n i: number,\n dollarTag: string,\n): ProcessResult {\n if (s.slice(i, i + dollarTag.length) === dollarTag) {\n return {\n consumed: dollarTag.length,\n output: dollarTag,\n shouldExitMode: true,\n }\n }\n\n return { consumed: 1, output: s[i], shouldExitMode: false }\n}\n\nfunction processLineCommentMode(ch: number): { shouldExitMode: boolean } {\n return { shouldExitMode: ch === 10 }\n}\n\nfunction processCharacter(\n s: string,\n i: number,\n n: number,\n state: ScanState,\n replace: (oldIndex: number) => string,\n): ProcessResult {\n const ch = s.charCodeAt(i)\n\n switch (state.mode) {\n case 'normal':\n return processNormalMode(s, i, n, state, replace)\n case 'single':\n return processQuoteMode(s, i, n, 39)\n case 'double':\n return processQuoteMode(s, i, n, 34)\n case 'lineComment': {\n const result = processLineCommentMode(ch)\n return {\n consumed: 1,\n output: s[i],\n shouldExitMode: result.shouldExitMode,\n }\n }\n case 'blockComment':\n return processBlockCommentMode(s, i, n)\n case 'dollar':\n return state.dollarTag\n ? processDollarMode(s, i, state.dollarTag)\n : { consumed: 1, output: s[i], shouldExitMode: false }\n default:\n return { consumed: 1, output: s[i], shouldExitMode: false }\n }\n}\n\nfunction updateStateAfterProcessing(\n currentState: ScanState,\n result: ProcessResult,\n): ScanState {\n if (result.newState) {\n return result.newState\n }\n\n if (result.shouldExitMode) {\n return { mode: 'normal', dollarTag: null }\n }\n\n return currentState\n}\n\nfunction replacePgPlaceholders(\n sql: string,\n replace: (oldIndex: number) => string,\n): string {\n const s = String(sql)\n const n = s.length\n let i = 0\n let state: ScanState = { mode: 'normal', dollarTag: null }\n let out = ''\n\n while (i < n) {\n const result = processCharacter(s, i, n, state, replace)\n out += result.output\n i += result.consumed\n state = updateStateAfterProcessing(state, result)\n }\n\n return out\n}\n\nfunction containsPgPlaceholder(sql: string): boolean {\n let found = false\n replacePgPlaceholders(sql, (oldIndex) => {\n found = true\n return `$${oldIndex}`\n })\n return found\n}\n\nfunction reindexParams(\n sql: string,\n params: readonly unknown[],\n offset: number,\n): { sql: string; params: unknown[] } {\n if (!Number.isInteger(offset) || offset < 0) {\n throw new Error(`Invalid param offset: ${offset}`)\n }\n\n const newParams: unknown[] = []\n const paramMap = new Map<number, number>()\n\n const reindexed = replacePgPlaceholders(sql, (oldIndex) => {\n const existing = paramMap.get(oldIndex)\n if (existing !== undefined) return `$${existing}`\n\n const pos = oldIndex - 1\n if (pos >= params.length) {\n throw new Error(\n `Param placeholder $${oldIndex} exceeds params length (${params.length})`,\n )\n }\n\n const newIndex = offset + newParams.length + 1\n paramMap.set(oldIndex, newIndex)\n newParams.push(params[pos])\n return `$${newIndex}`\n })\n\n return { sql: reindexed, params: newParams }\n}\n\nfunction wrapQueryForMethod(\n method: PrismaMethod,\n cteName: string,\n resultAlias: string,\n): string {\n const outKey = quoteBatchIdent(resultAlias)\n\n switch (method) {\n case 'findMany':\n case 'groupBy':\n return `(SELECT COALESCE(json_agg(row_to_json(t)), '[]'::json) FROM ${cteName} t) AS ${outKey}`\n case 'findFirst':\n case 'findUnique':\n return `(SELECT row_to_json(t) FROM ${cteName} t LIMIT 1) AS ${outKey}`\n case 'count':\n return `(SELECT * FROM ${cteName}) AS ${outKey}`\n case 'aggregate':\n return `(SELECT row_to_json(t) FROM ${cteName} t) AS ${outKey}`\n default:\n throw new Error(`Unsupported batch method: ${method}`)\n }\n}\n\nfunction isAllCountQueries(\n queries: Record<string, BatchQuery>,\n keys: string[],\n) {\n for (const key of keys) {\n if (queries[key]?.method !== 'count') return false\n }\n return true\n}\n\nfunction looksTooComplexForFilter(sql: string): boolean {\n const s = sql.toLowerCase()\n const complexKeywords = [\n ' group by ',\n ' having ',\n ' union ',\n ' intersect ',\n ' except ',\n ' window ',\n ' distinct ',\n ]\n return complexKeywords.some((keyword) => s.includes(keyword))\n}\n\nfunction skipWhitespace(s: string, i: number): number {\n while (i < s.length && /\\s/.test(s[i])) {\n i++\n }\n return i\n}\n\nfunction matchKeyword(s: string, i: number, keyword: string): number {\n const lower = s.slice(i).toLowerCase()\n if (!lower.startsWith(keyword)) return -1\n const endPos = i + keyword.length\n if (endPos < s.length && /[a-z0-9_]/i.test(s[endPos])) return -1\n return endPos\n}\n\nfunction parseQuotedIdentifier(\n s: string,\n i: number,\n): { value: string; endPos: number } | null {\n let j = i + 1\n while (j < s.length) {\n if (s[j] === '\"') {\n if (j + 1 < s.length && s[j + 1] === '\"') {\n j += 2\n continue\n }\n return { value: s.slice(i, j + 1), endPos: j + 1 }\n }\n j++\n }\n return null\n}\n\nfunction parseUnquotedIdentifier(\n s: string,\n i: number,\n): { value: string; endPos: number } | null {\n if (!/[a-z_]/i.test(s[i])) return null\n\n let j = i\n while (j < s.length && /[a-z0-9_.]/i.test(s[j])) {\n j++\n }\n return { value: s.slice(i, j), endPos: j }\n}\n\nfunction parseIdentifier(\n s: string,\n i: number,\n): { value: string; endPos: number } | null {\n if (i >= s.length) return null\n\n if (s[i] === '\"') {\n return parseQuotedIdentifier(s, i)\n }\n\n return parseUnquotedIdentifier(s, i)\n}\n\nfunction findFromClauseEnd(s: string, fromStart: number): number {\n const lower = s.slice(fromStart).toLowerCase()\n const whereIdx = lower.indexOf(' where ')\n return whereIdx === -1 ? s.length : fromStart + whereIdx\n}\n\nfunction parseSimpleCountSql(\n sql: string,\n): { fromSql: string; whereSql: string | null } | null {\n const trimmed = sql.trim().replace(/;$/, '').trim()\n const lower = trimmed.toLowerCase()\n\n if (!lower.startsWith('select')) return null\n if (!lower.includes('count(*)')) return null\n if (looksTooComplexForFilter(trimmed)) return null\n\n let pos = matchKeyword(trimmed, 0, 'select')\n if (pos === -1) return null\n\n pos = skipWhitespace(trimmed, pos)\n\n const countMatch = trimmed.slice(pos).match(/^count\\(\\*\\)/i)\n if (!countMatch) return null\n pos += countMatch[0].length\n\n pos = skipWhitespace(trimmed, pos)\n\n const castMatch = trimmed.slice(pos).match(/^::\\s*\\w+/)\n if (castMatch) {\n pos += castMatch[0].length\n pos = skipWhitespace(trimmed, pos)\n }\n\n const asPos = matchKeyword(trimmed, pos, 'as')\n if (asPos === -1) return null\n pos = skipWhitespace(trimmed, asPos)\n\n const ident = parseIdentifier(trimmed, pos)\n if (!ident) return null\n pos = skipWhitespace(trimmed, ident.endPos)\n\n const fromPos = matchKeyword(trimmed, pos, 'from')\n if (fromPos === -1) return null\n pos = skipWhitespace(trimmed, fromPos)\n\n const fromEnd = findFromClauseEnd(trimmed, pos)\n const fromSql = trimmed.slice(pos, fromEnd).trim()\n if (!fromSql) return null\n\n let whereSql: string | null = null\n if (fromEnd < trimmed.length) {\n const adjustedPos = skipWhitespace(trimmed, fromEnd)\n const wherePos = matchKeyword(trimmed, adjustedPos, 'where')\n if (wherePos !== -1) {\n whereSql = trimmed.slice(skipWhitespace(trimmed, wherePos)).trim()\n }\n }\n\n return { fromSql, whereSql }\n}\n\ninterface CountQueryItem {\n key: string\n alias: string\n args: Record<string, unknown>\n}\n\ninterface CountSubquery {\n alias: string\n sql: string\n params: unknown[]\n keys: string[]\n aliases: string[]\n}\n\nfunction processCountQuery(\n item: CountQueryItem,\n model: Model,\n models: Model[],\n dialect: SqlDialect,\n sharedFrom: string | null,\n localParams: unknown[],\n): {\n expression: string\n reindexedParams: unknown[]\n sharedFrom: string\n} | null {\n const built = buildSQLWithCache(model, models, 'count', item.args, dialect)\n const parsed = parseSimpleCountSql(built.sql)\n\n if (!parsed) return null\n if (containsPgPlaceholder(parsed.fromSql)) return null\n\n const currentFrom = parsed.fromSql\n if (sharedFrom !== null && sharedFrom !== currentFrom) return null\n\n if (!parsed.whereSql) {\n if (built.params.length > 0) return null\n return {\n expression: `count(*) AS ${quoteBatchIdent(item.alias)}`,\n reindexedParams: [],\n sharedFrom: currentFrom,\n }\n }\n\n const re = reindexParams(parsed.whereSql, built.params, localParams.length)\n return {\n expression: `count(*) FILTER (WHERE ${re.sql}) AS ${quoteBatchIdent(item.alias)}`,\n reindexedParams: re.params,\n sharedFrom: currentFrom,\n }\n}\n\nfunction buildCountSubqueriesForModel(\n items: CountQueryItem[],\n model: Model,\n models: Model[],\n dialect: SqlDialect,\n aliasIndex: number,\n): CountSubquery | null {\n let sharedFrom: string | null = null\n const expressions: string[] = []\n const localParams: unknown[] = []\n const localKeys: string[] = []\n const localAliases: string[] = []\n\n for (const item of items) {\n const result = processCountQuery(\n item,\n model,\n models,\n dialect,\n sharedFrom,\n localParams,\n )\n\n if (!result) return null\n\n sharedFrom = result.sharedFrom\n expressions.push(result.expression)\n for (const param of result.reindexedParams) {\n localParams.push(param)\n }\n localKeys.push(item.key)\n localAliases.push(item.alias)\n }\n\n if (!sharedFrom) return null\n\n const alias = `m_${aliasIndex}`\n const subSql = `(SELECT ${expressions.join(', ')} FROM ${sharedFrom}) ${alias}`\n\n return {\n alias,\n sql: subSql,\n params: localParams,\n keys: localKeys,\n aliases: localAliases,\n }\n}\n\nfunction groupQueriesByModel(\n queries: Record<string, BatchQuery>,\n keys: string[],\n aliasesByKey: Map<string, string>,\n): Map<string, CountQueryItem[]> | null {\n const modelGroups = new Map<string, CountQueryItem[]>()\n\n for (const key of keys) {\n const q = queries[key]\n const alias = aliasesByKey.get(key)\n if (!alias) return null\n\n if (!modelGroups.has(q.model)) {\n modelGroups.set(q.model, [])\n }\n\n const items = modelGroups.get(q.model)\n if (items) {\n items.push({\n key,\n alias,\n args: q.args || {},\n })\n }\n }\n\n return modelGroups\n}\n\nfunction buildSubqueriesFromGroups(\n modelGroups: Map<string, CountQueryItem[]>,\n modelMap: Map<string, Model>,\n models: Model[],\n dialect: SqlDialect,\n): CountSubquery[] | null {\n const subqueries: CountSubquery[] = []\n let aliasIndex = 0\n\n for (const [modelName, items] of modelGroups) {\n const model = modelMap.get(modelName)\n if (!model) return null\n\n const subquery = buildCountSubqueriesForModel(\n items,\n model,\n models,\n dialect,\n aliasIndex++,\n )\n\n if (!subquery) return null\n subqueries.push(subquery)\n }\n\n return subqueries.length > 0 ? subqueries : null\n}\n\nfunction reindexSubqueries(subqueries: CountSubquery[]): {\n sql: string[]\n params: unknown[]\n} {\n let offset = 0\n const rewrittenSubs: string[] = []\n const finalParams: unknown[] = []\n\n for (const sq of subqueries) {\n const re = reindexParams(sq.sql, sq.params, offset)\n offset += re.params.length\n rewrittenSubs.push(re.sql)\n for (const p of re.params) {\n finalParams.push(p)\n }\n }\n\n return { sql: rewrittenSubs, params: finalParams }\n}\n\nfunction buildSelectParts(subqueries: CountSubquery[]): string[] {\n const selectParts: string[] = []\n\n for (const sq of subqueries) {\n for (const outAlias of sq.aliases) {\n selectParts.push(\n `${sq.alias}.${quoteBatchIdent(outAlias)} AS ${quoteBatchIdent(outAlias)}`,\n )\n }\n }\n\n return selectParts\n}\n\nfunction buildMergedCountBatchSql(\n queries: Record<string, BatchQuery>,\n keys: string[],\n aliasesByKey: Map<string, string>,\n modelMap: Map<string, Model>,\n models: Model[],\n dialect: SqlDialect,\n): (BatchResult & { keys: string[]; aliases: string[] }) | null {\n const modelGroups = groupQueriesByModel(queries, keys, aliasesByKey)\n if (!modelGroups) return null\n\n const subqueries = buildSubqueriesFromGroups(\n modelGroups,\n modelMap,\n models,\n dialect,\n )\n if (!subqueries) return null\n\n const { sql: rewrittenSubs, params: finalParams } =\n reindexSubqueries(subqueries)\n const selectParts = buildSelectParts(subqueries)\n\n const fromSql = rewrittenSubs.join(' CROSS JOIN ')\n const sql = `SELECT ${selectParts.join(', ')} FROM ${fromSql}`\n const aliases = keys.map((k) => aliasesByKey.get(k) ?? '')\n\n return { sql, params: finalParams, keys, aliases }\n}\n\nfunction buildAliasesForKeys(keys: string[]): {\n aliases: string[]\n aliasesByKey: Map<string, string>\n} {\n const aliases = new Array(keys.length)\n const aliasesByKey = new Map<string, string>()\n\n for (let i = 0; i < keys.length; i++) {\n const a = makeBatchAlias(i)\n aliases[i] = a\n aliasesByKey.set(keys[i], a)\n }\n\n return { aliases, aliasesByKey }\n}\n\nfunction buildRegularBatchQueries(\n queries: Record<string, BatchQuery>,\n keys: string[],\n aliases: string[],\n modelMap: Map<string, Model>,\n models: Model[],\n dialect: SqlDialect,\n): { sql: string; params: unknown[] } {\n const ctes: string[] = new Array(keys.length)\n const selects: string[] = new Array(keys.length)\n const allParams: unknown[] = []\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n const query = queries[key]\n\n const model = modelMap.get(query.model)\n if (!model) {\n throw new Error(\n `Model '${query.model}' not found. Available: ${[...modelMap.keys()].join(', ')}`,\n )\n }\n\n const { sql: querySql, params: queryParams } = buildSQLWithCache(\n model,\n models,\n query.method,\n query.args || {},\n dialect,\n )\n\n const { sql: reindexedSql, params: reindexedParams } = reindexParams(\n querySql,\n queryParams,\n allParams.length,\n )\n\n for (const p of reindexedParams) {\n allParams.push(p)\n }\n\n const cteName = `batch_${i}`\n ctes[i] = `${cteName} AS (${reindexedSql})`\n selects[i] = wrapQueryForMethod(query.method, cteName, aliases[i])\n }\n\n const sql = `WITH ${ctes.join(', ')} SELECT ${selects.join(', ')}`\n return { sql, params: allParams }\n}\n\nexport function buildBatchSql(\n queries: Record<string, BatchQuery>,\n modelMap: Map<string, Model>,\n models: Model[],\n dialect: SqlDialect,\n): BatchResult & { keys: string[]; aliases: string[] } {\n const keys = Object.keys(queries)\n\n if (keys.length === 0) {\n throw new Error('buildBatchSql requires at least one query')\n }\n\n if (dialect !== 'postgres') {\n throw new Error('Batch queries are only supported for postgres dialect')\n }\n\n const { aliases, aliasesByKey } = buildAliasesForKeys(keys)\n\n if (isAllCountQueries(queries, keys)) {\n const merged = buildMergedCountBatchSql(\n queries,\n keys,\n aliasesByKey,\n modelMap,\n models,\n dialect,\n )\n if (merged) return merged\n }\n\n const result = buildRegularBatchQueries(\n queries,\n keys,\n aliases,\n modelMap,\n models,\n dialect,\n )\n\n return { ...result, keys, aliases }\n}\n\nexport function buildBatchCountSql(\n queries: BatchCountQuery[],\n modelMap: Map<string, Model>,\n models: Model[],\n dialect: SqlDialect,\n): BatchResult {\n if (queries.length === 0) {\n throw new Error('buildBatchCountSql requires at least one query')\n }\n\n if (dialect !== 'postgres') {\n throw new Error(\n 'Batch count queries are only supported for postgres dialect',\n )\n }\n\n const ctes: string[] = new Array(queries.length)\n const selects: string[] = new Array(queries.length)\n const allParams: unknown[] = []\n\n for (let i = 0; i < queries.length; i++) {\n const query = queries[i]\n\n const model = modelMap.get(query.model)\n if (!model) {\n throw new Error(\n `Model '${query.model}' not found. Available: ${[...modelMap.keys()].join(', ')}`,\n )\n }\n\n const { sql: querySql, params: queryParams } = buildSQLWithCache(\n model,\n models,\n 'count',\n (query.args || {}) as Record<string, unknown>,\n dialect,\n )\n\n const { sql: reindexedSql, params: reindexedParams } = reindexParams(\n querySql,\n queryParams,\n allParams.length,\n )\n\n for (const p of reindexedParams) {\n allParams.push(p)\n }\n\n const cteName = `count_${i}`\n const resultKey = `count_${i}`\n ctes[i] = `${cteName} AS (${reindexedSql})`\n selects[i] = `(SELECT * FROM ${cteName}) AS ${quoteBatchIdent(resultKey)}`\n }\n\n const sql = `WITH ${ctes.join(', ')} SELECT ${selects.join(', ')}`\n return { sql, params: allParams }\n}\n\nfunction looksLikeJsonString(s: string): boolean {\n const t = s.trim()\n if (t.length === 0) return false\n const c0 = t.charCodeAt(0)\n const cN = t.charCodeAt(t.length - 1)\n if (c0 === 123 && cN === 125) return true\n if (c0 === 91 && cN === 93) return true\n if (t === 'null' || t === 'true' || t === 'false') return true\n return false\n}\n\nfunction parseJsonValue(value: unknown): unknown {\n if (typeof value !== 'string') return value\n if (!looksLikeJsonString(value)) return value\n try {\n return JSON.parse(value)\n } catch {\n return value\n }\n}\n\nfunction findCountKey(obj: Record<string, unknown>): string | undefined {\n if (Object.prototype.hasOwnProperty.call(obj, 'count')) {\n return 'count'\n }\n if (Object.prototype.hasOwnProperty.call(obj, '_count')) {\n return '_count'\n }\n return Object.keys(obj).find((k) => k.endsWith('_count'))\n}\n\nfunction extractNumericValue(value: unknown): number {\n if (typeof value === 'number') return value\n\n if (typeof value === 'bigint') {\n const n = Number(value)\n return Number.isSafeInteger(n) ? n : 0\n }\n\n if (typeof value === 'string') {\n const n = Number.parseInt(value, 10)\n return Number.isFinite(n) ? n : 0\n }\n\n return 0\n}\n\nfunction parseCountValue(value: unknown): number {\n if (value === null || value === undefined) return 0\n if (typeof value === 'number') return value\n if (typeof value === 'bigint' || typeof value === 'string') {\n return extractNumericValue(value)\n }\n\n if (typeof value === 'object') {\n const obj = value as Record<string, unknown>\n const countKey = findCountKey(obj)\n if (countKey !== undefined) {\n return extractNumericValue(obj[countKey])\n }\n }\n\n return 0\n}\n\nexport function parseBatchCountResults(\n row: Record<string, unknown>,\n queryCount: number,\n): number[] {\n const results: number[] = []\n\n for (let i = 0; i < queryCount; i++) {\n const key = `_count_${i}`\n const value = row[key]\n\n if (value === null || value === undefined) {\n results.push(0)\n continue\n }\n\n if (typeof value === 'number') {\n results.push(value)\n continue\n }\n\n if (typeof value === 'bigint') {\n results.push(Number(value))\n continue\n }\n\n if (typeof value === 'string') {\n const parsed = parseInt(value, 10)\n results.push(isNaN(parsed) ? 0 : parsed)\n continue\n }\n\n results.push(0)\n }\n\n return results\n}\n\nfunction isDateTimeFieldType(type: string): boolean {\n const base = type.replace(/\\[\\]|\\?/g, '')\n return base === 'DateTime'\n}\n\nfunction coerceDateTime(value: unknown): unknown {\n if (typeof value !== 'string') return value\n const d = new Date(value)\n if (Number.isFinite(d.getTime())) return d\n return value\n}\n\nfunction coerceFieldValue(\n value: unknown,\n field: {\n name: string\n type: string\n isRelation?: boolean\n relatedModel?: string\n },\n modelMap: Map<string, Model>,\n): { value: unknown; changed: boolean } {\n if (field.isRelation && field.relatedModel) {\n const relModel = modelMap.get(field.relatedModel)\n if (relModel) {\n const coerced = coerceBatchRowTypes(value, relModel, modelMap)\n return { value: coerced, changed: coerced !== value }\n }\n return { value, changed: false }\n }\n\n if (isDateTimeFieldType(field.type)) {\n const coerced = coerceDateTime(value)\n return { value: coerced, changed: coerced !== value }\n }\n\n return { value, changed: false }\n}\n\nfunction coerceBatchRowTypes(\n obj: unknown,\n model: Model | undefined,\n modelMap: Map<string, Model>,\n): unknown {\n if (!model || obj === null || obj === undefined) return obj\n\n if (Array.isArray(obj)) {\n return obj.map((item) => coerceBatchRowTypes(item, model, modelMap))\n }\n\n if (typeof obj !== 'object') return obj\n\n const record = obj as Record<string, unknown>\n const result: Record<string, unknown> = {}\n let changed = false\n\n for (const key in record) {\n if (!Object.prototype.hasOwnProperty.call(record, key)) continue\n\n const val = record[key]\n const field = model.fields.find((f) => f.name === key)\n\n if (!field) {\n result[key] = val\n continue\n }\n\n const coerced = coerceFieldValue(val, field, modelMap)\n result[key] = coerced.value\n if (coerced.changed) changed = true\n }\n\n return changed ? result : obj\n}\n\nfunction coerceBatchValue(\n value: unknown,\n method: PrismaMethod,\n modelName: string,\n modelMap?: Map<string, Model>,\n): unknown {\n if (!modelMap || method === 'count') return value\n\n const model = modelMap.get(modelName)\n if (!model) return value\n\n if (Array.isArray(value)) {\n return value.map((item) => coerceBatchRowTypes(item, model, modelMap))\n }\n\n if (value !== null && typeof value === 'object') {\n return coerceBatchRowTypes(value, model, modelMap)\n }\n\n return value\n}\n\nfunction coerceAggSubFields(\n inner: Record<string, unknown>,\n model: Model,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n let changed = false\n\n for (const fieldName in inner) {\n if (!Object.prototype.hasOwnProperty.call(inner, fieldName)) continue\n const fieldVal = inner[fieldName]\n const field = model.fields.find((f) => f.name === fieldName)\n\n if (field && isDateTimeFieldType(field.type)) {\n const coerced = coerceDateTime(fieldVal)\n result[fieldName] = coerced\n if (coerced !== fieldVal) changed = true\n } else {\n result[fieldName] = fieldVal\n }\n }\n\n return changed ? result : inner\n}\n\nfunction coerceAggregateResult(\n obj: unknown,\n modelName: string,\n modelMap?: Map<string, Model>,\n): unknown {\n if (!modelMap || obj === null || obj === undefined || typeof obj !== 'object')\n return obj\n\n const model = modelMap.get(modelName)\n if (!model) return obj\n\n const record = obj as Record<string, unknown>\n const result: Record<string, unknown> = {}\n let changed = false\n\n for (const key in record) {\n if (!Object.prototype.hasOwnProperty.call(record, key)) continue\n const val = record[key]\n\n if (\n (key === '_min' || key === '_max') &&\n val !== null &&\n val !== undefined &&\n typeof val === 'object'\n ) {\n const coerced = coerceAggSubFields(val as Record<string, unknown>, model)\n result[key] = coerced\n if (coerced !== val) changed = true\n } else {\n result[key] = val\n }\n }\n\n return changed ? result : obj\n}\n\nfunction coerceGroupByResults(\n arr: unknown,\n modelName: string,\n modelMap?: Map<string, Model>,\n): unknown {\n if (!modelMap || !Array.isArray(arr)) return arr\n\n const model = modelMap.get(modelName)\n if (!model) return arr\n\n return arr.map((item) => {\n if (item === null || item === undefined || typeof item !== 'object')\n return item\n\n const record = item as Record<string, unknown>\n const result: Record<string, unknown> = {}\n let changed = false\n\n for (const key in record) {\n if (!Object.prototype.hasOwnProperty.call(record, key)) continue\n const val = record[key]\n\n if (\n (key === '_min' || key === '_max') &&\n val !== null &&\n val !== undefined &&\n typeof val === 'object'\n ) {\n const coerced = coerceAggSubFields(\n val as Record<string, unknown>,\n model,\n )\n result[key] = coerced\n if (coerced !== val) changed = true\n } else {\n const field = model.fields.find((f) => f.name === key)\n if (field && isDateTimeFieldType(field.type)) {\n const coerced = coerceDateTime(val)\n result[key] = coerced\n if (coerced !== val) changed = true\n } else {\n result[key] = val\n }\n }\n }\n\n return changed ? result : item\n })\n}\n\nfunction parseBatchValue(\n rawValue: unknown,\n method: PrismaMethod,\n modelName: string,\n modelMap?: Map<string, Model>,\n): unknown {\n switch (method) {\n case 'findMany': {\n const parsed = parseJsonValue(rawValue)\n const arr = Array.isArray(parsed) ? parsed : []\n return coerceBatchValue(arr, 'findMany', modelName, modelMap)\n }\n case 'findFirst':\n case 'findUnique': {\n const parsed = parseJsonValue(rawValue)\n const val = parsed ?? null\n return val === null\n ? null\n : coerceBatchValue(val, method, modelName, modelMap)\n }\n case 'count': {\n return parseCountValue(rawValue)\n }\n case 'aggregate': {\n const parsed = parseJsonValue(rawValue)\n const obj = (parsed ?? {}) as Record<string, unknown>\n const transformed = transformQueryResults('aggregate', [obj])\n return coerceAggregateResult(transformed, modelName, modelMap)\n }\n case 'groupBy': {\n const parsed = parseJsonValue(rawValue)\n const arr = Array.isArray(parsed) ? parsed : []\n const transformed = transformQueryResults('groupBy', arr)\n return coerceGroupByResults(transformed, modelName, modelMap)\n }\n default:\n return rawValue\n }\n}\n\nexport function parseBatchResults(\n row: Record<string, unknown>,\n keys: string[],\n queries: Record<string, BatchQuery>,\n aliases?: string[],\n modelMap?: Map<string, Model>,\n): Record<string, unknown> {\n const results: Record<string, unknown> = {}\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n const columnKey = aliases?.[i] ?? key\n const rawValue = row[columnKey]\n const query = queries[key]\n\n results[key] = parseBatchValue(\n rawValue,\n query.method,\n query.model,\n modelMap,\n )\n }\n\n return results\n}\n","import type { Model, PrismaMethod } from './types'\nimport type { SqlDialect } from './sql-builder-dialect'\nimport { buildSQLWithCache } from './query-cache'\nimport { transformQueryResults } from './result-transformers'\nimport { getRowTransformer } from './builder/select/row-transformers'\n\nexport interface TransactionQuery {\n model: string\n method: PrismaMethod\n args?: Record<string, unknown>\n}\n\nexport interface TransactionOptions {\n isolationLevel?: 'ReadCommitted' | 'RepeatableRead' | 'Serializable'\n timeout?: number\n}\n\ninterface TransactionExecutor {\n execute(\n queries: TransactionQuery[],\n options?: TransactionOptions,\n ): Promise<unknown[]>\n}\n\nfunction isolationLevelToPostgresKeyword(\n level: TransactionOptions['isolationLevel'],\n): string | undefined {\n switch (level) {\n case 'ReadCommitted':\n return 'read committed'\n case 'RepeatableRead':\n return 'repeatable read'\n case 'Serializable':\n return 'serializable'\n default:\n return undefined\n }\n}\n\nfunction validateTimeout(timeout: unknown): number {\n if (typeof timeout !== 'number') {\n throw new Error(\n `Transaction timeout must be a number, got ${typeof timeout}`,\n )\n }\n if (!Number.isFinite(timeout)) {\n throw new Error(`Transaction timeout must be finite, got ${timeout}`)\n }\n if (timeout < 0) {\n throw new Error(`Transaction timeout must be non-negative, got ${timeout}`)\n }\n return Math.floor(timeout)\n}\n\nexport function createTransactionExecutor(deps: {\n modelMap: Map<string, Model>\n allModels: Model[]\n dialect: SqlDialect\n executeRaw: (sql: string, params?: unknown[]) => Promise<unknown[]>\n postgresClient?: any\n}): TransactionExecutor {\n const { modelMap, allModels, dialect, postgresClient } = deps\n\n return {\n async execute(\n queries: TransactionQuery[],\n options?: TransactionOptions,\n ): Promise<unknown[]> {\n if (queries.length === 0) return []\n\n if (dialect !== 'postgres') {\n throw new Error('$transaction is only supported for postgres dialect')\n }\n\n if (!postgresClient) {\n throw new Error('postgresClient is required for transactions')\n }\n\n const transactionCallback = async (sql: any) => {\n const results: unknown[] = []\n\n const isolationLevel = isolationLevelToPostgresKeyword(\n options?.isolationLevel,\n )\n\n if (isolationLevel) {\n await sql.unsafe(\n `SET TRANSACTION ISOLATION LEVEL ${isolationLevel.toUpperCase()}`,\n )\n }\n\n if (options?.timeout !== undefined && options.timeout !== null) {\n const validatedTimeout = validateTimeout(options.timeout)\n await sql.unsafe(`SET LOCAL statement_timeout = $1`, [\n validatedTimeout,\n ])\n }\n\n for (const q of queries) {\n const model = modelMap.get(q.model)\n if (!model) {\n throw new Error(\n `Model '${q.model}' not found. Available: ${[...modelMap.keys()].join(', ')}`,\n )\n }\n\n const { sql: sqlStr, params } = buildSQLWithCache(\n model,\n allModels,\n q.method,\n q.args || {},\n dialect,\n )\n\n let rawResults = await sql.unsafe(sqlStr, params as any[])\n\n const rowTransformer = getRowTransformer(q.method)\n if (rowTransformer && Array.isArray(rawResults)) {\n rawResults = rawResults.map(rowTransformer)\n }\n\n results.push(transformQueryResults(q.method, rawResults))\n }\n\n return results\n }\n\n return await postgresClient.begin(transactionCallback)\n },\n }\n}\n","export function buildCompositeKey(row: any, fields: string[]): string | null {\n if (fields.length === 0) return null\n\n if (fields.length === 1) {\n const val = row[fields[0]]\n if (val == null) return null\n\n const t = typeof val\n if (t === 'string') return `s:${val}`\n if (t === 'number') return Number.isFinite(val) ? `n:${val}` : null\n if (t === 'boolean') return val ? 'b:1' : 'b:0'\n if (t === 'bigint') return `i:${val}`\n return `o:${val}`\n }\n\n const parts = new Array<string>(fields.length)\n\n for (let i = 0; i < fields.length; i++) {\n const val = row[fields[i]]\n if (val == null) return null\n\n const t = typeof val\n if (t === 'string') {\n parts[i] = `s:${val}`\n } else if (t === 'number') {\n if (!Number.isFinite(val)) return null\n parts[i] = `n:${val}`\n } else if (t === 'boolean') {\n parts[i] = val ? 'b:1' : 'b:0'\n } else if (t === 'bigint') {\n parts[i] = `i:${val}`\n } else {\n parts[i] = `o:${val}`\n }\n }\n\n return parts.join('\\u001f')\n}\n","import { Model } from '../../types'\nimport {\n getJsonFieldSet,\n getRelationFieldSet,\n maybeParseJson,\n parseJsonIfNeeded,\n} from '../shared/model-field-cache'\nimport { getPrimaryKeyFields } from '../shared/primary-key-utils'\nimport { extractRelationEntries } from '../shared/relation-extraction-utils'\nimport { isPlainObject } from '../shared/validators/type-guards'\nimport { buildCompositeKey } from '../shared/key-utils'\n\nimport { getScalarFieldNames } from '../shared/model-field-cache'\nimport {\n extractScalarSelection,\n extractNestedIncludeSpec,\n} from '../shared/relation-utils'\n\nexport interface ReducerConfig {\n parentModel: Model\n includedRelations: RelationMetadata[]\n allModels: readonly Model[]\n}\n\ninterface ScalarColSpec {\n fieldName: string\n colName: string\n isJson: boolean\n}\n\nexport interface RelationMetadata {\n name: string\n cardinality: 'one' | 'many'\n relatedModel: Model\n primaryKeyFields: string[]\n includeAllScalars: boolean\n selectedScalarFields: string[]\n nestedIncludes?: ReducerConfig | null\n\n path: string\n keyCols: string[]\n scalarCols: ScalarColSpec[]\n}\n\nfunction buildRelationScalarCols(\n relModel: Model,\n relPath: string,\n includeAllScalars: boolean,\n selectedScalarFields: string[],\n): ScalarColSpec[] {\n const jsonSet = getJsonFieldSet(relModel)\n const scalarFields = includeAllScalars\n ? getScalarFieldNames(relModel)\n : selectedScalarFields\n\n const out: ScalarColSpec[] = []\n for (const fieldName of scalarFields) {\n out.push({\n fieldName,\n colName: `${relPath}.${fieldName}`,\n isJson: jsonSet.has(fieldName),\n })\n }\n return out\n}\n\nexport function buildReducerConfig(\n parentModel: Model,\n includeSpec: Record<string, any>,\n allModels: readonly Model[],\n prefix: string = '',\n depth: number = 0,\n): ReducerConfig {\n if (depth > 10) {\n throw new Error(\n `Reducer config exceeded maximum depth of 10 at path '${prefix}'`,\n )\n }\n\n const includedRelations: RelationMetadata[] = []\n const modelMap = new Map(allModels.map((m) => [m.name, m]))\n\n for (const [incName, incValue] of Object.entries(includeSpec)) {\n if (incValue === false) continue\n\n const field = parentModel.fields.find((f) => f.name === incName)\n if (!field || !field.isRelation) {\n throw new Error(\n `Field '${incName}' is not a relation on model ${parentModel.name}`,\n )\n }\n\n const relatedModel = modelMap.get(field.relatedModel!)\n if (!relatedModel) {\n throw new Error(\n `Related model '${field.relatedModel}' not found for relation '${incName}'`,\n )\n }\n\n const isList = typeof field.type === 'string' && field.type.endsWith('[]')\n const primaryKeyFields = getPrimaryKeyFields(relatedModel)\n const scalarSel = extractScalarSelection(incValue, relatedModel)\n\n const relPath = prefix ? `${prefix}.${incName}` : incName\n\n let nestedIncludes: ReducerConfig | null = null\n const nestedSpec = extractNestedIncludeSpec(incValue, relatedModel)\n if (Object.keys(nestedSpec).length > 0) {\n nestedIncludes = buildReducerConfig(\n relatedModel,\n nestedSpec,\n allModels,\n relPath,\n depth + 1,\n )\n }\n\n const keyCols = primaryKeyFields.map((f) => `${relPath}.${f}`)\n\n const scalarCols = buildRelationScalarCols(\n relatedModel,\n relPath,\n scalarSel.includeAllScalars,\n scalarSel.selectedScalarFields,\n )\n\n includedRelations.push({\n name: incName,\n cardinality: isList ? 'many' : 'one',\n relatedModel,\n primaryKeyFields,\n includeAllScalars: scalarSel.includeAllScalars,\n selectedScalarFields: scalarSel.selectedScalarFields,\n nestedIncludes,\n\n path: relPath,\n keyCols,\n scalarCols,\n })\n }\n\n return {\n parentModel,\n includedRelations,\n allModels,\n }\n}\n\ntype ManyIndex = Map<string, any>\ntype IndexByPath = Map<string, ManyIndex>\n\nfunction getIndexForParent(\n store: WeakMap<object, IndexByPath>,\n parentObj: object,\n path: string,\n): ManyIndex {\n let byPath = store.get(parentObj)\n if (!byPath) {\n byPath = new Map()\n store.set(parentObj, byPath)\n }\n\n let idx = byPath.get(path)\n if (!idx) {\n idx = new Map()\n byPath.set(path, idx)\n }\n\n return idx\n}\n\nfunction initNestedPlaceholders(\n obj: any,\n nested: ReducerConfig | null | undefined,\n): void {\n if (!nested) return\n for (const r of nested.includedRelations) {\n obj[r.name] = r.cardinality === 'many' ? [] : null\n }\n}\n\nfunction materializeRelationObject(\n row: any,\n rel: RelationMetadata,\n): any | null {\n const relKey = buildCompositeKey(row, rel.keyCols)\n if (relKey == null) return null\n\n const obj: any = {}\n for (const c of rel.scalarCols) {\n obj[c.fieldName] = parseJsonIfNeeded(c.isJson, row[c.colName])\n }\n\n initNestedPlaceholders(obj, rel.nestedIncludes)\n return obj\n}\n\nfunction processNestedRelations(\n obj: any,\n rel: RelationMetadata,\n row: any,\n manyStore: WeakMap<object, IndexByPath>,\n): void {\n if (!rel.nestedIncludes) return\n for (const nestedRel of rel.nestedIncludes.includedRelations) {\n processRelation(obj, nestedRel, row, manyStore)\n }\n}\n\nfunction processRelation(\n parentObj: any,\n rel: RelationMetadata,\n row: any,\n manyStore: WeakMap<object, IndexByPath>,\n): void {\n const relKey = buildCompositeKey(row, rel.keyCols)\n if (relKey == null) return\n\n if (rel.cardinality === 'one') {\n let current = parentObj[rel.name]\n if (current == null) {\n const created = materializeRelationObject(row, rel)\n if (!created) return\n parentObj[rel.name] = created\n current = created\n }\n\n processNestedRelations(current, rel, row, manyStore)\n return\n }\n\n const arr = parentObj[rel.name] as any[]\n const idx = getIndexForParent(manyStore, parentObj, rel.path)\n\n const existing = idx.get(relKey)\n if (existing) {\n processNestedRelations(existing, rel, row, manyStore)\n return\n }\n\n const created = materializeRelationObject(row, rel)\n if (!created) return\n\n arr.push(created)\n idx.set(relKey, created)\n\n processNestedRelations(created, rel, row, manyStore)\n}\n\nfunction pickParentScalarFieldsFromRows(\n parentModel: Model,\n rows: any[],\n): string[] {\n const all = getScalarFieldNames(parentModel)\n if (rows.length === 0) return all\n\n const row0 = rows[0]\n const picked: string[] = []\n for (const f of all) {\n if (Object.prototype.hasOwnProperty.call(row0, f)) picked.push(f)\n }\n return picked.length > 0 ? picked : all\n}\n\nexport function reduceFlatRows(rows: any[], config: ReducerConfig): any[] {\n if (rows.length === 0) return []\n\n const { parentModel, includedRelations } = config\n const parentPkFields = getPrimaryKeyFields(parentModel)\n\n const parentKeyCols = parentPkFields\n const parentScalarFields = pickParentScalarFieldsFromRows(parentModel, rows)\n const parentJsonSet = getJsonFieldSet(parentModel)\n\n const resultMap = new Map<string, any>()\n const manyStore = new WeakMap<object, IndexByPath>()\n\n for (let rowIdx = 0; rowIdx < rows.length; rowIdx++) {\n const row = rows[rowIdx]\n const parentKey = buildCompositeKey(row, parentKeyCols)\n\n if (parentKey == null) continue\n\n let record = resultMap.get(parentKey)\n if (!record) {\n record = {}\n for (const fieldName of parentScalarFields) {\n record[fieldName] = maybeParseJson(\n row[fieldName],\n parentJsonSet,\n fieldName,\n )\n }\n for (const rel of includedRelations) {\n record[rel.name] = rel.cardinality === 'many' ? [] : null\n }\n resultMap.set(parentKey, record)\n }\n\n for (const rel of includedRelations) {\n processRelation(record, rel, row, manyStore)\n }\n }\n\n return Array.from(resultMap.values())\n}\n","import { RelStats } from '../../cardinality-planner'\nimport { isPlainObject } from '../shared/validators/type-guards'\nimport { extractRelationEntries } from '../shared/relation-extraction-utils'\nimport { resolveRelationKeys } from '../shared/relation-key-utils'\nimport { Field, Model } from '../../types'\nimport { getRelationFieldSet } from '../shared/model-field-cache'\nimport { hasChildPagination } from '../shared/relation-utils'\n\nexport interface WhereInSegment {\n relationName: string\n relArgs: unknown\n childModelName: string\n fkFieldName: string\n parentKeyFieldName: string\n isList: boolean\n}\n\nexport interface QueryPlan {\n filteredArgs: any\n whereInSegments: WhereInSegment[]\n}\n\ntype RelationStatsLike = Record<string, Record<string, RelStats>>\n\nconst HARD_FANOUT_CAP = 5000\nconst MAX_ESTIMATED_ROWS = Number.MAX_SAFE_INTEGER / 1000\n\nfunction isList(field: Field): boolean {\n return typeof field.type === 'string' && field.type.endsWith('[]')\n}\n\nfunction resolveRelation(\n model: Model,\n relName: string,\n allModels: readonly Model[],\n): { field: Field; relModel: Model } | null {\n const field = model.fields.find((f) => f.name === relName)\n if (!field || !field.isRelation || !field.relatedModel) return null\n\n const relModel = allModels.find((m) => m.name === field.relatedModel)\n if (!relModel) return null\n\n return { field: field as Field, relModel }\n}\n\nfunction effectiveFanout(stats: RelStats): number {\n return 1 + stats.coverage * (stats.avg - 1)\n}\n\nfunction estimateFlatRows(\n parentCount: number,\n relations: Array<{ modelName: string; relName: string; field: Field }>,\n stats?: RelationStatsLike,\n): number {\n let rows = parentCount\n for (const rel of relations) {\n const relStats = stats?.[rel.modelName]?.[rel.relName]\n const fanout = relStats ? effectiveFanout(relStats) : 10\n const next = rows * fanout\n if (next > MAX_ESTIMATED_ROWS) {\n return MAX_ESTIMATED_ROWS\n }\n rows = next\n }\n return Math.ceil(rows)\n}\n\nfunction collectOneToManyRelations(\n entries: Array<{ name: string; value: unknown }>,\n model: Model,\n allModels: readonly Model[],\n): Array<{\n name: string\n relArgs: unknown\n field: Field\n relModel: Model\n hasPagination: boolean\n}> {\n const out: Array<{\n name: string\n relArgs: unknown\n field: Field\n relModel: Model\n hasPagination: boolean\n }> = []\n\n for (const entry of entries) {\n const resolved = resolveRelation(model, entry.name, allModels)\n if (!resolved) continue\n if (!isList(resolved.field)) continue\n\n out.push({\n name: entry.name,\n relArgs: entry.value,\n field: resolved.field,\n relModel: resolved.relModel,\n hasPagination: hasChildPagination(entry.value),\n })\n }\n\n return out\n}\n\nfunction getParentCount(method: string, args: any): number | null {\n if (method === 'findFirst' || method === 'findUnique') return 1\n\n if (args?.take !== undefined && args?.take !== null) {\n const take = typeof args.take === 'number' ? Math.abs(args.take) : null\n if (take !== null) return take\n }\n\n return null\n}\n\nfunction buildWhereInSegment(\n name: string,\n relArgs: unknown,\n field: Field,\n relModel: Model,\n): WhereInSegment | null {\n const keys = resolveRelationKeys(field, 'whereIn')\n if (keys.childKeys.length !== 1) return null\n\n return {\n relationName: name,\n relArgs,\n childModelName: relModel.name,\n fkFieldName: keys.childKeys[0],\n parentKeyFieldName: keys.parentKeys[0],\n isList: true,\n }\n}\n\nfunction deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') return obj\n if (obj instanceof Date) return new Date(obj.getTime()) as any\n if (obj instanceof RegExp) return new RegExp(obj.source, obj.flags) as any\n if (Array.isArray(obj)) return obj.map((item) => deepClone(item)) as any\n\n const cloned: any = {}\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n cloned[key] = deepClone((obj as any)[key])\n }\n }\n return cloned\n}\n\nfunction removeRelationsFromArgs(args: any, names: Set<string>): any {\n if (!args) return args\n\n const filtered = deepClone(args)\n\n if (filtered.include && isPlainObject(filtered.include)) {\n for (const name of names) {\n delete filtered.include[name]\n }\n if (Object.keys(filtered.include).length === 0) {\n delete filtered.include\n }\n }\n\n if (filtered.select && isPlainObject(filtered.select)) {\n for (const name of names) {\n delete filtered.select[name]\n }\n }\n\n return filtered\n}\n\nexport function planQueryStrategy(params: {\n model: Model\n method: string\n args: any\n allModels: readonly Model[]\n relationStats?: RelationStatsLike\n dialect: 'postgres' | 'sqlite'\n}): QueryPlan {\n const { model, method, args, allModels, relationStats } = params\n\n const entries = extractRelationEntries(args, model)\n if (entries.length === 0) {\n return { filteredArgs: args, whereInSegments: [] }\n }\n\n const oneToManyRels = collectOneToManyRelations(entries, model, allModels)\n\n const unpaginatedOneToMany = oneToManyRels.filter((r) => !r.hasPagination)\n\n if (unpaginatedOneToMany.length === 0) {\n return { filteredArgs: args, whereInSegments: [] }\n }\n\n const parentCount = getParentCount(method, args)\n const whereInSegments: WhereInSegment[] = []\n const toRemove = new Set<string>()\n\n if (unpaginatedOneToMany.length > 1) {\n for (const rel of unpaginatedOneToMany) {\n const segment = buildWhereInSegment(\n rel.name,\n rel.relArgs,\n rel.field,\n rel.relModel,\n )\n if (segment) {\n whereInSegments.push(segment)\n toRemove.add(rel.name)\n }\n }\n } else if (unpaginatedOneToMany.length === 1) {\n const rel = unpaginatedOneToMany[0]\n\n if (parentCount === null) {\n const segment = buildWhereInSegment(\n rel.name,\n rel.relArgs,\n rel.field,\n rel.relModel,\n )\n if (segment) {\n whereInSegments.push(segment)\n toRemove.add(rel.name)\n }\n } else {\n const estimated = estimateFlatRows(\n parentCount,\n [{ modelName: model.name, relName: rel.name, field: rel.field }],\n relationStats,\n )\n\n if (estimated > HARD_FANOUT_CAP) {\n const segment = buildWhereInSegment(\n rel.name,\n rel.relArgs,\n rel.field,\n rel.relModel,\n )\n if (segment) {\n whereInSegments.push(segment)\n toRemove.add(rel.name)\n }\n }\n }\n }\n\n if (toRemove.size === 0) {\n return { filteredArgs: args, whereInSegments: [] }\n }\n\n const filteredArgs = removeRelationsFromArgs(args, toRemove)\n\n return { filteredArgs, whereInSegments }\n}\n","import type { Model } from '../../types'\nimport { buildSQL } from '../..'\nimport { buildReducerConfig, reduceFlatRows } from '../select/reducer'\nimport type { WhereInSegment } from '../select/segment-planner'\nimport { isPlainObject } from './validators/type-guards'\n\nexport interface ExecuteWhereInParams {\n segments: WhereInSegment[]\n parentRows: any[]\n parentModel: Model\n allModels: readonly Model[]\n modelMap: Map<string, Model>\n dialect: 'postgres' | 'sqlite'\n execute: (sql: string, params: unknown[]) => Promise<any[]>\n}\n\nfunction getParamLimit(dialect: 'postgres' | 'sqlite'): number {\n return dialect === 'postgres' ? 32000 : 900\n}\n\nfunction chunkArray<T>(arr: T[], size: number): T[][] {\n if (arr.length <= size) return [arr]\n const chunks: T[][] = []\n for (let i = 0; i < arr.length; i += size) {\n chunks.push(arr.slice(i, i + size))\n }\n return chunks\n}\n\nexport function buildChildArgs(\n relArgs: unknown,\n fkFieldName: string,\n parentIds: unknown[],\n): any {\n const base: any =\n relArgs === true || !isPlainObject(relArgs) ? {} : { ...(relArgs as any) }\n\n const existingWhere = base.where\n\n const inCondition = { [fkFieldName]: { in: parentIds } }\n\n base.where = existingWhere\n ? { AND: [existingWhere, inCondition] }\n : inCondition\n\n return base\n}\n\nfunction ensureFkInSelect(childArgs: any, fkFieldName: string): boolean {\n if (!childArgs.select) return false\n if (childArgs.select[fkFieldName]) return false\n\n childArgs.select = { ...childArgs.select, [fkFieldName]: true }\n return true\n}\n\nexport function stitchResults(\n parentRows: any[],\n segment: WhereInSegment,\n childRows: any[],\n stripFk: boolean,\n): void {\n const grouped = new Map<unknown, any[]>()\n\n for (const child of childRows) {\n const fk = child[segment.fkFieldName]\n if (fk == null) continue\n\n let arr = grouped.get(fk)\n if (!arr) {\n arr = []\n grouped.set(fk, arr)\n }\n\n if (stripFk) {\n const cleaned = { ...child }\n delete cleaned[segment.fkFieldName]\n arr.push(cleaned)\n } else {\n arr.push(child)\n }\n }\n\n for (const parent of parentRows) {\n const pk = parent[segment.parentKeyFieldName]\n const children = grouped.get(pk) || []\n\n if (segment.isList) {\n parent[segment.relationName] = children\n } else {\n parent[segment.relationName] = children[0] || null\n }\n }\n}\n\nexport async function executeSegmentBase(\n segment: WhereInSegment,\n parentRows: any[],\n allModels: readonly Model[],\n modelMap: Map<string, Model>,\n dialect: 'postgres' | 'sqlite',\n execute: (sql: string, params: unknown[]) => Promise<any[]>,\n): Promise<void> {\n const parentIds = parentRows\n .map((r) => r[segment.parentKeyFieldName])\n .filter((v) => v != null)\n\n if (parentIds.length === 0) {\n for (const parent of parentRows) {\n parent[segment.relationName] = segment.isList ? [] : null\n }\n return\n }\n\n const uniqueIds = [...new Set(parentIds)]\n const paramLimit = getParamLimit(dialect)\n const chunks = chunkArray(uniqueIds, paramLimit)\n\n const childModel = modelMap.get(segment.childModelName)\n if (!childModel) {\n for (const parent of parentRows) {\n parent[segment.relationName] = segment.isList ? [] : null\n }\n return\n }\n\n const allChildRows: any[] = []\n let needsStripFk = false\n\n for (const chunk of chunks) {\n const childArgs = buildChildArgs(\n segment.relArgs,\n segment.fkFieldName,\n chunk,\n )\n const stripFk = ensureFkInSelect(childArgs, segment.fkFieldName)\n if (stripFk) needsStripFk = true\n\n const result = buildSQL(\n childModel,\n allModels as Model[],\n 'findMany',\n childArgs,\n dialect,\n )\n\n let rows = await execute(result.sql, result.params as unknown[])\n\n if (result.requiresReduction && result.includeSpec) {\n const config = buildReducerConfig(\n childModel,\n result.includeSpec as Record<string, any>,\n allModels,\n )\n rows = reduceFlatRows(rows, config)\n }\n\n for (const row of rows) {\n allChildRows.push(row)\n }\n }\n\n stitchResults(parentRows, segment, allChildRows, needsStripFk)\n}\n","import {\n ExecuteWhereInParams,\n executeSegmentBase,\n} from './shared/where-in-executor-base'\n\nexport async function executeWhereInSegments(\n params: ExecuteWhereInParams,\n): Promise<void> {\n const { segments, parentRows, allModels, modelMap, dialect, execute } = params\n\n if (segments.length === 0) return\n if (parentRows.length === 0) return\n\n for (const segment of segments) {\n await executeSegmentBase(\n segment,\n parentRows,\n allModels,\n modelMap,\n dialect,\n execute,\n )\n }\n}\n","import type { Model } from '../../types'\nimport type { RelationMetadata } from './reducer'\nimport { getPrimaryKeyFields } from '../shared/primary-key-utils'\nimport { buildCompositeKey } from '../shared/key-utils'\nimport {\n maybeParseJson,\n parseJsonIfNeeded,\n getJsonFieldSet,\n} from '../shared/model-field-cache'\n\nexport interface CoreReducerConfig {\n parentModel: Model\n includedRelations: RelationMetadata[]\n}\n\nexport interface CoreReducer {\n processRow(row: any): string | null\n getParent(key: string): any | null\n getAllParents(): any[]\n getParentMap(): Map<string, any>\n}\n\ntype IndexByPath = Map<string, Map<string, any>>\n\nconst getOrCreateRelationMap = (\n relationMaps: WeakMap<object, IndexByPath>,\n parent: object,\n): IndexByPath => {\n let relMap = relationMaps.get(parent)\n if (!relMap) {\n relMap = new Map()\n relationMaps.set(parent, relMap)\n }\n return relMap\n}\n\nconst getOrCreateChildMap = (\n relMap: IndexByPath,\n path: string,\n): Map<string, any> => {\n let childMap = relMap.get(path)\n if (!childMap) {\n childMap = new Map()\n relMap.set(path, childMap)\n }\n return childMap\n}\n\nconst createParentObject = (\n row: any,\n scalarFields: any[],\n jsonSet: ReadonlySet<string>,\n includedRelations: readonly RelationMetadata[],\n): any => {\n const parent: any = {}\n\n for (const field of scalarFields) {\n if (!(field.name in row)) continue\n parent[field.name] = maybeParseJson(row[field.name], jsonSet, field.name)\n }\n\n for (const rel of includedRelations) {\n parent[rel.name] = rel.cardinality === 'many' ? [] : null\n }\n\n return parent\n}\n\nconst createChildObject = (row: any, rel: RelationMetadata): any => {\n const child: any = {}\n\n for (const spec of rel.scalarCols) {\n if (!(spec.colName in row)) continue\n child[spec.fieldName] = parseJsonIfNeeded(spec.isJson, row[spec.colName])\n }\n\n if (rel.nestedIncludes) {\n for (const nested of rel.nestedIncludes.includedRelations) {\n child[nested.name] = nested.cardinality === 'many' ? [] : null\n }\n }\n\n return child\n}\n\nconst extractChildKey = (row: any, rel: RelationMetadata): string | null => {\n const cols = rel.primaryKeyFields.map((f) => `${rel.path}.${f}`)\n return buildCompositeKey(row, cols)\n}\n\nconst attachChildToParent = (\n parent: any,\n child: any,\n rel: RelationMetadata,\n): void => {\n if (rel.cardinality === 'many') {\n parent[rel.name].push(child)\n } else {\n parent[rel.name] = child\n }\n}\n\nconst createRelationProcessor = (\n relationMaps: WeakMap<object, IndexByPath>,\n) => {\n const processRelation = (\n parent: any,\n rel: RelationMetadata,\n row: any,\n ): void => {\n const childKey = extractChildKey(row, rel)\n if (!childKey) return\n\n const relMap = getOrCreateRelationMap(relationMaps, parent)\n const childMap = getOrCreateChildMap(relMap, rel.path)\n\n if (childMap.has(childKey)) {\n const existing = childMap.get(childKey)!\n\n if (rel.nestedIncludes) {\n for (const nested of rel.nestedIncludes.includedRelations) {\n processRelation(existing, nested, row)\n }\n }\n return\n }\n\n const child = createChildObject(row, rel)\n childMap.set(childKey, child)\n\n attachChildToParent(parent, child, rel)\n\n if (rel.nestedIncludes) {\n for (const nested of rel.nestedIncludes.includedRelations) {\n processRelation(child, nested, row)\n }\n }\n }\n\n return processRelation\n}\n\nexport const createCoreReducer = (config: CoreReducerConfig): CoreReducer => {\n const parentMap = new Map<string, any>()\n const relationMaps = new WeakMap<object, IndexByPath>()\n\n const scalarFields = config.parentModel.fields.filter((f) => !f.isRelation)\n const jsonSet = getJsonFieldSet(config.parentModel)\n const parentPkFields = getPrimaryKeyFields(config.parentModel)\n const includedRelations = config.includedRelations\n\n const extractParentKey = (row: any): string | null =>\n buildCompositeKey(row, parentPkFields)\n\n const processRelation = createRelationProcessor(relationMaps)\n\n const processRow = (row: any): string | null => {\n const parentKey = extractParentKey(row)\n if (!parentKey) return null\n\n const parent = parentMap.has(parentKey)\n ? parentMap.get(parentKey)!\n : (() => {\n const newParent = createParentObject(\n row,\n scalarFields,\n jsonSet,\n includedRelations,\n )\n parentMap.set(parentKey, newParent)\n return newParent\n })()\n\n for (const rel of includedRelations) {\n processRelation(parent, rel, row)\n }\n\n return parentKey\n }\n\n return {\n processRow,\n getParent: (key: string) => parentMap.get(key) ?? null,\n getAllParents: () => Array.from(parentMap.values()),\n getParentMap: () => parentMap,\n }\n}\n","import { ReducerConfig } from './reducer'\nimport { createCoreReducer } from './core-reducer'\n\nexport function createStreamingReducer(config: ReducerConfig) {\n const coreReducer = createCoreReducer({\n parentModel: config.parentModel,\n includedRelations: config.includedRelations,\n })\n\n return {\n processRow(row: any): void {\n coreReducer.processRow(row)\n },\n\n getResults(): any[] {\n return coreReducer.getAllParents()\n },\n\n getParentMap(): Map<string, any> {\n return coreReducer.getParentMap()\n },\n }\n}\n","import type { ReducerConfig } from './reducer'\nimport { createCoreReducer } from './core-reducer'\n\ninterface ProgressiveReducer {\n processRow(row: any): void\n getCurrentParentKey(row: any): string | null\n getCompletedParent(parentKey: string): any | null\n getRemainingParents(): any[]\n}\n\nexport function createProgressiveReducer(\n config: ReducerConfig,\n): ProgressiveReducer {\n const coreReducer = createCoreReducer({\n parentModel: config.parentModel,\n includedRelations: config.includedRelations,\n })\n\n const completedKeys = new Set<string>()\n\n return {\n processRow(row: any): void {\n coreReducer.processRow(row)\n },\n\n getCurrentParentKey(row: any): string | null {\n return coreReducer.processRow(row)\n },\n\n getCompletedParent(parentKey: string): any | null {\n if (completedKeys.has(parentKey)) return null\n const parent = coreReducer.getParent(parentKey)\n if (!parent) return null\n completedKeys.add(parentKey)\n return parent\n },\n\n getRemainingParents(): any[] {\n const remaining: any[] = []\n for (const [key, parent] of coreReducer.getParentMap()) {\n if (!completedKeys.has(key)) {\n remaining.push(parent)\n completedKeys.add(key)\n }\n }\n return remaining\n },\n }\n}\n","import type { Model } from '../../types'\nimport { getPrimaryKeyField } from '../shared/primary-key-utils'\nimport type { WhereInSegment } from '../select/segment-planner'\nimport { buildSQL } from '../..'\nimport { buildReducerConfig, reduceFlatRows } from './reducer'\n\ninterface StreamingWhereInParams {\n segments: WhereInSegment[]\n parentSql: string\n parentParams: unknown[]\n parentModel: Model\n allModels: readonly Model[]\n modelMap: Map<string, Model>\n dialect: 'postgres' | 'sqlite'\n execute: (sql: string, params: unknown[]) => Promise<any[]>\n batchSize?: number\n maxConcurrency?: number\n}\n\nexport async function executeWhereInSegmentsStreaming(\n params: StreamingWhereInParams,\n): Promise<any[]> {\n const {\n segments,\n parentSql,\n parentParams,\n parentModel,\n allModels,\n modelMap,\n dialect,\n execute,\n batchSize = 100,\n maxConcurrency = 10,\n } = params\n\n if (segments.length === 0) {\n throw new Error('executeWhereInSegmentsStreaming requires segments')\n }\n\n if (dialect !== 'postgres') {\n throw new Error('Streaming WHERE IN requires postgres dialect')\n }\n\n const parentMap = new Map<string, any>()\n const batches = new Map<string, unknown[]>()\n const inFlightMap = new Map<Promise<void>, string>()\n\n for (const seg of segments) {\n batches.set(seg.relationName, [])\n }\n\n const pkField = getPrimaryKeyField(parentModel)\n\n const parentRows = await execute(parentSql, parentParams)\n\n for (const row of parentRows) {\n const pk = row[pkField]\n parentMap.set(pk, { ...row })\n\n for (const seg of segments) {\n row[seg.relationName] = seg.isList ? [] : null\n }\n\n for (const seg of segments) {\n const batch = batches.get(seg.relationName)!\n const parentKey = row[seg.parentKeyFieldName]\n batch.push(parentKey)\n\n if (batch.length >= batchSize) {\n const idsToFetch = [...batch]\n batch.length = 0\n\n const promise = fetchAndAttachChildren(\n seg,\n idsToFetch,\n parentMap,\n allModels,\n modelMap,\n dialect,\n execute,\n )\n\n inFlightMap.set(promise, seg.relationName)\n\n promise.finally(() => {\n inFlightMap.delete(promise)\n })\n\n if (inFlightMap.size >= maxConcurrency) {\n await Promise.race(inFlightMap.keys())\n }\n }\n }\n }\n\n for (const seg of segments) {\n const batch = batches.get(seg.relationName)!\n if (batch.length > 0) {\n const promise = fetchAndAttachChildren(\n seg,\n batch,\n parentMap,\n allModels,\n modelMap,\n dialect,\n execute,\n )\n\n inFlightMap.set(promise, seg.relationName)\n\n promise.finally(() => {\n inFlightMap.delete(promise)\n })\n }\n }\n\n await Promise.all(inFlightMap.keys())\n\n return Array.from(parentMap.values())\n}\n\nasync function fetchAndAttachChildren(\n segment: any,\n parentIds: unknown[],\n parentMap: Map<string, any>,\n allModels: readonly Model[],\n modelMap: Map<string, Model>,\n dialect: 'postgres' | 'sqlite',\n execute: (sql: string, params: unknown[]) => Promise<any[]>,\n): Promise<void> {\n const childModel = modelMap.get(segment.childModelName)\n if (!childModel) return\n\n const childArgs = buildChildArgs(\n segment.relArgs,\n segment.fkFieldName,\n parentIds,\n )\n const result = buildSQL(\n childModel,\n allModels as Model[],\n 'findMany',\n childArgs,\n dialect,\n )\n\n let children = await execute(result.sql, result.params as unknown[])\n\n if (result.requiresReduction && result.includeSpec) {\n const config = buildReducerConfig(childModel, result.includeSpec, allModels)\n children = reduceFlatRows(children, config)\n }\n\n for (const child of children) {\n const fkValue = child[segment.fkFieldName]\n const parent = parentMap.get(fkValue)\n if (!parent) continue\n\n if (segment.isList) {\n if (!Array.isArray(parent[segment.relationName])) {\n parent[segment.relationName] = []\n }\n parent[segment.relationName].push(child)\n } else {\n parent[segment.relationName] = child\n }\n }\n}\n\nfunction buildChildArgs(\n relArgs: unknown,\n fkFieldName: string,\n parentIds: unknown[],\n): any {\n const base: any =\n relArgs === true || typeof relArgs !== 'object' || relArgs === null\n ? {}\n : { ...(relArgs as any) }\n\n const existingWhere = base.where\n\n const inCondition = { [fkFieldName]: { in: parentIds } }\n\n base.where = existingWhere\n ? { AND: [existingWhere, inCondition] }\n : inCondition\n\n return base\n}\n","import {\n transformAggregateRow,\n extractCountValue,\n buildReducerConfig,\n reduceFlatRows,\n normalizeValue,\n getRowTransformer,\n createStreamingReducer,\n} from './index'\n\nexport const SQLITE_STMT_CACHE = new WeakMap<any, Map<string, any>>()\n\nexport function getOrPrepareStatement(client: any, sql: string): any {\n let cache = SQLITE_STMT_CACHE.get(client)\n if (!cache) {\n cache = new Map()\n SQLITE_STMT_CACHE.set(client, cache)\n }\n\n let stmt = cache.get(sql)\n if (!stmt) {\n stmt = client.prepare(sql)\n cache.set(sql, stmt)\n\n if (cache.size > 1000) {\n const firstKey = cache.keys().next().value\n cache.delete(firstKey!)\n }\n }\n\n return stmt\n}\n\nexport function shouldSqliteUseGet(method: string): boolean {\n return (\n method === 'count' ||\n method === 'findFirst' ||\n method === 'findUnique' ||\n method === 'aggregate'\n )\n}\n\nexport function normalizeParams(params: unknown[]): unknown[] {\n return params.map((p) => normalizeValue(p))\n}\n\nexport async function executePostgresQuery(\n client: any,\n sql: string,\n params: unknown[],\n method: string,\n requiresReduction: boolean,\n includeSpec: Record<string, any> | undefined,\n model: any,\n allModels: readonly any[],\n): Promise<unknown[]> {\n const normalizedParams = normalizeParams(params)\n const rowTransformer = getRowTransformer(method)\n\n if (requiresReduction && includeSpec) {\n const config = buildReducerConfig(model, includeSpec, allModels)\n const reducer = createStreamingReducer(config)\n\n await client.unsafe(sql, normalizedParams).forEach((row: any) => {\n reducer.processRow(rowTransformer ? rowTransformer(row) : row)\n })\n\n return reducer.getResults()\n }\n\n const results: any[] = []\n // runs inside of driver's main loop\n await client.unsafe(sql, normalizedParams).forEach((row: any) => {\n results.push(rowTransformer ? rowTransformer(row) : row)\n })\n\n return results\n}\n\nexport function executeSqliteQuery(\n client: any,\n sql: string,\n params: unknown[],\n method: string,\n requiresReduction: boolean,\n includeSpec: Record<string, any> | undefined,\n model: any,\n allModels: readonly any[],\n): unknown[] {\n const normalizedParams = normalizeParams(params)\n const shouldTransform =\n method === 'groupBy' || method === 'aggregate' || method === 'count'\n\n if (requiresReduction && includeSpec) {\n const config = buildReducerConfig(model, includeSpec, allModels)\n const stmt = getOrPrepareStatement(client, sql)\n\n const useGet = shouldSqliteUseGet(method)\n const rawResults = useGet\n ? stmt.get(...normalizedParams)\n : stmt.all(...normalizedParams)\n const results = Array.isArray(rawResults) ? rawResults : [rawResults]\n\n const transformed = shouldTransform\n ? results.map(transformAggregateRow)\n : results\n return reduceFlatRows(transformed, config)\n }\n\n const stmt = getOrPrepareStatement(client, sql)\n const useGet = shouldSqliteUseGet(method)\n const rawResults = useGet\n ? stmt.get(...normalizedParams)\n : stmt.all(...normalizedParams)\n const results = Array.isArray(rawResults) ? rawResults : [rawResults]\n\n return shouldTransform ? results.map(transformAggregateRow) : results\n}\n\nexport async function executeRaw(\n client: any,\n sql: string,\n params: unknown[] | undefined,\n dialect: string,\n): Promise<unknown[]> {\n if (dialect === 'postgres') {\n return await client.unsafe(sql, (params || []) as any[])\n }\n throw new Error('Raw execution for sqlite not supported in transactions')\n}\n","import { DirectiveProps, convertDMMFToModels } from '@dee-wan/schema-parser'\nimport { DMMF } from '@prisma/generator-helper'\nimport { setGlobalDialect, SqlDialect } from './sql-builder-dialect'\nimport {\n generateSQL as generateSQLInternal,\n SQLDirective,\n} from './sql-generator'\nimport { buildSQLWithCache } from './query-cache'\nimport {\n buildBatchSql,\n parseBatchResults,\n buildBatchCountSql,\n parseBatchCountResults,\n type BatchQuery,\n type BatchCountQuery,\n} from './batch'\nimport {\n createTransactionExecutor,\n type TransactionQuery,\n type TransactionOptions,\n} from './transaction'\nimport { transformQueryResults } from './result-transformers'\nimport { buildReducerConfig, reduceFlatRows } from './builder/select/reducer'\nimport {\n Model,\n PrismaMethod,\n PrismaSQLConfig,\n PrismaSQLResult,\n SqlResult,\n} from './types'\nimport { planQueryStrategy } from './builder/select/segment-planner'\nimport { executeWhereInSegments } from './builder/where-in-executor'\n\nexport function buildSQL(\n model: Model,\n models: Model[],\n method: PrismaMethod,\n args: Record<string, unknown>,\n dialect: SqlDialect,\n): SqlResult {\n return buildSQLWithCache(model, models, method, args, dialect) as any\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(\n modelsOrDmmf: Model[] | DMMF.Document,\n dialect: SqlDialect,\n): (\n model: string,\n method: PrismaMethod,\n args?: Record<string, unknown>,\n) => SqlResult {\n const models = Array.isArray(modelsOrDmmf)\n ? modelsOrDmmf\n : convertDMMFToModels(modelsOrDmmf.datamodel)\n\n return createToSQLFunction(models, dialect)\n}\n\nexport function createPrismaSQL<TClient>(\n config: PrismaSQLConfig<TClient>,\n): PrismaSQLResult<TClient> {\n const { client, models: providedModels, dmmf, dialect, execute } = config\n\n let models: Model[]\n\n if (providedModels) {\n models = providedModels\n } else if (dmmf) {\n models = convertDMMFToModels(dmmf.datamodel)\n } else {\n throw new Error('createPrismaSQL requires either models or dmmf parameter')\n }\n\n if (!Array.isArray(models) || models.length === 0) {\n throw new Error('createPrismaSQL: models array is empty or invalid')\n }\n\n const toSQL = createToSQLFunction(models, dialect)\n const modelMap = new Map(models.map((m) => [m.name, m]))\n\n async function query<T = unknown[]>(\n model: string,\n method: PrismaMethod,\n args: Record<string, unknown> = {},\n ): Promise<T> {\n const sqlResult = toSQL(model, method, args)\n let results = await execute(client, sqlResult.sql, [...sqlResult.params])\n\n if (sqlResult.requiresReduction && sqlResult.includeSpec) {\n const modelDef = modelMap.get(model)\n if (modelDef) {\n const config = buildReducerConfig(\n modelDef,\n sqlResult.includeSpec,\n models,\n )\n results = reduceFlatRows(results as any[], config)\n }\n }\n\n return transformQueryResults(method, results) as T\n }\n\n function batchSql(queries: Record<string, BatchQuery>): SqlResult {\n const { sql, params } = buildBatchSql(queries, modelMap, models, dialect)\n return { sql, params }\n }\n\n return { toSQL, query, batchSql, client }\n}\n\nexport function generateSQL(directive: DirectiveProps): SQLDirective {\n return generateSQLInternal(directive)\n}\n\nexport function generateAllSQL(directives: DirectiveProps[]): SQLDirective[] {\n const results: SQLDirective[] = []\n const errors: Array<{ directive: DirectiveProps; error: Error }> = []\n\n for (const directive of directives) {\n try {\n results.push(generateSQL(directive))\n } catch (error) {\n errors.push({\n directive,\n error: error instanceof Error ? error : new Error(String(error)),\n })\n }\n }\n\n if (errors.length > 0) {\n console.warn(\n `[generateAllSQL] ${errors.length} directive(s) failed SQL generation`,\n )\n for (const { directive, error } of errors) {\n console.warn(\n ` - ${directive.modelName}.${directive.method}: ${error.message}`,\n )\n }\n }\n\n return results\n}\n\nexport function generateSQLByModel(\n directives: DirectiveProps[],\n): Map<string, SQLDirective[]> {\n const byModel = new Map<string, SQLDirective[]>()\n\n for (const directive of directives) {\n const sql = generateSQL(directive)\n\n if (!byModel.has(directive.modelName)) {\n byModel.set(directive.modelName, [])\n }\n\n byModel.get(directive.modelName)!.push(sql)\n }\n\n return byModel\n}\n\nexport {\n buildBatchSql,\n parseBatchResults,\n buildBatchCountSql,\n parseBatchCountResults,\n type BatchQuery,\n type BatchCountQuery,\n}\n\nexport {\n type TransactionQuery,\n type TransactionOptions,\n type Model,\n type PrismaMethod,\n type PrismaSQLConfig,\n type PrismaSQLResult,\n type SqlResult,\n}\n\nexport {\n transformQueryResults,\n planQueryStrategy,\n createTransactionExecutor,\n executeWhereInSegments,\n}\nexport { buildReducerConfig, reduceFlatRows } from './builder/select/reducer'\nexport type { ReducerConfig } from './builder/select/reducer'\nexport { normalizeValue } from './utils/normalize-value'\nexport { createStreamingReducer } from './builder/select/streaming-reducer'\nexport { createProgressiveReducer } from './builder/select/streaming-progressive-reducer'\nexport { executeWhereInSegmentsStreaming } from './builder/select/streaming-where-in-executor'\nexport {\n transformAggregateRow,\n extractCountValue,\n getRowTransformer,\n} from './builder/select/row-transformers'\nexport {\n getOrPrepareStatement,\n shouldSqliteUseGet,\n normalizeParams,\n executePostgresQuery,\n executeSqliteQuery,\n executeRaw,\n} from './generated-runtime'\n"]}
|