prisma-sql 1.75.6 → 1.75.8
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/collect-planner-stats.cjs +679 -0
- package/dist/collect-planner-stats.cjs.map +1 -0
- package/dist/collect-planner-stats.d.mts +1 -0
- package/dist/collect-planner-stats.d.ts +1 -0
- package/dist/collect-planner-stats.js +677 -0
- package/dist/collect-planner-stats.js.map +1 -0
- package/dist/generator.cjs +57 -2326
- package/dist/generator.cjs.map +1 -1
- package/dist/generator.js +57 -2317
- package/dist/generator.js.map +1 -1
- package/package.json +5 -4
package/dist/generator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/postgres/src/query.js","../node_modules/postgres/src/errors.js","../node_modules/postgres/src/types.js","../node_modules/postgres/src/result.js","../node_modules/postgres/src/queue.js","../node_modules/postgres/src/bytes.js","../node_modules/postgres/src/connection.js","../node_modules/postgres/src/subscribe.js","../node_modules/postgres/src/large.js","../node_modules/postgres/src/index.js","../package.json","../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/alias-generator.ts","../src/builder/shared/relation-key-utils.ts","../src/builder/shared/fk-join-utils.ts","../src/builder/select/include-join.ts","../src/builder/select/include-count.ts","../src/builder/shared/relation-utils.ts","../src/builder/shared/include-tree-walker.ts","../src/builder/select/strategy-estimator.ts","../src/builder/shared/relation-extraction-utils.ts","../src/builder/shared/relation-query-context.ts","../src/builder/select/flat-join.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/param-store.ts","../src/builder/shared/state.ts","../src/builder/where.ts","../src/builder/shared/field-type-utils.ts","../src/builder/shared/negative-take-utils.ts","../src/builder/select/lateral-join.ts","../src/builder/select/distinct.ts","../src/builder/select/assembly.ts","../src/builder/select/fields.ts","../src/builder/select/includes.ts","../src/builder/shared/order-by-relation.ts","../src/builder/select.ts","../src/builder/shared/comparison-builder.ts","../src/builder/aggregates.ts","../src/builder/shared/sql-placeholder.ts","../src/builder/shared/sql-param-scanner.ts","../src/sql-generator.ts","../src/utils/s3-fifo.ts","../src/query-cache.ts","../src/index.ts","../src/utils/pure-utils.ts","../src/cardinality-planner.ts","../src/code-emitter.ts","../src/generator.ts"],"names":["resolve","b","types","x","inferType","arraySerializer","arrayParser","index","parsers","backoff","connection","query","error","options","performance","length","chunk","rows","buffer","timer","postgres","noop","sql","slot","stream","state","Stream","size","handler","name","result","queries","fn","a","exports","s","_a","isDynamicParameter","parse","normalizeField","e","c","cursorField","hasNestedIncludes","select","ph","separator","placeholder","COMPARISON_OPS","base","join","clause","IS_PRODUCTION","extractDynamicName","isListRelation","values","getRelationModel","countActiveEntries","DEFAULT_PRIMARY_KEY","parts","baseSelect","nestedSelects","selectExpr","normalizeOrderByInput","MAX_NOT_DEPTH","normalizeLogicalValue","buildLogicalClause","extractIncludeSpec","node","generateSQL","params","convertDMMFToModels"],"mappings":"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","file":"generator.js","sourcesContent":["const originCache = new Map()\n , originStackCache = new Map()\n , originError = Symbol('OriginError')\n\nexport const CLOSE = {}\nexport class Query extends Promise {\n constructor(strings, args, handler, canceller, options = {}) {\n let resolve\n , reject\n\n super((a, b) => {\n resolve = a\n reject = b\n })\n\n this.tagged = Array.isArray(strings.raw)\n this.strings = strings\n this.args = args\n this.handler = handler\n this.canceller = canceller\n this.options = options\n\n this.state = null\n this.statement = null\n\n this.resolve = x => (this.active = false, resolve(x))\n this.reject = x => (this.active = false, reject(x))\n\n this.active = false\n this.cancelled = null\n this.executed = false\n this.signature = ''\n\n this[originError] = this.handler.debug\n ? new Error()\n : this.tagged && cachedError(this.strings)\n }\n\n get origin() {\n return (this.handler.debug\n ? this[originError].stack\n : this.tagged && originStackCache.has(this.strings)\n ? originStackCache.get(this.strings)\n : originStackCache.set(this.strings, this[originError].stack).get(this.strings)\n ) || ''\n }\n\n static get [Symbol.species]() {\n return Promise\n }\n\n cancel() {\n return this.canceller && (this.canceller(this), this.canceller = null)\n }\n\n simple() {\n this.options.simple = true\n this.options.prepare = false\n return this\n }\n\n async readable() {\n this.simple()\n this.streaming = true\n return this\n }\n\n async writable() {\n this.simple()\n this.streaming = true\n return this\n }\n\n cursor(rows = 1, fn) {\n this.options.simple = false\n if (typeof rows === 'function') {\n fn = rows\n rows = 1\n }\n\n this.cursorRows = rows\n\n if (typeof fn === 'function')\n return (this.cursorFn = fn, this)\n\n let prev\n return {\n [Symbol.asyncIterator]: () => ({\n next: () => {\n if (this.executed && !this.active)\n return { done: true }\n\n prev && prev()\n const promise = new Promise((resolve, reject) => {\n this.cursorFn = value => {\n resolve({ value, done: false })\n return new Promise(r => prev = r)\n }\n this.resolve = () => (this.active = false, resolve({ done: true }))\n this.reject = x => (this.active = false, reject(x))\n })\n this.execute()\n return promise\n },\n return() {\n prev && prev(CLOSE)\n return { done: true }\n }\n })\n }\n }\n\n describe() {\n this.options.simple = false\n this.onlyDescribe = this.options.prepare = true\n return this\n }\n\n stream() {\n throw new Error('.stream has been renamed to .forEach')\n }\n\n forEach(fn) {\n this.forEachFn = fn\n this.handle()\n return this\n }\n\n raw() {\n this.isRaw = true\n return this\n }\n\n values() {\n this.isRaw = 'values'\n return this\n }\n\n async handle() {\n !this.executed && (this.executed = true) && await 1 && this.handler(this)\n }\n\n execute() {\n this.handle()\n return this\n }\n\n then() {\n this.handle()\n return super.then.apply(this, arguments)\n }\n\n catch() {\n this.handle()\n return super.catch.apply(this, arguments)\n }\n\n finally() {\n this.handle()\n return super.finally.apply(this, arguments)\n }\n}\n\nfunction cachedError(xs) {\n if (originCache.has(xs))\n return originCache.get(xs)\n\n const x = Error.stackTraceLimit\n Error.stackTraceLimit = 4\n originCache.set(xs, new Error())\n Error.stackTraceLimit = x\n return originCache.get(xs)\n}\n","export class PostgresError extends Error {\n constructor(x) {\n super(x.message)\n this.name = this.constructor.name\n Object.assign(this, x)\n }\n}\n\nexport const Errors = {\n connection,\n postgres,\n generic,\n notSupported\n}\n\nfunction connection(x, options, socket) {\n const { host, port } = socket || options\n const error = Object.assign(\n new Error(('write ' + x + ' ' + (options.path || (host + ':' + port)))),\n {\n code: x,\n errno: x,\n address: options.path || host\n }, options.path ? {} : { port: port }\n )\n Error.captureStackTrace(error, connection)\n return error\n}\n\nfunction postgres(x) {\n const error = new PostgresError(x)\n Error.captureStackTrace(error, postgres)\n return error\n}\n\nfunction generic(code, message) {\n const error = Object.assign(new Error(code + ': ' + message), { code })\n Error.captureStackTrace(error, generic)\n return error\n}\n\n/* c8 ignore next 10 */\nfunction notSupported(x) {\n const error = Object.assign(\n new Error(x + ' (B) is not supported'),\n {\n code: 'MESSAGE_NOT_SUPPORTED',\n name: x\n }\n )\n Error.captureStackTrace(error, notSupported)\n return error\n}\n","import { Query } from './query.js'\nimport { Errors } from './errors.js'\n\nexport const types = {\n string: {\n to: 25,\n from: null, // defaults to string\n serialize: x => '' + x\n },\n number: {\n to: 0,\n from: [21, 23, 26, 700, 701],\n serialize: x => '' + x,\n parse: x => +x\n },\n json: {\n to: 114,\n from: [114, 3802],\n serialize: x => JSON.stringify(x),\n parse: x => JSON.parse(x)\n },\n boolean: {\n to: 16,\n from: 16,\n serialize: x => x === true ? 't' : 'f',\n parse: x => x === 't'\n },\n date: {\n to: 1184,\n from: [1082, 1114, 1184],\n serialize: x => (x instanceof Date ? x : new Date(x)).toISOString(),\n parse: x => new Date(x)\n },\n bytea: {\n to: 17,\n from: 17,\n serialize: x => '\\\\x' + Buffer.from(x).toString('hex'),\n parse: x => Buffer.from(x.slice(2), 'hex')\n }\n}\n\nclass NotTagged { then() { notTagged() } catch() { notTagged() } finally() { notTagged() }}\n\nexport class Identifier extends NotTagged {\n constructor(value) {\n super()\n this.value = escapeIdentifier(value)\n }\n}\n\nexport class Parameter extends NotTagged {\n constructor(value, type, array) {\n super()\n this.value = value\n this.type = type\n this.array = array\n }\n}\n\nexport class Builder extends NotTagged {\n constructor(first, rest) {\n super()\n this.first = first\n this.rest = rest\n }\n\n build(before, parameters, types, options) {\n const keyword = builders.map(([x, fn]) => ({ fn, i: before.search(x) })).sort((a, b) => a.i - b.i).pop()\n return keyword.i === -1\n ? escapeIdentifiers(this.first, options)\n : keyword.fn(this.first, this.rest, parameters, types, options)\n }\n}\n\nexport function handleValue(x, parameters, types, options) {\n let value = x instanceof Parameter ? x.value : x\n if (value === undefined) {\n x instanceof Parameter\n ? x.value = options.transform.undefined\n : value = x = options.transform.undefined\n\n if (value === undefined)\n throw Errors.generic('UNDEFINED_VALUE', 'Undefined values are not allowed')\n }\n\n return '$' + (types.push(\n x instanceof Parameter\n ? (parameters.push(x.value), x.array\n ? x.array[x.type || inferType(x.value)] || x.type || firstIsString(x.value)\n : x.type\n )\n : (parameters.push(x), inferType(x))\n ))\n}\n\nconst defaultHandlers = typeHandlers(types)\n\nexport function stringify(q, string, value, parameters, types, options) { // eslint-disable-line\n for (let i = 1; i < q.strings.length; i++) {\n string += (stringifyValue(string, value, parameters, types, options)) + q.strings[i]\n value = q.args[i]\n }\n\n return string\n}\n\nfunction stringifyValue(string, value, parameters, types, o) {\n return (\n value instanceof Builder ? value.build(string, parameters, types, o) :\n value instanceof Query ? fragment(value, parameters, types, o) :\n value instanceof Identifier ? value.value :\n value && value[0] instanceof Query ? value.reduce((acc, x) => acc + ' ' + fragment(x, parameters, types, o), '') :\n handleValue(value, parameters, types, o)\n )\n}\n\nfunction fragment(q, parameters, types, options) {\n q.fragment = true\n return stringify(q, q.strings[0], q.args[0], parameters, types, options)\n}\n\nfunction valuesBuilder(first, parameters, types, columns, options) {\n return first.map(row =>\n '(' + columns.map(column =>\n stringifyValue('values', row[column], parameters, types, options)\n ).join(',') + ')'\n ).join(',')\n}\n\nfunction values(first, rest, parameters, types, options) {\n const multi = Array.isArray(first[0])\n const columns = rest.length ? rest.flat() : Object.keys(multi ? first[0] : first)\n return valuesBuilder(multi ? first : [first], parameters, types, columns, options)\n}\n\nfunction select(first, rest, parameters, types, options) {\n typeof first === 'string' && (first = [first].concat(rest))\n if (Array.isArray(first))\n return escapeIdentifiers(first, options)\n\n let value\n const columns = rest.length ? rest.flat() : Object.keys(first)\n return columns.map(x => {\n value = first[x]\n return (\n value instanceof Query ? fragment(value, parameters, types, options) :\n value instanceof Identifier ? value.value :\n handleValue(value, parameters, types, options)\n ) + ' as ' + escapeIdentifier(options.transform.column.to ? options.transform.column.to(x) : x)\n }).join(',')\n}\n\nconst builders = Object.entries({\n values,\n in: (...xs) => {\n const x = values(...xs)\n return x === '()' ? '(null)' : x\n },\n select,\n as: select,\n returning: select,\n '\\\\(': select,\n\n update(first, rest, parameters, types, options) {\n return (rest.length ? rest.flat() : Object.keys(first)).map(x =>\n escapeIdentifier(options.transform.column.to ? options.transform.column.to(x) : x) +\n '=' + stringifyValue('values', first[x], parameters, types, options)\n )\n },\n\n insert(first, rest, parameters, types, options) {\n const columns = rest.length ? rest.flat() : Object.keys(Array.isArray(first) ? first[0] : first)\n return '(' + escapeIdentifiers(columns, options) + ')values' +\n valuesBuilder(Array.isArray(first) ? first : [first], parameters, types, columns, options)\n }\n}).map(([x, fn]) => ([new RegExp('((?:^|[\\\\s(])' + x + '(?:$|[\\\\s(]))(?![\\\\s\\\\S]*\\\\1)', 'i'), fn]))\n\nfunction notTagged() {\n throw Errors.generic('NOT_TAGGED_CALL', 'Query not called as a tagged template literal')\n}\n\nexport const serializers = defaultHandlers.serializers\nexport const parsers = defaultHandlers.parsers\n\nexport const END = {}\n\nfunction firstIsString(x) {\n if (Array.isArray(x))\n return firstIsString(x[0])\n return typeof x === 'string' ? 1009 : 0\n}\n\nexport const mergeUserTypes = function(types) {\n const user = typeHandlers(types || {})\n return {\n serializers: Object.assign({}, serializers, user.serializers),\n parsers: Object.assign({}, parsers, user.parsers)\n }\n}\n\nfunction typeHandlers(types) {\n return Object.keys(types).reduce((acc, k) => {\n types[k].from && [].concat(types[k].from).forEach(x => acc.parsers[x] = types[k].parse)\n if (types[k].serialize) {\n acc.serializers[types[k].to] = types[k].serialize\n types[k].from && [].concat(types[k].from).forEach(x => acc.serializers[x] = types[k].serialize)\n }\n return acc\n }, { parsers: {}, serializers: {} })\n}\n\nfunction escapeIdentifiers(xs, { transform: { column } }) {\n return xs.map(x => escapeIdentifier(column.to ? column.to(x) : x)).join(',')\n}\n\nexport const escapeIdentifier = function escape(str) {\n return '\"' + str.replace(/\"/g, '\"\"').replace(/\\./g, '\".\"') + '\"'\n}\n\nexport const inferType = function inferType(x) {\n return (\n x instanceof Parameter ? x.type :\n x instanceof Date ? 1184 :\n x instanceof Uint8Array ? 17 :\n (x === true || x === false) ? 16 :\n typeof x === 'bigint' ? 20 :\n Array.isArray(x) ? inferType(x[0]) :\n 0\n )\n}\n\nconst escapeBackslash = /\\\\/g\nconst escapeQuote = /\"/g\n\nfunction arrayEscape(x) {\n return x\n .replace(escapeBackslash, '\\\\\\\\')\n .replace(escapeQuote, '\\\\\"')\n}\n\nexport const arraySerializer = function arraySerializer(xs, serializer, options, typarray) {\n if (Array.isArray(xs) === false)\n return xs\n\n if (!xs.length)\n return '{}'\n\n const first = xs[0]\n // Only _box (1020) has the ';' delimiter for arrays, all other types use the ',' delimiter\n const delimiter = typarray === 1020 ? ';' : ','\n\n if (Array.isArray(first) && !first.type)\n return '{' + xs.map(x => arraySerializer(x, serializer, options, typarray)).join(delimiter) + '}'\n\n return '{' + xs.map(x => {\n if (x === undefined) {\n x = options.transform.undefined\n if (x === undefined)\n throw Errors.generic('UNDEFINED_VALUE', 'Undefined values are not allowed')\n }\n\n return x === null\n ? 'null'\n : '\"' + arrayEscape(serializer ? serializer(x.type ? x.value : x) : '' + x) + '\"'\n }).join(delimiter) + '}'\n}\n\nconst arrayParserState = {\n i: 0,\n char: null,\n str: '',\n quoted: false,\n last: 0\n}\n\nexport const arrayParser = function arrayParser(x, parser, typarray) {\n arrayParserState.i = arrayParserState.last = 0\n return arrayParserLoop(arrayParserState, x, parser, typarray)\n}\n\nfunction arrayParserLoop(s, x, parser, typarray) {\n const xs = []\n // Only _box (1020) has the ';' delimiter for arrays, all other types use the ',' delimiter\n const delimiter = typarray === 1020 ? ';' : ','\n for (; s.i < x.length; s.i++) {\n s.char = x[s.i]\n if (s.quoted) {\n if (s.char === '\\\\') {\n s.str += x[++s.i]\n } else if (s.char === '\"') {\n xs.push(parser ? parser(s.str) : s.str)\n s.str = ''\n s.quoted = x[s.i + 1] === '\"'\n s.last = s.i + 2\n } else {\n s.str += s.char\n }\n } else if (s.char === '\"') {\n s.quoted = true\n } else if (s.char === '{') {\n s.last = ++s.i\n xs.push(arrayParserLoop(s, x, parser, typarray))\n } else if (s.char === '}') {\n s.quoted = false\n s.last < s.i && xs.push(parser ? parser(x.slice(s.last, s.i)) : x.slice(s.last, s.i))\n s.last = s.i + 1\n break\n } else if (s.char === delimiter && s.p !== '}' && s.p !== '\"') {\n xs.push(parser ? parser(x.slice(s.last, s.i)) : x.slice(s.last, s.i))\n s.last = s.i + 1\n }\n s.p = s.char\n }\n s.last < s.i && xs.push(parser ? parser(x.slice(s.last, s.i + 1)) : x.slice(s.last, s.i + 1))\n return xs\n}\n\nexport const toCamel = x => {\n let str = x[0]\n for (let i = 1; i < x.length; i++)\n str += x[i] === '_' ? x[++i].toUpperCase() : x[i]\n return str\n}\n\nexport const toPascal = x => {\n let str = x[0].toUpperCase()\n for (let i = 1; i < x.length; i++)\n str += x[i] === '_' ? x[++i].toUpperCase() : x[i]\n return str\n}\n\nexport const toKebab = x => x.replace(/_/g, '-')\n\nexport const fromCamel = x => x.replace(/([A-Z])/g, '_$1').toLowerCase()\nexport const fromPascal = x => (x.slice(0, 1) + x.slice(1).replace(/([A-Z])/g, '_$1')).toLowerCase()\nexport const fromKebab = x => x.replace(/-/g, '_')\n\nfunction createJsonTransform(fn) {\n return function jsonTransform(x, column) {\n return typeof x === 'object' && x !== null && (column.type === 114 || column.type === 3802)\n ? Array.isArray(x)\n ? x.map(x => jsonTransform(x, column))\n : Object.entries(x).reduce((acc, [k, v]) => Object.assign(acc, { [fn(k)]: jsonTransform(v, column) }), {})\n : x\n }\n}\n\ntoCamel.column = { from: toCamel }\ntoCamel.value = { from: createJsonTransform(toCamel) }\nfromCamel.column = { to: fromCamel }\n\nexport const camel = { ...toCamel }\ncamel.column.to = fromCamel\n\ntoPascal.column = { from: toPascal }\ntoPascal.value = { from: createJsonTransform(toPascal) }\nfromPascal.column = { to: fromPascal }\n\nexport const pascal = { ...toPascal }\npascal.column.to = fromPascal\n\ntoKebab.column = { from: toKebab }\ntoKebab.value = { from: createJsonTransform(toKebab) }\nfromKebab.column = { to: fromKebab }\n\nexport const kebab = { ...toKebab }\nkebab.column.to = fromKebab\n","export default class Result extends Array {\n constructor() {\n super()\n Object.defineProperties(this, {\n count: { value: null, writable: true },\n state: { value: null, writable: true },\n command: { value: null, writable: true },\n columns: { value: null, writable: true },\n statement: { value: null, writable: true }\n })\n }\n\n static get [Symbol.species]() {\n return Array\n }\n}\n","export default Queue\n\nfunction Queue(initial = []) {\n let xs = initial.slice()\n let index = 0\n\n return {\n get length() {\n return xs.length - index\n },\n remove: (x) => {\n const index = xs.indexOf(x)\n return index === -1\n ? null\n : (xs.splice(index, 1), x)\n },\n push: (x) => (xs.push(x), x),\n shift: () => {\n const out = xs[index++]\n\n if (index === xs.length) {\n index = 0\n xs = []\n } else {\n xs[index - 1] = undefined\n }\n\n return out\n }\n }\n}\n","const size = 256\nlet buffer = Buffer.allocUnsafe(size)\n\nconst messages = 'BCcDdEFfHPpQSX'.split('').reduce((acc, x) => {\n const v = x.charCodeAt(0)\n acc[x] = () => {\n buffer[0] = v\n b.i = 5\n return b\n }\n return acc\n}, {})\n\nconst b = Object.assign(reset, messages, {\n N: String.fromCharCode(0),\n i: 0,\n inc(x) {\n b.i += x\n return b\n },\n str(x) {\n const length = Buffer.byteLength(x)\n fit(length)\n b.i += buffer.write(x, b.i, length, 'utf8')\n return b\n },\n i16(x) {\n fit(2)\n buffer.writeUInt16BE(x, b.i)\n b.i += 2\n return b\n },\n i32(x, i) {\n if (i || i === 0) {\n buffer.writeUInt32BE(x, i)\n return b\n }\n fit(4)\n buffer.writeUInt32BE(x, b.i)\n b.i += 4\n return b\n },\n z(x) {\n fit(x)\n buffer.fill(0, b.i, b.i + x)\n b.i += x\n return b\n },\n raw(x) {\n buffer = Buffer.concat([buffer.subarray(0, b.i), x])\n b.i = buffer.length\n return b\n },\n end(at = 1) {\n buffer.writeUInt32BE(b.i - at, at)\n const out = buffer.subarray(0, b.i)\n b.i = 0\n buffer = Buffer.allocUnsafe(size)\n return out\n }\n})\n\nexport default b\n\nfunction fit(x) {\n if (buffer.length - b.i < x) {\n const prev = buffer\n , length = prev.length\n\n buffer = Buffer.allocUnsafe(length + (length >> 1) + x)\n prev.copy(buffer)\n }\n}\n\nfunction reset() {\n b.i = 0\n return b\n}\n","import net from 'net'\nimport tls from 'tls'\nimport crypto from 'crypto'\nimport Stream from 'stream'\nimport { performance } from 'perf_hooks'\n\nimport { stringify, handleValue, arrayParser, arraySerializer } from './types.js'\nimport { Errors } from './errors.js'\nimport Result from './result.js'\nimport Queue from './queue.js'\nimport { Query, CLOSE } from './query.js'\nimport b from './bytes.js'\n\nexport default Connection\n\nlet uid = 1\n\nconst Sync = b().S().end()\n , Flush = b().H().end()\n , SSLRequest = b().i32(8).i32(80877103).end(8)\n , ExecuteUnnamed = Buffer.concat([b().E().str(b.N).i32(0).end(), Sync])\n , DescribeUnnamed = b().D().str('S').str(b.N).end()\n , noop = () => { /* noop */ }\n\nconst retryRoutines = new Set([\n 'FetchPreparedStatement',\n 'RevalidateCachedQuery',\n 'transformAssignedExpr'\n])\n\nconst errorFields = {\n 83 : 'severity_local', // S\n 86 : 'severity', // V\n 67 : 'code', // C\n 77 : 'message', // M\n 68 : 'detail', // D\n 72 : 'hint', // H\n 80 : 'position', // P\n 112 : 'internal_position', // p\n 113 : 'internal_query', // q\n 87 : 'where', // W\n 115 : 'schema_name', // s\n 116 : 'table_name', // t\n 99 : 'column_name', // c\n 100 : 'data type_name', // d\n 110 : 'constraint_name', // n\n 70 : 'file', // F\n 76 : 'line', // L\n 82 : 'routine' // R\n}\n\nfunction Connection(options, queues = {}, { onopen = noop, onend = noop, onclose = noop } = {}) {\n const {\n sslnegotiation,\n ssl,\n max,\n user,\n host,\n port,\n database,\n parsers,\n transform,\n onnotice,\n onnotify,\n onparameter,\n max_pipeline,\n keep_alive,\n backoff,\n target_session_attrs\n } = options\n\n const sent = Queue()\n , id = uid++\n , backend = { pid: null, secret: null }\n , idleTimer = timer(end, options.idle_timeout)\n , lifeTimer = timer(end, options.max_lifetime)\n , connectTimer = timer(connectTimedOut, options.connect_timeout)\n\n let socket = null\n , cancelMessage\n , errorResponse = null\n , result = new Result()\n , incoming = Buffer.alloc(0)\n , needsTypes = options.fetch_types\n , backendParameters = {}\n , statements = {}\n , statementId = Math.random().toString(36).slice(2)\n , statementCount = 1\n , closedTime = 0\n , remaining = 0\n , hostIndex = 0\n , retries = 0\n , length = 0\n , delay = 0\n , rows = 0\n , serverSignature = null\n , nextWriteTimer = null\n , terminated = false\n , incomings = null\n , results = null\n , initial = null\n , ending = null\n , stream = null\n , chunk = null\n , ended = null\n , nonce = null\n , query = null\n , final = null\n\n const connection = {\n queue: queues.closed,\n idleTimer,\n connect(query) {\n initial = query\n reconnect()\n },\n terminate,\n execute,\n cancel,\n end,\n count: 0,\n id\n }\n\n queues.closed && queues.closed.push(connection)\n\n return connection\n\n async function createSocket() {\n let x\n try {\n x = options.socket\n ? (await Promise.resolve(options.socket(options)))\n : new net.Socket()\n } catch (e) {\n error(e)\n return\n }\n x.on('error', error)\n x.on('close', closed)\n x.on('drain', drain)\n return x\n }\n\n async function cancel({ pid, secret }, resolve, reject) {\n try {\n cancelMessage = b().i32(16).i32(80877102).i32(pid).i32(secret).end(16)\n await connect()\n socket.once('error', reject)\n socket.once('close', resolve)\n } catch (error) {\n reject(error)\n }\n }\n\n function execute(q) {\n if (terminated)\n return queryError(q, Errors.connection('CONNECTION_DESTROYED', options))\n\n if (stream)\n return queryError(q, Errors.generic('COPY_IN_PROGRESS', 'You cannot execute queries during copy'))\n\n if (q.cancelled)\n return\n\n try {\n q.state = backend\n query\n ? sent.push(q)\n : (query = q, query.active = true)\n\n build(q)\n return write(toBuffer(q))\n && !q.describeFirst\n && !q.cursorFn\n && sent.length < max_pipeline\n && (!q.options.onexecute || q.options.onexecute(connection))\n } catch (error) {\n sent.length === 0 && write(Sync)\n errored(error)\n return true\n }\n }\n\n function toBuffer(q) {\n if (q.parameters.length >= 65534)\n throw Errors.generic('MAX_PARAMETERS_EXCEEDED', 'Max number of parameters (65534) exceeded')\n\n return q.options.simple\n ? b().Q().str(q.statement.string + b.N).end()\n : q.describeFirst\n ? Buffer.concat([describe(q), Flush])\n : q.prepare\n ? q.prepared\n ? prepared(q)\n : Buffer.concat([describe(q), prepared(q)])\n : unnamed(q)\n }\n\n function describe(q) {\n return Buffer.concat([\n Parse(q.statement.string, q.parameters, q.statement.types, q.statement.name),\n Describe('S', q.statement.name)\n ])\n }\n\n function prepared(q) {\n return Buffer.concat([\n Bind(q.parameters, q.statement.types, q.statement.name, q.cursorName),\n q.cursorFn\n ? Execute('', q.cursorRows)\n : ExecuteUnnamed\n ])\n }\n\n function unnamed(q) {\n return Buffer.concat([\n Parse(q.statement.string, q.parameters, q.statement.types),\n DescribeUnnamed,\n prepared(q)\n ])\n }\n\n function build(q) {\n const parameters = []\n , types = []\n\n const string = stringify(q, q.strings[0], q.args[0], parameters, types, options)\n\n !q.tagged && q.args.forEach(x => handleValue(x, parameters, types, options))\n\n q.prepare = options.prepare && ('prepare' in q.options ? q.options.prepare : true)\n q.string = string\n q.signature = q.prepare && types + string\n q.onlyDescribe && (delete statements[q.signature])\n q.parameters = q.parameters || parameters\n q.prepared = q.prepare && q.signature in statements\n q.describeFirst = q.onlyDescribe || (parameters.length && !q.prepared)\n q.statement = q.prepared\n ? statements[q.signature]\n : { string, types, name: q.prepare ? statementId + statementCount++ : '' }\n\n typeof options.debug === 'function' && options.debug(id, string, parameters, types)\n }\n\n function write(x, fn) {\n chunk = chunk ? Buffer.concat([chunk, x]) : Buffer.from(x)\n if (fn || chunk.length >= 1024)\n return nextWrite(fn)\n nextWriteTimer === null && (nextWriteTimer = setImmediate(nextWrite))\n return true\n }\n\n function nextWrite(fn) {\n const x = socket.write(chunk, fn)\n nextWriteTimer !== null && clearImmediate(nextWriteTimer)\n chunk = nextWriteTimer = null\n return x\n }\n\n function connectTimedOut() {\n errored(Errors.connection('CONNECT_TIMEOUT', options, socket))\n socket.destroy()\n }\n\n async function secure() {\n if (sslnegotiation !== 'direct') {\n write(SSLRequest)\n const canSSL = await new Promise(r => socket.once('data', x => r(x[0] === 83))) // S\n\n if (!canSSL && ssl === 'prefer')\n return connected()\n }\n\n const options = {\n socket,\n servername: net.isIP(socket.host) ? undefined : socket.host\n }\n\n if (sslnegotiation === 'direct')\n options.ALPNProtocols = ['postgresql']\n\n if (ssl === 'require' || ssl === 'allow' || ssl === 'prefer')\n options.rejectUnauthorized = false\n else if (typeof ssl === 'object')\n Object.assign(options, ssl)\n\n socket.removeAllListeners()\n socket = tls.connect(options)\n socket.on('secureConnect', connected)\n socket.on('error', error)\n socket.on('close', closed)\n socket.on('drain', drain)\n }\n\n /* c8 ignore next 3 */\n function drain() {\n !query && onopen(connection)\n }\n\n function data(x) {\n if (incomings) {\n incomings.push(x)\n remaining -= x.length\n if (remaining > 0)\n return\n }\n\n incoming = incomings\n ? Buffer.concat(incomings, length - remaining)\n : incoming.length === 0\n ? x\n : Buffer.concat([incoming, x], incoming.length + x.length)\n\n while (incoming.length > 4) {\n length = incoming.readUInt32BE(1)\n if (length >= incoming.length) {\n remaining = length - incoming.length\n incomings = [incoming]\n break\n }\n\n try {\n handle(incoming.subarray(0, length + 1))\n } catch (e) {\n query && (query.cursorFn || query.describeFirst) && write(Sync)\n errored(e)\n }\n incoming = incoming.subarray(length + 1)\n remaining = 0\n incomings = null\n }\n }\n\n async function connect() {\n terminated = false\n backendParameters = {}\n socket || (socket = await createSocket())\n\n if (!socket)\n return\n\n connectTimer.start()\n\n if (options.socket)\n return ssl ? secure() : connected()\n\n socket.on('connect', ssl ? secure : connected)\n\n if (options.path)\n return socket.connect(options.path)\n\n socket.ssl = ssl\n socket.connect(port[hostIndex], host[hostIndex])\n socket.host = host[hostIndex]\n socket.port = port[hostIndex]\n\n hostIndex = (hostIndex + 1) % port.length\n }\n\n function reconnect() {\n setTimeout(connect, closedTime ? Math.max(0, closedTime + delay - performance.now()) : 0)\n }\n\n function connected() {\n try {\n statements = {}\n needsTypes = options.fetch_types\n statementId = Math.random().toString(36).slice(2)\n statementCount = 1\n lifeTimer.start()\n socket.on('data', data)\n keep_alive && socket.setKeepAlive && socket.setKeepAlive(true, 1000 * keep_alive)\n const s = StartupMessage()\n write(s)\n } catch (err) {\n error(err)\n }\n }\n\n function error(err) {\n if (connection.queue === queues.connecting && options.host[retries + 1])\n return\n\n errored(err)\n while (sent.length)\n queryError(sent.shift(), err)\n }\n\n function errored(err) {\n stream && (stream.destroy(err), stream = null)\n query && queryError(query, err)\n initial && (queryError(initial, err), initial = null)\n }\n\n function queryError(query, err) {\n if (query.reserve)\n return query.reject(err)\n\n if (!err || typeof err !== 'object')\n err = new Error(err)\n\n 'query' in err || 'parameters' in err || Object.defineProperties(err, {\n stack: { value: err.stack + query.origin.replace(/.*\\n/, '\\n'), enumerable: options.debug },\n query: { value: query.string, enumerable: options.debug },\n parameters: { value: query.parameters, enumerable: options.debug },\n args: { value: query.args, enumerable: options.debug },\n types: { value: query.statement && query.statement.types, enumerable: options.debug }\n })\n query.reject(err)\n }\n\n function end() {\n return ending || (\n !connection.reserved && onend(connection),\n !connection.reserved && !initial && !query && sent.length === 0\n ? (terminate(), new Promise(r => socket && socket.readyState !== 'closed' ? socket.once('close', r) : r()))\n : ending = new Promise(r => ended = r)\n )\n }\n\n function terminate() {\n terminated = true\n if (stream || query || initial || sent.length)\n error(Errors.connection('CONNECTION_DESTROYED', options))\n\n clearImmediate(nextWriteTimer)\n if (socket) {\n socket.removeListener('data', data)\n socket.removeListener('connect', connected)\n socket.readyState === 'open' && socket.end(b().X().end())\n }\n ended && (ended(), ending = ended = null)\n }\n\n async function closed(hadError) {\n incoming = Buffer.alloc(0)\n remaining = 0\n incomings = null\n clearImmediate(nextWriteTimer)\n socket.removeListener('data', data)\n socket.removeListener('connect', connected)\n idleTimer.cancel()\n lifeTimer.cancel()\n connectTimer.cancel()\n\n socket.removeAllListeners()\n socket = null\n\n if (initial)\n return reconnect()\n\n !hadError && (query || sent.length) && error(Errors.connection('CONNECTION_CLOSED', options, socket))\n closedTime = performance.now()\n hadError && options.shared.retries++\n delay = (typeof backoff === 'function' ? backoff(options.shared.retries) : backoff) * 1000\n onclose(connection, Errors.connection('CONNECTION_CLOSED', options, socket))\n }\n\n /* Handlers */\n function handle(xs, x = xs[0]) {\n (\n x === 68 ? DataRow : // D\n x === 100 ? CopyData : // d\n x === 65 ? NotificationResponse : // A\n x === 83 ? ParameterStatus : // S\n x === 90 ? ReadyForQuery : // Z\n x === 67 ? CommandComplete : // C\n x === 50 ? BindComplete : // 2\n x === 49 ? ParseComplete : // 1\n x === 116 ? ParameterDescription : // t\n x === 84 ? RowDescription : // T\n x === 82 ? Authentication : // R\n x === 110 ? NoData : // n\n x === 75 ? BackendKeyData : // K\n x === 69 ? ErrorResponse : // E\n x === 115 ? PortalSuspended : // s\n x === 51 ? CloseComplete : // 3\n x === 71 ? CopyInResponse : // G\n x === 78 ? NoticeResponse : // N\n x === 72 ? CopyOutResponse : // H\n x === 99 ? CopyDone : // c\n x === 73 ? EmptyQueryResponse : // I\n x === 86 ? FunctionCallResponse : // V\n x === 118 ? NegotiateProtocolVersion : // v\n x === 87 ? CopyBothResponse : // W\n /* c8 ignore next */\n UnknownMessage\n )(xs)\n }\n\n function DataRow(x) {\n let index = 7\n let length\n let column\n let value\n\n const row = query.isRaw ? new Array(query.statement.columns.length) : {}\n for (let i = 0; i < query.statement.columns.length; i++) {\n column = query.statement.columns[i]\n length = x.readInt32BE(index)\n index += 4\n\n value = length === -1\n ? null\n : query.isRaw === true\n ? x.subarray(index, index += length)\n : column.parser === undefined\n ? x.toString('utf8', index, index += length)\n : column.parser.array === true\n ? column.parser(x.toString('utf8', index + 1, index += length))\n : column.parser(x.toString('utf8', index, index += length))\n\n query.isRaw\n ? (row[i] = query.isRaw === true\n ? value\n : transform.value.from ? transform.value.from(value, column) : value)\n : (row[column.name] = transform.value.from ? transform.value.from(value, column) : value)\n }\n\n query.forEachFn\n ? query.forEachFn(transform.row.from ? transform.row.from(row) : row, result)\n : (result[rows++] = transform.row.from ? transform.row.from(row) : row)\n }\n\n function ParameterStatus(x) {\n const [k, v] = x.toString('utf8', 5, x.length - 1).split(b.N)\n backendParameters[k] = v\n if (options.parameters[k] !== v) {\n options.parameters[k] = v\n onparameter && onparameter(k, v)\n }\n }\n\n function ReadyForQuery(x) {\n if (query) {\n if (errorResponse) {\n query.retried\n ? errored(query.retried)\n : query.prepared && retryRoutines.has(errorResponse.routine)\n ? retry(query, errorResponse)\n : errored(errorResponse)\n } else {\n query.resolve(results || result)\n }\n } else if (errorResponse) {\n errored(errorResponse)\n }\n\n query = results = errorResponse = null\n result = new Result()\n connectTimer.cancel()\n\n if (initial) {\n if (target_session_attrs) {\n if (!backendParameters.in_hot_standby || !backendParameters.default_transaction_read_only)\n return fetchState()\n else if (tryNext(target_session_attrs, backendParameters))\n return terminate()\n }\n\n if (needsTypes) {\n initial.reserve && (initial = null)\n return fetchArrayTypes()\n }\n\n initial && !initial.reserve && execute(initial)\n options.shared.retries = retries = 0\n initial = null\n return\n }\n\n while (sent.length && (query = sent.shift()) && (query.active = true, query.cancelled))\n Connection(options).cancel(query.state, query.cancelled.resolve, query.cancelled.reject)\n\n if (query)\n return // Consider opening if able and sent.length < 50\n\n connection.reserved\n ? !connection.reserved.release && x[5] === 73 // I\n ? ending\n ? terminate()\n : (connection.reserved = null, onopen(connection))\n : connection.reserved()\n : ending\n ? terminate()\n : onopen(connection)\n }\n\n function CommandComplete(x) {\n rows = 0\n\n for (let i = x.length - 1; i > 0; i--) {\n if (x[i] === 32 && x[i + 1] < 58 && result.count === null)\n result.count = +x.toString('utf8', i + 1, x.length - 1)\n if (x[i - 1] >= 65) {\n result.command = x.toString('utf8', 5, i)\n result.state = backend\n break\n }\n }\n\n final && (final(), final = null)\n\n if (result.command === 'BEGIN' && max !== 1 && !connection.reserved)\n return errored(Errors.generic('UNSAFE_TRANSACTION', 'Only use sql.begin, sql.reserved or max: 1'))\n\n if (query.options.simple)\n return BindComplete()\n\n if (query.cursorFn) {\n result.count && query.cursorFn(result)\n write(Sync)\n }\n }\n\n function ParseComplete() {\n query.parsing = false\n }\n\n function BindComplete() {\n !result.statement && (result.statement = query.statement)\n result.columns = query.statement.columns\n }\n\n function ParameterDescription(x) {\n const length = x.readUInt16BE(5)\n\n for (let i = 0; i < length; ++i)\n !query.statement.types[i] && (query.statement.types[i] = x.readUInt32BE(7 + i * 4))\n\n query.prepare && (statements[query.signature] = query.statement)\n query.describeFirst && !query.onlyDescribe && (write(prepared(query)), query.describeFirst = false)\n }\n\n function RowDescription(x) {\n if (result.command) {\n results = results || [result]\n results.push(result = new Result())\n result.count = null\n query.statement.columns = null\n }\n\n const length = x.readUInt16BE(5)\n let index = 7\n let start\n\n query.statement.columns = Array(length)\n\n for (let i = 0; i < length; ++i) {\n start = index\n while (x[index++] !== 0);\n const table = x.readUInt32BE(index)\n const number = x.readUInt16BE(index + 4)\n const type = x.readUInt32BE(index + 6)\n query.statement.columns[i] = {\n name: transform.column.from\n ? transform.column.from(x.toString('utf8', start, index - 1))\n : x.toString('utf8', start, index - 1),\n parser: parsers[type],\n table,\n number,\n type\n }\n index += 18\n }\n\n result.statement = query.statement\n if (query.onlyDescribe)\n return (query.resolve(query.statement), write(Sync))\n }\n\n async function Authentication(x, type = x.readUInt32BE(5)) {\n (\n type === 3 ? AuthenticationCleartextPassword :\n type === 5 ? AuthenticationMD5Password :\n type === 10 ? SASL :\n type === 11 ? SASLContinue :\n type === 12 ? SASLFinal :\n type !== 0 ? UnknownAuth :\n noop\n )(x, type)\n }\n\n /* c8 ignore next 5 */\n async function AuthenticationCleartextPassword() {\n const payload = await Pass()\n write(\n b().p().str(payload).z(1).end()\n )\n }\n\n async function AuthenticationMD5Password(x) {\n const payload = 'md5' + (\n await md5(\n Buffer.concat([\n Buffer.from(await md5((await Pass()) + user)),\n x.subarray(9)\n ])\n )\n )\n write(\n b().p().str(payload).z(1).end()\n )\n }\n\n async function SASL() {\n nonce = (await crypto.randomBytes(18)).toString('base64')\n b().p().str('SCRAM-SHA-256' + b.N)\n const i = b.i\n write(b.inc(4).str('n,,n=*,r=' + nonce).i32(b.i - i - 4, i).end())\n }\n\n async function SASLContinue(x) {\n const res = x.toString('utf8', 9).split(',').reduce((acc, x) => (acc[x[0]] = x.slice(2), acc), {})\n\n const saltedPassword = await crypto.pbkdf2Sync(\n await Pass(),\n Buffer.from(res.s, 'base64'),\n parseInt(res.i), 32,\n 'sha256'\n )\n\n const clientKey = await hmac(saltedPassword, 'Client Key')\n\n const auth = 'n=*,r=' + nonce + ','\n + 'r=' + res.r + ',s=' + res.s + ',i=' + res.i\n + ',c=biws,r=' + res.r\n\n serverSignature = (await hmac(await hmac(saltedPassword, 'Server Key'), auth)).toString('base64')\n\n const payload = 'c=biws,r=' + res.r + ',p=' + xor(\n clientKey, Buffer.from(await hmac(await sha256(clientKey), auth))\n ).toString('base64')\n\n write(\n b().p().str(payload).end()\n )\n }\n\n function SASLFinal(x) {\n if (x.toString('utf8', 9).split(b.N, 1)[0].slice(2) === serverSignature)\n return\n /* c8 ignore next 5 */\n errored(Errors.generic('SASL_SIGNATURE_MISMATCH', 'The server did not return the correct signature'))\n socket.destroy()\n }\n\n function Pass() {\n return Promise.resolve(typeof options.pass === 'function'\n ? options.pass()\n : options.pass\n )\n }\n\n function NoData() {\n result.statement = query.statement\n result.statement.columns = []\n if (query.onlyDescribe)\n return (query.resolve(query.statement), write(Sync))\n }\n\n function BackendKeyData(x) {\n backend.pid = x.readUInt32BE(5)\n backend.secret = x.readUInt32BE(9)\n }\n\n async function fetchArrayTypes() {\n needsTypes = false\n const types = await new Query([`\n select b.oid, b.typarray\n from pg_catalog.pg_type a\n left join pg_catalog.pg_type b on b.oid = a.typelem\n where a.typcategory = 'A'\n group by b.oid, b.typarray\n order by b.oid\n `], [], execute)\n types.forEach(({ oid, typarray }) => addArrayType(oid, typarray))\n }\n\n function addArrayType(oid, typarray) {\n if (!!options.parsers[typarray] && !!options.serializers[typarray]) return\n const parser = options.parsers[oid]\n options.shared.typeArrayMap[oid] = typarray\n options.parsers[typarray] = (xs) => arrayParser(xs, parser, typarray)\n options.parsers[typarray].array = true\n options.serializers[typarray] = (xs) => arraySerializer(xs, options.serializers[oid], options, typarray)\n }\n\n function tryNext(x, xs) {\n return (\n (x === 'read-write' && xs.default_transaction_read_only === 'on') ||\n (x === 'read-only' && xs.default_transaction_read_only === 'off') ||\n (x === 'primary' && xs.in_hot_standby === 'on') ||\n (x === 'standby' && xs.in_hot_standby === 'off') ||\n (x === 'prefer-standby' && xs.in_hot_standby === 'off' && options.host[retries])\n )\n }\n\n function fetchState() {\n const query = new Query([`\n show transaction_read_only;\n select pg_catalog.pg_is_in_recovery()\n `], [], execute, null, { simple: true })\n query.resolve = ([[a], [b]]) => {\n backendParameters.default_transaction_read_only = a.transaction_read_only\n backendParameters.in_hot_standby = b.pg_is_in_recovery ? 'on' : 'off'\n }\n query.execute()\n }\n\n function ErrorResponse(x) {\n if (query) {\n (query.cursorFn || query.describeFirst) && write(Sync)\n errorResponse = Errors.postgres(parseError(x))\n } else {\n errored(Errors.postgres(parseError(x)))\n }\n }\n\n function retry(q, error) {\n delete statements[q.signature]\n q.retried = error\n execute(q)\n }\n\n function NotificationResponse(x) {\n if (!onnotify)\n return\n\n let index = 9\n while (x[index++] !== 0);\n onnotify(\n x.toString('utf8', 9, index - 1),\n x.toString('utf8', index, x.length - 1)\n )\n }\n\n async function PortalSuspended() {\n try {\n const x = await Promise.resolve(query.cursorFn(result))\n rows = 0\n x === CLOSE\n ? write(Close(query.portal))\n : (result = new Result(), write(Execute('', query.cursorRows)))\n } catch (err) {\n write(Sync)\n query.reject(err)\n }\n }\n\n function CloseComplete() {\n result.count && query.cursorFn(result)\n query.resolve(result)\n }\n\n function CopyInResponse() {\n stream = new Stream.Writable({\n autoDestroy: true,\n write(chunk, encoding, callback) {\n socket.write(b().d().raw(chunk).end(), callback)\n },\n destroy(error, callback) {\n callback(error)\n socket.write(b().f().str(error + b.N).end())\n stream = null\n },\n final(callback) {\n socket.write(b().c().end())\n final = callback\n stream = null\n }\n })\n query.resolve(stream)\n }\n\n function CopyOutResponse() {\n stream = new Stream.Readable({\n read() { socket.resume() }\n })\n query.resolve(stream)\n }\n\n /* c8 ignore next 3 */\n function CopyBothResponse() {\n stream = new Stream.Duplex({\n autoDestroy: true,\n read() { socket.resume() },\n /* c8 ignore next 11 */\n write(chunk, encoding, callback) {\n socket.write(b().d().raw(chunk).end(), callback)\n },\n destroy(error, callback) {\n callback(error)\n socket.write(b().f().str(error + b.N).end())\n stream = null\n },\n final(callback) {\n socket.write(b().c().end())\n final = callback\n }\n })\n query.resolve(stream)\n }\n\n function CopyData(x) {\n stream && (stream.push(x.subarray(5)) || socket.pause())\n }\n\n function CopyDone() {\n stream && stream.push(null)\n stream = null\n }\n\n function NoticeResponse(x) {\n onnotice\n ? onnotice(parseError(x))\n : console.log(parseError(x)) // eslint-disable-line\n\n }\n\n /* c8 ignore next 3 */\n function EmptyQueryResponse() {\n /* noop */\n }\n\n /* c8 ignore next 3 */\n function FunctionCallResponse() {\n errored(Errors.notSupported('FunctionCallResponse'))\n }\n\n /* c8 ignore next 3 */\n function NegotiateProtocolVersion() {\n errored(Errors.notSupported('NegotiateProtocolVersion'))\n }\n\n /* c8 ignore next 3 */\n function UnknownMessage(x) {\n console.error('Postgres.js : Unknown Message:', x[0]) // eslint-disable-line\n }\n\n /* c8 ignore next 3 */\n function UnknownAuth(x, type) {\n console.error('Postgres.js : Unknown Auth:', type) // eslint-disable-line\n }\n\n /* Messages */\n function Bind(parameters, types, statement = '', portal = '') {\n let prev\n , type\n\n b().B().str(portal + b.N).str(statement + b.N).i16(0).i16(parameters.length)\n\n parameters.forEach((x, i) => {\n if (x === null)\n return b.i32(0xFFFFFFFF)\n\n type = types[i]\n parameters[i] = x = type in options.serializers\n ? options.serializers[type](x)\n : '' + x\n\n prev = b.i\n b.inc(4).str(x).i32(b.i - prev - 4, prev)\n })\n\n b.i16(0)\n\n return b.end()\n }\n\n function Parse(str, parameters, types, name = '') {\n b().P().str(name + b.N).str(str + b.N).i16(parameters.length)\n parameters.forEach((x, i) => b.i32(types[i] || 0))\n return b.end()\n }\n\n function Describe(x, name = '') {\n return b().D().str(x).str(name + b.N).end()\n }\n\n function Execute(portal = '', rows = 0) {\n return Buffer.concat([\n b().E().str(portal + b.N).i32(rows).end(),\n Flush\n ])\n }\n\n function Close(portal = '') {\n return Buffer.concat([\n b().C().str('P').str(portal + b.N).end(),\n b().S().end()\n ])\n }\n\n function StartupMessage() {\n return cancelMessage || b().inc(4).i16(3).z(2).str(\n Object.entries(Object.assign({\n user,\n database,\n client_encoding: 'UTF8'\n },\n options.connection\n )).filter(([, v]) => v).map(([k, v]) => k + b.N + v).join(b.N)\n ).z(2).end(0)\n }\n\n}\n\nfunction parseError(x) {\n const error = {}\n let start = 5\n for (let i = 5; i < x.length - 1; i++) {\n if (x[i] === 0) {\n error[errorFields[x[start]]] = x.toString('utf8', start + 1, i)\n start = i + 1\n }\n }\n return error\n}\n\nfunction md5(x) {\n return crypto.createHash('md5').update(x).digest('hex')\n}\n\nfunction hmac(key, x) {\n return crypto.createHmac('sha256', key).update(x).digest()\n}\n\nfunction sha256(x) {\n return crypto.createHash('sha256').update(x).digest()\n}\n\nfunction xor(a, b) {\n const length = Math.max(a.length, b.length)\n const buffer = Buffer.allocUnsafe(length)\n for (let i = 0; i < length; i++)\n buffer[i] = a[i] ^ b[i]\n return buffer\n}\n\nfunction timer(fn, seconds) {\n seconds = typeof seconds === 'function' ? seconds() : seconds\n if (!seconds)\n return { cancel: noop, start: noop }\n\n let timer\n return {\n cancel() {\n timer && (clearTimeout(timer), timer = null)\n },\n start() {\n timer && clearTimeout(timer)\n timer = setTimeout(done, seconds * 1000, arguments)\n }\n }\n\n function done(args) {\n fn.apply(null, args)\n timer = null\n }\n}\n","const noop = () => { /* noop */ }\n\nexport default function Subscribe(postgres, options) {\n const subscribers = new Map()\n , slot = 'postgresjs_' + Math.random().toString(36).slice(2)\n , state = {}\n\n let connection\n , stream\n , ended = false\n\n const sql = subscribe.sql = postgres({\n ...options,\n transform: { column: {}, value: {}, row: {} },\n max: 1,\n fetch_types: false,\n idle_timeout: null,\n max_lifetime: null,\n connection: {\n ...options.connection,\n replication: 'database'\n },\n onclose: async function() {\n if (ended)\n return\n stream = null\n state.pid = state.secret = undefined\n connected(await init(sql, slot, options.publications))\n subscribers.forEach(event => event.forEach(({ onsubscribe }) => onsubscribe()))\n },\n no_subscribe: true\n })\n\n const end = sql.end\n , close = sql.close\n\n sql.end = async() => {\n ended = true\n stream && (await new Promise(r => (stream.once('close', r), stream.end())))\n return end()\n }\n\n sql.close = async() => {\n stream && (await new Promise(r => (stream.once('close', r), stream.end())))\n return close()\n }\n\n return subscribe\n\n async function subscribe(event, fn, onsubscribe = noop, onerror = noop) {\n event = parseEvent(event)\n\n if (!connection)\n connection = init(sql, slot, options.publications)\n\n const subscriber = { fn, onsubscribe }\n const fns = subscribers.has(event)\n ? subscribers.get(event).add(subscriber)\n : subscribers.set(event, new Set([subscriber])).get(event)\n\n const unsubscribe = () => {\n fns.delete(subscriber)\n fns.size === 0 && subscribers.delete(event)\n }\n\n return connection.then(x => {\n connected(x)\n onsubscribe()\n stream && stream.on('error', onerror)\n return { unsubscribe, state, sql }\n })\n }\n\n function connected(x) {\n stream = x.stream\n state.pid = x.state.pid\n state.secret = x.state.secret\n }\n\n async function init(sql, slot, publications) {\n if (!publications)\n throw new Error('Missing publication names')\n\n const xs = await sql.unsafe(\n `CREATE_REPLICATION_SLOT ${ slot } TEMPORARY LOGICAL pgoutput NOEXPORT_SNAPSHOT`\n )\n\n const [x] = xs\n\n const stream = await sql.unsafe(\n `START_REPLICATION SLOT ${ slot } LOGICAL ${\n x.consistent_point\n } (proto_version '1', publication_names '${ publications }')`\n ).writable()\n\n const state = {\n lsn: Buffer.concat(x.consistent_point.split('/').map(x => Buffer.from(('00000000' + x).slice(-8), 'hex')))\n }\n\n stream.on('data', data)\n stream.on('error', error)\n stream.on('close', sql.close)\n\n return { stream, state: xs.state }\n\n function error(e) {\n console.error('Unexpected error during logical streaming - reconnecting', e) // eslint-disable-line\n }\n\n function data(x) {\n if (x[0] === 0x77) {\n parse(x.subarray(25), state, sql.options.parsers, handle, options.transform)\n } else if (x[0] === 0x6b && x[17]) {\n state.lsn = x.subarray(1, 9)\n pong()\n }\n }\n\n function handle(a, b) {\n const path = b.relation.schema + '.' + b.relation.table\n call('*', a, b)\n call('*:' + path, a, b)\n b.relation.keys.length && call('*:' + path + '=' + b.relation.keys.map(x => a[x.name]), a, b)\n call(b.command, a, b)\n call(b.command + ':' + path, a, b)\n b.relation.keys.length && call(b.command + ':' + path + '=' + b.relation.keys.map(x => a[x.name]), a, b)\n }\n\n function pong() {\n const x = Buffer.alloc(34)\n x[0] = 'r'.charCodeAt(0)\n x.fill(state.lsn, 1)\n x.writeBigInt64BE(BigInt(Date.now() - Date.UTC(2000, 0, 1)) * BigInt(1000), 25)\n stream.write(x)\n }\n }\n\n function call(x, a, b) {\n subscribers.has(x) && subscribers.get(x).forEach(({ fn }) => fn(a, b, x))\n }\n}\n\nfunction Time(x) {\n return new Date(Date.UTC(2000, 0, 1) + Number(x / BigInt(1000)))\n}\n\nfunction parse(x, state, parsers, handle, transform) {\n const char = (acc, [k, v]) => (acc[k.charCodeAt(0)] = v, acc)\n\n Object.entries({\n R: x => { // Relation\n let i = 1\n const r = state[x.readUInt32BE(i)] = {\n schema: x.toString('utf8', i += 4, i = x.indexOf(0, i)) || 'pg_catalog',\n table: x.toString('utf8', i + 1, i = x.indexOf(0, i + 1)),\n columns: Array(x.readUInt16BE(i += 2)),\n keys: []\n }\n i += 2\n\n let columnIndex = 0\n , column\n\n while (i < x.length) {\n column = r.columns[columnIndex++] = {\n key: x[i++],\n name: transform.column.from\n ? transform.column.from(x.toString('utf8', i, i = x.indexOf(0, i)))\n : x.toString('utf8', i, i = x.indexOf(0, i)),\n type: x.readUInt32BE(i += 1),\n parser: parsers[x.readUInt32BE(i)],\n atttypmod: x.readUInt32BE(i += 4)\n }\n\n column.key && r.keys.push(column)\n i += 4\n }\n },\n Y: () => { /* noop */ }, // Type\n O: () => { /* noop */ }, // Origin\n B: x => { // Begin\n state.date = Time(x.readBigInt64BE(9))\n state.lsn = x.subarray(1, 9)\n },\n I: x => { // Insert\n let i = 1\n const relation = state[x.readUInt32BE(i)]\n const { row } = tuples(x, relation.columns, i += 7, transform)\n\n handle(row, {\n command: 'insert',\n relation\n })\n },\n D: x => { // Delete\n let i = 1\n const relation = state[x.readUInt32BE(i)]\n i += 4\n const key = x[i] === 75\n handle(key || x[i] === 79\n ? tuples(x, relation.columns, i += 3, transform).row\n : null\n , {\n command: 'delete',\n relation,\n key\n })\n },\n U: x => { // Update\n let i = 1\n const relation = state[x.readUInt32BE(i)]\n i += 4\n const key = x[i] === 75\n const xs = key || x[i] === 79\n ? tuples(x, relation.columns, i += 3, transform)\n : null\n\n xs && (i = xs.i)\n\n const { row } = tuples(x, relation.columns, i + 3, transform)\n\n handle(row, {\n command: 'update',\n relation,\n key,\n old: xs && xs.row\n })\n },\n T: () => { /* noop */ }, // Truncate,\n C: () => { /* noop */ } // Commit\n }).reduce(char, {})[x[0]](x)\n}\n\nfunction tuples(x, columns, xi, transform) {\n let type\n , column\n , value\n\n const row = transform.raw ? new Array(columns.length) : {}\n for (let i = 0; i < columns.length; i++) {\n type = x[xi++]\n column = columns[i]\n value = type === 110 // n\n ? null\n : type === 117 // u\n ? undefined\n : column.parser === undefined\n ? x.toString('utf8', xi + 4, xi += 4 + x.readUInt32BE(xi))\n : column.parser.array === true\n ? column.parser(x.toString('utf8', xi + 5, xi += 4 + x.readUInt32BE(xi)))\n : column.parser(x.toString('utf8', xi + 4, xi += 4 + x.readUInt32BE(xi)))\n\n transform.raw\n ? (row[i] = transform.raw === true\n ? value\n : transform.value.from ? transform.value.from(value, column) : value)\n : (row[column.name] = transform.value.from\n ? transform.value.from(value, column)\n : value\n )\n }\n\n return { i: xi, row: transform.row.from ? transform.row.from(row) : row }\n}\n\nfunction parseEvent(x) {\n const xs = x.match(/^(\\*|insert|update|delete)?:?([^.]+?\\.?[^=]+)?=?(.+)?/i) || []\n\n if (!xs)\n throw new Error('Malformed subscribe pattern: ' + x)\n\n const [, command, path, key] = xs\n\n return (command || '*')\n + (path ? ':' + (path.indexOf('.') === -1 ? 'public.' + path : path) : '')\n + (key ? '=' + key : '')\n}\n","import Stream from 'stream'\n\nexport default function largeObject(sql, oid, mode = 0x00020000 | 0x00040000) {\n return new Promise(async(resolve, reject) => {\n await sql.begin(async sql => {\n let finish\n !oid && ([{ oid }] = await sql`select lo_creat(-1) as oid`)\n const [{ fd }] = await sql`select lo_open(${ oid }, ${ mode }) as fd`\n\n const lo = {\n writable,\n readable,\n close : () => sql`select lo_close(${ fd })`.then(finish),\n tell : () => sql`select lo_tell64(${ fd })`,\n read : (x) => sql`select loread(${ fd }, ${ x }) as data`,\n write : (x) => sql`select lowrite(${ fd }, ${ x })`,\n truncate : (x) => sql`select lo_truncate64(${ fd }, ${ x })`,\n seek : (x, whence = 0) => sql`select lo_lseek64(${ fd }, ${ x }, ${ whence })`,\n size : () => sql`\n select\n lo_lseek64(${ fd }, location, 0) as position,\n seek.size\n from (\n select\n lo_lseek64($1, 0, 2) as size,\n tell.location\n from (select lo_tell64($1) as location) tell\n ) seek\n `\n }\n\n resolve(lo)\n\n return new Promise(async r => finish = r)\n\n async function readable({\n highWaterMark = 2048 * 8,\n start = 0,\n end = Infinity\n } = {}) {\n let max = end - start\n start && await lo.seek(start)\n return new Stream.Readable({\n highWaterMark,\n async read(size) {\n const l = size > max ? size - max : size\n max -= size\n const [{ data }] = await lo.read(l)\n this.push(data)\n if (data.length < size)\n this.push(null)\n }\n })\n }\n\n async function writable({\n highWaterMark = 2048 * 8,\n start = 0\n } = {}) {\n start && await lo.seek(start)\n return new Stream.Writable({\n highWaterMark,\n write(chunk, encoding, callback) {\n lo.write(chunk).then(() => callback(), callback)\n }\n })\n }\n }).catch(reject)\n })\n}\n","import os from 'os'\nimport fs from 'fs'\n\nimport {\n mergeUserTypes,\n inferType,\n Parameter,\n Identifier,\n Builder,\n toPascal,\n pascal,\n toCamel,\n camel,\n toKebab,\n kebab,\n fromPascal,\n fromCamel,\n fromKebab\n} from './types.js'\n\nimport Connection from './connection.js'\nimport { Query, CLOSE } from './query.js'\nimport Queue from './queue.js'\nimport { Errors, PostgresError } from './errors.js'\nimport Subscribe from './subscribe.js'\nimport largeObject from './large.js'\n\nObject.assign(Postgres, {\n PostgresError,\n toPascal,\n pascal,\n toCamel,\n camel,\n toKebab,\n kebab,\n fromPascal,\n fromCamel,\n fromKebab,\n BigInt: {\n to: 20,\n from: [20],\n parse: x => BigInt(x), // eslint-disable-line\n serialize: x => x.toString()\n }\n})\n\nexport default Postgres\n\nfunction Postgres(a, b) {\n const options = parseOptions(a, b)\n , subscribe = options.no_subscribe || Subscribe(Postgres, { ...options })\n\n let ending = false\n\n const queries = Queue()\n , connecting = Queue()\n , reserved = Queue()\n , closed = Queue()\n , ended = Queue()\n , open = Queue()\n , busy = Queue()\n , full = Queue()\n , queues = { connecting, reserved, closed, ended, open, busy, full }\n\n const connections = [...Array(options.max)].map(() => Connection(options, queues, { onopen, onend, onclose }))\n\n const sql = Sql(handler)\n\n Object.assign(sql, {\n get parameters() { return options.parameters },\n largeObject: largeObject.bind(null, sql),\n subscribe,\n CLOSE,\n END: CLOSE,\n PostgresError,\n options,\n reserve,\n listen,\n begin,\n close,\n end\n })\n\n return sql\n\n function Sql(handler) {\n handler.debug = options.debug\n\n Object.entries(options.types).reduce((acc, [name, type]) => {\n acc[name] = (x) => new Parameter(x, type.to)\n return acc\n }, typed)\n\n Object.assign(sql, {\n types: typed,\n typed,\n unsafe,\n notify,\n array,\n json,\n file\n })\n\n return sql\n\n function typed(value, type) {\n return new Parameter(value, type)\n }\n\n function sql(strings, ...args) {\n const query = strings && Array.isArray(strings.raw)\n ? new Query(strings, args, handler, cancel)\n : typeof strings === 'string' && !args.length\n ? new Identifier(options.transform.column.to ? options.transform.column.to(strings) : strings)\n : new Builder(strings, args)\n return query\n }\n\n function unsafe(string, args = [], options = {}) {\n arguments.length === 2 && !Array.isArray(args) && (options = args, args = [])\n const query = new Query([string], args, handler, cancel, {\n prepare: false,\n ...options,\n simple: 'simple' in options ? options.simple : args.length === 0\n })\n return query\n }\n\n function file(path, args = [], options = {}) {\n arguments.length === 2 && !Array.isArray(args) && (options = args, args = [])\n const query = new Query([], args, (query) => {\n fs.readFile(path, 'utf8', (err, string) => {\n if (err)\n return query.reject(err)\n\n query.strings = [string]\n handler(query)\n })\n }, cancel, {\n ...options,\n simple: 'simple' in options ? options.simple : args.length === 0\n })\n return query\n }\n }\n\n async function listen(name, fn, onlisten) {\n const listener = { fn, onlisten }\n\n const sql = listen.sql || (listen.sql = Postgres({\n ...options,\n max: 1,\n idle_timeout: null,\n max_lifetime: null,\n fetch_types: false,\n onclose() {\n Object.entries(listen.channels).forEach(([name, { listeners }]) => {\n delete listen.channels[name]\n Promise.all(listeners.map(l => listen(name, l.fn, l.onlisten).catch(() => { /* noop */ })))\n })\n },\n onnotify(c, x) {\n c in listen.channels && listen.channels[c].listeners.forEach(l => l.fn(x))\n }\n }))\n\n const channels = listen.channels || (listen.channels = {})\n , exists = name in channels\n\n if (exists) {\n channels[name].listeners.push(listener)\n const result = await channels[name].result\n listener.onlisten && listener.onlisten()\n return { state: result.state, unlisten }\n }\n\n channels[name] = { result: sql`listen ${\n sql.unsafe('\"' + name.replace(/\"/g, '\"\"') + '\"')\n }`, listeners: [listener] }\n const result = await channels[name].result\n listener.onlisten && listener.onlisten()\n return { state: result.state, unlisten }\n\n async function unlisten() {\n if (name in channels === false)\n return\n\n channels[name].listeners = channels[name].listeners.filter(x => x !== listener)\n if (channels[name].listeners.length)\n return\n\n delete channels[name]\n return sql`unlisten ${\n sql.unsafe('\"' + name.replace(/\"/g, '\"\"') + '\"')\n }`\n }\n }\n\n async function notify(channel, payload) {\n return await sql`select pg_notify(${ channel }, ${ '' + payload })`\n }\n\n async function reserve() {\n const queue = Queue()\n const c = open.length\n ? open.shift()\n : await new Promise((resolve, reject) => {\n const query = { reserve: resolve, reject }\n queries.push(query)\n closed.length && connect(closed.shift(), query)\n })\n\n move(c, reserved)\n c.reserved = () => queue.length\n ? c.execute(queue.shift())\n : move(c, reserved)\n c.reserved.release = true\n\n const sql = Sql(handler)\n sql.release = () => {\n c.reserved = null\n onopen(c)\n }\n\n return sql\n\n function handler(q) {\n c.queue === full\n ? queue.push(q)\n : c.execute(q) || move(c, full)\n }\n }\n\n async function begin(options, fn) {\n !fn && (fn = options, options = '')\n const queries = Queue()\n let savepoints = 0\n , connection\n , prepare = null\n\n try {\n await sql.unsafe('begin ' + options.replace(/[^a-z ]/ig, ''), [], { onexecute }).execute()\n return await Promise.race([\n scope(connection, fn),\n new Promise((_, reject) => connection.onclose = reject)\n ])\n } catch (error) {\n throw error\n }\n\n async function scope(c, fn, name) {\n const sql = Sql(handler)\n sql.savepoint = savepoint\n sql.prepare = x => prepare = x.replace(/[^a-z0-9$-_. ]/gi)\n let uncaughtError\n , result\n\n name && await sql`savepoint ${ sql(name) }`\n try {\n result = await new Promise((resolve, reject) => {\n const x = fn(sql)\n Promise.resolve(Array.isArray(x) ? Promise.all(x) : x).then(resolve, reject)\n })\n\n if (uncaughtError)\n throw uncaughtError\n } catch (e) {\n await (name\n ? sql`rollback to ${ sql(name) }`\n : sql`rollback`\n )\n throw e instanceof PostgresError && e.code === '25P02' && uncaughtError || e\n }\n\n if (!name) {\n prepare\n ? await sql`prepare transaction '${ sql.unsafe(prepare) }'`\n : await sql`commit`\n }\n\n return result\n\n function savepoint(name, fn) {\n if (name && Array.isArray(name.raw))\n return savepoint(sql => sql.apply(sql, arguments))\n\n arguments.length === 1 && (fn = name, name = null)\n return scope(c, fn, 's' + savepoints++ + (name ? '_' + name : ''))\n }\n\n function handler(q) {\n q.catch(e => uncaughtError || (uncaughtError = e))\n c.queue === full\n ? queries.push(q)\n : c.execute(q) || move(c, full)\n }\n }\n\n function onexecute(c) {\n connection = c\n move(c, reserved)\n c.reserved = () => queries.length\n ? c.execute(queries.shift())\n : move(c, reserved)\n }\n }\n\n function move(c, queue) {\n c.queue.remove(c)\n queue.push(c)\n c.queue = queue\n queue === open\n ? c.idleTimer.start()\n : c.idleTimer.cancel()\n return c\n }\n\n function json(x) {\n return new Parameter(x, 3802)\n }\n\n function array(x, type) {\n if (!Array.isArray(x))\n return array(Array.from(arguments))\n\n return new Parameter(x, type || (x.length ? inferType(x) || 25 : 0), options.shared.typeArrayMap)\n }\n\n function handler(query) {\n if (ending)\n return query.reject(Errors.connection('CONNECTION_ENDED', options, options))\n\n if (open.length)\n return go(open.shift(), query)\n\n if (closed.length)\n return connect(closed.shift(), query)\n\n busy.length\n ? go(busy.shift(), query)\n : queries.push(query)\n }\n\n function go(c, query) {\n return c.execute(query)\n ? move(c, busy)\n : move(c, full)\n }\n\n function cancel(query) {\n return new Promise((resolve, reject) => {\n query.state\n ? query.active\n ? Connection(options).cancel(query.state, resolve, reject)\n : query.cancelled = { resolve, reject }\n : (\n queries.remove(query),\n query.cancelled = true,\n query.reject(Errors.generic('57014', 'canceling statement due to user request')),\n resolve()\n )\n })\n }\n\n async function end({ timeout = null } = {}) {\n if (ending)\n return ending\n\n await 1\n let timer\n return ending = Promise.race([\n new Promise(r => timeout !== null && (timer = setTimeout(destroy, timeout * 1000, r))),\n Promise.all(connections.map(c => c.end()).concat(\n listen.sql ? listen.sql.end({ timeout: 0 }) : [],\n subscribe.sql ? subscribe.sql.end({ timeout: 0 }) : []\n ))\n ]).then(() => clearTimeout(timer))\n }\n\n async function close() {\n await Promise.all(connections.map(c => c.end()))\n }\n\n async function destroy(resolve) {\n await Promise.all(connections.map(c => c.terminate()))\n while (queries.length)\n queries.shift().reject(Errors.connection('CONNECTION_DESTROYED', options))\n resolve()\n }\n\n function connect(c, query) {\n move(c, connecting)\n c.connect(query)\n return c\n }\n\n function onend(c) {\n move(c, ended)\n }\n\n function onopen(c) {\n if (queries.length === 0)\n return move(c, open)\n\n let max = Math.ceil(queries.length / (connecting.length + 1))\n , ready = true\n\n while (ready && queries.length && max-- > 0) {\n const query = queries.shift()\n if (query.reserve)\n return query.reserve(c)\n\n ready = c.execute(query)\n }\n\n ready\n ? move(c, busy)\n : move(c, full)\n }\n\n function onclose(c, e) {\n move(c, closed)\n c.reserved = null\n c.onclose && (c.onclose(e), c.onclose = null)\n options.onclose && options.onclose(c.id)\n queries.length && connect(c, queries.shift())\n }\n}\n\nfunction parseOptions(a, b) {\n if (a && a.shared)\n return a\n\n const env = process.env // eslint-disable-line\n , o = (!a || typeof a === 'string' ? b : a) || {}\n , { url, multihost } = parseUrl(a)\n , query = [...url.searchParams].reduce((a, [b, c]) => (a[b] = c, a), {})\n , host = o.hostname || o.host || multihost || url.hostname || env.PGHOST || 'localhost'\n , port = o.port || url.port || env.PGPORT || 5432\n , user = o.user || o.username || url.username || env.PGUSERNAME || env.PGUSER || osUsername()\n\n o.no_prepare && (o.prepare = false)\n query.sslmode && (query.ssl = query.sslmode, delete query.sslmode)\n 'timeout' in o && (console.log('The timeout option is deprecated, use idle_timeout instead'), o.idle_timeout = o.timeout) // eslint-disable-line\n query.sslrootcert === 'system' && (query.ssl = 'verify-full')\n\n const ints = ['idle_timeout', 'connect_timeout', 'max_lifetime', 'max_pipeline', 'backoff', 'keep_alive']\n const defaults = {\n max : globalThis.Cloudflare ? 3 : 10,\n ssl : false,\n sslnegotiation : null,\n idle_timeout : null,\n connect_timeout : 30,\n max_lifetime : max_lifetime,\n max_pipeline : 100,\n backoff : backoff,\n keep_alive : 60,\n prepare : true,\n debug : false,\n fetch_types : true,\n publications : 'alltables',\n target_session_attrs: null\n }\n\n return {\n host : Array.isArray(host) ? host : host.split(',').map(x => x.split(':')[0]),\n port : Array.isArray(port) ? port : host.split(',').map(x => parseInt(x.split(':')[1] || port)),\n path : o.path || host.indexOf('/') > -1 && host + '/.s.PGSQL.' + port,\n database : o.database || o.db || (url.pathname || '').slice(1) || env.PGDATABASE || user,\n user : user,\n pass : o.pass || o.password || url.password || env.PGPASSWORD || '',\n ...Object.entries(defaults).reduce(\n (acc, [k, d]) => {\n const value = k in o ? o[k] : k in query\n ? (query[k] === 'disable' || query[k] === 'false' ? false : query[k])\n : env['PG' + k.toUpperCase()] || d\n acc[k] = typeof value === 'string' && ints.includes(k)\n ? +value\n : value\n return acc\n },\n {}\n ),\n connection : {\n application_name: env.PGAPPNAME || 'postgres.js',\n ...o.connection,\n ...Object.entries(query).reduce((acc, [k, v]) => (k in defaults || (acc[k] = v), acc), {})\n },\n types : o.types || {},\n target_session_attrs: tsa(o, url, env),\n onnotice : o.onnotice,\n onnotify : o.onnotify,\n onclose : o.onclose,\n onparameter : o.onparameter,\n socket : o.socket,\n transform : parseTransform(o.transform || { undefined: undefined }),\n parameters : {},\n shared : { retries: 0, typeArrayMap: {} },\n ...mergeUserTypes(o.types)\n }\n}\n\nfunction tsa(o, url, env) {\n const x = o.target_session_attrs || url.searchParams.get('target_session_attrs') || env.PGTARGETSESSIONATTRS\n if (!x || ['read-write', 'read-only', 'primary', 'standby', 'prefer-standby'].includes(x))\n return x\n\n throw new Error('target_session_attrs ' + x + ' is not supported')\n}\n\nfunction backoff(retries) {\n return (0.5 + Math.random() / 2) * Math.min(3 ** retries / 100, 20)\n}\n\nfunction max_lifetime() {\n return 60 * (30 + Math.random() * 30)\n}\n\nfunction parseTransform(x) {\n return {\n undefined: x.undefined,\n column: {\n from: typeof x.column === 'function' ? x.column : x.column && x.column.from,\n to: x.column && x.column.to\n },\n value: {\n from: typeof x.value === 'function' ? x.value : x.value && x.value.from,\n to: x.value && x.value.to\n },\n row: {\n from: typeof x.row === 'function' ? x.row : x.row && x.row.from,\n to: x.row && x.row.to\n }\n }\n}\n\nfunction parseUrl(url) {\n if (!url || typeof url !== 'string')\n return { url: { searchParams: new Map() } }\n\n let host = url\n host = host.slice(host.indexOf('://') + 3).split(/[?/]/)[0]\n host = decodeURIComponent(host.slice(host.indexOf('@') + 1))\n\n const urlObj = new URL(url.replace(host, host.split(',')[0]))\n\n return {\n url: {\n username: decodeURIComponent(urlObj.username),\n password: decodeURIComponent(urlObj.password),\n host: urlObj.host,\n hostname: urlObj.hostname,\n port: urlObj.port,\n pathname: urlObj.pathname,\n searchParams: urlObj.searchParams\n },\n multihost: host.indexOf(',') > -1 && host\n }\n}\n\nfunction osUsername() {\n try {\n return os.userInfo().username // eslint-disable-line\n } catch (_) {\n return process.env.USERNAME || process.env.USER || process.env.LOGNAME // eslint-disable-line\n }\n}\n","{\n \"name\": \"prisma-sql\",\n \"version\": \"1.75.6\",\n \"description\": \"Convert Prisma queries to optimized SQL with type safety. 2-7x faster than Prisma Client.\",\n \"main\": \"dist/index.cjs\",\n \"module\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"bin\": {\n \"prisma-sql-generator\": \"./dist/generator.cjs\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./generator\": {\n \"types\": \"./dist/generator.d.ts\",\n \"import\": \"./dist/generator.js\",\n \"require\": \"./dist/generator.cjs\"\n }\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"docs:dev\": \"yarn --cwd docs-site dev\",\n \"docs:build\": \"yarn --cwd docs-site build\",\n \"docs:preview\": \"yarn --cwd docs-site preview\",\n \"test\": \"vitest --config=vitest.config.ts\",\n \"test:coverage\": \"vitest --coverage\",\n \"test:e2e\": \"vitest run tests/e2e\",\n \"bench\": \"npx tsx tests/helpers/run-benchmarks.ts\",\n \"prisma:generate\": \"npx prisma generate --schema=tests/prisma/schema.prisma\",\n \"prisma:migrate\": \"npx prisma migrate dev --schema=tests/prisma/schema.prisma\",\n \"prisma:reset\": \"npx prisma db push --force-reset --skip-generate --schema=tests/prisma/schema.prisma\",\n \"prepublishOnly\": \"npm run build\",\n \"sonar-cli\": \"sonar-scanner -Dsonar.projectKey=b -Dsonar.sources=./src -Dsonar.host.url=http://localhost:9000 -Dsonar.login=sqp_0d5fbc16a275fceb6458d193a8aa8a975956edc1\",\n \"sonar\": \"npm run sonar-cli && npx tsx scripts/sonar.ts\"\n },\n \"keywords\": [\n \"prisma\",\n \"sql\",\n \"query\",\n \"optimizer\",\n \"postgresql\",\n \"sqlite\",\n \"cloudflare\",\n \"d1\",\n \"performance\",\n \"typescript\",\n \"generator\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/multipliedtwice/prisma-to-sql.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/multipliedtwice/prisma-to-sql/issues\"\n },\n \"homepage\": \"https://github.com/multipliedtwice/prisma-to-sql#readme\",\n \"author\": \"multipliedtwice <multipliedtwice@gmail.com>\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@dee-wan/schema-parser\": \"1.4.0\",\n \"@prisma/generator-helper\": \"^7.4.0\",\n \"@prisma/internals\": \"^7.4.0\"\n },\n \"devDependencies\": {\n \"@faker-js/faker\": \"^10.2.0\",\n \"@prisma/adapter-better-sqlite3\": \"^7.4.0\",\n \"@prisma/adapter-pg\": \"^7.4.0\",\n \"@semantic-release/changelog\": \"^6.0.3\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@types/better-sqlite3\": \"^7.6.13\",\n \"@types/node\": \"^25.2.3\",\n \"@vitest/coverage-v8\": \"4.0.18\",\n \"better-sqlite3\": \"^12.6.2\",\n \"drizzle-kit\": \"^0.31.8\",\n \"drizzle-orm\": \"^0.45.1\",\n \"postgres\": \"^3.4.8\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.21.0\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.18\",\n \"@prisma/client\": \"7.4.0\",\n \"prisma\": \"7.4.0\"\n },\n \"engines\": {\n \"node\": \">=16.0.0\"\n }\n}\n","type DateMode = 'iso' | 'ms'\n\nlet globalDateMode: DateMode = 'iso'\n\nexport function setNormalizeDateMode(mode: DateMode): void {\n globalDateMode = mode\n}\n\nexport function detectSqliteDateMode(client: any): DateMode {\n try {\n const tables: { name: string }[] = client\n .prepare(\n \"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' AND name NOT LIKE '_prisma_%' LIMIT 50\",\n )\n .all()\n\n for (const { name } of tables) {\n const row = client\n .prepare(`SELECT typeof(\"createdAt\") as t FROM \"${name}\" LIMIT 1`)\n .get() as { t: string } | undefined\n\n if (row) {\n return row.t === 'integer' ? 'ms' : 'iso'\n }\n }\n } catch {}\n\n return 'iso'\n}\n\nconst 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 | number {\n const t = date.getTime()\n if (!Number.isFinite(t)) {\n throw new Error('Invalid Date value in SQL params')\n }\n if (globalDateMode === 'ms') {\n return t\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 const proto = Object.getPrototypeOf(value)\n const isPlain = proto === Object.prototype || proto === null\n if (!isPlain) return value\n const obj = value as Record<string, unknown>\n if (seen.has(obj)) {\n throw new Error('Circular reference in SQL params')\n }\n seen.add(obj)\n const out: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(obj)) {\n out[k] = normalizeValue(v, seen, depth + 1)\n }\n seen.delete(obj)\n return out\n}\n","import { normalizeValue } from './utils/normalize-value'\n\nexport type SqlDialect = 'postgres' | 'sqlite'\n\nlet globalDialect: SqlDialect = 'postgres'\n\nexport function setGlobalDialect(dialect: SqlDialect): void {\n if (dialect !== 'postgres' && dialect !== 'sqlite') {\n throw new Error(\n `Invalid dialect: ${dialect}. Must be 'postgres' or 'sqlite'`,\n )\n }\n globalDialect = dialect\n}\n\nexport function getGlobalDialect(): SqlDialect {\n return globalDialect\n}\n\nfunction assertNonEmpty(value: string, name: string): void {\n if (!value || value.trim().length === 0) {\n throw new Error(`${name} is required and cannot be empty`)\n }\n}\n\nexport function arrayContains(\n column: string,\n value: string,\n arrayType: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'arrayContains column')\n assertNonEmpty(value, 'arrayContains value')\n 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 MAX_INCLUDE_DEPTH: 5,\n MAX_INCLUDES_PER_LEVEL: 10,\n MAX_TOTAL_SUBQUERIES: 100,\n MAX_SELF_REFERENTIAL_DEPTH: 2,\n MAX_NOT_DEPTH: 50,\n MAX_LIMIT_OFFSET: 2147483647,\n MIN_NEGATIVE_TAKE: -10000,\n MAX_NESTED_JOIN_DEPTH: 10,\n MAX_ALIAS_COUNTER_THRESHOLD: 1000,\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\nexport const DEBUG_PARAMS =\n typeof process !== 'undefined' && process.env?.DEBUG_PARAMS === '1'\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\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 allFieldsByName: 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 allFieldsByName = 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 allFieldsByName.set(field.name, field)\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 allFieldsByName,\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 getFieldByNameCached(\n model: Model,\n name: string,\n): Field | undefined {\n return getFieldIndices(model).allFieldsByName.get(name)\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: any): 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'\nimport { DEBUG_PARAMS } from './constants'\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 if (DEBUG_PARAMS) {\n console.log(`[PARAM] ${scope} = ${JSON.stringify(value)}`)\n }\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, getRelationFieldSet } from './model-field-cache'\n\ntype OrderByObject = Record<string, unknown>\ntype OrderByArray = Array<Record<string, unknown>>\n\ntype OrderByType = OrderByObject | OrderByArray | string | null | 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\ninterface 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 flipScalarSortObject = (\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\nfunction isScalarSortConfig(obj: Record<string, unknown>): boolean {\n return (\n Object.prototype.hasOwnProperty.call(obj, 'sort') ||\n Object.prototype.hasOwnProperty.call(obj, 'direction')\n )\n}\n\nfunction flipRelationOrderByValue(\n obj: Record<string, unknown>,\n): Record<string, unknown> {\n const out: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(obj)) {\n out[k] = flipValue(v)\n }\n return out\n}\n\nconst flipValue = (v: unknown): unknown => {\n if (typeof v === 'string') return flipSortString(v)\n if (isPlainObject(v)) {\n if (isScalarSortConfig(v)) return flipScalarSortObject(v)\n return flipRelationOrderByValue(v)\n }\n return v\n}\n\nconst expandToSingleFieldEntries = (\n item: unknown,\n): Array<[string, unknown]> => {\n if (!isPlainObject(item)) {\n throw new Error('orderBy array entries must be objects')\n }\n\n const entries = Object.entries(item).filter(([, v]) => v !== undefined)\n if (entries.length === 0) {\n throw new Error('orderBy array entries must have at least one field')\n }\n\n return entries\n}\n\nexport function expandOrderByInput(orderBy: unknown): Array<[string, unknown]> {\n if (!isNotNullish(orderBy)) return []\n\n if (Array.isArray(orderBy)) {\n const result: Array<[string, unknown]> = []\n for (const item of orderBy) {\n result.push(...expandToSingleFieldEntries(item))\n }\n return result\n }\n\n if (isPlainObject(orderBy)) {\n return Object.entries(orderBy)\n }\n\n throw new Error('orderBy must be an object or array of objects')\n}\n\nfunction isScalarOrderByValue(v: unknown): boolean {\n if (typeof v === 'string') {\n const lower = v.toLowerCase()\n return lower === 'asc' || lower === 'desc'\n }\n if (isPlainObject(v) && isScalarSortConfig(v)) return true\n return false\n}\n\nconst flipOrderByArray = (orderBy: unknown[]): { [x: string]: unknown }[] => {\n const result: { [x: string]: unknown }[] = []\n for (const item of orderBy) {\n for (const [k, v] of expandToSingleFieldEntries(item)) {\n result.push({ [k]: flipValue(v) })\n }\n }\n return result\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 const result: NormalizedOrderBy = []\n for (const [field, rawValue] of pairs) {\n if (!isScalarOrderByValue(rawValue)) continue\n const parsed = parseValue(rawValue, field)\n result.push({\n [field]:\n parsed.nulls !== undefined\n ? { direction: parsed.direction, nulls: parsed.nulls }\n : parsed.direction,\n })\n }\n return result\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 allPairs: Array<[string, unknown]> = []\n for (const item of orderBy) {\n allPairs.push(...expandToSingleFieldEntries(item))\n }\n return normalizePairs(allPairs, 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 const relationSet = getRelationFieldSet(model)\n\n for (const item of normalized) {\n const [[field, value]] = Object.entries(item)\n\n if (!scalarSet.has(field)) {\n if (relationSet.has(field)) continue\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","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\nexport function 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 orderEntries = normalizeAndValidateOrderBy(\n orderBy,\n model!,\n parseOrderByValue,\n )\n\n if (cursorEntries.length === 1 && orderEntries.length === 0) {\n const [field, value] = cursorEntries[0]\n const ph = addAutoScoped(params, value, `cursor.${field}`)\n const c = col(alias, field, model)\n\n return {\n cte: '',\n condition: `${c} >= ${ph}`,\n }\n }\n\n if (cursorEntries.length === 1 && orderEntries.length === 1) {\n const [cursorField, cursorValue] = cursorEntries[0]\n const orderEntry = orderEntries[0]\n\n if (orderEntry.field === cursorField) {\n const ph = addAutoScoped(params, cursorValue, `cursor.${cursorField}`)\n const c = col(alias, cursorField, model)\n const op = orderEntry.direction === 'asc' ? '>=' : '<='\n\n return {\n cte: '',\n condition: `${c} ${op} ${ph}`,\n }\n }\n }\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 finalOrderEntries = normalizeAndValidateOrderBy(\n orderBy,\n model!,\n parseOrderByValue,\n )\n if (finalOrderEntries.length === 0) {\n finalOrderEntries = cursorEntries.map(([field]) => ({\n field,\n direction: 'asc' as const,\n }))\n } else {\n finalOrderEntries = ensureCursorFieldsInOrder(\n finalOrderEntries,\n cursorEntries,\n )\n }\n\n assertCursorAndOrderFieldsScalar(model, cursor, finalOrderEntries)\n\n const { whereSql: cursorWhereSql } = buildCursorFilterParts(\n cursor,\n srcAlias,\n params,\n model,\n )\n\n const cursorOrderBy = finalOrderEntries\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 finalOrderEntries,\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 < finalOrderEntries.length; level++) {\n const andParts: string[] = []\n\n for (let i = 0; i < level; i++) {\n const e = finalOrderEntries[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 = finalOrderEntries[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\nfunction 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 { 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 { Field } from '../../types'\nimport { normalizeKeyList } from './sql-utils'\n\ninterface RelationKeys {\n childKeys: string[]\n parentKeys: string[]\n}\n\nconst RELATION_KEYS_CACHE = new WeakMap<Field, RelationKeys>()\n\nfunction computeRelationKeys(field: Field, context: string): 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\nexport function resolveRelationKeys(\n field: Field,\n context: 'include' | 'count' | 'whereIn' = 'include',\n): RelationKeys {\n let cached = RELATION_KEYS_CACHE.get(field)\n if (cached) return cached\n\n cached = computeRelationKeys(field, context)\n RELATION_KEYS_CACHE.set(field, cached)\n return cached\n}\n","import { SQL_SEPARATORS } from './constants'\nimport { quoteColumn } from './sql-utils'\nimport { Model } from '../../types'\n\nconst FK_COLUMN_PREFIX = '__fk'\n\nexport function fkColumnName(index: number): string {\n return `\"${FK_COLUMN_PREFIX}${index}\"`\n}\n\nexport function buildFkSelectList(\n sourceAlias: string,\n sourceModel: Model,\n keyFields: string[],\n): string {\n return keyFields\n .map(\n (f, i) =>\n `${sourceAlias}.${quoteColumn(sourceModel, f)} AS ${fkColumnName(i)}`,\n )\n .join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nexport function buildFkGroupBy(keyFields: string[]): string {\n return keyFields\n .map((_, i) => fkColumnName(i))\n .join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nexport function buildFkPartitionBy(\n sourceAlias: string,\n sourceModel: Model,\n keyFields: string[],\n): string {\n return keyFields\n .map((f) => `${sourceAlias}.${quoteColumn(sourceModel, f)}`)\n .join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nexport function buildFkJoinCondition(\n joinAlias: string,\n parentAlias: string,\n parentModel: Model,\n parentKeyFields: string[],\n): string {\n const parts = parentKeyFields.map(\n (f, i) =>\n `${joinAlias}.${fkColumnName(i)} = ${parentAlias}.${quoteColumn(parentModel, f)}`,\n )\n return parts.length === 1 ? parts[0] : `(${parts.join(' AND ')})`\n}\n","import { Model, Field } from '../../types'\nimport { SqlDialect, jsonBuildObject } from '../../sql-builder-dialect'\nimport { SQL_TEMPLATES, SQL_SEPARATORS } from '../shared/constants'\nimport { buildTableReference, quote, quoteColumn } from '../shared/sql-utils'\nimport { ParamStore } from '../shared/param-store'\nimport { IncludeSpec } from '../shared/types'\nimport { isNotNullish, isPlainObject } from '../shared/validators/type-guards'\nimport { addAutoScoped } from '../shared/dynamic-params'\nimport { getRelationFieldSet } from '../shared/model-field-cache'\nimport { isDynamicParameter } from '@dee-wan/schema-parser'\nimport { resolveRelationKeys } from '../shared/relation-key-utils'\nimport {\n buildFkSelectList,\n buildFkGroupBy,\n buildFkPartitionBy,\n buildFkJoinCondition,\n} from '../shared/fk-join-utils'\n\nconst AGG_COLUMN = '__agg'\nconst ROW_COLUMN = '__row'\nconst ROW_NUMBER_COLUMN = '__rn'\nconst INC_ALIAS_PREFIX = '__inc_'\nconst RANKED_ALIAS_PREFIX = '__ranked_'\nconst INCLUDE_SCOPE_ROOT = 'include'\nconst INCLUDE_SCOPE_SEGMENT = '.include'\nconst PG_EMPTY_JSON_ARRAY = \"'[]'::json\"\nconst SQLITE_EMPTY_JSON_ARRAY = \"json('[]')\"\nexport const DEFAULT_PRIMARY_KEY = 'id'\nconst JOIN_INCLUDE_MAX_DEPTH = 0\n\ntype OptionalIntOrDynamic = number | string | undefined\n\nexport function emptyJsonArray(dialect: SqlDialect): string {\n return dialect === 'postgres' ? PG_EMPTY_JSON_ARRAY : SQLITE_EMPTY_JSON_ARRAY\n}\n\nexport function buildIncludeScope(includePath: readonly string[]): string {\n if (includePath.length === 0) return INCLUDE_SCOPE_ROOT\n let scope = INCLUDE_SCOPE_ROOT\n for (let i = 0; i < includePath.length; i++) {\n scope += `.${includePath[i]}`\n if (i < includePath.length - 1) {\n scope += INCLUDE_SCOPE_SEGMENT\n }\n }\n return scope\n}\n\nexport function 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\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\nexport function 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 > JOIN_INCLUDE_MAX_DEPTH) 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\nexport function 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: {\n parentAlias: string\n model: Model\n dialect: SqlDialect\n aliasGen: { next: (base: string) => string }\n }\n nestedJoins: string[]\n}): IncludeSpec {\n const { childKeys: relKeyFields, parentKeys: parentKeyFields } =\n resolveRelationKeys(args.field, 'include')\n\n const joinAlias = args.ctx.aliasGen.next(`${INC_ALIAS_PREFIX}${args.relName}`)\n\n const fkSelect = buildFkSelectList(args.relAlias, args.relModel, relKeyFields)\n const fkGroupBy = buildFkPartitionBy(\n args.relAlias,\n args.relModel,\n relKeyFields,\n )\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 allJoins = [args.whereJoins, ...args.nestedJoins]\n .filter((j) => j)\n .join(' ')\n const joinsPart = allJoins ? ` ${allJoins}` : ''\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_COLUMN}` +\n ` FROM ${args.relTable} ${args.relAlias}${joinsPart}${wherePart}` +\n ` GROUP BY ${fkGroupBy}`\n\n const onCondition = buildFkJoinCondition(\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_COLUMN}, ${PG_EMPTY_JSON_ARRAY}) 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\nexport function 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: {\n parentAlias: string\n model: Model\n dialect: SqlDialect\n aliasGen: { next: (base: string) => string }\n params: ParamStore\n includePath: string[]\n }\n nestedJoins: string[]\n}): IncludeSpec {\n const { childKeys: relKeyFields, parentKeys: parentKeyFields } =\n resolveRelationKeys(args.field, 'include')\n\n const joinAlias = args.ctx.aliasGen.next(`${INC_ALIAS_PREFIX}${args.relName}`)\n const rankedAlias = args.ctx.aliasGen.next(\n `${RANKED_ALIAS_PREFIX}${args.relName}`,\n )\n\n const fkSelect = buildFkSelectList(args.relAlias, args.relModel, relKeyFields)\n const partitionBy = buildFkPartitionBy(\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, DEFAULT_PRIMARY_KEY)} ASC`\n\n const allJoins = [args.whereJoins, ...args.nestedJoins]\n .filter((j) => j)\n .join(' ')\n const joinsPart = allJoins ? ` ${allJoins}` : ''\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_COLUMN}${SQL_SEPARATORS.FIELD_LIST}` +\n `ROW_NUMBER() OVER (PARTITION BY ${partitionBy} ORDER BY ${orderExpr}) AS ${ROW_NUMBER_COLUMN}` +\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(`${ROW_NUMBER_COLUMN} > ${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(`${ROW_NUMBER_COLUMN} <= (${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(`${ROW_NUMBER_COLUMN} <= ${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 = buildFkGroupBy(relKeyFields)\n\n const outerSql =\n `SELECT ${fkGroupByOuter}${SQL_SEPARATORS.FIELD_LIST}` +\n `json_agg(${ROW_COLUMN} ORDER BY ${ROW_NUMBER_COLUMN}) AS ${AGG_COLUMN}` +\n ` FROM (${innerSql}) ${rankedAlias}${rnFilter}` +\n ` GROUP BY ${fkGroupByOuter}`\n\n const onCondition = buildFkJoinCondition(\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_COLUMN}, ${PG_EMPTY_JSON_ARRAY}) 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","import { Model, Field } from '../../types'\nimport { SqlDialect } from '../../sql-builder-dialect'\nimport { SQL_SEPARATORS } from '../shared/constants'\nimport { sqlStringLiteral } from '../shared/sql-utils'\nimport { ParamStore } from '../shared/param-store'\nimport { createAliasGenerator } from '../shared/alias-generator'\nimport { isValidRelationField } from '../joins'\nimport { isNotNullish } from '../shared/validators/type-guards'\nimport { getRelationFieldSet } from '../shared/model-field-cache'\nimport { resolveRelationKeys } from '../shared/relation-key-utils'\nimport { getRelationTableReference } from './include-join'\nimport {\n fkColumnName,\n buildFkSelectList,\n buildFkPartitionBy,\n buildFkJoinCondition,\n} from '../shared/fk-join-utils'\n\nconst COUNT_COLUMN = '__cnt'\nconst COUNT_SUBQUERY_PREFIX = '__tp_cnt_'\nconst COUNT_JOIN_PREFIX = '__tp_cnt_j_'\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 subqueryForCount(args: {\n dialect: SqlDialect\n relTable: string\n countAlias: string\n relModel: Model\n relKeyFields: string[]\n}): string {\n const selectKeys = buildFkSelectList(\n args.countAlias,\n args.relModel,\n args.relKeyFields,\n )\n\n const groupByKeys = buildFkPartitionBy(\n args.countAlias,\n args.relModel,\n args.relKeyFields,\n )\n\n const cntExpr =\n args.dialect === 'postgres'\n ? `COUNT(*)::int AS ${COUNT_COLUMN}`\n : `COUNT(*) AS ${COUNT_COLUMN}`\n\n return `(SELECT ${selectKeys}${SQL_SEPARATORS.FIELD_LIST}${cntExpr} FROM ${args.relTable} ${args.countAlias} GROUP BY ${groupByKeys})`\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 `${COUNT_SUBQUERY_PREFIX}${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 `${COUNT_JOIN_PREFIX}${args.relName}`,\n forbidden,\n )\n\n const leftJoinOn = buildFkJoinCondition(\n joinAlias,\n args.parentAlias,\n args.parentModel,\n parentKeyFields,\n )\n\n return {\n joinSql: `LEFT JOIN ${subquery} ${joinAlias} ON ${leftJoinOn}`,\n pairSql: `${sqlStringLiteral(args.relName)}, COALESCE(${joinAlias}.${COUNT_COLUMN}, 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","import { Model } from '../../types'\nimport { getRelationFieldSet } from './model-field-cache'\nimport { isPlainObject } from './validators/type-guards'\n\nfunction 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","import type { Model } from '../../types'\nimport { extractNestedIncludeSpec } from './relation-utils'\nimport { isPlainObject } from './validators/type-guards'\n\ntype ModelField = Model['fields'][number]\n\nexport interface ResolvedRelation {\n relName: string\n value: unknown\n field: ModelField\n relModel: Model\n isList: boolean\n nestedSpec: Record<string, any>\n}\n\nexport function resolveIncludeRelations(\n includeSpec: Record<string, any>,\n model: Model,\n schemas: readonly Model[],\n): ResolvedRelation[] {\n const modelMap = new Map(schemas.map((m) => [m.name, m]))\n const results: ResolvedRelation[] = []\n\n for (const [relName, value] of Object.entries(includeSpec)) {\n if (value === false) continue\n\n const field = model.fields.find((f) => f.name === relName)\n if (!field?.isRelation || !field.relatedModel) continue\n\n const relModel = modelMap.get(field.relatedModel)\n if (!relModel) continue\n\n const isList = typeof field.type === 'string' && field.type.endsWith('[]')\n\n const nestedSpec = isPlainObject(value)\n ? extractNestedIncludeSpec(value, relModel)\n : {}\n\n results.push({\n relName,\n value,\n field,\n relModel,\n isList,\n nestedSpec,\n })\n }\n\n return results\n}\n","import type { Model } from '../../types'\nimport { isPlainObject } from '../shared/validators/type-guards'\nimport { resolveIncludeRelations } from '../shared/include-tree-walker'\nimport { LIMITS } from '../shared/constants'\n\ntype RelStats = {\n avg: number\n p95: number\n p99: number\n max: number\n coverage: number\n}\n\ntype RelationStatsMap = Record<string, Record<string, RelStats>>\n\nlet globalRelationStats: RelationStatsMap | undefined\nlet globalRoundtripRowEquivalent = 73\nlet globalJsonRowFactor = 1.5\n\nconst CORRELATED_S_BOUNDED = 0.5\nconst CORRELATED_S_UNBOUNDED = 3.0\nconst CORRELATED_WHERE_PENALTY = 3.0\nconst DEFAULT_FAN = 10\nconst DEFAULT_PARENT_COUNT = 50\nconst MIN_STATS_COVERAGE = 0.1\nconst SINGLE_PARENT_MAX_FLAT_JOIN_DEPTH = 1\n\nexport function setRoundtripRowEquivalent(value: number): void {\n globalRoundtripRowEquivalent = value\n}\n\nexport function setJsonRowFactor(value: number): void {\n globalJsonRowFactor = value\n}\n\nexport function setRelationStats(stats: RelationStatsMap): void {\n globalRelationStats = stats\n}\n\nexport function getRelationStats(): RelationStatsMap | undefined {\n return globalRelationStats\n}\n\ntype IncludeStrategy = 'flat-join' | 'lateral' | 'where-in' | 'fallback'\n\ninterface RelationCostNode {\n name: string\n fan: number\n take: number\n eff: number\n isList: boolean\n hasChildWhere: boolean\n children: RelationCostNode[]\n}\n\nfunction getFanOut(modelName: string, relName: string): number {\n if (!globalRelationStats) return DEFAULT_FAN\n const modelStats = globalRelationStats[modelName]\n if (!modelStats) return DEFAULT_FAN\n const relStat = modelStats[relName]\n if (!relStat || relStat.coverage < MIN_STATS_COVERAGE) return DEFAULT_FAN\n return relStat.avg\n}\n\nfunction readTake(relArgs: unknown): number {\n if (!isPlainObject(relArgs)) return Infinity\n const obj = relArgs as Record<string, unknown>\n if ('take' in obj && typeof obj.take === 'number' && obj.take > 0)\n return obj.take\n return Infinity\n}\n\nfunction hasWhereClause(relArgs: unknown): boolean {\n if (!isPlainObject(relArgs)) return false\n const obj = relArgs as Record<string, unknown>\n return 'where' in obj && obj.where != null && isPlainObject(obj.where)\n}\n\nfunction isListField(field: { type?: unknown }): boolean {\n return typeof field.type === 'string' && field.type.endsWith('[]')\n}\n\nfunction hasPaginationArgs(value: unknown): boolean {\n if (!isPlainObject(value)) return false\n const obj = value as Record<string, unknown>\n return (\n ('take' in obj && obj.take != null) ||\n ('skip' in obj && typeof obj.skip === 'number' && obj.skip > 0)\n )\n}\n\nfunction buildCostTree(\n includeSpec: Record<string, any>,\n model: Model,\n schemas: readonly Model[],\n depth: number = 0,\n): RelationCostNode[] {\n if (depth > LIMITS.MAX_INCLUDE_DEPTH) return []\n\n const relations = resolveIncludeRelations(includeSpec, model, schemas)\n const nodes: RelationCostNode[] = []\n\n for (const rel of relations) {\n const fan = rel.isList ? getFanOut(model.name, rel.relName) : 1\n const take = rel.isList ? readTake(rel.value) : 1\n const eff = Math.min(fan, take)\n\n const children =\n Object.keys(rel.nestedSpec).length > 0\n ? buildCostTree(rel.nestedSpec, rel.relModel, schemas, depth + 1)\n : []\n\n nodes.push({\n name: rel.relName,\n fan,\n take,\n eff,\n isList: rel.isList,\n hasChildWhere: hasWhereClause(rel.value),\n children,\n })\n }\n\n return nodes\n}\n\nfunction maxDepthFromTree(nodes: RelationCostNode[]): number {\n if (nodes.length === 0) return 0\n let max = 0\n for (const n of nodes) {\n const d = 1 + maxDepthFromTree(n.children)\n if (d > max) max = d\n }\n return max\n}\n\nfunction anyChildHasWhere(nodes: RelationCostNode[]): boolean {\n for (const n of nodes) {\n if (n.hasChildWhere) return true\n }\n return false\n}\n\nfunction computeWhereInCost(\n nodes: RelationCostNode[],\n parentCount: number,\n): number {\n const R = globalRoundtripRowEquivalent\n let totalRows = 0\n let roundtrips = 0\n\n function walk(ns: RelationCostNode[], P: number): void {\n if (ns.length === 0) return\n roundtrips++\n for (const n of ns) {\n const rows = P * n.eff\n totalRows += rows\n if (n.children.length > 0) {\n walk(n.children, rows)\n }\n }\n }\n\n walk(nodes, parentCount)\n return (1 + roundtrips) * R + totalRows\n}\n\nfunction computeCorrelatedCost(\n nodes: RelationCostNode[],\n parentCount: number,\n): number {\n const R = globalRoundtripRowEquivalent\n\n function subqueryCost(ns: RelationCostNode[]): number {\n let total = 0\n for (const n of ns) {\n const sBase =\n n.take !== Infinity ? CORRELATED_S_BOUNDED : CORRELATED_S_UNBOUNDED\n const s = n.hasChildWhere ? sBase * CORRELATED_WHERE_PENALTY : sBase\n let nodeCost = n.eff * s\n if (n.children.length > 0) {\n nodeCost += n.eff * subqueryCost(n.children)\n }\n total += nodeCost\n }\n return total\n }\n\n return R + parentCount * subqueryCost(nodes)\n}\n\nfunction hasOnlyToOneRelations(\n includeSpec: Record<string, any>,\n model: Model,\n): boolean {\n for (const [relName, value] of Object.entries(includeSpec)) {\n if (value === false) continue\n const field = model.fields.find((f) => f.name === relName)\n if (!field?.isRelation) continue\n if (isListField(field)) return false\n }\n return true\n}\n\nexport function countIncludeDepth(\n includeSpec: Record<string, any>,\n model: Model,\n schemas: readonly Model[],\n depth: number = 0,\n): number {\n if (depth > LIMITS.MAX_INCLUDE_DEPTH) return 0\n\n const relations = resolveIncludeRelations(includeSpec, model, schemas)\n let maxDepth = 0\n\n for (const rel of relations) {\n let childDepth = 1\n if (Object.keys(rel.nestedSpec).length > 0) {\n childDepth += countIncludeDepth(\n rel.nestedSpec,\n rel.relModel,\n schemas,\n depth + 1,\n )\n }\n if (childDepth > maxDepth) maxDepth = childDepth\n }\n\n return maxDepth\n}\n\nexport function hasChildPaginationAnywhere(\n includeSpec: Record<string, any>,\n model: Model,\n schemas: readonly Model[],\n depth: number = 0,\n): boolean {\n if (depth > LIMITS.MAX_INCLUDE_DEPTH) return false\n\n for (const [, value] of Object.entries(includeSpec)) {\n if (value === false) continue\n if (hasPaginationArgs(value)) return true\n }\n\n const relations = resolveIncludeRelations(includeSpec, model, schemas)\n\n for (const rel of relations) {\n if (Object.keys(rel.nestedSpec).length > 0) {\n if (\n hasChildPaginationAnywhere(\n rel.nestedSpec,\n rel.relModel,\n schemas,\n depth + 1,\n )\n ) {\n return true\n }\n }\n }\n\n return false\n}\n\nexport function pickIncludeStrategy(params: {\n includeSpec: Record<string, any>\n model: Model\n schemas: readonly Model[]\n method: string\n args?: any\n takeValue: number | null\n hasPagination: boolean\n canFlatJoin: boolean\n canLateral: boolean\n hasChildPagination: boolean\n debug?: boolean\n}): IncludeStrategy {\n const { includeSpec, model, schemas, method, takeValue, canFlatJoin, debug } =\n params\n\n if (Object.keys(includeSpec).length === 0) return 'where-in'\n\n if (canFlatJoin && hasOnlyToOneRelations(includeSpec, model)) {\n if (debug)\n console.log(` [strategy] ${model.name}: all one-to-one → flat-join`)\n return 'flat-join'\n }\n\n const isSingleParent = method === 'findFirst' || method === 'findUnique'\n if (isSingleParent && canFlatJoin) {\n const depth = countIncludeDepth(includeSpec, model, schemas)\n if (depth <= SINGLE_PARENT_MAX_FLAT_JOIN_DEPTH) {\n if (debug)\n console.log(\n ` [strategy] ${model.name}: single parent depth≤${SINGLE_PARENT_MAX_FLAT_JOIN_DEPTH} → flat-join`,\n )\n return 'flat-join'\n }\n }\n\n const costTree = buildCostTree(includeSpec, model, schemas)\n const treeDepth = maxDepthFromTree(costTree)\n\n if (treeDepth === 1 && anyChildHasWhere(costTree)) {\n if (debug)\n console.log(` [strategy] ${model.name}: depth-1 + childWhere → where-in`)\n return 'where-in'\n }\n\n const P = isSingleParent ? 1 : takeValue ?? DEFAULT_PARENT_COUNT\n\n const costW = computeWhereInCost(costTree, P)\n const costC = computeCorrelatedCost(costTree, P)\n\n if (debug) {\n console.log(\n ` [strategy] ${model.name}: P=${P} D=${treeDepth}` +\n ` costW=${costW.toFixed(0)} costC=${costC.toFixed(0)}`,\n )\n }\n\n if (costC < costW) {\n if (debug) console.log(` [strategy] ${model.name}: costC wins → fallback`)\n return 'fallback'\n }\n\n if (debug) console.log(` [strategy] ${model.name}: costW wins → where-in`)\n return 'where-in'\n}\n","import { Model } from '../../types'\nimport { getFieldIndices } from './model-field-cache'\nimport { isPlainObject } from './validators/type-guards'\n\ninterface 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","import { Model } from '../../types'\nimport { SQL_SEPARATORS } from './constants'\nimport { quoteColumn } from './sql-utils'\nimport { isPlainObject, hasProperty } from './validators/type-guards'\n\nexport function extractWhereInput(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 as Record<string, unknown>) : {}\n}\n\nexport function buildScalarColumnSelect(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","import { Model } from '../../types'\nimport { SQL_TEMPLATES, SQL_SEPARATORS, LIMITS } from '../shared/constants'\nimport { quote, buildTableReference, quoteColumn } from '../shared/sql-utils'\nimport { joinCondition, isValidRelationField } from '../joins'\nimport { SelectQuerySpec } from '../shared/types'\nimport { getFieldIndices, getJsonFieldSet } from '../shared/model-field-cache'\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 extractScalarSelection,\n extractNestedIncludeSpec,\n} from '../shared/relation-utils'\nimport { resolveRelationKeys } from '../shared/relation-key-utils'\nimport { ParamStore } from '../shared/param-store'\nimport { buildScalarColumnSelect } from '../shared/relation-query-context'\nimport { resolveIncludeRelations } from '../shared/include-tree-walker'\n\ninterface FlatJoinBuildResult {\n sql: string\n params: any[]\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 (\n this.count >=\n Number.MAX_SAFE_INTEGER - LIMITS.MAX_ALIAS_COUNTER_THRESHOLD\n ) {\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 indices = getFieldIndices(parentModel)\n const field = indices.allFieldsByName.get(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 jsonSet = getJsonFieldSet(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 const colRef = jsonSet.has(fieldName)\n ? `${childAlias}.${quotedCol}::text`\n : `${childAlias}.${quotedCol}`\n\n columns[idx++] = `${colRef} AS \"${fullPrefix}.${field.name}\"`\n }\n\n columns.length = idx\n return columns\n}\n\nfunction countActiveEntries(spec: Record<string, any>): number {\n let count = 0\n for (const value of Object.values(spec)) {\n if (value !== false) count++\n }\n return count\n}\n\nexport function canUseFlatJoinForAll(\n includeSpec: Record<string, any>,\n model: Model,\n schemas: readonly Model[],\n debug?: boolean,\n): boolean {\n const relations = resolveIncludeRelations(includeSpec, model, schemas)\n\n if (relations.length < countActiveEntries(includeSpec)) {\n return false\n }\n\n for (const rel of relations) {\n if (isPlainObject(rel.value)) {\n const obj = rel.value as Record<string, unknown>\n if ('take' in obj && obj.take != null) {\n return false\n }\n if ('skip' in obj && typeof obj.skip === 'number' && obj.skip > 0) {\n return false\n }\n }\n\n const keys = resolveRelationKeys(rel.field as any, 'include')\n if (!keys || keys.parentKeys.length === 0 || keys.childKeys.length === 0) {\n if (debug)\n console.log(\n ` [canFlatJoin] ${model.name}.${rel.relName}: no join keys resolved`,\n )\n return false\n }\n\n if (keys.parentKeys.length > 1 || keys.childKeys.length > 1) {\n if (debug)\n console.log(\n ` [canFlatJoin] ${model.name}.${rel.relName}: composite keys (${keys.parentKeys.length} parent, ${keys.childKeys.length} child)`,\n )\n return false\n }\n\n if (Object.keys(rel.nestedSpec).length > 0) {\n if (!canUseFlatJoinForAll(rel.nestedSpec, rel.relModel, schemas, debug)) {\n return false\n }\n }\n }\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 > LIMITS.MAX_NESTED_JOIN_DEPTH) {\n throw new Error(\n `Nested joins exceeded maximum depth of ${LIMITS.MAX_NESTED_JOIN_DEPTH} 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 indices = getFieldIndices(parentModel)\n const field = indices.allFieldsByName.get(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 extractReferencedParams(\n whereClause: string | undefined,\n specParams: ParamStore | readonly unknown[],\n): { cleanWhere: string; params: any[] } {\n if (!whereClause || whereClause === '1=1') {\n return { cleanWhere: '', params: [] }\n }\n\n const refSet = new Set<number>()\n const re = /\\$(\\d+)/g\n let match: RegExpExecArray | null\n while ((match = re.exec(whereClause)) !== null) {\n refSet.add(Number(match[1]))\n }\n\n if (refSet.size === 0) {\n return { cleanWhere: whereClause, params: [] }\n }\n\n const allParams: readonly unknown[] = Array.isArray(specParams)\n ? specParams\n : typeof (specParams as any).snapshot === 'function'\n ? (specParams as ParamStore).snapshot().params\n : []\n\n const refs = Array.from(refSet).sort((a, b) => a - b)\n const params: any[] = []\n const indexMap = new Map<number, number>()\n\n for (const oldIdx of refs) {\n params.push(allParams[oldIdx - 1])\n indexMap.set(oldIdx, params.length)\n }\n\n let cleanWhere = whereClause\n const sorted = Array.from(indexMap.entries()).sort((a, b) => b[0] - a[0])\n for (const [oldIdx, newIdx] of sorted) {\n cleanWhere = cleanWhere.split(`$${oldIdx}`).join(`$${newIdx}`)\n }\n\n return { cleanWhere, params }\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 pagination,\n } = spec\n\n const emptyResult: FlatJoinBuildResult = {\n sql: '',\n params: [],\n requiresReduction: false,\n includeSpec: {},\n }\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 emptyResult\n }\n\n if (!canUseFlatJoinForAll(includeSpec, model, schemas)) {\n return emptyResult\n }\n\n const { cleanWhere, params } = extractReferencedParams(\n whereClause,\n spec.params,\n )\n\n const baseJoins = whereJoins.length > 0 ? whereJoins.join(' ') : ''\n const baseWhere = cleanWhere ? `WHERE ${cleanWhere}` : ''\n const baseOrderBy = orderBy ? `ORDER BY ${orderBy}` : ''\n\n const subqueryScalarCols = buildScalarColumnSelect(model, from.alias)\n let baseSubquery = `\n SELECT ${subqueryScalarCols} FROM ${from.table} ${from.alias}\n ${baseJoins}\n ${baseWhere}\n ${baseOrderBy}\n `.trim()\n\n const take =\n pagination.take !== undefined && pagination.take !== null\n ? pagination.take\n : null\n const skip =\n pagination.skip !== undefined && pagination.skip !== null\n ? pagination.skip\n : null\n\n if (take !== null) {\n params.push(take)\n baseSubquery += ` LIMIT $${params.length}`\n }\n if (skip !== null) {\n params.push(skip)\n baseSubquery += ` OFFSET $${params.length}`\n }\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 emptyResult\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, params, requiresReduction: true, includeSpec }\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) {\n if (val === null) {\n return `${expr} ${SQL_TEMPLATES.IS_NULL}`\n }\n\n if (isPlainObject(val) && 'path' in val) {\n return handleJsonPath(expr, val, params, dialect)\n }\n\n throw createError(\n 'JSON path operator requires object with \"path\" key or null',\n { operator: op },\n )\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\nconst SCHEMA_MAP_CACHE = new WeakMap<readonly Model[], Map<string, Model>>()\n\nfunction getSchemaByName(schemas: readonly Model[]): Map<string, Model> {\n let map = SCHEMA_MAP_CACHE.get(schemas)\n if (!map) {\n map = new Map()\n for (const m of schemas) map.set(m.name, m)\n SCHEMA_MAP_CACHE.set(schemas, map)\n }\n return map\n}\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 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 schemaMap = getSchemaByName(ctx.schemaModels)\n const relModel = schemaMap.get(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\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 { 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 const joined = clauses.join(` ${operator} `)\n if (operator === 'OR' && clauses.length > 1) {\n return `(${joined})`\n }\n return joined\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 {\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\nconst IS_PRODUCTION =\n typeof process !== 'undefined' && process.env?.NODE_ENV === 'production'\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 if (IS_PRODUCTION) {\n assertSameLength(params, mappings)\n assertValidNextIndex(index)\n return\n }\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 type { Field } from '../../types'\n\nexport function isListRelation(field: Field): boolean {\n return typeof field.type === 'string' && field.type.endsWith('[]')\n}\n","import { reverseOrderByInput } from './order-by-utils'\n\ntype IntOrDynamic = number | string\ntype OptionalIntOrDynamic = IntOrDynamic | undefined\n\nexport function 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","import { Model, Field } from '../../types'\nimport { SQL_TEMPLATES, LIMITS } from '../shared/constants'\nimport { quote, buildTableReference, quoteColumn } from '../shared/sql-utils'\nimport { SelectQuerySpec } from '../shared/types'\nimport { getFieldIndices } from '../shared/model-field-cache'\nimport { isPlainObject, isNotNullish } 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 extractScalarSelection,\n extractNestedIncludeSpec,\n} from '../shared/relation-utils'\nimport { resolveRelationKeys } from '../shared/relation-key-utils'\nimport { isValidRelationField } from '../joins'\nimport { buildWhereClause } from '../where'\nimport { isValidWhereClause } from '../shared/validators/sql-validators'\nimport { createAliasGenerator } from '../shared/alias-generator'\nimport { ParamStore } from '../shared/param-store'\nimport {\n extractWhereInput,\n buildScalarColumnSelect,\n} from '../shared/relation-query-context'\nimport { isListRelation } from '../shared/field-type-utils'\nimport { readSkipTake } from '../pagination'\nimport { maybeReverseNegativeTake } from '../shared/negative-take-utils'\nimport { resolveIncludeRelations } from '../shared/include-tree-walker'\n\ninterface LateralJoinBuildResult {\n sql: string\n params: any[]\n requiresReduction: boolean\n includeSpec: Record<string, any>\n isLateral: boolean\n lateralMeta: LateralRelationMeta[]\n}\n\nexport interface LateralRelationMeta {\n name: string\n isList: boolean\n fieldTypes: Array<{ fieldName: string; type: string }>\n nestedRelations: LateralRelationMeta[]\n}\n\ninterface ParamCollector {\n values: any[]\n add(value: unknown): string\n}\n\nfunction createParamCollector(): ParamCollector {\n const values: any[] = []\n return {\n values,\n add(value: unknown): string {\n values.push(value)\n return `$${values.length}`\n },\n }\n}\n\nfunction createParamAdapter(collector: ParamCollector): any {\n return {\n add(value: unknown): string {\n return collector.add(value)\n },\n snapshot() {\n return { params: [...collector.values] }\n },\n get length() {\n return collector.values.length\n },\n }\n}\n\nfunction reindexWhereParams(\n whereClause: string | undefined,\n specParams: ParamStore | readonly unknown[],\n collector: ParamCollector,\n): string {\n if (!whereClause || whereClause === '1=1') return ''\n\n const refSet = new Set<number>()\n const re = /\\$(\\d+)/g\n let match: RegExpExecArray | null\n while ((match = re.exec(whereClause)) !== null) {\n refSet.add(Number(match[1]))\n }\n\n if (refSet.size === 0) return whereClause\n\n const allParams: readonly unknown[] = Array.isArray(specParams)\n ? specParams\n : typeof (specParams as any).snapshot === 'function'\n ? (specParams as ParamStore).snapshot().params\n : []\n\n const refs = Array.from(refSet).sort((a, b) => a - b)\n const indexMap = new Map<number, number>()\n\n for (const oldIdx of refs) {\n collector.values.push(allParams[oldIdx - 1])\n indexMap.set(oldIdx, collector.values.length)\n }\n\n let clean = whereClause\n const sorted = Array.from(indexMap.entries()).sort((a, b) => b[0] - a[0])\n for (const [oldIdx, newIdx] of sorted) {\n clean = clean.split(`$${oldIdx}`).join(`$${newIdx}`)\n }\n\n return clean\n}\n\nfunction getRelationModel(\n parentModel: Model,\n relationName: string,\n schemas: readonly Model[],\n): Model | null {\n const indices = getFieldIndices(parentModel)\n const field = indices.allFieldsByName.get(relationName)\n if (!field?.isRelation || !field.relatedModel) return null\n return schemas.find((m) => m.name === field.relatedModel) ?? null\n}\n\nfunction extractOrderByInput(relArgs: unknown): unknown {\n if (!isPlainObject(relArgs)) return undefined\n const obj = relArgs as Record<string, unknown>\n if ('orderBy' in obj) return obj.orderBy\n return undefined\n}\n\nfunction buildChildOrderBy(\n relModel: Model,\n alias: string,\n orderByInput: unknown,\n pkFields: string[],\n): string {\n if (isNotNullish(orderByInput)) {\n const entries = Array.isArray(orderByInput) ? orderByInput : [orderByInput]\n const parts: string[] = []\n for (const entry of entries) {\n if (!isPlainObject(entry)) continue\n for (const [field, dir] of Object.entries(\n entry as Record<string, unknown>,\n )) {\n const direction = String(dir).toUpperCase() === 'DESC' ? 'DESC' : 'ASC'\n parts.push(`${alias}.${quoteColumn(relModel, field)} ${direction}`)\n }\n }\n if (parts.length > 0) return parts.join(', ')\n }\n return pkFields\n .map((f) => `${alias}.${quoteColumn(relModel, f)} ASC`)\n .join(', ')\n}\n\ninterface LateralBuildResult {\n joinSql: string\n latAlias: string\n meta: LateralRelationMeta\n}\n\ninterface LateralBuildContext {\n schemas: readonly Model[]\n dialect: SqlDialect\n aliasCounter: { count: number }\n collector: ParamCollector\n}\n\nfunction buildLateralForRelation(\n relationName: string,\n relArgs: unknown,\n field: Field,\n relModel: Model,\n parentModel: Model,\n parentAlias: string,\n ctx: LateralBuildContext,\n depth: number,\n): LateralBuildResult | null {\n if (depth > LIMITS.MAX_NESTED_JOIN_DEPTH) return null\n\n const isList = isListRelation(field)\n const keys = resolveRelationKeys(field as any, 'include')\n if (!keys || keys.childKeys.length === 0 || keys.parentKeys.length === 0)\n return null\n\n const latAlias = `_l${ctx.aliasCounter.count++}`\n const subAlias = `_s${ctx.aliasCounter.count++}`\n const childAlias = `_c${ctx.aliasCounter.count++}`\n\n const indices = getFieldIndices(relModel)\n const scalarSel = extractScalarSelection(relArgs, relModel)\n const pkFields = getPrimaryKeyFields(relModel)\n\n const selectedFields = scalarSel.includeAllScalars\n ? Array.from(indices.scalarFields.keys())\n : [...new Set([...pkFields, ...scalarSel.selectedScalarFields])]\n\n const nestedSpec = isPlainObject(relArgs)\n ? extractNestedIncludeSpec(relArgs, relModel)\n : {}\n\n const nestedResults: Array<{ name: string; result: LateralBuildResult }> = []\n\n for (const [nestedName, nestedValue] of Object.entries(nestedSpec)) {\n if (nestedValue === false) continue\n const nestedIndices = getFieldIndices(relModel)\n const nestedField = nestedIndices.allFieldsByName.get(nestedName)\n if (!nestedField || !isValidRelationField(nestedField as any)) continue\n\n const nestedModel = getRelationModel(relModel, nestedName, ctx.schemas)\n if (!nestedModel) continue\n\n const nested = buildLateralForRelation(\n nestedName,\n nestedValue,\n nestedField as Field,\n nestedModel,\n relModel,\n childAlias,\n ctx,\n depth + 1,\n )\n\n if (nested) {\n nestedResults.push({ name: nestedName, result: nested })\n }\n }\n\n const innerSelectCols: string[] = []\n for (const fieldName of selectedFields) {\n const f = indices.scalarFields.get(fieldName)\n if (!f) continue\n const colName = f.dbName || f.name\n innerSelectCols.push(`${childAlias}.${quote(colName)} AS ${quote(f.name)}`)\n }\n\n for (const { name, result } of nestedResults) {\n innerSelectCols.push(\n `${result.latAlias}.data AS ${quote(`__nested_${name}`)}`,\n )\n }\n\n const nestedJoinsSql = nestedResults.map((n) => n.result.joinSql).join(' ')\n\n const fkParts = keys.childKeys.map(\n (ck, i) =>\n `${childAlias}.${quoteColumn(relModel, ck)} = ${parentAlias}.${quoteColumn(parentModel, keys.parentKeys[i])}`,\n )\n const fkCondition =\n fkParts.length === 1 ? fkParts[0] : `(${fkParts.join(' AND ')})`\n\n let childWhereSql = ''\n let childWhereJoinsSql = ''\n\n const whereInput = extractWhereInput(relArgs)\n if (Object.keys(whereInput).length > 0) {\n const aliasGen = createAliasGenerator()\n const whereResult = buildWhereClause(whereInput, {\n alias: childAlias,\n schemaModels: ctx.schemas as Model[],\n model: relModel,\n params: createParamAdapter(ctx.collector),\n isSubquery: true,\n aliasGen,\n dialect: ctx.dialect,\n })\n\n if (whereResult.joins.length > 0) {\n childWhereJoinsSql = ' ' + whereResult.joins.join(' ')\n }\n if (isValidWhereClause(whereResult.clause)) {\n childWhereSql = ` AND ${whereResult.clause}`\n }\n }\n\n const rawOrderBy = extractOrderByInput(relArgs)\n const hasOrderBy = isNotNullish(rawOrderBy)\n const { hasTake, takeVal: rawTakeVal, skipVal } = readSkipTake(relArgs)\n\n if (!isList && typeof rawTakeVal === 'number' && rawTakeVal < 0) {\n throw new Error('Negative take is only supported for list relations')\n }\n\n const { takeVal, orderByInput: adjustedOrderBy } = maybeReverseNegativeTake(\n rawTakeVal,\n hasOrderBy,\n rawOrderBy,\n )\n\n const orderBySql = buildChildOrderBy(\n relModel,\n childAlias,\n adjustedOrderBy,\n pkFields,\n )\n\n let paginationSql = ''\n if (isNotNullish(takeVal)) {\n paginationSql += ` LIMIT ${ctx.collector.add(takeVal)}`\n }\n if (isNotNullish(skipVal)) {\n paginationSql += ` OFFSET ${ctx.collector.add(skipVal)}`\n }\n\n const relTable = buildTableReference(\n SQL_TEMPLATES.PUBLIC_SCHEMA,\n relModel.tableName,\n ctx.dialect,\n )\n\n const innerSql =\n `SELECT ${innerSelectCols.join(', ')}` +\n ` FROM ${relTable} ${childAlias}` +\n childWhereJoinsSql +\n (nestedJoinsSql ? ` ${nestedJoinsSql}` : '') +\n ` WHERE ${fkCondition}${childWhereSql}` +\n ` ORDER BY ${orderBySql}` +\n paginationSql\n\n const jsonScalarParts: string[] = []\n for (const fieldName of selectedFields) {\n const f = indices.scalarFields.get(fieldName)\n if (!f) continue\n jsonScalarParts.push(`'${f.name}', ${subAlias}.${quote(f.name)}`)\n }\n\n const jsonNestedParts: string[] = nestedResults.map(\n ({ name }) => `'${name}', ${subAlias}.${quote(`__nested_${name}`)}`,\n )\n\n const jsonExpr = `json_build_object(${[...jsonScalarParts, ...jsonNestedParts].join(', ')})`\n\n let outerSql: string\n if (isList) {\n const aggOrderParts = pkFields\n .map((f) => `${subAlias}.${quote(f)} ASC`)\n .join(', ')\n outerSql =\n `SELECT coalesce(json_agg(${jsonExpr} ORDER BY ${aggOrderParts}), '[]'::json) AS data` +\n ` FROM (${innerSql}) ${subAlias}`\n } else {\n outerSql = `SELECT ${jsonExpr} AS data FROM (${innerSql}) ${subAlias}`\n }\n\n const joinSql = `LEFT JOIN LATERAL (${outerSql}) ${latAlias} ON true`\n\n const fieldTypes = selectedFields\n .map((fieldName) => {\n const f = indices.scalarFields.get(fieldName)\n if (!f) return null\n return {\n fieldName: f.name,\n type: String((f as any).type ?? '').toLowerCase(),\n }\n })\n .filter(Boolean) as LateralRelationMeta['fieldTypes']\n\n const meta: LateralRelationMeta = {\n name: relationName,\n isList,\n fieldTypes,\n nestedRelations: nestedResults.map((n) => n.result.meta),\n }\n\n return { joinSql, latAlias, meta }\n}\n\nfunction countActiveEntries(spec: Record<string, any>): number {\n let count = 0\n for (const value of Object.values(spec)) {\n if (value !== false) count++\n }\n return count\n}\n\nexport function canUseLateralJoin(\n includeSpec: Record<string, any>,\n parentModel: Model,\n schemas: readonly Model[],\n): boolean {\n const relations = resolveIncludeRelations(includeSpec, parentModel, schemas)\n\n if (relations.length < countActiveEntries(includeSpec)) {\n return false\n }\n\n for (const rel of relations) {\n const keys = resolveRelationKeys(rel.field as any, 'include')\n if (!keys || keys.childKeys.length === 0 || keys.parentKeys.length === 0)\n return false\n\n if (Object.keys(rel.nestedSpec).length > 0) {\n if (!canUseLateralJoin(rel.nestedSpec, rel.relModel, schemas))\n return false\n }\n }\n\n return true\n}\n\nexport function buildLateralJoinSql(\n spec: SelectQuerySpec,\n): LateralJoinBuildResult {\n const {\n from,\n whereClause,\n whereJoins,\n orderBy,\n dialect,\n model,\n schemas,\n args,\n pagination,\n } = spec\n\n const emptyResult: LateralJoinBuildResult = {\n sql: '',\n params: [],\n requiresReduction: false,\n includeSpec: {},\n isLateral: false,\n lateralMeta: [],\n }\n\n const entries = extractRelationEntries(args, model)\n const includeSpec: Record<string, any> = {}\n for (const e of entries) {\n includeSpec[e.name] = e.value\n }\n\n if (Object.keys(includeSpec).length === 0) return emptyResult\n\n const collector = createParamCollector()\n\n const cleanWhere = reindexWhereParams(whereClause, spec.params, collector)\n\n const parentScalarCols = buildScalarColumnSelect(model, from.alias)\n const baseJoins = whereJoins.length > 0 ? ` ${whereJoins.join(' ')}` : ''\n const baseWhere = cleanWhere ? ` WHERE ${cleanWhere}` : ''\n const baseOrderBy = orderBy ? ` ORDER BY ${orderBy}` : ''\n\n let parentSub =\n `SELECT ${parentScalarCols} FROM ${from.table} ${from.alias}` +\n baseJoins +\n baseWhere +\n baseOrderBy\n\n const take =\n pagination.take !== undefined && pagination.take !== null\n ? pagination.take\n : null\n const skip =\n pagination.skip !== undefined && pagination.skip !== null\n ? pagination.skip\n : null\n\n if (take !== null) {\n parentSub += ` LIMIT ${collector.add(take)}`\n }\n if (skip !== null) {\n parentSub += ` OFFSET ${collector.add(skip)}`\n }\n\n const aliasCounter = { count: 0 }\n const ctx: LateralBuildContext = {\n schemas,\n dialect,\n aliasCounter,\n collector,\n }\n\n const lateralJoins: string[] = []\n const lateralSelects: string[] = []\n const lateralMeta: LateralRelationMeta[] = []\n\n for (const [relName, relValue] of Object.entries(includeSpec)) {\n if (relValue === false) continue\n\n const indices = getFieldIndices(model)\n const field = indices.allFieldsByName.get(relName)\n if (!field || !isValidRelationField(field as any)) continue\n\n const relModel = getRelationModel(model, relName, schemas)\n if (!relModel) continue\n\n const result = buildLateralForRelation(\n relName,\n relValue,\n field as Field,\n relModel,\n model,\n from.alias,\n ctx,\n 0,\n )\n\n if (!result) continue\n\n lateralJoins.push(result.joinSql)\n lateralSelects.push(`${result.latAlias}.data AS ${quote(relName)}`)\n lateralMeta.push(result.meta)\n }\n\n if (lateralJoins.length === 0) return emptyResult\n\n const baseSelect = (spec.select ?? '').trim()\n const allSelects = [baseSelect, ...lateralSelects]\n .filter((s) => s && s.trim().length > 0)\n .join(', ')\n\n if (!allSelects) {\n return emptyResult\n }\n\n const pkField = getPrimaryKeyField(model)\n const pkOrder = `${from.alias}.${quoteColumn(model, pkField)} ASC`\n\n const sql =\n `SELECT ${allSelects}` +\n ` FROM (${parentSub}) ${from.alias}` +\n ` ${lateralJoins.join(' ')}` +\n ` ORDER BY ${pkOrder}`\n\n return {\n sql: sql.trim(),\n params: collector.values,\n requiresReduction: true,\n includeSpec,\n isLateral: true,\n lateralMeta,\n }\n}\n","import { SQL_TEMPLATES, SQL_SEPARATORS } from '../shared/constants'\nimport { col, quote } from '../shared/sql-utils'\nimport { SelectQuerySpec } from '../shared/types'\nimport {\n isNotNullish,\n isNonEmptyArray,\n isNonEmptyString,\n} from '../shared/validators/type-guards'\nimport { parseOrderByValue, buildOrderByFragment } from '../pagination'\nimport {\n normalizeOrderByInput,\n OrderBySortObject,\n} from '../shared/order-by-utils'\nimport { SqlDialect } from '../../sql-builder-dialect'\n\nconst DISTINCT_ROW_NUMBER_COLUMN = '__tp_rn'\nconst DISTINCT_WRAPPER_ALIAS = '__tp_distinct'\nconst DISTINCT_FIRST_ROW = 1\nconst DEFAULT_PRIMARY_KEY = 'id'\nexport const COUNT_SELECT_KEY = '_count'\n\nexport type OrderByEntry = {\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 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_SELECT_KEY]\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\nexport function getOrderByEntries(spec: SelectQuerySpec): OrderByEntry[] {\n if (!isNotNullish(spec.args.orderBy)) return []\n const normalized = normalizeOrderByInput(spec.args.orderBy, parseOrderByValue)\n const entries: OrderByEntry[] = []\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 if (typeof value === 'string') {\n entries.push({ field, direction: value as 'asc' | 'desc' })\n continue\n }\n const obj = value as OrderBySortObject\n entries.push({ field, direction: obj.direction, nulls: obj.nulls })\n }\n }\n return entries\n}\n\nexport function renderOrderBySql(\n entries: OrderByEntry[],\n alias: string,\n dialect: SqlDialect,\n model?: any,\n): string {\n return buildOrderByFragment(entries, alias, dialect, model)\n}\n\nfunction renderOrderBySimple(entries: OrderByEntry[], alias: string): string {\n if (entries.length === 0) return ''\n const out: string[] = []\n for (const e of entries) {\n const dir = e.direction.toUpperCase()\n const c = `${alias}.${quote(e.field)}`\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 } else {\n out.push(c + ' ' + dir)\n }\n }\n return out.join(SQL_SEPARATORS.ORDER_BY)\n}\n\nexport function ensureIdTiebreakerEntries(\n entries: OrderByEntry[],\n model: any,\n): OrderByEntry[] {\n const idField = model?.fields?.find?.(\n (f: any) => f.name === DEFAULT_PRIMARY_KEY && !f.isRelation,\n )\n if (!idField) return entries\n if (entries.some((e) => e.field === DEFAULT_PRIMARY_KEY)) return entries\n return [...entries, { field: DEFAULT_PRIMARY_KEY, direction: 'asc' }]\n}\n\nexport function ensurePostgresDistinctOrderEntries(args: {\n entries: OrderByEntry[]\n distinct: readonly string[]\n model: any\n}): OrderByEntry[] {\n const { entries, distinct, model } = args\n\n const distinctEntries: OrderByEntry[] = [...distinct].map((f) => ({\n field: f,\n direction: 'asc' as const,\n }))\n\n const canKeepAsIs =\n entries.length >= distinctEntries.length &&\n distinctEntries.every((de, i) => entries[i].field === de.field)\n\n const merged = canKeepAsIs ? entries : [...distinctEntries, ...entries]\n\n return ensureIdTiebreakerEntries(merged, model)\n}\n\nfunction extractDistinctOrderEntries(spec: SelectQuerySpec): OrderByEntry[] {\n const entries = getOrderByEntries(spec)\n if (entries.length > 0) return entries\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 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\nexport function buildSqliteDistinctQuery(\n spec: SelectQuerySpec,\n selectWithIncludes: string,\n countJoins?: string[],\n): string {\n const { includes, from, whereClause, whereJoins, distinct, model } = 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_SELECT_KEY])\n\n const outerSelectCols = buildOutputColumns(\n scalarNames,\n includeNames,\n hasCount,\n )\n const distinctCols = buildDistinctColumns([...distinct], from.alias, model)\n\n const baseEntries = getOrderByEntries(spec)\n const fallbackEntries: OrderByEntry[] = [...distinct].map((f) => ({\n field: f,\n direction: 'asc' as const,\n }))\n\n const resolvedEntries = baseEntries.length > 0 ? baseEntries : fallbackEntries\n\n const windowEntries = ensureIdTiebreakerEntries(resolvedEntries, model)\n const windowOrder = renderOrderBySql(\n windowEntries,\n from.alias,\n 'sqlite',\n model,\n )\n\n const outerEntries = extractDistinctOrderEntries(spec)\n const outerOrder = renderOrderBySimple(\n outerEntries,\n `\"${DISTINCT_WRAPPER_ALIAS}\"`,\n )\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 `\"${DISTINCT_ROW_NUMBER_COLUMN}\"`,\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 `\"${DISTINCT_WRAPPER_ALIAS}\"`,\n SQL_TEMPLATES.WHERE,\n `\"${DISTINCT_ROW_NUMBER_COLUMN}\" = ${DISTINCT_FIRST_ROW}`,\n ]\n if (isNonEmptyString(outerOrder)) {\n outerParts.push(SQL_TEMPLATES.ORDER_BY, outerOrder)\n }\n return outerParts.join(' ')\n}\n\nexport function 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","import type { PrismaQueryArgs } from '../../types'\nimport { SQL_TEMPLATES, SQL_SEPARATORS } from '../shared/constants'\nimport { 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 './include-count'\nimport { emptyJsonArray } from './include-join'\n\nimport { getRelationFieldSet } from '../shared/model-field-cache'\nimport { isDynamicParameter } from '@dee-wan/schema-parser'\nimport {\n hasChildPaginationAnywhere,\n pickIncludeStrategy,\n} from './strategy-estimator'\nimport { buildFlatJoinSql, canUseFlatJoinForAll } from './flat-join'\nimport { buildLateralJoinSql, canUseLateralJoin } from './lateral-join'\nimport {\n getOrderByEntries,\n renderOrderBySql,\n ensurePostgresDistinctOrderEntries,\n buildSqliteDistinctQuery,\n buildPostgresDistinctOnClause,\n COUNT_SELECT_KEY,\n} from './distinct'\nimport { joinNonEmpty } from '../shared/array-utils'\n\nconst ALWAYS_TRUE_CONDITION = '1=1'\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 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 =\n spec.args?.select?.[COUNT_SELECT_KEY] ??\n spec.args?.include?.[COUNT_SELECT_KEY]\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_SELECT_KEY)\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 = emptyJsonArray(dialect)\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\nfunction 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 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 !== ALWAYS_TRUE_CONDITION)\n 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 && key !== COUNT_SELECT_KEY) {\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\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 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 const takeValue = typeof pagination.take === 'number' ? pagination.take : null\n\n if (dialect === 'postgres' && hasIncludes) {\n const canFlatJoin = canUseFlatJoinForAll(includeSpec, model, schemas)\n const canLateral = canUseLateralJoin(includeSpec, model, schemas)\n const hasChildPag = hasChildPaginationAnywhere(includeSpec, model, schemas)\n\n const strategy = pickIncludeStrategy({\n includeSpec,\n model,\n schemas,\n method,\n args,\n takeValue,\n hasPagination,\n canFlatJoin,\n canLateral,\n hasChildPagination: hasChildPag,\n })\n\n if (strategy === 'flat-join') {\n const flatResult = buildFlatJoinSql(spec)\n\n if (flatResult.sql) {\n validateSelectQuery(flatResult.sql)\n validateParamConsistencyByDialect(\n flatResult.sql,\n flatResult.params,\n dialect,\n )\n return {\n sql: flatResult.sql,\n params: flatResult.params,\n paramMappings: flatResult.params.map((v: any, i: number) => ({\n index: i + 1,\n value: v,\n })),\n requiresReduction: true,\n includeSpec: flatResult.includeSpec,\n }\n }\n }\n\n if (strategy === 'lateral') {\n const lateralResult = buildLateralJoinSql(spec)\n if (lateralResult.sql) {\n return {\n sql: lateralResult.sql,\n params: lateralResult.params,\n requiresReduction: true,\n includeSpec: lateralResult.includeSpec,\n isLateral: true,\n lateralMeta: lateralResult.lateralMeta,\n }\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 const currentEntries = getOrderByEntries(spec)\n const mergedEntries = ensurePostgresDistinctOrderEntries({\n entries: currentEntries.length > 0 ? currentEntries : [],\n distinct: [...distinct],\n model,\n })\n finalOrderBy = renderOrderBySql(mergedEntries, from.alias, dialect, model)\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 { 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(\n `Unknown field '${unknown.join(\"', '\")}' does not exist on this model`,\n )\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 { 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 { buildRelationCountSql } from './include-count'\nimport { Model, PrismaQueryArgs, Field } from '../../types'\nimport { createAliasGenerator } from '../shared/alias-generator'\nimport { SQL_TEMPLATES, SQL_SEPARATORS, LIMITS } from '../shared/constants'\nimport { quote, quoteColumn, sqlStringLiteral } 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 isNonEmptyArray,\n isNotNullish,\n isPlainObject,\n} from '../shared/validators/type-guards'\nimport { normalizeOrderByInput as normalizeOrderByShared } from '../shared/order-by-utils'\nimport { addAutoScoped } from '../shared/dynamic-params'\nimport {\n getFieldIndices,\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 { extractRelationEntries } from '../shared/relation-extraction-utils'\nimport {\n buildIncludeScope,\n getRelationTableReference,\n emptyJsonArray,\n canUseJoinInclude,\n hasNestedRelationInArgs,\n buildJoinBasedNonPaginated,\n buildJoinBasedPaginated,\n} from './include-join'\nimport { extractWhereInput } from '../shared/relation-query-context'\nimport { isListRelation } from '../shared/field-type-utils'\nimport { maybeReverseNegativeTake } from '../shared/negative-take-utils'\nimport { getPrimaryKeyField } from '../shared/primary-key-utils'\n\nconst ROW_SUBQUERY_ALIAS_SUFFIX = '_row'\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 NestedToOneRelation {\n name: string\n field: Field\n model: Model\n args: unknown\n}\n\nfunction resolveRelationOrThrow(\n model: Model,\n schemaByName: Map<string, Model>,\n relName: string,\n): { field: Field; relModel: Model } {\n const indices = getFieldIndices(model)\n const field = indices.allFieldsByName.get(relName)\n\n if (!isNotNullish(field)) {\n throw new Error(\n `Unknown relation '${relName}' on model ${model.name}. ` +\n `Available relation fields: ${indices.relationNames.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 = normalizeOrderByShared(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 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 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 extractNestedToOneRelations(\n relArgs: unknown,\n relModel: Model,\n schemaByName: Map<string, Model>,\n): NestedToOneRelation[] {\n if (!isPlainObject(relArgs)) return []\n\n const entries = extractRelationEntries(relArgs as any, relModel)\n const toOneRelations: NestedToOneRelation[] = []\n\n for (const entry of entries) {\n const indices = getFieldIndices(relModel)\n const field = indices.allFieldsByName.get(entry.name)\n if (!field || !isValidRelationField(field as Field)) continue\n\n const isList = isListRelation(field as Field)\n if (isList) continue\n\n const nestedModel = schemaByName.get(field.relatedModel!)\n if (!nestedModel) continue\n\n toOneRelations.push({\n name: entry.name,\n field: field as Field,\n model: nestedModel,\n args: entry.value,\n })\n }\n\n return toOneRelations\n}\n\nfunction buildNestedToOneJoins(\n relations: NestedToOneRelation[],\n baseAlias: string,\n baseModel: Model,\n aliasGen: AliasGenerator,\n dialect: SqlDialect,\n): { joins: string[]; aliasMap: Map<string, string> } {\n const joins: string[] = []\n const aliasMap = new Map<string, string>()\n\n for (const rel of relations) {\n const relTable = getRelationTableReference(rel.model, dialect)\n const relAlias = aliasGen.next(`${rel.name}_joined`)\n const joinCond = joinCondition(\n rel.field,\n baseModel,\n rel.model,\n baseAlias,\n relAlias,\n )\n\n joins.push(`LEFT JOIN ${relTable} ${relAlias} ON ${joinCond}`)\n aliasMap.set(rel.name, relAlias)\n }\n\n return { joins, aliasMap }\n}\n\nfunction buildNestedToOneSelects(\n relations: NestedToOneRelation[],\n aliasMap: Map<string, string>,\n dialect: SqlDialect,\n): string[] {\n const selects: string[] = []\n\n for (const rel of relations) {\n const relAlias = aliasMap.get(rel.name)\n if (!relAlias) continue\n\n const relSelect = buildRelationSelect(rel.args, rel.model, relAlias)\n if (!relSelect || relSelect.trim().length === 0) continue\n\n const jsonExpr = jsonBuildObject(relSelect, dialect)\n const pkField = getPrimaryKeyField(rel.model)\n const pkCol = `${relAlias}.${quoteColumn(rel.model, pkField)}`\n const nullSafeExpr = `CASE WHEN ${pkCol} IS NOT NULL THEN ${jsonExpr} ELSE NULL END`\n\n selects.push(`${sqlStringLiteral(rel.name)}, ${nullSafeExpr}`)\n }\n\n return selects\n}\n\nfunction extractCountSelectFromRelArgs(\n relArgs: unknown,\n): Record<string, boolean> | null {\n if (!isPlainObject(relArgs)) return null\n const obj = relArgs as Record<string, unknown>\n if (!isPlainObject(obj.select)) return null\n const sel = obj.select as Record<string, unknown>\n const countRaw = sel['_count']\n if (!countRaw) return null\n if (isPlainObject(countRaw) && 'select' in countRaw) {\n return (countRaw as { select: Record<string, boolean> }).select\n }\n return null\n}\n\nfunction buildSelectWithNestedIncludes(\n relArgs: unknown,\n relModel: Model,\n relAlias: string,\n ctx: IncludeBuildContext,\n): { select: string; nestedJoins: string[] } {\n const nestedToOnes = extractNestedToOneRelations(\n relArgs,\n relModel,\n ctx.schemaByName,\n )\n\n const countSelect = extractCountSelectFromRelArgs(relArgs)\n const countJoins: string[] = []\n\n function appendCountToSelect(baseSelect: string): string {\n if (!countSelect || Object.keys(countSelect).length === 0) return baseSelect\n const countBuild = buildRelationCountSql(\n countSelect,\n relModel,\n ctx.schemas,\n relAlias,\n ctx.params,\n ctx.dialect,\n )\n if (!countBuild.jsonPairs) return baseSelect\n countJoins.push(...countBuild.joins)\n const countExpr = `'_count', ${jsonBuildObject(countBuild.jsonPairs, ctx.dialect)}`\n return baseSelect\n ? `${baseSelect}${SQL_SEPARATORS.FIELD_LIST}${countExpr}`\n : countExpr\n }\n\n if (nestedToOnes.length === 0) {\n let relSelect = buildRelationSelect(relArgs, relModel, relAlias)\n\n let nestedIncludes: IncludeSpec[] = []\n if (isPlainObject(relArgs)) {\n const prevModel = ctx.model\n const prevParentAlias = ctx.parentAlias\n const prevDepth = ctx.depth\n\n ctx.model = relModel\n ctx.parentAlias = relAlias\n ctx.depth = prevDepth + 1\n\n try {\n nestedIncludes = buildIncludeSqlInternal(\n relArgs as PrismaQueryArgs,\n ctx,\n )\n } finally {\n ctx.model = prevModel\n ctx.parentAlias = prevParentAlias\n ctx.depth = prevDepth\n }\n }\n\n if (isNonEmptyArray(nestedIncludes)) {\n const emptyJson = emptyJsonArray(ctx.dialect)\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 relSelect = appendCountToSelect(relSelect)\n\n return { select: relSelect, nestedJoins: countJoins }\n }\n\n const { joins, aliasMap } = buildNestedToOneJoins(\n nestedToOnes,\n relAlias,\n relModel,\n ctx.aliasGen,\n ctx.dialect,\n )\n\n const baseSelect = buildRelationSelect(relArgs, relModel, relAlias)\n const nestedSelects = buildNestedToOneSelects(\n nestedToOnes,\n aliasMap,\n ctx.dialect,\n )\n\n const allParts: string[] = []\n if (baseSelect && baseSelect.trim().length > 0) {\n allParts.push(baseSelect)\n }\n for (const ns of nestedSelects) {\n allParts.push(ns)\n }\n\n let finalSelect = allParts.join(SQL_SEPARATORS.FIELD_LIST)\n finalSelect = appendCountToSelect(finalSelect)\n\n return {\n select: finalSelect,\n nestedJoins: [...joins, ...countJoins],\n }\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 nestedJoins: string[]\n}): string {\n const allJoins = [args.joins, ...args.nestedJoins].filter((j) => j).join(' ')\n const joinsStr = allJoins ? ` ${allJoins}` : ''\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}${joinsStr} ` +\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 nestedJoins: string[]\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 nestedJoins: args.nestedJoins,\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 nestedJoins: string[]\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 = emptyJsonArray(args.ctx.dialect)\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 nestedJoins: args.nestedJoins,\n })\n\n return Object.freeze({ name: args.relName, sql, isOneToOne: false })\n }\n\n const rowAlias = args.ctx.aliasGen.next(\n `${args.relName}${ROW_SUBQUERY_ALIAS_SUFFIX}`,\n )\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 nestedJoins: args.nestedJoins,\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 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 = isListRelation(field)\n const joinPredicate = joinCondition(\n field,\n ctx.model,\n relModel,\n ctx.parentAlias,\n relAlias,\n )\n\n const whereInput = extractWhereInput(relArgs)\n const { select: relSelect, nestedJoins } = 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 nestedJoins,\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 nestedJoins,\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 nestedJoins,\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 nestedJoins,\n })\n}\n\nfunction buildIncludeSqlInternal(\n args: IncludeSelectArgs,\n ctx: IncludeBuildContext,\n): IncludeSpec[] {\n const depth = ctx.depth\n\n if (depth > LIMITS.MAX_INCLUDE_DEPTH) {\n throw new Error(\n `Maximum include depth of ${LIMITS.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 > LIMITS.MAX_SELF_REFERENTIAL_DEPTH) {\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 ${LIMITS.MAX_SELF_REFERENTIAL_DEPTH} 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 > LIMITS.MAX_INCLUDES_PER_LEVEL) {\n throw new Error(\n `Too many includes at depth ${depth} (${entries.length} > ${LIMITS.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 > LIMITS.MAX_TOTAL_SUBQUERIES) {\n throw new Error(\n `Query complexity limit exceeded: ${ctx.stats.totalIncludes} includes generated. ` +\n `Maximum allowed: ${LIMITS.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 ctx.includePath.push(relName)\n ctx.visitSet.add(relationPath)\n\n try {\n includes.push(\n buildSingleInclude(\n relName,\n relArgs,\n resolved.field,\n resolved.relModel,\n ctx,\n ),\n )\n } finally {\n ctx.includePath.pop()\n ctx.visitSet.delete(relationPath)\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","import { Field, Model } from '../../types'\nimport { SqlDialect } from '../../sql-builder-dialect'\nimport { buildTableReference, col, quote } from './sql-utils'\nimport { joinCondition, getModelByName } from '../joins'\nimport { getRelationFieldSet, getScalarFieldSet } from './model-field-cache'\nimport { SQL_SEPARATORS } from './constants'\nimport { isPlainObject, isNotNullish } from './validators/type-guards'\nimport {\n expandOrderByInput,\n normalizeAndValidateOrderBy,\n} from './order-by-utils'\nimport { parseOrderByValue, buildOrderByFragment } from '../pagination'\n\nconst MAX_RELATION_ORDER_BY_DEPTH = 10\n\ninterface OrderByWithRelationsResult {\n sql: string\n joins: string[]\n}\n\ninterface RelationOrderByContext {\n schemas: Model[]\n dialect: SqlDialect\n joins: string[]\n usedAliases: Set<string>\n aliasCounter: { value: number }\n}\n\nfunction resolveTableRef(model: Model, dialect: SqlDialect): string {\n const tableName =\n (model as any).tableName || (model as any).dbName || model.name\n if (dialect === 'sqlite') {\n return quote(tableName)\n }\n const schema = (model as any).schema || (model as any).schemaName || 'public'\n return buildTableReference(schema, tableName, dialect)\n}\n\nfunction findRelationField(model: Model, fieldName: string) {\n return model.fields.find((f) => f.name === fieldName && f.isRelation)\n}\n\nfunction nextJoinAlias(ctx: RelationOrderByContext): string {\n let alias: string\n do {\n alias = `ob_${ctx.aliasCounter.value++}`\n } while (ctx.usedAliases.has(alias))\n ctx.usedAliases.add(alias)\n return alias\n}\n\nfunction resolveRelationOrderByChain(\n relationFieldName: string,\n value: Record<string, unknown>,\n currentModel: Model,\n currentAlias: string,\n ctx: RelationOrderByContext,\n depth: number,\n): string[] {\n if (depth > MAX_RELATION_ORDER_BY_DEPTH) {\n throw new Error(\n `Relation orderBy nesting too deep (max ${MAX_RELATION_ORDER_BY_DEPTH} levels)`,\n )\n }\n\n if ('_count' in value && value._count !== undefined) {\n throw new Error(\n `Relation orderBy with _count on '${relationFieldName}' is not yet supported by prisma-sql`,\n )\n }\n\n const field = findRelationField(currentModel, relationFieldName)\n if (!field) {\n throw new Error(\n `Relation field '${relationFieldName}' not found on model ${currentModel.name}`,\n )\n }\n\n const relatedModel = getModelByName(ctx.schemas, field.relatedModel!)\n if (!relatedModel) {\n throw new Error(\n `Related model '${field.relatedModel}' not found for relation '${relationFieldName}'`,\n )\n }\n\n const joinAlias = nextJoinAlias(ctx)\n const tableRef = resolveTableRef(relatedModel, ctx.dialect)\n const cond = joinCondition(\n field as unknown as Field,\n currentModel,\n relatedModel,\n currentAlias,\n joinAlias,\n )\n ctx.joins.push(`LEFT JOIN ${tableRef} ${joinAlias} ON ${cond}`)\n\n const relScalarSet = getScalarFieldSet(relatedModel)\n const relRelationSet = getRelationFieldSet(relatedModel)\n const nestedEntries = Object.entries(value).filter(([, v]) => v !== undefined)\n const orderFragments: string[] = []\n\n for (const [nestedField, nestedValue] of nestedEntries) {\n if (relScalarSet.has(nestedField)) {\n const entries = normalizeAndValidateOrderBy(\n [{ [nestedField]: nestedValue }],\n relatedModel,\n parseOrderByValue,\n )\n const sql = buildOrderByFragment(\n entries,\n joinAlias,\n ctx.dialect,\n relatedModel,\n )\n if (sql) orderFragments.push(sql)\n continue\n }\n\n if (relRelationSet.has(nestedField)) {\n if (!isPlainObject(nestedValue)) {\n throw new Error(\n `Relation orderBy for '${nestedField}' must be an object`,\n )\n }\n const nested = resolveRelationOrderByChain(\n nestedField,\n nestedValue,\n relatedModel,\n joinAlias,\n ctx,\n depth + 1,\n )\n orderFragments.push(...nested)\n continue\n }\n\n throw new Error(\n `orderBy field '${nestedField}' does not exist on related model '${relatedModel.name}'`,\n )\n }\n\n return orderFragments\n}\n\nexport function buildOrderByWithRelations(\n orderBy: unknown,\n alias: string,\n dialect: SqlDialect,\n model: Model,\n schemas: Model[],\n): OrderByWithRelationsResult {\n if (!isNotNullish(orderBy)) return { sql: '', joins: [] }\n\n const expanded = expandOrderByInput(orderBy)\n if (expanded.length === 0) return { sql: '', joins: [] }\n\n const relationSet = getRelationFieldSet(model)\n const scalarSet = getScalarFieldSet(model)\n const orderFragments: string[] = []\n\n const ctx: RelationOrderByContext = {\n schemas,\n dialect,\n joins: [],\n usedAliases: new Set<string>(),\n aliasCounter: { value: 0 },\n }\n\n for (const [fieldName, value] of expanded) {\n if (scalarSet.has(fieldName)) {\n const entries = normalizeAndValidateOrderBy(\n [{ [fieldName]: value }],\n model,\n parseOrderByValue,\n )\n const sql = buildOrderByFragment(entries, alias, dialect, model)\n if (sql) orderFragments.push(sql)\n continue\n }\n\n if (relationSet.has(fieldName)) {\n if (!isPlainObject(value)) {\n throw new Error(`Relation orderBy for '${fieldName}' must be an object`)\n }\n\n const fragments = resolveRelationOrderByChain(\n fieldName,\n value,\n model,\n alias,\n ctx,\n 0,\n )\n orderFragments.push(...fragments)\n continue\n }\n\n throw new Error(\n `orderBy field '${fieldName}' does not exist on model ${model.name}`,\n )\n }\n\n return {\n sql: orderFragments.join(SQL_SEPARATORS.ORDER_BY),\n joins: ctx.joins,\n }\n}\n","import { SqlDialect, getGlobalDialect } from '../sql-builder-dialect'\nimport { PrismaQueryArgs, Model } from '../types'\nimport {\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 expandOrderByInput,\n} from './shared/order-by-utils'\nimport { buildOrderByWithRelations } from './shared/order-by-relation'\nimport { createParamStoreFrom } from './shared/param-store'\nimport { assertSafeAlias, assertSafeTableRef } from './shared/sql-utils'\nimport { WhereClauseResult, SqlResult, SelectQuerySpec } from './shared/types'\nimport {\n isNotNullish,\n isNonEmptyArray,\n isPlainObject,\n} from './shared/validators/type-guards'\nimport { assertScalarField } from './shared/validators/field-assertions'\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 field. 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 isScalarSortValue(v: unknown): boolean {\n if (typeof v === 'string') {\n const lower = v.toLowerCase()\n return lower === 'asc' || lower === 'desc'\n }\n if (\n isPlainObject(v) &&\n (Object.prototype.hasOwnProperty.call(v, 'sort') ||\n Object.prototype.hasOwnProperty.call(v, 'direction'))\n ) {\n return true\n }\n return false\n}\n\nfunction validateOrderBy(\n model: Model,\n orderBy: PrismaQueryArgs['orderBy'],\n schemas: Model[],\n): void {\n if (!isNotNullish(orderBy)) return\n\n const expanded = expandOrderByInput(orderBy)\n if (expanded.length === 0) return\n\n const scalarSet = getScalarFieldSet(model)\n const relationSet = getRelationFieldSet(model)\n\n for (const [fieldName, value] of expanded) {\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 assertScalarField(model, f, 'orderBy')\n continue\n }\n\n if (relationSet.has(f)) {\n if (!isPlainObject(value)) {\n throw new Error(`Relation orderBy for '${f}' must be an object`)\n }\n continue\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\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 orderByResult = buildOrderByWithRelations(\n normalizedArgs.orderBy,\n alias,\n dialect,\n model,\n schemas,\n )\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 const orderByJoins = orderByResult.joins\n const combinedWhereJoins: readonly string[] = whereResult.joins\n ? [...whereResult.joins, ...orderByJoins]\n : orderByJoins.length > 0\n ? orderByJoins\n : []\n\n return {\n select: selectFields,\n includes,\n from: { table: tableName, alias },\n whereClause: whereResult.clause,\n whereJoins: combinedWhereJoins,\n orderBy: orderByResult.sql,\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 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 validateParamConsistencyByDialect,\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 dialect?: SqlDialect,\n): SqlResult {\n assertSafeAlias(alias)\n assertSafeTableRef(tableName)\n\n const d = dialect ?? getGlobalDialect()\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 validateParamConsistencyByDialect(sql, whereResult.params, d)\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 validateParamConsistencyByDialect(sql, allParams, d)\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 dialect: SqlDialect,\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 validateParamConsistencyByDialect(sql, whereResult.params, dialect)\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 const d = dialect ?? getGlobalDialect()\n\n if (!model) {\n return buildSimpleCountSql(whereResult, tableName, alias, d)\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, d)\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 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 validateParamConsistencyByDialect(sql, sub.params, d)\n\n return {\n sql,\n params: sub.params,\n paramMappings: sub.paramMappings,\n }\n}\n","export const DIGIT_0 = 48\nexport const DIGIT_9 = 57\nexport const UPPER_A = 65\nexport const UPPER_Z = 90\nexport const LOWER_A = 97\nexport const LOWER_Z = 122\nexport const UNDERSCORE = 95\nexport const SINGLE_QUOTE = 39\nexport const DOUBLE_QUOTE = 34\nexport const DOLLAR = 36\nexport const DASH = 45\nexport const SLASH = 47\nexport const ASTERISK = 42\nexport const NEWLINE = 10\n\nexport function isDigit(charCode: number): boolean {\n return charCode >= DIGIT_0 && charCode <= DIGIT_9\n}\n\nexport function isAlphaNumericOrUnderscore(charCode: number): boolean {\n return (\n isDigit(charCode) ||\n (charCode >= UPPER_A && charCode <= UPPER_Z) ||\n (charCode >= LOWER_A && charCode <= LOWER_Z) ||\n charCode === UNDERSCORE\n )\n}\n\nexport function extractParameterNumber(\n sql: string,\n startPos: number,\n): { num: number; nextPos: number } | null {\n const n = sql.length\n let j = startPos + 1\n if (j >= n) return null\n\n const c1 = sql.charCodeAt(j)\n if (!isDigit(c1)) return null\n\n let num = c1 - DIGIT_0\n j++\n\n while (j < n && isDigit(sql.charCodeAt(j))) {\n num = num * 10 + (sql.charCodeAt(j) - DIGIT_0)\n j++\n }\n\n return { num, nextPos: j }\n}\n\nexport function readDollarTag(\n s: string,\n pos: number,\n n: number,\n): string | null {\n if (s.charCodeAt(pos) !== DOLLAR) return null\n\n let j = pos + 1\n while (j < n && isAlphaNumericOrUnderscore(s.charCodeAt(j))) {\n j++\n }\n\n if (j < n && s.charCodeAt(j) === DOLLAR && j > pos) {\n return s.slice(pos, j + 1)\n }\n\n if (pos + 1 < n && s.charCodeAt(pos + 1) === DOLLAR) {\n return '$$'\n }\n\n return null\n}\n\nexport function scanSingleQuote(sql: string, startPos: number): number {\n const n = sql.length\n let i = startPos + 1\n\n while (i < n) {\n if (sql.charCodeAt(i) === SINGLE_QUOTE) {\n if (i + 1 < n && sql.charCodeAt(i + 1) === SINGLE_QUOTE) {\n i += 2\n continue\n }\n return i + 1\n }\n i++\n }\n\n return n\n}\n\nexport function scanDoubleQuote(sql: string, startPos: number): number {\n const n = sql.length\n let i = startPos + 1\n\n while (i < n) {\n if (sql.charCodeAt(i) === DOUBLE_QUOTE) {\n if (i + 1 < n && sql.charCodeAt(i + 1) === DOUBLE_QUOTE) {\n i += 2\n continue\n }\n return i + 1\n }\n i++\n }\n\n return n\n}\n\nexport function scanDollarQuoted(\n sql: string,\n startPos: number,\n dollarTag: string,\n): number {\n const n = sql.length\n const tagLen = dollarTag.length\n let i = startPos + tagLen\n\n while (i < n) {\n if (sql.slice(i, i + tagLen) === dollarTag) {\n return i + tagLen\n }\n i++\n }\n\n return n\n}\n","import {\n extractParameterNumber,\n readDollarTag,\n DOLLAR,\n DOUBLE_QUOTE,\n SINGLE_QUOTE,\n DASH,\n SLASH,\n ASTERISK,\n NEWLINE,\n} from './sql-placeholder'\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\nexport type PlaceholderHandler = (oldIndex: number) => string\n\nexport interface ScanOptions {\n pgAware: boolean\n strictPlaceholders?: boolean\n}\n\nconst NORMAL_STATE: ScanState = Object.freeze({\n mode: 'normal' as const,\n dollarTag: null,\n})\n\nfunction processQuotedContent(\n sql: string,\n pos: number,\n len: number,\n quoteChar: number,\n): { endPos: number; text: string } {\n let i = pos\n let text = ''\n while (i < len) {\n const ch = sql.charCodeAt(i)\n if (ch === quoteChar) {\n if (i + 1 < len && sql.charCodeAt(i + 1) === quoteChar) {\n text += sql[i] + sql[i + 1]\n i += 2\n continue\n }\n text += sql[i]\n i++\n return { endPos: i, text }\n }\n text += sql[i]\n i++\n }\n return { endPos: i, text }\n}\n\nfunction findLineCommentEnd(sql: string, pos: number, len: number): number {\n let i = pos\n while (i < len) {\n if (sql.charCodeAt(i) === NEWLINE) return i + 1\n i++\n }\n return len\n}\n\nfunction findBlockCommentEnd(sql: string, pos: number, len: number): number {\n let i = pos\n while (i < len) {\n if (\n sql.charCodeAt(i) === ASTERISK &&\n i + 1 < len &&\n sql.charCodeAt(i + 1) === SLASH\n ) {\n return i + 2\n }\n i++\n }\n return len\n}\n\nfunction processPlaceholder(\n sql: string,\n pos: number,\n handler: PlaceholderHandler,\n strict: boolean,\n): { consumed: number; output: string } {\n const result = extractParameterNumber(sql, pos)\n\n if (!result) {\n return { consumed: 1, output: sql[pos] }\n }\n\n if (result.num < 1) {\n if (strict) {\n throw new Error(`Invalid param placeholder: $${result.num}`)\n }\n return { consumed: 1, output: sql[pos] }\n }\n\n return {\n consumed: result.nextPos - pos,\n output: handler(result.num),\n }\n}\n\nexport function scanSqlPlaceholders(\n sql: string,\n handler: PlaceholderHandler,\n options: ScanOptions,\n): string {\n const len = sql.length\n let i = 0\n let out = ''\n let state: ScanState = NORMAL_STATE\n const strict = options.strictPlaceholders !== false\n\n while (i < len) {\n const ch = sql.charCodeAt(i)\n\n if (state.mode === 'single' || state.mode === 'double') {\n const quoteChar = state.mode === 'single' ? SINGLE_QUOTE : DOUBLE_QUOTE\n const result = processQuotedContent(sql, i, len, quoteChar)\n out += result.text\n i = result.endPos\n state = NORMAL_STATE\n continue\n }\n\n if (options.pgAware && state.mode === 'lineComment') {\n const endPos = findLineCommentEnd(sql, i, len)\n out += sql.slice(i, endPos)\n i = endPos\n state = NORMAL_STATE\n continue\n }\n\n if (options.pgAware && state.mode === 'blockComment') {\n const endPos = findBlockCommentEnd(sql, i, len)\n out += sql.slice(i, endPos)\n i = endPos\n state = NORMAL_STATE\n continue\n }\n\n if (options.pgAware && state.mode === 'dollar' && state.dollarTag) {\n const tag = state.dollarTag\n if (sql.slice(i, i + tag.length) === tag) {\n out += tag\n i += tag.length\n state = NORMAL_STATE\n } else {\n out += sql[i]\n i++\n }\n continue\n }\n\n if (ch === SINGLE_QUOTE) {\n out += sql[i]\n i++\n state = { mode: 'single', dollarTag: null }\n continue\n }\n\n if (ch === DOUBLE_QUOTE) {\n out += sql[i]\n i++\n state = { mode: 'double', dollarTag: null }\n continue\n }\n\n if (options.pgAware) {\n if (ch === DASH && i + 1 < len && sql.charCodeAt(i + 1) === DASH) {\n out += sql[i] + sql[i + 1]\n i += 2\n state = { mode: 'lineComment', dollarTag: null }\n continue\n }\n\n if (ch === SLASH && i + 1 < len && sql.charCodeAt(i + 1) === ASTERISK) {\n out += sql[i] + sql[i + 1]\n i += 2\n state = { mode: 'blockComment', dollarTag: null }\n continue\n }\n }\n\n if (ch === DOLLAR) {\n if (options.pgAware) {\n const tag = readDollarTag(sql, i, len)\n if (tag) {\n out += tag\n i += tag.length\n state = { mode: 'dollar', dollarTag: tag }\n continue\n }\n }\n\n const placeholder = processPlaceholder(sql, i, handler, strict)\n out += placeholder.output\n i += placeholder.consumed\n continue\n }\n\n out += sql[i]\n i++\n }\n\n return out\n}\n\nexport function reindexPlaceholders(\n sql: string,\n params: readonly unknown[],\n offset: number,\n pgAware: boolean = true,\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 = scanSqlPlaceholders(\n sql,\n (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 { pgAware, strictPlaceholders: true },\n )\n\n return { sql: reindexed, params: newParams }\n}\n\nexport function pgToSqlitePlaceholders(\n sql: string,\n params: readonly unknown[],\n): { sql: string; params: unknown[] } {\n const reordered: unknown[] = []\n\n const converted = scanSqlPlaceholders(\n sql,\n (oldIndex) => {\n reordered.push(params[oldIndex - 1])\n return '?'\n },\n { pgAware: false, strictPlaceholders: false },\n )\n\n return { sql: converted, params: reordered }\n}\n\nexport function containsPlaceholder(sql: string): boolean {\n let found = false\n scanSqlPlaceholders(\n sql,\n (oldIndex) => {\n found = true\n return `$${oldIndex}`\n },\n { pgAware: true, strictPlaceholders: true },\n )\n return found\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'\nimport { LateralRelationMeta } from './builder/select/lateral-join'\nimport { scanSqlPlaceholders } from './builder/shared/sql-param-scanner'\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 isLateral: boolean\n lateralMeta?: LateralRelationMeta[]\n skipWhereIn?: boolean\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(\n processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n dialect,\n )\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 expandedMappings: ParamMap[] = []\n\n const normalizedSql = scanSqlPlaceholders(\n sql,\n (oldIndex) => {\n const originalMapping = byIndex.get(oldIndex)\n if (!originalMapping) {\n throw new Error(`CRITICAL: No mapping found for parameter $${oldIndex}`)\n }\n expandedMappings.push({\n index: expandedMappings.length + 1,\n value: originalMapping.value,\n dynamicName: originalMapping.dynamicName,\n })\n return '?'\n },\n { pgAware: false, strictPlaceholders: false },\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 isLateral: boolean\n lateralMeta?: LateralRelationMeta[]\n skipWhereIn?: boolean\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 return {\n sql: normalized.sql,\n paramMappings: normalized.paramMappings,\n requiresReduction: sqlResult.requiresReduction === true,\n includeSpec,\n isLateral: sqlResult.isLateral === true,\n lateralMeta: sqlResult.lateralMeta,\n skipWhereIn: sqlResult.skipWhereIn === true,\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 isLateral: boolean\n lateralMeta?: LateralRelationMeta[]\n skipWhereIn?: boolean\n}): SQLDirective {\n const {\n directive,\n method,\n normalizedSql,\n normalizedMappings,\n dialect,\n requiresReduction,\n includeSpec,\n isLateral,\n lateralMeta,\n skipWhereIn,\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 isLateral,\n lateralMeta,\n skipWhereIn,\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 isLateral: built.isLateral,\n lateralMeta: built.lateralMeta,\n skipWhereIn: built.skipWhereIn,\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, PrismaMethod } from './types'\nimport type { SqlDialect } from './sql-builder-dialect'\nimport type { ParamMap } from '@dee-wan/schema-parser'\nimport type { LateralRelationMeta } from './builder/select/lateral-join'\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'\nimport { pgToSqlitePlaceholders } from './builder/shared/sql-param-scanner'\n\ninterface SqlResult {\n sql: string\n params: unknown[]\n paramMappings?: readonly ParamMap[]\n requiresReduction?: boolean\n includeSpec?: Record<string, any>\n isLateral?: boolean\n lateralMeta?: LateralRelationMeta[]\n skipWhereIn?: boolean\n}\n\ninterface CacheStats {\n hits: number\n misses: number\n size: number\n}\n\nclass QueryCacheStats {\n #hits = 0\n #misses = 0\n hit(): void {\n this.#hits++\n }\n miss(): void {\n this.#misses++\n }\n reset(): void {\n this.#hits = 0\n this.#misses = 0\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\nconst queryCache = createBoundedCache<string, SqlResult>(1000)\nconst 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\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 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 const withMethod = { ...args, method }\n let result: {\n sql: string\n params: readonly unknown[]\n paramMappings?: readonly ParamMap[]\n requiresReduction?: boolean\n includeSpec?: Record<string, any>\n isLateral?: boolean\n lateralMeta?: LateralRelationMeta[]\n skipWhereIn?: boolean\n }\n switch (method) {\n case 'aggregate':\n result = buildAggregateSql(\n withMethod,\n whereResult,\n tableName,\n alias,\n model,\n dialect,\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,\n dialect,\n model,\n models,\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 const needsPlaceholderConversion =\n dialect === 'sqlite' && result.sql.includes('$')\n const sqlResult = needsPlaceholderConversion\n ? pgToSqlitePlaceholders(result.sql, result.params)\n : { sql: result.sql, params: [...result.params] }\n return {\n ...sqlResult,\n paramMappings: result.paramMappings,\n requiresReduction: result.requiresReduction,\n includeSpec: result.includeSpec,\n isLateral: result.isLateral,\n lateralMeta: result.lateralMeta,\n skipWhereIn: result.skipWhereIn,\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 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 isLateral: cached.isLateral,\n lateralMeta: cached.lateralMeta,\n skipWhereIn: cached.skipWhereIn,\n }\n }\n queryCacheStats.miss()\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 const result = buildSQLFull(model, models, method, args, dialect)\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 isLateral: result.isLateral,\n lateralMeta: result.lateralMeta,\n skipWhereIn: result.skipWhereIn,\n })\n return result\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'\n\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'\nimport { executeWithPreFetchedParents } from './builder/select/streaming-where-in-executor'\nimport { getPrimaryKeyField } from './builder/shared/primary-key-utils'\nimport {\n buildLateralReducerConfig,\n reduceLateralRows,\n} from './builder/select/lateral-reducer'\nimport { LateralRelationMeta } from './builder/select/lateral-join'\nimport {\n BatchCountQuery,\n BatchQuery,\n buildBatchCountSql,\n buildBatchSql,\n} from './batch/batch-builder'\nimport { parseBatchCountResults, parseBatchResults } from './batch/batch-result'\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 generateSQL(directive: DirectiveProps): SQLDirective {\n return generateSQLInternal(directive)\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 type LateralRelationMeta,\n}\n\nexport {\n transformQueryResults,\n planQueryStrategy,\n createTransactionExecutor,\n executeWhereInSegments,\n executeWithPreFetchedParents,\n getPrimaryKeyField,\n buildLateralReducerConfig,\n reduceLateralRows,\n}\nexport { buildReducerConfig, reduceFlatRows } from './builder/select/reducer'\nexport type { ReducerConfig } from './builder/select/reducer'\nexport {\n normalizeValue,\n setNormalizeDateMode,\n detectSqliteDateMode,\n} 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'\nexport {\n setRelationStats,\n getRelationStats,\n setRoundtripRowEquivalent,\n setJsonRowFactor,\n countIncludeDepth,\n} from './builder/select/strategy-estimator'\n","import type { RelStats } from '../cardinality-planner'\n\nexport function toNumberOrZero(v: unknown): number {\n if (typeof v === 'number' && Number.isFinite(v)) return v\n if (typeof v === 'bigint') return Number(v)\n if (typeof v === 'string' && v.trim() !== '') {\n const n = Number(v)\n if (Number.isFinite(n)) return n\n }\n return 0\n}\n\nexport function clampStatsMonotonic(\n avg: number,\n p95: number,\n p99: number,\n max: number,\n coverage: number,\n): RelStats {\n const safeAvg = Math.max(1, avg)\n const safeP95 = Math.max(safeAvg, p95)\n const safeP99 = Math.max(safeP95, p99)\n const safeMax = Math.max(safeP99, max)\n const safeCoverage = Math.max(0, Math.min(1, coverage))\n return {\n avg: safeAvg,\n p95: safeP95,\n p99: safeP99,\n max: safeMax,\n coverage: safeCoverage,\n }\n}\n\nexport function normalizeStats(row: Record<string, unknown>): RelStats {\n return clampStatsMonotonic(\n toNumberOrZero(row.avg),\n toNumberOrZero(row.p95),\n toNumberOrZero(row.p99),\n toNumberOrZero(row.max),\n toNumberOrZero(row.coverage),\n )\n}\n\nexport function stableJson(value: unknown): string {\n return JSON.stringify(\n value,\n (_k, v) => {\n if (!v || typeof v !== 'object' || Array.isArray(v)) return v\n const obj = v as Record<string, unknown>\n const out: Record<string, unknown> = {}\n for (const k of Object.keys(obj).sort()) out[k] = obj[k]\n return out\n },\n 2,\n )\n}\n\nexport function cleanDatabaseUrl(url: string): string {\n try {\n const parsed = new URL(url)\n parsed.search = ''\n\n if (parsed.password) {\n parsed.password = '***'\n }\n\n if (parsed.username && parsed.username.length > 0) {\n if (parsed.username.length <= 3) {\n parsed.username = '***'\n } else {\n parsed.username = parsed.username.slice(0, 3) + '***'\n }\n }\n\n return parsed.toString()\n } catch (error) {\n return '[invalid-url]'\n }\n}\n\nexport function createQueryKey(\n processedQuery: Record<string, unknown>,\n): string {\n return JSON.stringify(processedQuery, (key, value) => {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const sorted: Record<string, unknown> = {}\n for (const k of Object.keys(value).sort()) {\n sorted[k] = (value as any)[k]\n }\n return sorted\n }\n return value\n })\n}\n\nexport function countTotalQueries(\n queries: Map<string, Map<string, Map<string, any>>>,\n): number {\n return Array.from(queries.values()).reduce(\n (sum, methodMap) =>\n sum +\n Array.from(methodMap.values()).reduce(\n (s, queryMap) => s + queryMap.size,\n 0,\n ),\n 0,\n )\n}\n","import { DMMF } from '@prisma/generator-helper'\nimport {\n toNumberOrZero,\n clampStatsMonotonic,\n normalizeStats,\n stableJson,\n cleanDatabaseUrl,\n} from './utils/pure-utils'\nimport { SqlDialect } from './sql-builder-dialect'\n\ntype Executor = {\n query: (\n sql: string,\n params?: unknown[],\n ) => Promise<Array<Record<string, unknown>>>\n}\n\nexport type RelStats = {\n avg: number\n p95: number\n p99: number\n max: number\n coverage: number\n}\n\nexport type RelationStatsMap = Record<string, Record<string, RelStats>>\n\nexport type GeneratePlannerArtifacts = {\n relationStats: RelationStatsMap\n roundtripRowEquivalent: number\n jsonRowFactor: number\n}\n\ntype RelEdge = {\n parentModel: string\n relName: string\n childModel: string\n parentTable: string\n childTable: string\n parentPkColumns: string[]\n childFkColumns: string[]\n isMany: boolean\n}\n\nfunction quoteIdent(dialect: SqlDialect, ident: string): string {\n return `\"${ident.replace(/\"/g, '\"\"')}\"`\n}\n\nexport async function createDatabaseExecutor(params: {\n databaseUrl: string\n dialect: SqlDialect\n}): Promise<{ executor: Executor; cleanup: () => Promise<void> }> {\n const { databaseUrl, dialect } = params\n\n if (dialect === 'postgres') {\n const postgres = await import('postgres')\n const cleanUrl = cleanDatabaseUrl(databaseUrl)\n const sql = postgres.default(databaseUrl, { max: 1 })\n\n return {\n executor: {\n query: async (sqlStr: string, params?: unknown[]) => {\n return await sql.unsafe(sqlStr, (params || []) as any[])\n },\n },\n cleanup: async () => {\n await sql.end()\n },\n }\n }\n\n throw new Error(`Dialect ${dialect} not supported for stats collection`)\n}\n\nfunction extractMeasurableOneToManyEdges(datamodel: DMMF.Datamodel): RelEdge[] {\n const modelByName = new Map(datamodel.models.map((m) => [m.name, m]))\n const edges: RelEdge[] = []\n\n for (const parent of datamodel.models) {\n const pkFields = parent.fields.filter((f) => f.isId)\n if (pkFields.length === 0) continue\n\n const parentPk = pkFields.map((f) => f.dbName || f.name)\n const parentTable = parent.dbName || parent.name\n\n for (const f of parent.fields) {\n if (!f.relationName) continue\n if (!f.isList) continue\n\n const child = modelByName.get(f.type)\n if (!child) continue\n\n const childRelField = child.fields.find(\n (cf) => cf.relationName === f.relationName && cf.type === parent.name,\n )\n if (!childRelField) continue\n\n const fkFieldNames = childRelField.relationFromFields || []\n if (fkFieldNames.length === 0) continue\n\n const fkFields = fkFieldNames.map((name) => {\n const fld = child.fields.find((x) => x.name === name)\n return fld ? fld.dbName || fld.name : name\n })\n\n const refFieldNames = childRelField.relationToFields || []\n if (refFieldNames.length === 0) continue\n\n const references = refFieldNames.map((name) => {\n const fld = parent.fields.find((x) => x.name === name)\n return fld ? fld.dbName || fld.name : name\n })\n\n if (fkFields.length !== references.length) continue\n\n const childTable = child.dbName || child.name\n\n edges.push({\n parentModel: parent.name,\n relName: f.name,\n childModel: child.name,\n parentTable,\n childTable,\n parentPkColumns: references,\n childFkColumns: fkFields,\n isMany: true,\n })\n }\n }\n\n return edges\n}\n\nfunction buildPostgresStatsSql(edge: RelEdge): string {\n const childTable = quoteIdent('postgres', edge.childTable)\n const parentTable = quoteIdent('postgres', edge.parentTable)\n const groupCols = edge.childFkColumns\n .map((c) => quoteIdent('postgres', c))\n .join(', ')\n\n return `\nWITH counts AS (\n SELECT ${groupCols}, COUNT(*) AS cnt\n FROM ${childTable}\n GROUP BY ${groupCols}\n),\ntotal_parents AS (\n SELECT COUNT(*) AS total FROM ${parentTable}\n)\nSELECT\n AVG(cnt)::float AS avg,\n MAX(cnt)::int AS max,\n PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY cnt)::float AS p95,\n PERCENTILE_CONT(0.99) WITHIN GROUP (ORDER BY cnt)::float AS p99,\n (SELECT COUNT(*) FROM counts)::float / GREATEST(1, (SELECT total FROM total_parents)) AS coverage\nFROM counts\n`.trim()\n}\n\nfunction buildSqliteStatsSql(edge: RelEdge): string {\n const childTable = quoteIdent('sqlite', edge.childTable)\n const parentTable = quoteIdent('sqlite', edge.parentTable)\n const groupCols = edge.childFkColumns\n .map((c) => quoteIdent('sqlite', c))\n .join(', ')\n\n return `\nWITH counts AS (\n SELECT ${groupCols}, COUNT(*) AS cnt\n FROM ${childTable}\n GROUP BY ${groupCols}\n),\nn AS (\n SELECT COUNT(*) AS total FROM counts\n),\nparent_n AS (\n SELECT COUNT(*) AS total FROM ${parentTable}\n),\nordered AS (\n SELECT cnt\n FROM counts\n ORDER BY cnt\n)\nSELECT\n (SELECT AVG(cnt) FROM counts) AS avg,\n (SELECT MAX(cnt) FROM counts) AS max,\n (\n SELECT cnt\n FROM ordered\n LIMIT 1\n OFFSET (\n SELECT\n CASE\n WHEN total <= 1 THEN 0\n ELSE CAST((0.95 * (total - 1)) AS INT)\n END\n FROM n\n )\n ) AS p95,\n (\n SELECT cnt\n FROM ordered\n LIMIT 1\n OFFSET (\n SELECT\n CASE\n WHEN total <= 1 THEN 0\n ELSE CAST((0.99 * (total - 1)) AS INT)\n END\n FROM n\n )\n ) AS p99,\n CAST((SELECT total FROM n) AS FLOAT) / MAX(1, (SELECT total FROM parent_n)) AS coverage\n`.trim()\n}\n\nfunction buildFanoutStatsSql(dialect: SqlDialect, edge: RelEdge): string {\n return dialect === 'postgres'\n ? buildPostgresStatsSql(edge)\n : buildSqliteStatsSql(edge)\n}\n\nasync function findLargestTable(params: {\n executor: Executor\n dialect: SqlDialect\n datamodel: DMMF.Datamodel\n}): Promise<{ tableName: string; rowCount: number } | null> {\n const { executor, dialect, datamodel } = params\n\n let best: { tableName: string; rowCount: number } | null = null\n\n for (const model of datamodel.models) {\n const table = quoteIdent(dialect, model.dbName || model.name)\n try {\n const rows = await executor.query(`SELECT COUNT(*) AS cnt FROM ${table}`)\n const count = toNumberOrZero(rows[0]?.cnt)\n if (!best || count > best.rowCount) {\n best = { tableName: table, rowCount: count }\n }\n } catch (_) {}\n }\n\n return best\n}\n\nasync function measureRoundtripCost(params: {\n executor: Executor\n dialect: SqlDialect\n datamodel: DMMF.Datamodel\n}): Promise<number> {\n const { executor, dialect, datamodel } = params\n const WARMUP = 5\n const SAMPLES = 15\n\n for (let i = 0; i < WARMUP; i++) {\n await executor.query('SELECT 1')\n }\n\n const roundtripTimes: number[] = []\n for (let i = 0; i < SAMPLES; i++) {\n const start = performance.now()\n await executor.query('SELECT 1')\n roundtripTimes.push(performance.now() - start)\n }\n roundtripTimes.sort((a, b) => a - b)\n const medianRoundtrip = roundtripTimes[Math.floor(SAMPLES / 2)]\n\n console.log(\n ` [roundtrip] SELECT 1 times (ms): min=${roundtripTimes[0].toFixed(3)} median=${medianRoundtrip.toFixed(3)} max=${roundtripTimes[SAMPLES - 1].toFixed(3)}`,\n )\n\n const largest = await findLargestTable({ executor, dialect, datamodel })\n\n if (!largest || largest.rowCount < 50) {\n console.log(\n ` [roundtrip] Largest table: ${largest?.tableName ?? 'none'} (${largest?.rowCount ?? 0} rows) — too small, using default 50`,\n )\n return 50\n }\n\n console.log(\n ` [roundtrip] Using table ${largest.tableName} (${largest.rowCount} rows)`,\n )\n\n return estimateFromQueryPairRatio({\n executor,\n tableName: largest.tableName,\n medianRoundtrip,\n tableRowCount: largest.rowCount,\n })\n}\n\nasync function estimateFromQueryPairRatio(params: {\n executor: Executor\n tableName: string\n medianRoundtrip: number\n tableRowCount: number\n}): Promise<number> {\n const { executor, tableName, medianRoundtrip, tableRowCount } = params\n const WARMUP = 5\n const SAMPLES = 10\n\n const smallLimit = 1\n const largeLimit = Math.min(1000, tableRowCount)\n\n for (let i = 0; i < WARMUP; i++) {\n await executor.query(`SELECT * FROM ${tableName} LIMIT ${largeLimit}`)\n }\n\n const smallTimes: number[] = []\n for (let i = 0; i < SAMPLES; i++) {\n const start = performance.now()\n await executor.query(`SELECT * FROM ${tableName} LIMIT ${smallLimit}`)\n smallTimes.push(performance.now() - start)\n }\n smallTimes.sort((a, b) => a - b)\n const medianSmall = smallTimes[Math.floor(SAMPLES / 2)]\n\n const largeTimes: number[] = []\n let actualLargeRows = 0\n for (let i = 0; i < SAMPLES; i++) {\n const start = performance.now()\n const rows = await executor.query(\n `SELECT * FROM ${tableName} LIMIT ${largeLimit}`,\n )\n largeTimes.push(performance.now() - start)\n actualLargeRows = rows.length\n }\n largeTimes.sort((a, b) => a - b)\n const medianLarge = largeTimes[Math.floor(SAMPLES / 2)]\n\n const rowDiff = actualLargeRows - smallLimit\n const timeDiff = medianLarge - medianSmall\n\n console.log(\n ` [roundtrip] LIMIT ${smallLimit}: median=${medianSmall.toFixed(3)}ms`,\n )\n console.log(\n ` [roundtrip] LIMIT ${largeLimit} (got ${actualLargeRows}): median=${medianLarge.toFixed(3)}ms`,\n )\n console.log(\n ` [roundtrip] Time diff: ${timeDiff.toFixed(3)}ms for ${rowDiff} rows`,\n )\n\n if (rowDiff < 50 || timeDiff <= 0.05) {\n console.log(\n ` [roundtrip] Insufficient signal (need ≥50 row diff and >0.05ms time diff), defaulting to 50`,\n )\n return 50\n }\n\n const perRow = timeDiff / rowDiff\n\n const sequentialTimes: number[] = []\n for (let i = 0; i < SAMPLES; i++) {\n const start = performance.now()\n await executor.query(`SELECT * FROM ${tableName} LIMIT ${smallLimit}`)\n await executor.query(`SELECT * FROM ${tableName} LIMIT ${smallLimit}`)\n await executor.query(`SELECT * FROM ${tableName} LIMIT ${smallLimit}`)\n sequentialTimes.push(performance.now() - start)\n }\n sequentialTimes.sort((a, b) => a - b)\n const median3Sequential = sequentialTimes[Math.floor(SAMPLES / 2)]\n\n const marginalQueryCost = (median3Sequential - medianSmall) / 2\n\n console.log(\n ` [roundtrip] 3x sequential LIMIT 1: median=${median3Sequential.toFixed(3)}ms`,\n )\n console.log(` [roundtrip] Single query: ${medianSmall.toFixed(3)}ms`)\n console.log(\n ` [roundtrip] Marginal query cost: ${marginalQueryCost.toFixed(3)}ms`,\n )\n console.log(` [roundtrip] Per-row cost: ${perRow.toFixed(4)}ms`)\n\n const equivalent = Math.round(marginalQueryCost / perRow)\n\n console.log(` [roundtrip] Raw equivalent: ${equivalent} rows`)\n\n const clamped = Math.max(10, Math.min(500, equivalent))\n console.log(` [roundtrip] Final (clamped): ${clamped} rows`)\n\n return clamped\n}\n\nasync function measureJsonOverhead(params: {\n executor: Executor\n tableName: string\n tableRowCount: number\n}): Promise<number> {\n const { executor, tableName, tableRowCount } = params\n const WARMUP = 3\n const SAMPLES = 10\n const limit = Math.min(500, tableRowCount)\n\n const rawSql = `SELECT * FROM ${tableName} LIMIT ${limit}`\n\n const colsResult = await executor.query(\n `SELECT column_name FROM information_schema.columns WHERE table_name = ${tableName.replace(/\"/g, \"'\")} LIMIT 10`,\n )\n\n let aggSql: string\n if (colsResult.length >= 3) {\n const cols = colsResult.slice(0, 6).map((r) => `\"${r.column_name}\"`)\n const aggExprs = cols.map((c) => `array_agg(${c})`).join(', ')\n const groupCol = cols[0]\n aggSql = `SELECT ${groupCol}, ${aggExprs} FROM ${tableName} GROUP BY ${groupCol} LIMIT ${limit}`\n } else {\n aggSql = `SELECT json_agg(t) FROM (SELECT * FROM ${tableName} LIMIT ${limit}) t`\n }\n\n for (let i = 0; i < WARMUP; i++) {\n await executor.query(rawSql)\n await executor.query(aggSql)\n }\n\n const rawTimes: number[] = []\n for (let i = 0; i < SAMPLES; i++) {\n const start = performance.now()\n await executor.query(rawSql)\n rawTimes.push(performance.now() - start)\n }\n rawTimes.sort((a, b) => a - b)\n const medianRaw = rawTimes[Math.floor(SAMPLES / 2)]\n\n const aggTimes: number[] = []\n for (let i = 0; i < SAMPLES; i++) {\n const start = performance.now()\n await executor.query(aggSql)\n aggTimes.push(performance.now() - start)\n }\n aggTimes.sort((a, b) => a - b)\n const medianAgg = aggTimes[Math.floor(SAMPLES / 2)]\n\n const factor = medianRaw > 0.01 ? medianAgg / medianRaw : 3.0\n\n console.log(` [json] Raw ${limit} rows: ${medianRaw.toFixed(3)}ms`)\n console.log(` [json] array_agg grouped: ${medianAgg.toFixed(3)}ms`)\n console.log(` [json] Overhead factor: ${factor.toFixed(2)}x`)\n\n return Math.max(1.5, Math.min(8.0, factor))\n}\n\nasync function collectPostgresStatsFromCatalog(params: {\n executor: Executor\n datamodel: DMMF.Datamodel\n}): Promise<RelationStatsMap> {\n const { executor, datamodel } = params\n const edges = extractMeasurableOneToManyEdges(datamodel)\n const out: RelationStatsMap = {}\n\n const tablesToAnalyze = new Set<string>()\n for (const edge of edges) {\n tablesToAnalyze.add(edge.parentTable)\n tablesToAnalyze.add(edge.childTable)\n }\n\n for (const table of tablesToAnalyze) {\n try {\n await executor.query(`ANALYZE ${quoteIdent('postgres', table)}`)\n } catch (_) {}\n }\n\n const tableStatsQuery = `\n SELECT\n c.relname as table_name,\n c.reltuples::bigint as row_count\n FROM pg_class c\n JOIN pg_namespace n ON n.oid = c.relnamespace\n WHERE c.relkind = 'r'\n AND n.nspname NOT IN ('pg_catalog', 'information_schema')\n `\n\n const tableStats = await executor.query(tableStatsQuery, [])\n const rowCounts = new Map<string, number>()\n\n for (const row of tableStats) {\n const tableName = String(row.table_name)\n const count = toNumberOrZero(row.row_count)\n rowCounts.set(tableName, count)\n }\n\n for (const edge of edges) {\n const parentRows = rowCounts.get(edge.parentTable) || 0\n const childRows = rowCounts.get(edge.childTable) || 0\n\n if (parentRows === 0 || childRows === 0) {\n if (!out[edge.parentModel]) out[edge.parentModel] = {}\n out[edge.parentModel][edge.relName] = {\n avg: 1,\n p95: 1,\n p99: 1,\n max: 1,\n coverage: 0,\n }\n continue\n }\n\n const fkColumn = edge.childFkColumns[0]\n\n const statsQuery = `\n SELECT\n s.n_distinct,\n s.correlation,\n (s.most_common_freqs)[1] as max_freq\n FROM pg_stats s\n WHERE s.tablename = $1\n AND s.attname = $2\n AND s.schemaname NOT IN ('pg_catalog', 'information_schema')\n `\n\n const statsRows = await executor.query(statsQuery, [\n edge.childTable,\n fkColumn,\n ])\n\n let avg: number\n let p95: number\n let p99: number\n let max: number\n let coverage: number\n\n if (statsRows.length > 0) {\n const stats = statsRows[0]\n const nDistinct = toNumberOrZero(stats.n_distinct)\n const correlation =\n stats.correlation !== null ? Number(stats.correlation) : 0\n const maxFreq = stats.max_freq !== null ? Number(stats.max_freq) : null\n\n const distinctCount =\n nDistinct < 0\n ? Math.abs(nDistinct) * childRows\n : nDistinct > 0\n ? nDistinct\n : parentRows\n\n avg =\n distinctCount > 0 ? childRows / distinctCount : childRows / parentRows\n coverage = Math.min(1, distinctCount / parentRows)\n\n const skewFactor = Math.abs(correlation) > 0.5 ? 2.5 : 1.5\n p95 = avg * skewFactor\n p99 = avg * (skewFactor * 1.3)\n\n max = maxFreq ? Math.ceil(childRows * maxFreq) : Math.ceil(p99 * 1.5)\n } else {\n avg = childRows / parentRows\n coverage = 1\n p95 = avg * 2\n p99 = avg * 3\n max = avg * 5\n }\n\n if (!out[edge.parentModel]) out[edge.parentModel] = {}\n out[edge.parentModel][edge.relName] = clampStatsMonotonic(\n Math.ceil(avg),\n Math.ceil(p95),\n Math.ceil(p99),\n Math.ceil(max),\n coverage,\n )\n }\n\n return out\n}\n\nasync function collectPreciseCardinalities(params: {\n executor: Executor\n datamodel: DMMF.Datamodel\n dialect: SqlDialect\n}): Promise<RelationStatsMap> {\n const { executor, datamodel, dialect } = params\n const edges = extractMeasurableOneToManyEdges(datamodel)\n const out: RelationStatsMap = {}\n\n for (const edge of edges) {\n const sql = buildFanoutStatsSql(dialect, edge)\n const rows = await executor.query(sql, [])\n const row = rows[0] || {}\n const stats = normalizeStats(row)\n\n if (!out[edge.parentModel]) out[edge.parentModel] = {}\n out[edge.parentModel][edge.relName] = stats\n }\n\n return out\n}\n\nasync function collectRelationCardinalities(params: {\n executor: Executor\n datamodel: DMMF.Datamodel\n dialect: SqlDialect\n mode?: 'fast' | 'precise'\n}): Promise<RelationStatsMap> {\n const { executor, datamodel, dialect, mode = 'precise' } = params\n\n if (dialect === 'postgres' && mode === 'fast') {\n const stats = await collectPostgresStatsFromCatalog({ executor, datamodel })\n\n let allTrivial = true\n for (const model of Object.values(stats)) {\n for (const rel of Object.values(model)) {\n if (rel.avg > 1 || rel.coverage > 0.5) {\n allTrivial = false\n break\n }\n }\n if (!allTrivial) break\n }\n\n if (allTrivial && Object.keys(stats).length > 0) {\n console.warn('⚠ Catalog stats look stale, falling back to precise mode')\n return collectPreciseCardinalities({ executor, datamodel, dialect })\n }\n\n return stats\n }\n\n return collectPreciseCardinalities({ executor, datamodel, dialect })\n}\n\nexport async function collectPlannerArtifacts(params: {\n executor: Executor\n datamodel: DMMF.Datamodel\n dialect: SqlDialect\n mode?: 'fast' | 'precise'\n}): Promise<GeneratePlannerArtifacts> {\n const { executor, datamodel, dialect, mode } = params\n\n const largest = await findLargestTable({ executor, dialect, datamodel })\n\n const [relationStats, roundtripRowEquivalent, jsonRowFactor] =\n await Promise.all([\n collectRelationCardinalities({ executor, datamodel, dialect, mode }),\n measureRoundtripCost({ executor, dialect, datamodel }),\n largest && largest.rowCount >= 50 && dialect === 'postgres'\n ? measureJsonOverhead({\n executor,\n tableName: largest.tableName,\n tableRowCount: largest.rowCount,\n })\n : Promise.resolve(1.5),\n ])\n\n console.log(` Roundtrip cost: ~${roundtripRowEquivalent} row equivalents`)\n console.log(` JSON overhead factor: ${jsonRowFactor.toFixed(2)}x`)\n\n return { relationStats, roundtripRowEquivalent, jsonRowFactor }\n}\n\nexport function emitPlannerGeneratedModule(\n artifacts: GeneratePlannerArtifacts,\n): string {\n return [\n `export const RELATION_STATS = ${stableJson(artifacts.relationStats)} as const`,\n ``,\n `export type RelationStats = typeof RELATION_STATS`,\n ``,\n `export const ROUNDTRIP_ROW_EQUIVALENT = ${artifacts.roundtripRowEquivalent}`,\n ``,\n `export const JSON_ROW_FACTOR = ${artifacts.jsonRowFactor.toFixed(2)}`,\n ``,\n ].join('\\n')\n}\n","import {\n convertDMMFToModels,\n processAllDirectives,\n} from '@dee-wan/schema-parser'\nimport { DMMF } from '@prisma/generator-helper'\nimport { mkdir, writeFile } from 'fs/promises'\nimport { join, resolve } from 'path'\nimport { generateSQL } from '.'\nimport { setGlobalDialect } from './sql-builder-dialect'\nimport {\n emitPlannerGeneratedModule,\n type GeneratePlannerArtifacts,\n collectPlannerArtifacts,\n createDatabaseExecutor,\n} from './cardinality-planner'\nimport { createQueryKey, countTotalQueries } from './utils/pure-utils'\n\ninterface GenerateConfig {\n dialect: 'postgres' | 'sqlite'\n skipInvalid: boolean\n}\n\ninterface GenerateClientOptions {\n datamodel: DMMF.Datamodel\n outputDir: string\n config: GenerateConfig\n runtimeImportPath?: string\n plannerArtifacts?: GeneratePlannerArtifacts\n executor?: {\n query: (\n sql: string,\n params?: unknown[],\n ) => Promise<Array<Record<string, unknown>>>\n }\n datasourceUrl?: string\n}\n\ninterface EnumInfo {\n mappings: Record<string, Record<string, string>>\n fieldTypes: Record<string, Record<string, string>>\n}\n\nfunction extractEnumMappings(datamodel: DMMF.Datamodel): EnumInfo {\n const mappings: Record<string, Record<string, string>> = {}\n const fieldTypes: Record<string, Record<string, string>> = {}\n\n for (const enumDef of datamodel.enums) {\n const enumMapping: Record<string, string> = {}\n for (const value of enumDef.values) {\n enumMapping[value.name] = value.dbName || value.name\n }\n if (Object.keys(enumMapping).length > 0) {\n mappings[enumDef.name] = enumMapping\n }\n }\n\n for (const model of datamodel.models) {\n fieldTypes[model.name] = {}\n for (const field of model.fields) {\n const baseType = field.type.replace(/\\[\\]|\\?/g, '')\n if (mappings[baseType]) {\n fieldTypes[model.name][field.name] = baseType\n }\n }\n }\n\n return { mappings, fieldTypes }\n}\n\ninterface ProcessDirectiveResult {\n queries: Map<string, Map<string, Map<string, any>>>\n skippedCount: number\n}\n\nfunction processModelDirectives(\n modelName: string,\n result: any,\n config: GenerateConfig,\n): { modelQueries: Map<string, Map<string, any>>; skipped: number } {\n const modelQueries = new Map<string, Map<string, any>>()\n let skipped = 0\n\n for (const directive of result.directives) {\n try {\n const method = directive.method\n const sqlDirective = generateSQL(directive)\n\n if (!modelQueries.has(method)) {\n modelQueries.set(method, new Map())\n }\n\n const methodQueriesMap = modelQueries.get(method)!\n const queryKey = createQueryKey(directive.query.processed)\n\n methodQueriesMap.set(queryKey, {\n sql: sqlDirective.sql,\n params: sqlDirective.staticParams,\n dynamicKeys: sqlDirective.dynamicKeys,\n paramMappings: sqlDirective.paramMappings,\n requiresReduction: sqlDirective.requiresReduction || false,\n includeSpec: sqlDirective.includeSpec || {},\n isLateral: sqlDirective.isLateral || false,\n lateralMeta: sqlDirective.lateralMeta,\n skipWhereIn: sqlDirective.skipWhereIn || false,\n })\n } catch (error) {\n if (!config.skipInvalid) throw error\n skipped++\n const errMsg = error instanceof Error ? error.message : String(error)\n console.warn(` ⚠ Skipped ${modelName}.${directive.method}: ${errMsg}`)\n }\n }\n\n return { modelQueries, skipped }\n}\n\nfunction processAllModelDirectives(\n directiveResults: Map<string, any>,\n config: GenerateConfig,\n): ProcessDirectiveResult {\n const queries = new Map<string, Map<string, Map<string, any>>>()\n let skippedCount = 0\n\n for (const [modelName, result] of directiveResults) {\n if (result.directives.length === 0) continue\n\n const { modelQueries, skipped } = processModelDirectives(\n modelName,\n result,\n config,\n )\n\n queries.set(modelName, modelQueries)\n skippedCount += skipped\n }\n\n return { queries, skippedCount }\n}\n\nexport async function generateClient(options: GenerateClientOptions) {\n const { datamodel, outputDir, config, datasourceUrl } = options\n const runtimeImportPath = options.runtimeImportPath ?? 'prisma-sql'\n\n setGlobalDialect(config.dialect)\n\n const models = convertDMMFToModels(datamodel)\n\n const directiveResults = processAllDirectives(\n datamodel.models as unknown as DMMF.Model[],\n datamodel,\n {\n skipInvalid: config.skipInvalid,\n },\n )\n\n const { queries, skippedCount } = processAllModelDirectives(\n directiveResults,\n config,\n )\n\n const absoluteOutputDir = resolve(process.cwd(), outputDir)\n await mkdir(absoluteOutputDir, { recursive: true })\n\n let plannerArtifacts = options.plannerArtifacts\n\n if (!plannerArtifacts) {\n let executor = options.executor\n let cleanup: (() => Promise<void>) | undefined\n\n if (!executor && datasourceUrl) {\n try {\n const dbConn = await createDatabaseExecutor({\n databaseUrl: datasourceUrl,\n dialect: config.dialect,\n })\n executor = dbConn.executor\n cleanup = dbConn.cleanup\n } catch (error) {\n console.warn(\n '⚠ Failed to connect:',\n error instanceof Error ? error.message : error,\n )\n }\n }\n\n if (executor) {\n try {\n console.log(\n '📊 Collecting relation cardinalities and roundtrip cost...',\n )\n plannerArtifacts = await collectPlannerArtifacts({\n executor,\n datamodel,\n dialect: config.dialect,\n })\n } catch (error) {\n console.warn(\n '⚠ Failed to collect stats:',\n error instanceof Error ? error.message : error,\n )\n } finally {\n if (cleanup) {\n await cleanup()\n }\n }\n }\n }\n\n if (!plannerArtifacts) {\n plannerArtifacts = {\n relationStats: {},\n roundtripRowEquivalent: 73,\n jsonRowFactor: 1.5,\n }\n }\n\n const plannerCode = emitPlannerGeneratedModule(plannerArtifacts)\n const plannerPath = join(absoluteOutputDir, 'planner.generated.ts')\n await writeFile(plannerPath, plannerCode)\n\n const code = generateCode(\n models,\n queries,\n config.dialect,\n datamodel,\n runtimeImportPath,\n )\n const outputPath = join(absoluteOutputDir, 'index.ts')\n await writeFile(outputPath, code)\n\n const totalQueries = countTotalQueries(queries)\n\n console.log(\n `✓ Generated ${queries.size} models, ${totalQueries} prebaked queries`,\n )\n if (skippedCount > 0) {\n console.log(`⚠ Skipped ${skippedCount} directive(s) due to errors`)\n }\n console.log(`✓ Output: ${outputPath}`)\n}\n\nfunction generateImports(runtimeImportPath: string): string {\n return `import { \n buildSQL, \n buildBatchSql, \n parseBatchResults, \n buildBatchCountSql, \n parseBatchCountResults, \n createTransactionExecutor, \n transformQueryResults, \n normalizeValue, \n setNormalizeDateMode,\n detectSqliteDateMode,\n planQueryStrategy, \n executeWhereInSegments,\n buildReducerConfig,\n setRelationStats,\n setRoundtripRowEquivalent,\n setJsonRowFactor,\n type LateralRelationMeta, \n type PrismaMethod, \n type Model, \n type BatchQuery, \n type BatchCountQuery, \n type TransactionQuery, \n type TransactionOptions,\n getOrPrepareStatement,\n normalizeParams,\n executePostgresQuery,\n executeSqliteQuery,\n executeRaw,\n} from ${JSON.stringify(runtimeImportPath)}`\n}\n\nfunction generateStatsInit(): string {\n return `import { RELATION_STATS, ROUNDTRIP_ROW_EQUIVALENT, JSON_ROW_FACTOR } from './planner.generated'\n\nsetRelationStats(RELATION_STATS as any)\nsetRoundtripRowEquivalent(ROUNDTRIP_ROW_EQUIVALENT)\nsetJsonRowFactor(JSON_ROW_FACTOR)`\n}\n\nfunction generateCoreTypes(): string {\n return `class DeferredQuery {\n constructor(\n public readonly model: string,\n public readonly method: PrismaMethod,\n public readonly args: any,\n ) {}\n\n then(onfulfilled?: any, onrejected?: any): any {\n throw new Error(\n 'Cannot await a batch query. Batch queries must not be awaited inside the $batch callback.',\n )\n }\n}\n\ninterface BatchProxy {\n [modelName: string]: {\n findMany: (args?: any) => DeferredQuery\n findFirst: (args?: any) => DeferredQuery\n findUnique: (args?: any) => DeferredQuery\n count: (args?: any) => DeferredQuery\n aggregate: (args?: any) => DeferredQuery\n groupBy: (args?: any) => DeferredQuery\n }\n}\n\nconst ACCELERATED_METHODS = new Set<PrismaMethod>([\n 'findMany',\n 'findFirst',\n 'findUnique',\n 'count',\n 'aggregate',\n 'groupBy',\n])`\n}\n\nfunction generateHelpers(): string {\n return `function createBatchProxy(): BatchProxy {\n return new Proxy(\n {},\n {\n get(_target, modelName: string): any {\n if (typeof modelName === 'symbol') return undefined\n const model = MODEL_MAP.get(modelName)\n if (!model) {\n throw new Error(\n \\`Model '\\${modelName}' not found. Available: \\${[...MODEL_MAP.keys()].join(', ')}\\`,\n )\n }\n return new Proxy(\n {},\n {\n get(_target, method: string): (args?: any) => DeferredQuery {\n if (!ACCELERATED_METHODS.has(method as PrismaMethod)) {\n throw new Error(\n \\`Method '\\${method}' not supported in batch. Supported: \\${[...ACCELERATED_METHODS].join(', ')}\\`,\n )\n }\n return (args?: any): DeferredQuery => {\n return new DeferredQuery(\n modelName,\n method as PrismaMethod,\n args,\n )\n }\n },\n },\n )\n },\n },\n ) as BatchProxy\n}\n\nfunction getByPath(obj: any, path: string): unknown {\n if (!obj || !path) return undefined\n const keys = path.split('.')\n let result = obj\n for (const key of keys) {\n if (result == null) return undefined\n result = result[key]\n }\n return result\n}\n\nfunction resolveParamsFromMappings(args: any, paramMappings: any[]): unknown[] {\n const params: unknown[] = []\n for (let i = 0; i < paramMappings.length; i++) {\n const m = paramMappings[i]\n if (m.value !== undefined) {\n params.push(m.value)\n continue\n }\n if (m.dynamicName === undefined) {\n throw new Error(\\`CRITICAL: ParamMap \\${m.index} has neither dynamicName nor value\\`)\n }\n const colonIdx = m.dynamicName.indexOf(':')\n const scopePath = colonIdx !== -1 ? m.dynamicName.slice(0, colonIdx) : null\n const name = colonIdx !== -1 ? m.dynamicName.slice(colonIdx + 1) : m.dynamicName\n let value: unknown\n if (!scopePath || scopePath.startsWith('root.')) {\n value = name.includes('.')\n ? getByPath(args, name)\n : args?.[name]\n } else {\n value = getByPath(args, scopePath)\n }\n if (value === undefined) {\n throw new Error(\\`Missing required parameter: \\${m.dynamicName}\\`)\n }\n params.push(normalizeValue(value))\n }\n return params\n}`\n}\n\nfunction generateDataConstants(\n cleanModels: any[],\n mappings: Record<string, Record<string, string>>,\n fieldTypes: Record<string, Record<string, string>>,\n queries: Map<string, Map<string, Map<string, any>>>,\n dialect: string,\n): string {\n return `const MODELS: Model[] = ${JSON.stringify(cleanModels, null, 2)}\n\nconst ENUM_MAPPINGS: Record<string, Record<string, string>> = ${JSON.stringify(mappings, null, 2)}\n\nconst ENUM_FIELDS: Record<string, Record<string, string>> = ${JSON.stringify(fieldTypes, null, 2)}\n\nconst QUERIES: Record<string, Record<string, Record<string, {\n sql: string\n params: unknown[]\n dynamicKeys: string[]\n paramMappings: any[]\n requiresReduction: boolean\n includeSpec: Record<string, any>\n isLateral?: boolean\n lateralMeta?: any[]\n skipWhereIn?: boolean\n}>>> = ${formatQueries(queries)}\n\nconst DIALECT = ${JSON.stringify(dialect)}\n\nconst MODEL_MAP = new Map(MODELS.map(m => [m.name, m]))`\n}\n\nfunction generateTransformLogic(): string {\n return `function isDynamicKeyForQueryKey(path: string[], key: string): boolean {\n if (key !== 'skip' && key !== 'take' && key !== 'cursor') return false\n const parent = path.length > 0 ? path[path.length - 1] : null\n if (!parent) return true\n if (parent === 'include' || parent === 'select') return false\n if (path.includes('where')) return false\n if (path.includes('data')) return false\n if (path.includes('orderBy')) return false\n if (path.includes('having')) return false\n if (path.includes('by')) return false\n return true\n}\n\nfunction shouldSkipEnumTransform(path: string[], key: string): boolean {\n if (path.length === 0) return false\n \n const parent = path[path.length - 1]\n \n if (parent === 'orderBy') return true\n if (path.includes('orderBy')) return true\n \n if (parent === 'cursor') return true\n if (path.includes('cursor')) return true\n \n return false\n}\n\nfunction transformEnumInValue(value: unknown, enumType: string | undefined): unknown {\n if (!enumType || value === null || value === undefined) {\n return value\n }\n\n const mapping = ENUM_MAPPINGS[enumType]\n if (!mapping) {\n return value\n }\n\n if (Array.isArray(value)) {\n return value.map(v => {\n if (typeof v === 'string') {\n if (mapping[v] !== undefined) {\n return mapping[v]\n }\n throw new Error(\n \\`Invalid enum value '\\${v}' for type \\${enumType}. Valid values: \\${Object.keys(mapping).join(', ')}\\`\n )\n }\n return v\n })\n }\n\n if (typeof value === 'string') {\n if (mapping[value] !== undefined) {\n return mapping[value]\n }\n throw new Error(\n \\`Invalid enum value '\\${value}' for type \\${enumType}. Valid values: \\${Object.keys(mapping).join(', ')}\\`\n )\n }\n\n if (typeof value === 'object' && !(value instanceof Date)) {\n const result: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n result[k] = transformEnumInValue(v, enumType)\n }\n return result\n }\n\n return value\n}\n\nfunction getRelatedModelName(currentModelName: string, relationFieldName: string): string | null {\n const m = MODEL_MAP.get(currentModelName)\n if (!m) return null\n const f: any = (m as any).fields?.find((x: any) => x?.name === relationFieldName)\n if (!f || !f.isRelation) return null\n return f.relatedModel || null\n}\n\nfunction transformEnumValuesByModel(modelName: string, obj: any, path: string[] = []): any {\n if (obj === null || obj === undefined) {\n return obj\n }\n\n if (Array.isArray(obj)) {\n return obj.map(item => transformEnumValuesByModel(modelName, item, path))\n }\n\n if (obj instanceof Date) {\n return obj\n }\n\n if (typeof obj === 'object') {\n const transformed: any = {}\n const modelFields = (ENUM_FIELDS as any)[modelName] || {}\n for (const [key, value] of Object.entries(obj)) {\n const nextPath = [...path, key]\n\n if (shouldSkipEnumTransform(path, key)) {\n transformed[key] = value\n continue\n }\n\n const relModel = getRelatedModelName(modelName, key)\n if (relModel && value && typeof value === 'object') {\n transformed[key] = transformEnumValuesByModel(relModel, value, nextPath)\n continue\n }\n\n const enumType = modelFields[key]\n if (enumType) {\n if (value && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)) {\n const transformedOperators: any = {}\n for (const [op, opValue] of Object.entries(value)) {\n transformedOperators[op] = transformEnumInValue(opValue, enumType)\n }\n transformed[key] = transformedOperators\n } else {\n transformed[key] = transformEnumInValue(value, enumType)\n }\n } else if (value instanceof Date) {\n transformed[key] = value\n } else if (typeof value === 'object' && value !== null) {\n transformed[key] = transformEnumValuesByModel(modelName, value, nextPath)\n } else {\n transformed[key] = value\n }\n }\n return transformed\n }\n\n return obj\n}\n\nconst BIGINT_MARKER = '\\x00BIGINT\\x00'\n\nfunction bigIntSafeReplacer(_key: string, value: unknown): unknown {\n if (typeof value === 'bigint') return BIGINT_MARKER + value.toString()\n return value\n}\n\nfunction bigIntReviver(_key: string, value: unknown): unknown {\n if (typeof value === 'string' && value.startsWith(BIGINT_MARKER)) {\n return BigInt(value.slice(BIGINT_MARKER.length))\n }\n return value\n}\n\nfunction normalizeQuery(args: any): string {\n if (!args) return '{}'\n const jsonStr = JSON.stringify(args, bigIntSafeReplacer)\n const normalized = JSON.parse(jsonStr, bigIntReviver)\n\n function replaceDynamicParams(obj: any, path: string[] = []): any {\n if (!obj || typeof obj !== 'object') return obj\n if (Array.isArray(obj)) {\n return obj.map((v) => replaceDynamicParams(v, path))\n }\n const result: any = {}\n for (const [key, value] of Object.entries(obj)) {\n if (isDynamicKeyForQueryKey(path, key)) {\n result[key] = \\`__DYNAMIC_\\${key}__\\`\n } else {\n result[key] = replaceDynamicParams(value, [...path, key])\n }\n }\n return result\n }\n\n const withMarkers = replaceDynamicParams(normalized)\n\n return JSON.stringify(withMarkers, (key, value) => {\n if (typeof value === 'bigint') return '__bigint__' + value.toString()\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const sorted: Record<string, unknown> = {}\n for (const k of Object.keys(value).sort()) {\n sorted[k] = (value as any)[k]\n }\n return sorted\n }\n return value\n })\n}`\n}\n\nfunction generateExtension(runtimeImportPath: string): string {\n return `export function speedExtension(config: {\n postgres?: any\n sqlite?: any\n debug?: boolean\n onQuery?: (info: {\n model: string\n method: string\n sql: string\n params: unknown[]\n duration: number\n prebaked: boolean\n }) => void\n}) {\n const { postgres, sqlite, debug, onQuery } = config\n if (!postgres && !sqlite) {\n throw new Error('speedExtension requires postgres or sqlite client')\n }\n const client = postgres || sqlite\n const actualDialect = postgres ? 'postgres' : 'sqlite'\n if (actualDialect !== DIALECT) {\n throw new Error(\\`Generated code is for \\${DIALECT}, but you provided \\${actualDialect}\\`)\n }\n\n if ((DIALECT as string) === 'sqlite') {\n setNormalizeDateMode(detectSqliteDateMode(client))\n }\n\n async function executeQuery(\n sql: string,\n params: unknown[],\n method: string,\n requiresReduction: boolean,\n includeSpec: Record<string, any> | undefined,\n model: any | undefined,\n isLateral?: boolean,\n lateralMeta?: LateralRelationMeta[],\n ): Promise<unknown[]> {\n if (DIALECT === 'postgres') {\n return executePostgresQuery({\n client,\n sql,\n params,\n method,\n requiresReduction,\n includeSpec,\n model,\n allModels: MODELS,\n isLateral,\n lateralMeta,\n })\n }\n \n try {\n const result = executeSqliteQuery(client, sql, params, method)\n return result\n } catch (err) {\n console.log('[sqlite-debug] FAILED:', err instanceof Error ? err.message : err)\n throw err\n }\n }\n\n async function executeWhereInQuery(sql: string, params: unknown[]): Promise<unknown[]> {\n const normalizedParams = normalizeParams(params)\n \n if (DIALECT === 'postgres') {\n const results: any[] = []\n await client.unsafe(sql, normalizedParams).forEach((row: any) => {\n results.push(row)\n })\n return results\n }\n \n const stmt = getOrPrepareStatement(client, sql)\n return stmt.all(...normalizedParams)\n }\n\n return (prisma: any) => {\n const txExecutor = createTransactionExecutor({\n modelMap: MODEL_MAP,\n allModels: MODELS,\n dialect: DIALECT,\n executeRaw: (sql: string, params?: unknown[]) => executeRaw(client, sql, params, DIALECT),\n postgresClient: postgres,\n })\n\n interface ModelContext {\n name?: string\n $name?: string\n $parent?: any\n }\n\n async function handleMethod(\n this: ModelContext,\n method: PrismaMethod,\n args: unknown\n ): Promise<unknown> {\n const modelName = this?.name || this?.$name\n \n if (!modelName || typeof modelName !== 'string') {\n throw new Error('Cannot determine model name from context')\n }\n \n const startTime = Date.now()\n\n try {\n if (args !== undefined && args !== null && typeof args !== 'object') {\n throw new Error(\n \\`Invalid args type for \\${modelName}.\\${method}: expected object, got \\${typeof args}\\`\n )\n }\n\n const transformedArgs = transformEnumValuesByModel(modelName, args || {})\n\n const model = MODEL_MAP.get(modelName)\n if (!model) {\n if (!this.$parent?.[modelName]?.[method]) {\n throw new Error(\\`Model '\\${modelName}' not found and no Prisma fallback available\\`)\n }\n return this.$parent[modelName][method](args)\n }\n\n const plan = planQueryStrategy({\n model,\n method,\n args: transformedArgs,\n allModels: MODELS,\n dialect: DIALECT,\n })\n\n const queryKey = normalizeQuery(plan.filteredArgs)\n const prebakedQuery = QUERIES[modelName]?.[method]?.[queryKey]\n let sql: string\n let params: unknown[]\n let prebaked = false\n let requiresReduction = false\n let includeSpec: Record<string, any> | undefined\n let isLateral = false\n let lateralMeta: any[] | undefined\n let skipWhereIn = false\n\n if (prebakedQuery) {\n sql = prebakedQuery.sql\n params = resolveParamsFromMappings(plan.filteredArgs, prebakedQuery.paramMappings)\n prebaked = true\n requiresReduction = prebakedQuery.requiresReduction || false\n includeSpec = prebakedQuery.includeSpec\n isLateral = prebakedQuery.isLateral || false\n lateralMeta = prebakedQuery.lateralMeta\n skipWhereIn = prebakedQuery.skipWhereIn || false\n } else {\n const buildArgs = plan.whereInSegments.length > 0\n ? { ...plan.filteredArgs, __originalArgs: plan.originalArgs }\n : plan.filteredArgs\n const result = buildSQL(model, MODELS, method, buildArgs, DIALECT)\n sql = result.sql\n params = result.params as unknown[]\n requiresReduction = result.requiresReduction || false\n includeSpec = result.includeSpec\n isLateral = result.isLateral || false\n lateralMeta = result.lateralMeta\n skipWhereIn = result.skipWhereIn || false\n }\n\n if (debug) {\n const strategy = DIALECT === 'postgres'\n ? (isLateral ? 'LATERAL JOIN' : requiresReduction ? 'STREAMING REDUCTION' : 'STREAMING')\n : (requiresReduction ? 'BUFFERED REDUCTION' : 'DIRECT')\n \n const whereInMode = plan.whereInSegments.length > 0 && !skipWhereIn\n ? (DIALECT === 'postgres' ? 'STREAMING PARALLEL' : 'SEQUENTIAL')\n : 'NONE'\n \n console.log(\\`[\\${DIALECT}] \\${modelName}.\\${method} - \\${strategy} + WHERE IN: \\${whereInMode}\\`)\n console.log(\\` Invoked: \\${modelName}.\\${method}(\\`, args, \\`)\\`)\n console.log(\\` Prebaked: \\${prebaked}, skipWhereIn: \\${skipWhereIn}\\`)\n console.log(' SQL:', sql)\n console.log(' Params:', params)\n }\n\n if (plan.whereInSegments.length > 0 && !skipWhereIn) {\n if (DIALECT === 'postgres') {\n const { executeWhereInSegmentsStreaming } = await import(${JSON.stringify(runtimeImportPath)})\n \n const results = await executeWhereInSegmentsStreaming({\n segments: plan.whereInSegments,\n parentSql: sql,\n parentParams: normalizeParams(params),\n parentModel: model,\n allModels: MODELS,\n modelMap: MODEL_MAP,\n dialect: DIALECT,\n execute: async (sql: string, params: unknown[]) => {\n const results: any[] = []\n await client.unsafe(sql, normalizeParams(params)).forEach((row: any) => {\n results.push(row)\n })\n return results\n },\n stream: async (sql: string, params: unknown[], onRow: (row: any) => void) => {\n await client.unsafe(sql, normalizeParams(params)).forEach(onRow)\n },\n parentTake: typeof plan.filteredArgs?.take === 'number'\n ? plan.filteredArgs.take\n : undefined,\n })\n\n if (plan.injectedParentKeys.length > 0) {\n for (const row of results) {\n for (const key of plan.injectedParentKeys) {\n delete row[key]\n }\n }\n }\n\n const duration = Date.now() - startTime\n onQuery?.({ model: modelName, method, sql, params, duration, prebaked })\n\n return transformQueryResults(method, results)\n } else {\n const parentRows = await executeQuery(sql, params, method, requiresReduction, includeSpec, model, isLateral, lateralMeta) as any[]\n\n if (parentRows.length > 0) {\n await executeWhereInSegments({\n segments: plan.whereInSegments,\n parentRows,\n parentModel: model,\n allModels: MODELS,\n modelMap: MODEL_MAP,\n dialect: DIALECT,\n execute: executeWhereInQuery,\n })\n\n if (plan.injectedParentKeys.length > 0) {\n for (const row of parentRows) {\n for (const key of plan.injectedParentKeys) {\n delete row[key]\n }\n }\n }\n }\n\n const duration = Date.now() - startTime\n onQuery?.({ model: modelName, method, sql, params, duration, prebaked })\n\n return transformQueryResults(method, parentRows)\n }\n }\n\n const results = await executeQuery(sql, params, method, requiresReduction, includeSpec, model, isLateral, lateralMeta)\n \n const duration = Date.now() - startTime\n onQuery?.({ model: modelName, method, sql, params, duration, prebaked })\n\n return transformQueryResults(method, results)\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error)\n console.warn(\\`[prisma-sql] \\${modelName}.\\${method} acceleration failed: \\${msg}\\`)\n if (debug && error instanceof Error && error.stack) {\n console.warn(error.stack)\n }\n \n if (!this.$parent?.[modelName]?.[method]) {\n throw error\n }\n \n return this.$parent[modelName][method](args)\n }\n }\n\n async function* findManyStream(\n this: ModelContext,\n args?: unknown\n ): AsyncIterableIterator<any> {\n const modelName = this?.name || this?.$name\n \n if (!modelName || typeof modelName !== 'string') {\n throw new Error('Cannot determine model name from context')\n }\n \n if (DIALECT !== 'postgres') {\n throw new Error('Streaming requires postgres.js client')\n }\n \n const transformedArgs = transformEnumValuesByModel(modelName, args || {})\n const model = MODEL_MAP.get(modelName)\n if (!model) {\n throw new Error(\\`Model '\\${modelName}' not found\\`)\n }\n \n const plan = planQueryStrategy({\n model,\n method: 'findMany',\n args: transformedArgs,\n allModels: MODELS,\n dialect: DIALECT,\n })\n \n const queryKey = normalizeQuery(plan.filteredArgs)\n const prebakedQuery = QUERIES[modelName]?.['findMany']?.[queryKey]\n \n let sql: string\n let params: unknown[]\n let requiresReduction = false\n let includeSpec: Record<string, any> | undefined\n let isLateral = false\n let lateralMeta: any[] | undefined\n \n if (prebakedQuery) {\n sql = prebakedQuery.sql\n params = resolveParamsFromMappings(plan.filteredArgs, prebakedQuery.paramMappings)\n requiresReduction = prebakedQuery.requiresReduction\n includeSpec = prebakedQuery.includeSpec\n isLateral = prebakedQuery.isLateral || false\n lateralMeta = prebakedQuery.lateralMeta\n } else {\n const result = buildSQL(model, MODELS, 'findMany', plan.filteredArgs, DIALECT)\n sql = result.sql\n params = result.params as unknown[]\n requiresReduction = result.requiresReduction || false\n includeSpec = result.includeSpec\n isLateral = result.isLateral || false\n lateralMeta = result.lateralMeta\n }\n \n const normalizedParams = normalizeParams(params)\n\n if (isLateral && lateralMeta) {\n const { buildLateralReducerConfig, reduceLateralRows } = await import(${JSON.stringify(runtimeImportPath)})\n const config = buildLateralReducerConfig(model, lateralMeta)\n const results: any[] = []\n\n await client.unsafe(sql, normalizedParams).forEach((row: any) => {\n results.push(row)\n })\n\n const reduced = reduceLateralRows(results, config)\n for (const item of reduced) {\n yield item\n }\n } else if (requiresReduction && includeSpec) {\n const { createProgressiveReducer } = await import(${JSON.stringify(runtimeImportPath)})\n const config = buildReducerConfig(model, includeSpec, MODELS)\n const reducer = createProgressiveReducer(config)\n \n const completed: any[] = []\n let lastParentKey: string | null = null\n \n await client.unsafe(sql, normalizedParams).forEach((row: any) => {\n reducer.processRow(row)\n const currentKey = reducer.getCurrentParentKey(row)\n \n if (currentKey !== lastParentKey && lastParentKey !== null) {\n const parent = reducer.getCompletedParent(lastParentKey)\n if (parent) {\n completed.push(parent)\n }\n }\n \n lastParentKey = currentKey\n })\n \n const remaining = reducer.getRemainingParents()\n for (const parent of remaining) {\n completed.push(parent)\n }\n \n for (const item of completed) {\n yield item\n }\n } else {\n const rows: any[] = []\n await client.unsafe(sql, normalizedParams).forEach((row: any) => {\n rows.push(row)\n })\n \n for (const row of rows) {\n yield row\n }\n }\n }\n\n async function batch<T extends Record<string, DeferredQuery>>(\n callback: (batch: BatchProxy) => T | Promise<T>,\n ): Promise<{ [K in keyof T]: any }> {\n const batchProxy = createBatchProxy()\n const queries = await callback(batchProxy)\n const batchQueries: Record<string, BatchQuery> = {}\n for (const [key, deferred] of Object.entries(queries)) {\n if (!(deferred instanceof DeferredQuery)) {\n throw new Error(\n \\`Batch query '\\${key}' must be a deferred query. Did you await it?\\`,\n )\n }\n batchQueries[key] = {\n model: deferred.model,\n method: deferred.method,\n args: transformEnumValuesByModel(deferred.model, deferred.args || {}),\n }\n }\n\n const startTime = Date.now()\n const { sql, params, keys, aliases } = buildBatchSql(\n batchQueries,\n MODEL_MAP,\n MODELS,\n DIALECT,\n )\n\n if (debug) {\n console.log(\\`[\\${DIALECT}] $batch (\\${keys.length} queries)\\`)\n console.log('SQL:', sql)\n console.log('Params:', params)\n }\n\n const normalizedParams = normalizeParams(params)\n \n let row: Record<string, unknown>\n if (DIALECT === 'postgres') {\n const rows: any[] = []\n await client.unsafe(sql, normalizedParams as any[]).forEach((r: any) => {\n rows.push(r)\n })\n row = rows[0] as Record<string, unknown>\n } else {\n const stmt = getOrPrepareStatement(client, sql)\n row = stmt.get(...normalizedParams) as Record<string, unknown>\n }\n \n const results = parseBatchResults(row, keys, batchQueries, aliases, MODEL_MAP)\n\n const duration = Date.now() - startTime\n onQuery?.({\n model: '_batch',\n method: 'batch',\n sql,\n params: normalizedParams,\n duration,\n prebaked: false,\n })\n\n return results as { [K in keyof T]: any }\n }\n\n async function batchCount(queries: BatchCountQuery[]): Promise<number[]> {\n if (queries.length === 0) return []\n const startTime = Date.now()\n const { sql, params } = buildBatchCountSql(\n queries,\n MODEL_MAP,\n MODELS,\n DIALECT,\n )\n\n if (debug) {\n console.log(\\`[\\${DIALECT}] $batchCount (\\${queries.length} queries)\\`)\n console.log('SQL:', sql)\n console.log('Params:', params)\n }\n\n const normalizedParams = normalizeParams(params)\n \n let row: Record<string, unknown>\n if (DIALECT === 'postgres') {\n const rows: any[] = []\n await client.unsafe(sql, normalizedParams as any[]).forEach((r: any) => {\n rows.push(r)\n })\n row = rows[0] as Record<string, unknown>\n } else {\n const stmt = getOrPrepareStatement(client, sql)\n row = stmt.get(...normalizedParams) as Record<string, unknown>\n }\n \n const results = parseBatchCountResults(row, queries.length)\n\n const duration = Date.now() - startTime\n onQuery?.({\n model: '_batch',\n method: 'count',\n sql,\n params: normalizedParams,\n duration,\n prebaked: false,\n })\n\n return results\n }\n\n async function transaction(\n queries: TransactionQuery[] | any[],\n options?: TransactionOptions,\n ): Promise<unknown[]> {\n if (!queries || queries.length === 0) {\n return []\n }\n\n const isTransactionQuery = queries.every(q => \n q && \n typeof q === 'object' && \n !q.then &&\n 'model' in q && \n 'method' in q &&\n typeof q.model === 'string' &&\n typeof q.method === 'string'\n )\n\n if (!isTransactionQuery) {\n return Promise.all(queries)\n }\n\n const startTime = Date.now()\n if (debug) {\n console.log(\\`[\\${DIALECT}] $transaction (\\${queries.length} queries)\\`)\n if (options?.isolationLevel) {\n console.log(\\` Isolation level: \\${options.isolationLevel}\\`)\n }\n }\n const transformedQueries = queries.map(q => ({\n ...q,\n args: transformEnumValuesByModel(q.model, q.args || {}),\n }))\n const results = await txExecutor.execute(transformedQueries, options)\n const duration = Date.now() - startTime\n onQuery?.({\n model: '_transaction',\n method: 'transaction',\n sql: \\`TRANSACTION(\\${queries.length})\\`,\n params: [],\n duration,\n prebaked: false,\n })\n return results\n }\n\n return prisma.$extends({\n name: 'prisma-sql-generated',\n client: {\n $original: prisma,\n $batch: batch as <T extends Record<string, DeferredQuery>>(\n callback: (batch: BatchProxy) => T | Promise<T>,\n ) => Promise<{ [K in keyof T]: any }>,\n $batchCount: batchCount as (...args: any[]) => Promise<number[]>,\n $transaction: transaction as (...args: any[]) => Promise<unknown[]>,\n },\n model: {\n $allModels: {\n async findMany(this: ModelContext, args: any) {\n return handleMethod.call(this, 'findMany', args)\n },\n async findFirst(this: ModelContext, args: any) {\n return handleMethod.call(this, 'findFirst', args)\n },\n async findUnique(this: ModelContext, args: any) {\n return handleMethod.call(this, 'findUnique', args)\n },\n async count(this: ModelContext, args: any) {\n return handleMethod.call(this, 'count', args)\n },\n async aggregate(this: ModelContext, args: any) {\n return handleMethod.call(this, 'aggregate', args)\n },\n async groupBy(this: ModelContext, args: any) {\n return handleMethod.call(this, 'groupBy', args)\n },\n findManyStream(this: ModelContext, args?: any): AsyncIterableIterator<any> {\n return findManyStream.call(this, args)\n },\n },\n },\n })\n }\n}`\n}\n\nfunction generateTypeExports(): string {\n return `type SpeedExtensionReturn = ReturnType<ReturnType<typeof speedExtension>>\n\nexport type SpeedClient<T> = T & {\n $batch<T extends Record<string, DeferredQuery>>(\n callback: (batch: BatchProxy) => T | Promise<T>,\n ): Promise<{ [K in keyof T]: any }>\n $batchCount(queries: BatchCountQuery[]): Promise<number[]>\n $transaction(queries: TransactionQuery[], options?: TransactionOptions): Promise<unknown[]>\n}\n\nexport type WithStreaming<T> = T & {\n findManyStream(args?: any): AsyncIterableIterator<any>\n}\n\nexport type { BatchCountQuery, TransactionQuery, TransactionOptions }`\n}\n\nfunction generateCode(\n models: any[],\n queries: Map<string, Map<string, Map<string, any>>>,\n dialect: 'postgres' | 'sqlite',\n datamodel: DMMF.Datamodel,\n runtimeImportPath: string,\n): string {\n const cleanModels = models.map((model) => ({\n ...model,\n fields: model.fields.filter((f: any) => f !== undefined && f !== null),\n }))\n\n const { mappings, fieldTypes } = extractEnumMappings(datamodel)\n\n return [\n generateImports(runtimeImportPath),\n generateStatsInit(),\n generateCoreTypes(),\n generateHelpers(),\n generateDataConstants(cleanModels, mappings, fieldTypes, queries, dialect),\n generateTransformLogic(),\n generateExtension(runtimeImportPath),\n generateTypeExports(),\n ].join('\\n\\n')\n}\n\nfunction formatQueries(\n queries: Map<string, Map<string, Map<string, any>>>,\n): string {\n if (queries.size === 0) {\n return '{}'\n }\n\n const modelEntries: string[] = []\n\n for (const [modelName, methodMap] of queries) {\n const methodEntries: string[] = []\n\n for (const [method, queryMap] of methodMap) {\n const queryEntries: string[] = []\n\n for (const [queryKey, query] of queryMap) {\n const parts = [\n ` sql: ${JSON.stringify(query.sql)}`,\n ` params: ${JSON.stringify(query.params)}`,\n ` dynamicKeys: ${JSON.stringify(query.dynamicKeys)}`,\n ` paramMappings: ${JSON.stringify(query.paramMappings)}`,\n ` requiresReduction: ${query.requiresReduction || false}`,\n ` includeSpec: ${JSON.stringify(query.includeSpec || {})}`,\n ]\n\n if (query.isLateral) {\n parts.push(` isLateral: true`)\n parts.push(` lateralMeta: ${JSON.stringify(query.lateralMeta)}`)\n }\n\n if (query.skipWhereIn) {\n parts.push(` skipWhereIn: true`)\n }\n\n queryEntries.push(\n ` ${JSON.stringify(queryKey)}: {\\n${parts.join(',\\n')}\\n }`,\n )\n }\n\n methodEntries.push(\n ` ${JSON.stringify(method)}: {\\n${queryEntries.join(',\\n')}\\n }`,\n )\n }\n\n modelEntries.push(\n ` ${JSON.stringify(modelName)}: {\\n${methodEntries.join(',\\n')}\\n }`,\n )\n }\n\n return `{\\n${modelEntries.join(',\\n')}\\n}`\n}\n","#!/usr/bin/env node\nimport { generatorHandler, GeneratorOptions } from '@prisma/generator-helper'\nimport { generateClient } from './code-emitter'\nimport { dirname, join, resolve } from 'path'\nconst { version } = require('../package.json')\n\nfunction getDialectFromProvider(provider: string): 'postgres' | 'sqlite' {\n const normalized = provider.toLowerCase()\n if (normalized === 'sqlite') return 'sqlite'\n if (normalized === 'postgresql' || normalized === 'postgres')\n return 'postgres'\n throw new Error(\n `Unsupported database provider: ${provider}. ` +\n `Supported: postgresql, postgres, sqlite`,\n )\n}\n\nfunction getOutputDir(options: GeneratorOptions): string {\n const schemaDir = dirname(options.schemaPath)\n if (options.generator.output?.value) {\n return resolve(schemaDir, options.generator.output.value)\n }\n const clientGenerator = options.otherGenerators.find(\n (g) => g.provider.value === 'prisma-client-js',\n )\n if (clientGenerator?.output?.value) {\n const clientOutput = resolve(schemaDir, clientGenerator.output.value)\n return join(resolve(dirname(clientOutput), '..'), 'sql')\n }\n return resolve(schemaDir, './generated/sql')\n}\n\nfunction getDatasourceUrl(options: GeneratorOptions): string | undefined {\n const configUrl = options.generator.config.databaseUrl\n if (typeof configUrl === 'string' && configUrl) {\n return configUrl\n }\n\n return process.env.DATABASE_URL || undefined\n}\n\ngeneratorHandler({\n onManifest() {\n return {\n version,\n defaultOutput: './generated/sql',\n prettyName: 'prisma-sql-generator',\n }\n },\n async onGenerate(options: GeneratorOptions) {\n const { generator, dmmf, datasources } = options\n if (!datasources || datasources.length === 0) {\n throw new Error('No datasource found in schema')\n }\n\n const autoDialect = getDialectFromProvider(datasources[0].provider)\n const configDialect = generator.config.dialect as\n | 'postgres'\n | 'sqlite'\n | undefined\n const dialect = configDialect || autoDialect\n\n if (configDialect && configDialect !== autoDialect) {\n console.warn(\n `Generator dialect (${configDialect}) differs from datasource provider (${datasources[0].provider}). ` +\n `Using generator config: ${configDialect}`,\n )\n }\n\n const config = {\n dialect,\n skipInvalid: generator.config.skipInvalid === 'true',\n }\n\n const outputDir = getOutputDir(options)\n const datasourceUrl = getDatasourceUrl(options)\n\n console.info(`Generating SQL client to ${outputDir}`)\n console.info(`Datasource: ${datasources[0].provider}`)\n console.info(`Dialect: ${config.dialect}`)\n console.info(`Skip invalid: ${config.skipInvalid}`)\n console.info(\n `Database URL: ${datasourceUrl ? '✓ available' : '✗ not available (stats collection will be skipped)'}`,\n )\n\n await generateClient({\n datamodel: dmmf.datamodel,\n outputDir,\n config,\n datasourceUrl,\n })\n\n console.info('✓ Generated SQL client successfully')\n },\n})\n"]}
|
|
1
|
+
{"version":3,"sources":["../package.json","../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/alias-generator.ts","../src/builder/shared/relation-key-utils.ts","../src/builder/shared/fk-join-utils.ts","../src/builder/select/include-join.ts","../src/builder/select/include-count.ts","../src/builder/shared/relation-utils.ts","../src/builder/shared/include-tree-walker.ts","../src/builder/select/strategy-estimator.ts","../src/builder/shared/relation-extraction-utils.ts","../src/builder/shared/relation-query-context.ts","../src/builder/select/flat-join.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/param-store.ts","../src/builder/shared/state.ts","../src/builder/where.ts","../src/builder/shared/field-type-utils.ts","../src/builder/shared/negative-take-utils.ts","../src/builder/select/lateral-join.ts","../src/builder/select/distinct.ts","../src/builder/select/assembly.ts","../src/builder/select/fields.ts","../src/builder/select/includes.ts","../src/builder/shared/order-by-relation.ts","../src/builder/select.ts","../src/builder/shared/comparison-builder.ts","../src/builder/aggregates.ts","../src/builder/shared/sql-placeholder.ts","../src/builder/shared/sql-param-scanner.ts","../src/sql-generator.ts","../src/utils/s3-fifo.ts","../src/query-cache.ts","../src/index.ts","../src/utils/pure-utils.ts","../src/cardinality-planner.ts","../src/code-emitter.ts","../src/generator.ts"],"names":["exports","s","_a","isDynamicParameter","normalizeField","e","c","cursorField","hasNestedIncludes","ph","separator","placeholder","COMPARISON_OPS","base","join","clause","IS_PRODUCTION","extractDynamicName","isListRelation","getRelationModel","countActiveEntries","DEFAULT_PRIMARY_KEY","parts","sql","baseSelect","nestedSelects","selectExpr","normalizeOrderByInput","MAX_NOT_DEPTH","normalizeLogicalValue","buildLogicalClause","extractIncludeSpec","node","generateSQL","convertDMMFToModels","resolve"],"mappings":"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","file":"generator.js","sourcesContent":["{\n \"name\": \"prisma-sql\",\n \"version\": \"1.75.8\",\n \"description\": \"Convert Prisma queries to optimized SQL with type safety. 2-7x faster than Prisma Client.\",\n \"main\": \"dist/index.cjs\",\n \"module\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"bin\": {\n \"prisma-sql-generator\": \"./dist/generator.cjs\",\n \"prisma-sql-collect-stats\": \"./dist/collect-planner-stats.cjs\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./generator\": {\n \"types\": \"./dist/generator.d.ts\",\n \"import\": \"./dist/generator.js\",\n \"require\": \"./dist/generator.cjs\"\n }\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"docs:dev\": \"yarn --cwd docs-site dev\",\n \"docs:build\": \"yarn --cwd docs-site build\",\n \"docs:preview\": \"yarn --cwd docs-site preview\",\n \"test\": \"vitest --config=vitest.config.ts\",\n \"test:coverage\": \"vitest --coverage\",\n \"test:e2e\": \"vitest run tests/e2e\",\n \"bench\": \"npx tsx tests/helpers/run-benchmarks.ts\",\n \"prisma:generate\": \"npx prisma generate --schema=tests/prisma/schema.prisma\",\n \"prisma:migrate\": \"npx prisma migrate dev --schema=tests/prisma/schema.prisma\",\n \"prisma:reset\": \"npx prisma db push --force-reset --skip-generate --schema=tests/prisma/schema.prisma\",\n \"prepublishOnly\": \"npm run build\",\n \"sonar-cli\": \"sonar-scanner -Dsonar.projectKey=b -Dsonar.sources=./src -Dsonar.host.url=http://localhost:9000 -Dsonar.login=sqp_0d5fbc16a275fceb6458d193a8aa8a975956edc1\",\n \"sonar\": \"npm run sonar-cli && npx tsx scripts/sonar.ts\"\n },\n \"keywords\": [\n \"prisma\",\n \"sql\",\n \"query\",\n \"optimizer\",\n \"postgresql\",\n \"sqlite\",\n \"cloudflare\",\n \"d1\",\n \"performance\",\n \"typescript\",\n \"generator\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/multipliedtwice/prisma-to-sql.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/multipliedtwice/prisma-to-sql/issues\"\n },\n \"homepage\": \"https://github.com/multipliedtwice/prisma-to-sql#readme\",\n \"author\": \"multipliedtwice <multipliedtwice@gmail.com>\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@dee-wan/schema-parser\": \"1.4.0\",\n \"@prisma/generator-helper\": \"^7.4.0\",\n \"@prisma/internals\": \"^7.4.0\",\n \"postgres\": \"^3.4.8\"\n },\n \"devDependencies\": {\n \"@faker-js/faker\": \"^10.2.0\",\n \"@prisma/adapter-better-sqlite3\": \"^7.4.0\",\n \"@prisma/adapter-pg\": \"^7.4.0\",\n \"@semantic-release/changelog\": \"^6.0.3\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@types/better-sqlite3\": \"^7.6.13\",\n \"@types/node\": \"^25.2.3\",\n \"@vitest/coverage-v8\": \"4.0.18\",\n \"better-sqlite3\": \"^12.6.2\",\n \"drizzle-kit\": \"^0.31.8\",\n \"drizzle-orm\": \"^0.45.1\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.21.0\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.18\",\n \"@prisma/client\": \"7.4.0\",\n \"prisma\": \"7.4.0\"\n },\n \"engines\": {\n \"node\": \">=16.0.0\"\n }\n}\n","type DateMode = 'iso' | 'ms'\n\nlet globalDateMode: DateMode = 'iso'\n\nexport function setNormalizeDateMode(mode: DateMode): void {\n globalDateMode = mode\n}\n\nexport function detectSqliteDateMode(client: any): DateMode {\n try {\n const tables: { name: string }[] = client\n .prepare(\n \"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' AND name NOT LIKE '_prisma_%' LIMIT 50\",\n )\n .all()\n\n for (const { name } of tables) {\n const row = client\n .prepare(`SELECT typeof(\"createdAt\") as t FROM \"${name}\" LIMIT 1`)\n .get() as { t: string } | undefined\n\n if (row) {\n return row.t === 'integer' ? 'ms' : 'iso'\n }\n }\n } catch {}\n\n return 'iso'\n}\n\nconst 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 | number {\n const t = date.getTime()\n if (!Number.isFinite(t)) {\n throw new Error('Invalid Date value in SQL params')\n }\n if (globalDateMode === 'ms') {\n return t\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 const proto = Object.getPrototypeOf(value)\n const isPlain = proto === Object.prototype || proto === null\n if (!isPlain) return value\n const obj = value as Record<string, unknown>\n if (seen.has(obj)) {\n throw new Error('Circular reference in SQL params')\n }\n seen.add(obj)\n const out: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(obj)) {\n out[k] = normalizeValue(v, seen, depth + 1)\n }\n seen.delete(obj)\n return out\n}\n","import { normalizeValue } from './utils/normalize-value'\n\nexport type SqlDialect = 'postgres' | 'sqlite'\n\nlet globalDialect: SqlDialect = 'postgres'\n\nexport function setGlobalDialect(dialect: SqlDialect): void {\n if (dialect !== 'postgres' && dialect !== 'sqlite') {\n throw new Error(\n `Invalid dialect: ${dialect}. Must be 'postgres' or 'sqlite'`,\n )\n }\n globalDialect = dialect\n}\n\nexport function getGlobalDialect(): SqlDialect {\n return globalDialect\n}\n\nfunction assertNonEmpty(value: string, name: string): void {\n if (!value || value.trim().length === 0) {\n throw new Error(`${name} is required and cannot be empty`)\n }\n}\n\nexport function arrayContains(\n column: string,\n value: string,\n arrayType: string,\n dialect: SqlDialect,\n): string {\n assertNonEmpty(column, 'arrayContains column')\n assertNonEmpty(value, 'arrayContains value')\n 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 MAX_INCLUDE_DEPTH: 5,\n MAX_INCLUDES_PER_LEVEL: 10,\n MAX_TOTAL_SUBQUERIES: 100,\n MAX_SELF_REFERENTIAL_DEPTH: 2,\n MAX_NOT_DEPTH: 50,\n MAX_LIMIT_OFFSET: 2147483647,\n MIN_NEGATIVE_TAKE: -10000,\n MAX_NESTED_JOIN_DEPTH: 10,\n MAX_ALIAS_COUNTER_THRESHOLD: 1000,\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\nexport const DEBUG_PARAMS =\n typeof process !== 'undefined' && process.env?.DEBUG_PARAMS === '1'\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\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 allFieldsByName: 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 allFieldsByName = 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 allFieldsByName.set(field.name, field)\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 allFieldsByName,\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 getFieldByNameCached(\n model: Model,\n name: string,\n): Field | undefined {\n return getFieldIndices(model).allFieldsByName.get(name)\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: any): 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'\nimport { DEBUG_PARAMS } from './constants'\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 if (DEBUG_PARAMS) {\n console.log(`[PARAM] ${scope} = ${JSON.stringify(value)}`)\n }\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, getRelationFieldSet } from './model-field-cache'\n\ntype OrderByObject = Record<string, unknown>\ntype OrderByArray = Array<Record<string, unknown>>\n\ntype OrderByType = OrderByObject | OrderByArray | string | null | 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\ninterface 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 flipScalarSortObject = (\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\nfunction isScalarSortConfig(obj: Record<string, unknown>): boolean {\n return (\n Object.prototype.hasOwnProperty.call(obj, 'sort') ||\n Object.prototype.hasOwnProperty.call(obj, 'direction')\n )\n}\n\nfunction flipRelationOrderByValue(\n obj: Record<string, unknown>,\n): Record<string, unknown> {\n const out: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(obj)) {\n out[k] = flipValue(v)\n }\n return out\n}\n\nconst flipValue = (v: unknown): unknown => {\n if (typeof v === 'string') return flipSortString(v)\n if (isPlainObject(v)) {\n if (isScalarSortConfig(v)) return flipScalarSortObject(v)\n return flipRelationOrderByValue(v)\n }\n return v\n}\n\nconst expandToSingleFieldEntries = (\n item: unknown,\n): Array<[string, unknown]> => {\n if (!isPlainObject(item)) {\n throw new Error('orderBy array entries must be objects')\n }\n\n const entries = Object.entries(item).filter(([, v]) => v !== undefined)\n if (entries.length === 0) {\n throw new Error('orderBy array entries must have at least one field')\n }\n\n return entries\n}\n\nexport function expandOrderByInput(orderBy: unknown): Array<[string, unknown]> {\n if (!isNotNullish(orderBy)) return []\n\n if (Array.isArray(orderBy)) {\n const result: Array<[string, unknown]> = []\n for (const item of orderBy) {\n result.push(...expandToSingleFieldEntries(item))\n }\n return result\n }\n\n if (isPlainObject(orderBy)) {\n return Object.entries(orderBy)\n }\n\n throw new Error('orderBy must be an object or array of objects')\n}\n\nfunction isScalarOrderByValue(v: unknown): boolean {\n if (typeof v === 'string') {\n const lower = v.toLowerCase()\n return lower === 'asc' || lower === 'desc'\n }\n if (isPlainObject(v) && isScalarSortConfig(v)) return true\n return false\n}\n\nconst flipOrderByArray = (orderBy: unknown[]): { [x: string]: unknown }[] => {\n const result: { [x: string]: unknown }[] = []\n for (const item of orderBy) {\n for (const [k, v] of expandToSingleFieldEntries(item)) {\n result.push({ [k]: flipValue(v) })\n }\n }\n return result\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 const result: NormalizedOrderBy = []\n for (const [field, rawValue] of pairs) {\n if (!isScalarOrderByValue(rawValue)) continue\n const parsed = parseValue(rawValue, field)\n result.push({\n [field]:\n parsed.nulls !== undefined\n ? { direction: parsed.direction, nulls: parsed.nulls }\n : parsed.direction,\n })\n }\n return result\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 allPairs: Array<[string, unknown]> = []\n for (const item of orderBy) {\n allPairs.push(...expandToSingleFieldEntries(item))\n }\n return normalizePairs(allPairs, 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 const relationSet = getRelationFieldSet(model)\n\n for (const item of normalized) {\n const [[field, value]] = Object.entries(item)\n\n if (!scalarSet.has(field)) {\n if (relationSet.has(field)) continue\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","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\nexport function 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 orderEntries = normalizeAndValidateOrderBy(\n orderBy,\n model!,\n parseOrderByValue,\n )\n\n if (cursorEntries.length === 1 && orderEntries.length === 0) {\n const [field, value] = cursorEntries[0]\n const ph = addAutoScoped(params, value, `cursor.${field}`)\n const c = col(alias, field, model)\n\n return {\n cte: '',\n condition: `${c} >= ${ph}`,\n }\n }\n\n if (cursorEntries.length === 1 && orderEntries.length === 1) {\n const [cursorField, cursorValue] = cursorEntries[0]\n const orderEntry = orderEntries[0]\n\n if (orderEntry.field === cursorField) {\n const ph = addAutoScoped(params, cursorValue, `cursor.${cursorField}`)\n const c = col(alias, cursorField, model)\n const op = orderEntry.direction === 'asc' ? '>=' : '<='\n\n return {\n cte: '',\n condition: `${c} ${op} ${ph}`,\n }\n }\n }\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 finalOrderEntries = normalizeAndValidateOrderBy(\n orderBy,\n model!,\n parseOrderByValue,\n )\n if (finalOrderEntries.length === 0) {\n finalOrderEntries = cursorEntries.map(([field]) => ({\n field,\n direction: 'asc' as const,\n }))\n } else {\n finalOrderEntries = ensureCursorFieldsInOrder(\n finalOrderEntries,\n cursorEntries,\n )\n }\n\n assertCursorAndOrderFieldsScalar(model, cursor, finalOrderEntries)\n\n const { whereSql: cursorWhereSql } = buildCursorFilterParts(\n cursor,\n srcAlias,\n params,\n model,\n )\n\n const cursorOrderBy = finalOrderEntries\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 finalOrderEntries,\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 < finalOrderEntries.length; level++) {\n const andParts: string[] = []\n\n for (let i = 0; i < level; i++) {\n const e = finalOrderEntries[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 = finalOrderEntries[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\nfunction 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 { 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 { Field } from '../../types'\nimport { normalizeKeyList } from './sql-utils'\n\ninterface RelationKeys {\n childKeys: string[]\n parentKeys: string[]\n}\n\nconst RELATION_KEYS_CACHE = new WeakMap<Field, RelationKeys>()\n\nfunction computeRelationKeys(field: Field, context: string): 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\nexport function resolveRelationKeys(\n field: Field,\n context: 'include' | 'count' | 'whereIn' = 'include',\n): RelationKeys {\n let cached = RELATION_KEYS_CACHE.get(field)\n if (cached) return cached\n\n cached = computeRelationKeys(field, context)\n RELATION_KEYS_CACHE.set(field, cached)\n return cached\n}\n","import { SQL_SEPARATORS } from './constants'\nimport { quoteColumn } from './sql-utils'\nimport { Model } from '../../types'\n\nconst FK_COLUMN_PREFIX = '__fk'\n\nexport function fkColumnName(index: number): string {\n return `\"${FK_COLUMN_PREFIX}${index}\"`\n}\n\nexport function buildFkSelectList(\n sourceAlias: string,\n sourceModel: Model,\n keyFields: string[],\n): string {\n return keyFields\n .map(\n (f, i) =>\n `${sourceAlias}.${quoteColumn(sourceModel, f)} AS ${fkColumnName(i)}`,\n )\n .join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nexport function buildFkGroupBy(keyFields: string[]): string {\n return keyFields\n .map((_, i) => fkColumnName(i))\n .join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nexport function buildFkPartitionBy(\n sourceAlias: string,\n sourceModel: Model,\n keyFields: string[],\n): string {\n return keyFields\n .map((f) => `${sourceAlias}.${quoteColumn(sourceModel, f)}`)\n .join(SQL_SEPARATORS.FIELD_LIST)\n}\n\nexport function buildFkJoinCondition(\n joinAlias: string,\n parentAlias: string,\n parentModel: Model,\n parentKeyFields: string[],\n): string {\n const parts = parentKeyFields.map(\n (f, i) =>\n `${joinAlias}.${fkColumnName(i)} = ${parentAlias}.${quoteColumn(parentModel, f)}`,\n )\n return parts.length === 1 ? parts[0] : `(${parts.join(' AND ')})`\n}\n","import { Model, Field } from '../../types'\nimport { SqlDialect, jsonBuildObject } from '../../sql-builder-dialect'\nimport { SQL_TEMPLATES, SQL_SEPARATORS } from '../shared/constants'\nimport { buildTableReference, quote, quoteColumn } from '../shared/sql-utils'\nimport { ParamStore } from '../shared/param-store'\nimport { IncludeSpec } from '../shared/types'\nimport { isNotNullish, isPlainObject } from '../shared/validators/type-guards'\nimport { addAutoScoped } from '../shared/dynamic-params'\nimport { getRelationFieldSet } from '../shared/model-field-cache'\nimport { isDynamicParameter } from '@dee-wan/schema-parser'\nimport { resolveRelationKeys } from '../shared/relation-key-utils'\nimport {\n buildFkSelectList,\n buildFkGroupBy,\n buildFkPartitionBy,\n buildFkJoinCondition,\n} from '../shared/fk-join-utils'\n\nconst AGG_COLUMN = '__agg'\nconst ROW_COLUMN = '__row'\nconst ROW_NUMBER_COLUMN = '__rn'\nconst INC_ALIAS_PREFIX = '__inc_'\nconst RANKED_ALIAS_PREFIX = '__ranked_'\nconst INCLUDE_SCOPE_ROOT = 'include'\nconst INCLUDE_SCOPE_SEGMENT = '.include'\nconst PG_EMPTY_JSON_ARRAY = \"'[]'::json\"\nconst SQLITE_EMPTY_JSON_ARRAY = \"json('[]')\"\nexport const DEFAULT_PRIMARY_KEY = 'id'\nconst JOIN_INCLUDE_MAX_DEPTH = 0\n\ntype OptionalIntOrDynamic = number | string | undefined\n\nexport function emptyJsonArray(dialect: SqlDialect): string {\n return dialect === 'postgres' ? PG_EMPTY_JSON_ARRAY : SQLITE_EMPTY_JSON_ARRAY\n}\n\nexport function buildIncludeScope(includePath: readonly string[]): string {\n if (includePath.length === 0) return INCLUDE_SCOPE_ROOT\n let scope = INCLUDE_SCOPE_ROOT\n for (let i = 0; i < includePath.length; i++) {\n scope += `.${includePath[i]}`\n if (i < includePath.length - 1) {\n scope += INCLUDE_SCOPE_SEGMENT\n }\n }\n return scope\n}\n\nexport function 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\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\nexport function 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 > JOIN_INCLUDE_MAX_DEPTH) 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\nexport function 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: {\n parentAlias: string\n model: Model\n dialect: SqlDialect\n aliasGen: { next: (base: string) => string }\n }\n nestedJoins: string[]\n}): IncludeSpec {\n const { childKeys: relKeyFields, parentKeys: parentKeyFields } =\n resolveRelationKeys(args.field, 'include')\n\n const joinAlias = args.ctx.aliasGen.next(`${INC_ALIAS_PREFIX}${args.relName}`)\n\n const fkSelect = buildFkSelectList(args.relAlias, args.relModel, relKeyFields)\n const fkGroupBy = buildFkPartitionBy(\n args.relAlias,\n args.relModel,\n relKeyFields,\n )\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 allJoins = [args.whereJoins, ...args.nestedJoins]\n .filter((j) => j)\n .join(' ')\n const joinsPart = allJoins ? ` ${allJoins}` : ''\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_COLUMN}` +\n ` FROM ${args.relTable} ${args.relAlias}${joinsPart}${wherePart}` +\n ` GROUP BY ${fkGroupBy}`\n\n const onCondition = buildFkJoinCondition(\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_COLUMN}, ${PG_EMPTY_JSON_ARRAY}) 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\nexport function 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: {\n parentAlias: string\n model: Model\n dialect: SqlDialect\n aliasGen: { next: (base: string) => string }\n params: ParamStore\n includePath: string[]\n }\n nestedJoins: string[]\n}): IncludeSpec {\n const { childKeys: relKeyFields, parentKeys: parentKeyFields } =\n resolveRelationKeys(args.field, 'include')\n\n const joinAlias = args.ctx.aliasGen.next(`${INC_ALIAS_PREFIX}${args.relName}`)\n const rankedAlias = args.ctx.aliasGen.next(\n `${RANKED_ALIAS_PREFIX}${args.relName}`,\n )\n\n const fkSelect = buildFkSelectList(args.relAlias, args.relModel, relKeyFields)\n const partitionBy = buildFkPartitionBy(\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, DEFAULT_PRIMARY_KEY)} ASC`\n\n const allJoins = [args.whereJoins, ...args.nestedJoins]\n .filter((j) => j)\n .join(' ')\n const joinsPart = allJoins ? ` ${allJoins}` : ''\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_COLUMN}${SQL_SEPARATORS.FIELD_LIST}` +\n `ROW_NUMBER() OVER (PARTITION BY ${partitionBy} ORDER BY ${orderExpr}) AS ${ROW_NUMBER_COLUMN}` +\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(`${ROW_NUMBER_COLUMN} > ${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(`${ROW_NUMBER_COLUMN} <= (${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(`${ROW_NUMBER_COLUMN} <= ${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 = buildFkGroupBy(relKeyFields)\n\n const outerSql =\n `SELECT ${fkGroupByOuter}${SQL_SEPARATORS.FIELD_LIST}` +\n `json_agg(${ROW_COLUMN} ORDER BY ${ROW_NUMBER_COLUMN}) AS ${AGG_COLUMN}` +\n ` FROM (${innerSql}) ${rankedAlias}${rnFilter}` +\n ` GROUP BY ${fkGroupByOuter}`\n\n const onCondition = buildFkJoinCondition(\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_COLUMN}, ${PG_EMPTY_JSON_ARRAY}) 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","import { Model, Field } from '../../types'\nimport { SqlDialect } from '../../sql-builder-dialect'\nimport { SQL_SEPARATORS } from '../shared/constants'\nimport { sqlStringLiteral } from '../shared/sql-utils'\nimport { ParamStore } from '../shared/param-store'\nimport { createAliasGenerator } from '../shared/alias-generator'\nimport { isValidRelationField } from '../joins'\nimport { isNotNullish } from '../shared/validators/type-guards'\nimport { getRelationFieldSet } from '../shared/model-field-cache'\nimport { resolveRelationKeys } from '../shared/relation-key-utils'\nimport { getRelationTableReference } from './include-join'\nimport {\n fkColumnName,\n buildFkSelectList,\n buildFkPartitionBy,\n buildFkJoinCondition,\n} from '../shared/fk-join-utils'\n\nconst COUNT_COLUMN = '__cnt'\nconst COUNT_SUBQUERY_PREFIX = '__tp_cnt_'\nconst COUNT_JOIN_PREFIX = '__tp_cnt_j_'\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 subqueryForCount(args: {\n dialect: SqlDialect\n relTable: string\n countAlias: string\n relModel: Model\n relKeyFields: string[]\n}): string {\n const selectKeys = buildFkSelectList(\n args.countAlias,\n args.relModel,\n args.relKeyFields,\n )\n\n const groupByKeys = buildFkPartitionBy(\n args.countAlias,\n args.relModel,\n args.relKeyFields,\n )\n\n const cntExpr =\n args.dialect === 'postgres'\n ? `COUNT(*)::int AS ${COUNT_COLUMN}`\n : `COUNT(*) AS ${COUNT_COLUMN}`\n\n return `(SELECT ${selectKeys}${SQL_SEPARATORS.FIELD_LIST}${cntExpr} FROM ${args.relTable} ${args.countAlias} GROUP BY ${groupByKeys})`\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 `${COUNT_SUBQUERY_PREFIX}${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 `${COUNT_JOIN_PREFIX}${args.relName}`,\n forbidden,\n )\n\n const leftJoinOn = buildFkJoinCondition(\n joinAlias,\n args.parentAlias,\n args.parentModel,\n parentKeyFields,\n )\n\n return {\n joinSql: `LEFT JOIN ${subquery} ${joinAlias} ON ${leftJoinOn}`,\n pairSql: `${sqlStringLiteral(args.relName)}, COALESCE(${joinAlias}.${COUNT_COLUMN}, 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","import { Model } from '../../types'\nimport { getRelationFieldSet } from './model-field-cache'\nimport { isPlainObject } from './validators/type-guards'\n\nfunction 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","import type { Model } from '../../types'\nimport { extractNestedIncludeSpec } from './relation-utils'\nimport { isPlainObject } from './validators/type-guards'\n\ntype ModelField = Model['fields'][number]\n\nexport interface ResolvedRelation {\n relName: string\n value: unknown\n field: ModelField\n relModel: Model\n isList: boolean\n nestedSpec: Record<string, any>\n}\n\nexport function resolveIncludeRelations(\n includeSpec: Record<string, any>,\n model: Model,\n schemas: readonly Model[],\n): ResolvedRelation[] {\n const modelMap = new Map(schemas.map((m) => [m.name, m]))\n const results: ResolvedRelation[] = []\n\n for (const [relName, value] of Object.entries(includeSpec)) {\n if (value === false) continue\n\n const field = model.fields.find((f) => f.name === relName)\n if (!field?.isRelation || !field.relatedModel) continue\n\n const relModel = modelMap.get(field.relatedModel)\n if (!relModel) continue\n\n const isList = typeof field.type === 'string' && field.type.endsWith('[]')\n\n const nestedSpec = isPlainObject(value)\n ? extractNestedIncludeSpec(value, relModel)\n : {}\n\n results.push({\n relName,\n value,\n field,\n relModel,\n isList,\n nestedSpec,\n })\n }\n\n return results\n}\n","import type { Model } from '../../types'\nimport { isPlainObject } from '../shared/validators/type-guards'\nimport { resolveIncludeRelations } from '../shared/include-tree-walker'\nimport { LIMITS } from '../shared/constants'\n\ntype RelStats = {\n avg: number\n p95: number\n p99: number\n max: number\n coverage: number\n}\n\ntype RelationStatsMap = Record<string, Record<string, RelStats>>\n\nlet globalRelationStats: RelationStatsMap | undefined\nlet globalRoundtripRowEquivalent = 73\nlet globalJsonRowFactor = 1.5\n\nconst CORRELATED_S_BOUNDED = 0.5\nconst CORRELATED_S_UNBOUNDED = 3.0\nconst CORRELATED_WHERE_PENALTY = 3.0\nconst DEFAULT_FAN = 10\nconst DEFAULT_PARENT_COUNT = 50\nconst MIN_STATS_COVERAGE = 0.1\nconst SINGLE_PARENT_MAX_FLAT_JOIN_DEPTH = 1\n\nexport function setRoundtripRowEquivalent(value: number): void {\n globalRoundtripRowEquivalent = value\n}\n\nexport function setJsonRowFactor(value: number): void {\n globalJsonRowFactor = value\n}\n\nexport function setRelationStats(stats: RelationStatsMap): void {\n globalRelationStats = stats\n}\n\nexport function getRelationStats(): RelationStatsMap | undefined {\n return globalRelationStats\n}\n\ntype IncludeStrategy = 'flat-join' | 'lateral' | 'where-in' | 'fallback'\n\ninterface RelationCostNode {\n name: string\n fan: number\n take: number\n eff: number\n isList: boolean\n hasChildWhere: boolean\n children: RelationCostNode[]\n}\n\nfunction getFanOut(modelName: string, relName: string): number {\n if (!globalRelationStats) return DEFAULT_FAN\n const modelStats = globalRelationStats[modelName]\n if (!modelStats) return DEFAULT_FAN\n const relStat = modelStats[relName]\n if (!relStat || relStat.coverage < MIN_STATS_COVERAGE) return DEFAULT_FAN\n return relStat.avg\n}\n\nfunction readTake(relArgs: unknown): number {\n if (!isPlainObject(relArgs)) return Infinity\n const obj = relArgs as Record<string, unknown>\n if ('take' in obj && typeof obj.take === 'number' && obj.take > 0)\n return obj.take\n return Infinity\n}\n\nfunction hasWhereClause(relArgs: unknown): boolean {\n if (!isPlainObject(relArgs)) return false\n const obj = relArgs as Record<string, unknown>\n return 'where' in obj && obj.where != null && isPlainObject(obj.where)\n}\n\nfunction isListField(field: { type?: unknown }): boolean {\n return typeof field.type === 'string' && field.type.endsWith('[]')\n}\n\nfunction hasPaginationArgs(value: unknown): boolean {\n if (!isPlainObject(value)) return false\n const obj = value as Record<string, unknown>\n return (\n ('take' in obj && obj.take != null) ||\n ('skip' in obj && typeof obj.skip === 'number' && obj.skip > 0)\n )\n}\n\nfunction buildCostTree(\n includeSpec: Record<string, any>,\n model: Model,\n schemas: readonly Model[],\n depth: number = 0,\n): RelationCostNode[] {\n if (depth > LIMITS.MAX_INCLUDE_DEPTH) return []\n\n const relations = resolveIncludeRelations(includeSpec, model, schemas)\n const nodes: RelationCostNode[] = []\n\n for (const rel of relations) {\n const fan = rel.isList ? getFanOut(model.name, rel.relName) : 1\n const take = rel.isList ? readTake(rel.value) : 1\n const eff = Math.min(fan, take)\n\n const children =\n Object.keys(rel.nestedSpec).length > 0\n ? buildCostTree(rel.nestedSpec, rel.relModel, schemas, depth + 1)\n : []\n\n nodes.push({\n name: rel.relName,\n fan,\n take,\n eff,\n isList: rel.isList,\n hasChildWhere: hasWhereClause(rel.value),\n children,\n })\n }\n\n return nodes\n}\n\nfunction maxDepthFromTree(nodes: RelationCostNode[]): number {\n if (nodes.length === 0) return 0\n let max = 0\n for (const n of nodes) {\n const d = 1 + maxDepthFromTree(n.children)\n if (d > max) max = d\n }\n return max\n}\n\nfunction anyChildHasWhere(nodes: RelationCostNode[]): boolean {\n for (const n of nodes) {\n if (n.hasChildWhere) return true\n }\n return false\n}\n\nfunction computeWhereInCost(\n nodes: RelationCostNode[],\n parentCount: number,\n): number {\n const R = globalRoundtripRowEquivalent\n let totalRows = 0\n let roundtrips = 0\n\n function walk(ns: RelationCostNode[], P: number): void {\n if (ns.length === 0) return\n roundtrips++\n for (const n of ns) {\n const rows = P * n.eff\n totalRows += rows\n if (n.children.length > 0) {\n walk(n.children, rows)\n }\n }\n }\n\n walk(nodes, parentCount)\n return (1 + roundtrips) * R + totalRows\n}\n\nfunction computeCorrelatedCost(\n nodes: RelationCostNode[],\n parentCount: number,\n): number {\n const R = globalRoundtripRowEquivalent\n\n function subqueryCost(ns: RelationCostNode[]): number {\n let total = 0\n for (const n of ns) {\n const sBase =\n n.take !== Infinity ? CORRELATED_S_BOUNDED : CORRELATED_S_UNBOUNDED\n const s = n.hasChildWhere ? sBase * CORRELATED_WHERE_PENALTY : sBase\n let nodeCost = n.eff * s\n if (n.children.length > 0) {\n nodeCost += n.eff * subqueryCost(n.children)\n }\n total += nodeCost\n }\n return total\n }\n\n return R + parentCount * subqueryCost(nodes)\n}\n\nfunction hasOnlyToOneRelations(\n includeSpec: Record<string, any>,\n model: Model,\n): boolean {\n for (const [relName, value] of Object.entries(includeSpec)) {\n if (value === false) continue\n const field = model.fields.find((f) => f.name === relName)\n if (!field?.isRelation) continue\n if (isListField(field)) return false\n }\n return true\n}\n\nexport function countIncludeDepth(\n includeSpec: Record<string, any>,\n model: Model,\n schemas: readonly Model[],\n depth: number = 0,\n): number {\n if (depth > LIMITS.MAX_INCLUDE_DEPTH) return 0\n\n const relations = resolveIncludeRelations(includeSpec, model, schemas)\n let maxDepth = 0\n\n for (const rel of relations) {\n let childDepth = 1\n if (Object.keys(rel.nestedSpec).length > 0) {\n childDepth += countIncludeDepth(\n rel.nestedSpec,\n rel.relModel,\n schemas,\n depth + 1,\n )\n }\n if (childDepth > maxDepth) maxDepth = childDepth\n }\n\n return maxDepth\n}\n\nexport function hasChildPaginationAnywhere(\n includeSpec: Record<string, any>,\n model: Model,\n schemas: readonly Model[],\n depth: number = 0,\n): boolean {\n if (depth > LIMITS.MAX_INCLUDE_DEPTH) return false\n\n for (const [, value] of Object.entries(includeSpec)) {\n if (value === false) continue\n if (hasPaginationArgs(value)) return true\n }\n\n const relations = resolveIncludeRelations(includeSpec, model, schemas)\n\n for (const rel of relations) {\n if (Object.keys(rel.nestedSpec).length > 0) {\n if (\n hasChildPaginationAnywhere(\n rel.nestedSpec,\n rel.relModel,\n schemas,\n depth + 1,\n )\n ) {\n return true\n }\n }\n }\n\n return false\n}\n\nexport function pickIncludeStrategy(params: {\n includeSpec: Record<string, any>\n model: Model\n schemas: readonly Model[]\n method: string\n args?: any\n takeValue: number | null\n hasPagination: boolean\n canFlatJoin: boolean\n canLateral: boolean\n hasChildPagination: boolean\n debug?: boolean\n}): IncludeStrategy {\n const { includeSpec, model, schemas, method, takeValue, canFlatJoin, debug } =\n params\n\n if (Object.keys(includeSpec).length === 0) return 'where-in'\n\n if (canFlatJoin && hasOnlyToOneRelations(includeSpec, model)) {\n if (debug)\n console.log(` [strategy] ${model.name}: all one-to-one → flat-join`)\n return 'flat-join'\n }\n\n const isSingleParent = method === 'findFirst' || method === 'findUnique'\n if (isSingleParent && canFlatJoin) {\n const depth = countIncludeDepth(includeSpec, model, schemas)\n if (depth <= SINGLE_PARENT_MAX_FLAT_JOIN_DEPTH) {\n if (debug)\n console.log(\n ` [strategy] ${model.name}: single parent depth≤${SINGLE_PARENT_MAX_FLAT_JOIN_DEPTH} → flat-join`,\n )\n return 'flat-join'\n }\n }\n\n const costTree = buildCostTree(includeSpec, model, schemas)\n const treeDepth = maxDepthFromTree(costTree)\n\n if (treeDepth === 1 && anyChildHasWhere(costTree)) {\n if (debug)\n console.log(` [strategy] ${model.name}: depth-1 + childWhere → where-in`)\n return 'where-in'\n }\n\n const P = isSingleParent ? 1 : takeValue ?? DEFAULT_PARENT_COUNT\n\n const costW = computeWhereInCost(costTree, P)\n const costC = computeCorrelatedCost(costTree, P)\n\n if (debug) {\n console.log(\n ` [strategy] ${model.name}: P=${P} D=${treeDepth}` +\n ` costW=${costW.toFixed(0)} costC=${costC.toFixed(0)}`,\n )\n }\n\n if (costC < costW) {\n if (debug) console.log(` [strategy] ${model.name}: costC wins → fallback`)\n return 'fallback'\n }\n\n if (debug) console.log(` [strategy] ${model.name}: costW wins → where-in`)\n return 'where-in'\n}\n","import { Model } from '../../types'\nimport { getFieldIndices } from './model-field-cache'\nimport { isPlainObject } from './validators/type-guards'\n\ninterface 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","import { Model } from '../../types'\nimport { SQL_SEPARATORS } from './constants'\nimport { quoteColumn } from './sql-utils'\nimport { isPlainObject, hasProperty } from './validators/type-guards'\n\nexport function extractWhereInput(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 as Record<string, unknown>) : {}\n}\n\nexport function buildScalarColumnSelect(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","import { Model } from '../../types'\nimport { SQL_TEMPLATES, SQL_SEPARATORS, LIMITS } from '../shared/constants'\nimport { quote, buildTableReference, quoteColumn } from '../shared/sql-utils'\nimport { joinCondition, isValidRelationField } from '../joins'\nimport { SelectQuerySpec } from '../shared/types'\nimport { getFieldIndices, getJsonFieldSet } from '../shared/model-field-cache'\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 extractScalarSelection,\n extractNestedIncludeSpec,\n} from '../shared/relation-utils'\nimport { resolveRelationKeys } from '../shared/relation-key-utils'\nimport { ParamStore } from '../shared/param-store'\nimport { buildScalarColumnSelect } from '../shared/relation-query-context'\nimport { resolveIncludeRelations } from '../shared/include-tree-walker'\n\ninterface FlatJoinBuildResult {\n sql: string\n params: any[]\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 (\n this.count >=\n Number.MAX_SAFE_INTEGER - LIMITS.MAX_ALIAS_COUNTER_THRESHOLD\n ) {\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 indices = getFieldIndices(parentModel)\n const field = indices.allFieldsByName.get(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 jsonSet = getJsonFieldSet(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 const colRef = jsonSet.has(fieldName)\n ? `${childAlias}.${quotedCol}::text`\n : `${childAlias}.${quotedCol}`\n\n columns[idx++] = `${colRef} AS \"${fullPrefix}.${field.name}\"`\n }\n\n columns.length = idx\n return columns\n}\n\nfunction countActiveEntries(spec: Record<string, any>): number {\n let count = 0\n for (const value of Object.values(spec)) {\n if (value !== false) count++\n }\n return count\n}\n\nexport function canUseFlatJoinForAll(\n includeSpec: Record<string, any>,\n model: Model,\n schemas: readonly Model[],\n debug?: boolean,\n): boolean {\n const relations = resolveIncludeRelations(includeSpec, model, schemas)\n\n if (relations.length < countActiveEntries(includeSpec)) {\n return false\n }\n\n for (const rel of relations) {\n if (isPlainObject(rel.value)) {\n const obj = rel.value as Record<string, unknown>\n if ('take' in obj && obj.take != null) {\n return false\n }\n if ('skip' in obj && typeof obj.skip === 'number' && obj.skip > 0) {\n return false\n }\n }\n\n const keys = resolveRelationKeys(rel.field as any, 'include')\n if (!keys || keys.parentKeys.length === 0 || keys.childKeys.length === 0) {\n if (debug)\n console.log(\n ` [canFlatJoin] ${model.name}.${rel.relName}: no join keys resolved`,\n )\n return false\n }\n\n if (keys.parentKeys.length > 1 || keys.childKeys.length > 1) {\n if (debug)\n console.log(\n ` [canFlatJoin] ${model.name}.${rel.relName}: composite keys (${keys.parentKeys.length} parent, ${keys.childKeys.length} child)`,\n )\n return false\n }\n\n if (Object.keys(rel.nestedSpec).length > 0) {\n if (!canUseFlatJoinForAll(rel.nestedSpec, rel.relModel, schemas, debug)) {\n return false\n }\n }\n }\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 > LIMITS.MAX_NESTED_JOIN_DEPTH) {\n throw new Error(\n `Nested joins exceeded maximum depth of ${LIMITS.MAX_NESTED_JOIN_DEPTH} 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 indices = getFieldIndices(parentModel)\n const field = indices.allFieldsByName.get(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 extractReferencedParams(\n whereClause: string | undefined,\n specParams: ParamStore | readonly unknown[],\n): { cleanWhere: string; params: any[] } {\n if (!whereClause || whereClause === '1=1') {\n return { cleanWhere: '', params: [] }\n }\n\n const refSet = new Set<number>()\n const re = /\\$(\\d+)/g\n let match: RegExpExecArray | null\n while ((match = re.exec(whereClause)) !== null) {\n refSet.add(Number(match[1]))\n }\n\n if (refSet.size === 0) {\n return { cleanWhere: whereClause, params: [] }\n }\n\n const allParams: readonly unknown[] = Array.isArray(specParams)\n ? specParams\n : typeof (specParams as any).snapshot === 'function'\n ? (specParams as ParamStore).snapshot().params\n : []\n\n const refs = Array.from(refSet).sort((a, b) => a - b)\n const params: any[] = []\n const indexMap = new Map<number, number>()\n\n for (const oldIdx of refs) {\n params.push(allParams[oldIdx - 1])\n indexMap.set(oldIdx, params.length)\n }\n\n let cleanWhere = whereClause\n const sorted = Array.from(indexMap.entries()).sort((a, b) => b[0] - a[0])\n for (const [oldIdx, newIdx] of sorted) {\n cleanWhere = cleanWhere.split(`$${oldIdx}`).join(`$${newIdx}`)\n }\n\n return { cleanWhere, params }\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 pagination,\n } = spec\n\n const emptyResult: FlatJoinBuildResult = {\n sql: '',\n params: [],\n requiresReduction: false,\n includeSpec: {},\n }\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 emptyResult\n }\n\n if (!canUseFlatJoinForAll(includeSpec, model, schemas)) {\n return emptyResult\n }\n\n const { cleanWhere, params } = extractReferencedParams(\n whereClause,\n spec.params,\n )\n\n const baseJoins = whereJoins.length > 0 ? whereJoins.join(' ') : ''\n const baseWhere = cleanWhere ? `WHERE ${cleanWhere}` : ''\n const baseOrderBy = orderBy ? `ORDER BY ${orderBy}` : ''\n\n const subqueryScalarCols = buildScalarColumnSelect(model, from.alias)\n let baseSubquery = `\n SELECT ${subqueryScalarCols} FROM ${from.table} ${from.alias}\n ${baseJoins}\n ${baseWhere}\n ${baseOrderBy}\n `.trim()\n\n const take =\n pagination.take !== undefined && pagination.take !== null\n ? pagination.take\n : null\n const skip =\n pagination.skip !== undefined && pagination.skip !== null\n ? pagination.skip\n : null\n\n if (take !== null) {\n params.push(take)\n baseSubquery += ` LIMIT $${params.length}`\n }\n if (skip !== null) {\n params.push(skip)\n baseSubquery += ` OFFSET $${params.length}`\n }\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 emptyResult\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, params, requiresReduction: true, includeSpec }\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) {\n if (val === null) {\n return `${expr} ${SQL_TEMPLATES.IS_NULL}`\n }\n\n if (isPlainObject(val) && 'path' in val) {\n return handleJsonPath(expr, val, params, dialect)\n }\n\n throw createError(\n 'JSON path operator requires object with \"path\" key or null',\n { operator: op },\n )\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\nconst SCHEMA_MAP_CACHE = new WeakMap<readonly Model[], Map<string, Model>>()\n\nfunction getSchemaByName(schemas: readonly Model[]): Map<string, Model> {\n let map = SCHEMA_MAP_CACHE.get(schemas)\n if (!map) {\n map = new Map()\n for (const m of schemas) map.set(m.name, m)\n SCHEMA_MAP_CACHE.set(schemas, map)\n }\n return map\n}\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 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 schemaMap = getSchemaByName(ctx.schemaModels)\n const relModel = schemaMap.get(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\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 { 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 const joined = clauses.join(` ${operator} `)\n if (operator === 'OR' && clauses.length > 1) {\n return `(${joined})`\n }\n return joined\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 {\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\nconst IS_PRODUCTION =\n typeof process !== 'undefined' && process.env?.NODE_ENV === 'production'\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 if (IS_PRODUCTION) {\n assertSameLength(params, mappings)\n assertValidNextIndex(index)\n return\n }\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 type { Field } from '../../types'\n\nexport function isListRelation(field: Field): boolean {\n return typeof field.type === 'string' && field.type.endsWith('[]')\n}\n","import { reverseOrderByInput } from './order-by-utils'\n\ntype IntOrDynamic = number | string\ntype OptionalIntOrDynamic = IntOrDynamic | undefined\n\nexport function 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","import { Model, Field } from '../../types'\nimport { SQL_TEMPLATES, LIMITS } from '../shared/constants'\nimport { quote, buildTableReference, quoteColumn } from '../shared/sql-utils'\nimport { SelectQuerySpec } from '../shared/types'\nimport { getFieldIndices } from '../shared/model-field-cache'\nimport { isPlainObject, isNotNullish } 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 extractScalarSelection,\n extractNestedIncludeSpec,\n} from '../shared/relation-utils'\nimport { resolveRelationKeys } from '../shared/relation-key-utils'\nimport { isValidRelationField } from '../joins'\nimport { buildWhereClause } from '../where'\nimport { isValidWhereClause } from '../shared/validators/sql-validators'\nimport { createAliasGenerator } from '../shared/alias-generator'\nimport { ParamStore } from '../shared/param-store'\nimport {\n extractWhereInput,\n buildScalarColumnSelect,\n} from '../shared/relation-query-context'\nimport { isListRelation } from '../shared/field-type-utils'\nimport { readSkipTake } from '../pagination'\nimport { maybeReverseNegativeTake } from '../shared/negative-take-utils'\nimport { resolveIncludeRelations } from '../shared/include-tree-walker'\n\ninterface LateralJoinBuildResult {\n sql: string\n params: any[]\n requiresReduction: boolean\n includeSpec: Record<string, any>\n isLateral: boolean\n lateralMeta: LateralRelationMeta[]\n}\n\nexport interface LateralRelationMeta {\n name: string\n isList: boolean\n fieldTypes: Array<{ fieldName: string; type: string }>\n nestedRelations: LateralRelationMeta[]\n}\n\ninterface ParamCollector {\n values: any[]\n add(value: unknown): string\n}\n\nfunction createParamCollector(): ParamCollector {\n const values: any[] = []\n return {\n values,\n add(value: unknown): string {\n values.push(value)\n return `$${values.length}`\n },\n }\n}\n\nfunction createParamAdapter(collector: ParamCollector): any {\n return {\n add(value: unknown): string {\n return collector.add(value)\n },\n snapshot() {\n return { params: [...collector.values] }\n },\n get length() {\n return collector.values.length\n },\n }\n}\n\nfunction reindexWhereParams(\n whereClause: string | undefined,\n specParams: ParamStore | readonly unknown[],\n collector: ParamCollector,\n): string {\n if (!whereClause || whereClause === '1=1') return ''\n\n const refSet = new Set<number>()\n const re = /\\$(\\d+)/g\n let match: RegExpExecArray | null\n while ((match = re.exec(whereClause)) !== null) {\n refSet.add(Number(match[1]))\n }\n\n if (refSet.size === 0) return whereClause\n\n const allParams: readonly unknown[] = Array.isArray(specParams)\n ? specParams\n : typeof (specParams as any).snapshot === 'function'\n ? (specParams as ParamStore).snapshot().params\n : []\n\n const refs = Array.from(refSet).sort((a, b) => a - b)\n const indexMap = new Map<number, number>()\n\n for (const oldIdx of refs) {\n collector.values.push(allParams[oldIdx - 1])\n indexMap.set(oldIdx, collector.values.length)\n }\n\n let clean = whereClause\n const sorted = Array.from(indexMap.entries()).sort((a, b) => b[0] - a[0])\n for (const [oldIdx, newIdx] of sorted) {\n clean = clean.split(`$${oldIdx}`).join(`$${newIdx}`)\n }\n\n return clean\n}\n\nfunction getRelationModel(\n parentModel: Model,\n relationName: string,\n schemas: readonly Model[],\n): Model | null {\n const indices = getFieldIndices(parentModel)\n const field = indices.allFieldsByName.get(relationName)\n if (!field?.isRelation || !field.relatedModel) return null\n return schemas.find((m) => m.name === field.relatedModel) ?? null\n}\n\nfunction extractOrderByInput(relArgs: unknown): unknown {\n if (!isPlainObject(relArgs)) return undefined\n const obj = relArgs as Record<string, unknown>\n if ('orderBy' in obj) return obj.orderBy\n return undefined\n}\n\nfunction buildChildOrderBy(\n relModel: Model,\n alias: string,\n orderByInput: unknown,\n pkFields: string[],\n): string {\n if (isNotNullish(orderByInput)) {\n const entries = Array.isArray(orderByInput) ? orderByInput : [orderByInput]\n const parts: string[] = []\n for (const entry of entries) {\n if (!isPlainObject(entry)) continue\n for (const [field, dir] of Object.entries(\n entry as Record<string, unknown>,\n )) {\n const direction = String(dir).toUpperCase() === 'DESC' ? 'DESC' : 'ASC'\n parts.push(`${alias}.${quoteColumn(relModel, field)} ${direction}`)\n }\n }\n if (parts.length > 0) return parts.join(', ')\n }\n return pkFields\n .map((f) => `${alias}.${quoteColumn(relModel, f)} ASC`)\n .join(', ')\n}\n\ninterface LateralBuildResult {\n joinSql: string\n latAlias: string\n meta: LateralRelationMeta\n}\n\ninterface LateralBuildContext {\n schemas: readonly Model[]\n dialect: SqlDialect\n aliasCounter: { count: number }\n collector: ParamCollector\n}\n\nfunction buildLateralForRelation(\n relationName: string,\n relArgs: unknown,\n field: Field,\n relModel: Model,\n parentModel: Model,\n parentAlias: string,\n ctx: LateralBuildContext,\n depth: number,\n): LateralBuildResult | null {\n if (depth > LIMITS.MAX_NESTED_JOIN_DEPTH) return null\n\n const isList = isListRelation(field)\n const keys = resolveRelationKeys(field as any, 'include')\n if (!keys || keys.childKeys.length === 0 || keys.parentKeys.length === 0)\n return null\n\n const latAlias = `_l${ctx.aliasCounter.count++}`\n const subAlias = `_s${ctx.aliasCounter.count++}`\n const childAlias = `_c${ctx.aliasCounter.count++}`\n\n const indices = getFieldIndices(relModel)\n const scalarSel = extractScalarSelection(relArgs, relModel)\n const pkFields = getPrimaryKeyFields(relModel)\n\n const selectedFields = scalarSel.includeAllScalars\n ? Array.from(indices.scalarFields.keys())\n : [...new Set([...pkFields, ...scalarSel.selectedScalarFields])]\n\n const nestedSpec = isPlainObject(relArgs)\n ? extractNestedIncludeSpec(relArgs, relModel)\n : {}\n\n const nestedResults: Array<{ name: string; result: LateralBuildResult }> = []\n\n for (const [nestedName, nestedValue] of Object.entries(nestedSpec)) {\n if (nestedValue === false) continue\n const nestedIndices = getFieldIndices(relModel)\n const nestedField = nestedIndices.allFieldsByName.get(nestedName)\n if (!nestedField || !isValidRelationField(nestedField as any)) continue\n\n const nestedModel = getRelationModel(relModel, nestedName, ctx.schemas)\n if (!nestedModel) continue\n\n const nested = buildLateralForRelation(\n nestedName,\n nestedValue,\n nestedField as Field,\n nestedModel,\n relModel,\n childAlias,\n ctx,\n depth + 1,\n )\n\n if (nested) {\n nestedResults.push({ name: nestedName, result: nested })\n }\n }\n\n const innerSelectCols: string[] = []\n for (const fieldName of selectedFields) {\n const f = indices.scalarFields.get(fieldName)\n if (!f) continue\n const colName = f.dbName || f.name\n innerSelectCols.push(`${childAlias}.${quote(colName)} AS ${quote(f.name)}`)\n }\n\n for (const { name, result } of nestedResults) {\n innerSelectCols.push(\n `${result.latAlias}.data AS ${quote(`__nested_${name}`)}`,\n )\n }\n\n const nestedJoinsSql = nestedResults.map((n) => n.result.joinSql).join(' ')\n\n const fkParts = keys.childKeys.map(\n (ck, i) =>\n `${childAlias}.${quoteColumn(relModel, ck)} = ${parentAlias}.${quoteColumn(parentModel, keys.parentKeys[i])}`,\n )\n const fkCondition =\n fkParts.length === 1 ? fkParts[0] : `(${fkParts.join(' AND ')})`\n\n let childWhereSql = ''\n let childWhereJoinsSql = ''\n\n const whereInput = extractWhereInput(relArgs)\n if (Object.keys(whereInput).length > 0) {\n const aliasGen = createAliasGenerator()\n const whereResult = buildWhereClause(whereInput, {\n alias: childAlias,\n schemaModels: ctx.schemas as Model[],\n model: relModel,\n params: createParamAdapter(ctx.collector),\n isSubquery: true,\n aliasGen,\n dialect: ctx.dialect,\n })\n\n if (whereResult.joins.length > 0) {\n childWhereJoinsSql = ' ' + whereResult.joins.join(' ')\n }\n if (isValidWhereClause(whereResult.clause)) {\n childWhereSql = ` AND ${whereResult.clause}`\n }\n }\n\n const rawOrderBy = extractOrderByInput(relArgs)\n const hasOrderBy = isNotNullish(rawOrderBy)\n const { hasTake, takeVal: rawTakeVal, skipVal } = readSkipTake(relArgs)\n\n if (!isList && typeof rawTakeVal === 'number' && rawTakeVal < 0) {\n throw new Error('Negative take is only supported for list relations')\n }\n\n const { takeVal, orderByInput: adjustedOrderBy } = maybeReverseNegativeTake(\n rawTakeVal,\n hasOrderBy,\n rawOrderBy,\n )\n\n const orderBySql = buildChildOrderBy(\n relModel,\n childAlias,\n adjustedOrderBy,\n pkFields,\n )\n\n let paginationSql = ''\n if (isNotNullish(takeVal)) {\n paginationSql += ` LIMIT ${ctx.collector.add(takeVal)}`\n }\n if (isNotNullish(skipVal)) {\n paginationSql += ` OFFSET ${ctx.collector.add(skipVal)}`\n }\n\n const relTable = buildTableReference(\n SQL_TEMPLATES.PUBLIC_SCHEMA,\n relModel.tableName,\n ctx.dialect,\n )\n\n const innerSql =\n `SELECT ${innerSelectCols.join(', ')}` +\n ` FROM ${relTable} ${childAlias}` +\n childWhereJoinsSql +\n (nestedJoinsSql ? ` ${nestedJoinsSql}` : '') +\n ` WHERE ${fkCondition}${childWhereSql}` +\n ` ORDER BY ${orderBySql}` +\n paginationSql\n\n const jsonScalarParts: string[] = []\n for (const fieldName of selectedFields) {\n const f = indices.scalarFields.get(fieldName)\n if (!f) continue\n jsonScalarParts.push(`'${f.name}', ${subAlias}.${quote(f.name)}`)\n }\n\n const jsonNestedParts: string[] = nestedResults.map(\n ({ name }) => `'${name}', ${subAlias}.${quote(`__nested_${name}`)}`,\n )\n\n const jsonExpr = `json_build_object(${[...jsonScalarParts, ...jsonNestedParts].join(', ')})`\n\n let outerSql: string\n if (isList) {\n const aggOrderParts = pkFields\n .map((f) => `${subAlias}.${quote(f)} ASC`)\n .join(', ')\n outerSql =\n `SELECT coalesce(json_agg(${jsonExpr} ORDER BY ${aggOrderParts}), '[]'::json) AS data` +\n ` FROM (${innerSql}) ${subAlias}`\n } else {\n outerSql = `SELECT ${jsonExpr} AS data FROM (${innerSql}) ${subAlias}`\n }\n\n const joinSql = `LEFT JOIN LATERAL (${outerSql}) ${latAlias} ON true`\n\n const fieldTypes = selectedFields\n .map((fieldName) => {\n const f = indices.scalarFields.get(fieldName)\n if (!f) return null\n return {\n fieldName: f.name,\n type: String((f as any).type ?? '').toLowerCase(),\n }\n })\n .filter(Boolean) as LateralRelationMeta['fieldTypes']\n\n const meta: LateralRelationMeta = {\n name: relationName,\n isList,\n fieldTypes,\n nestedRelations: nestedResults.map((n) => n.result.meta),\n }\n\n return { joinSql, latAlias, meta }\n}\n\nfunction countActiveEntries(spec: Record<string, any>): number {\n let count = 0\n for (const value of Object.values(spec)) {\n if (value !== false) count++\n }\n return count\n}\n\nexport function canUseLateralJoin(\n includeSpec: Record<string, any>,\n parentModel: Model,\n schemas: readonly Model[],\n): boolean {\n const relations = resolveIncludeRelations(includeSpec, parentModel, schemas)\n\n if (relations.length < countActiveEntries(includeSpec)) {\n return false\n }\n\n for (const rel of relations) {\n const keys = resolveRelationKeys(rel.field as any, 'include')\n if (!keys || keys.childKeys.length === 0 || keys.parentKeys.length === 0)\n return false\n\n if (Object.keys(rel.nestedSpec).length > 0) {\n if (!canUseLateralJoin(rel.nestedSpec, rel.relModel, schemas))\n return false\n }\n }\n\n return true\n}\n\nexport function buildLateralJoinSql(\n spec: SelectQuerySpec,\n): LateralJoinBuildResult {\n const {\n from,\n whereClause,\n whereJoins,\n orderBy,\n dialect,\n model,\n schemas,\n args,\n pagination,\n } = spec\n\n const emptyResult: LateralJoinBuildResult = {\n sql: '',\n params: [],\n requiresReduction: false,\n includeSpec: {},\n isLateral: false,\n lateralMeta: [],\n }\n\n const entries = extractRelationEntries(args, model)\n const includeSpec: Record<string, any> = {}\n for (const e of entries) {\n includeSpec[e.name] = e.value\n }\n\n if (Object.keys(includeSpec).length === 0) return emptyResult\n\n const collector = createParamCollector()\n\n const cleanWhere = reindexWhereParams(whereClause, spec.params, collector)\n\n const parentScalarCols = buildScalarColumnSelect(model, from.alias)\n const baseJoins = whereJoins.length > 0 ? ` ${whereJoins.join(' ')}` : ''\n const baseWhere = cleanWhere ? ` WHERE ${cleanWhere}` : ''\n const baseOrderBy = orderBy ? ` ORDER BY ${orderBy}` : ''\n\n let parentSub =\n `SELECT ${parentScalarCols} FROM ${from.table} ${from.alias}` +\n baseJoins +\n baseWhere +\n baseOrderBy\n\n const take =\n pagination.take !== undefined && pagination.take !== null\n ? pagination.take\n : null\n const skip =\n pagination.skip !== undefined && pagination.skip !== null\n ? pagination.skip\n : null\n\n if (take !== null) {\n parentSub += ` LIMIT ${collector.add(take)}`\n }\n if (skip !== null) {\n parentSub += ` OFFSET ${collector.add(skip)}`\n }\n\n const aliasCounter = { count: 0 }\n const ctx: LateralBuildContext = {\n schemas,\n dialect,\n aliasCounter,\n collector,\n }\n\n const lateralJoins: string[] = []\n const lateralSelects: string[] = []\n const lateralMeta: LateralRelationMeta[] = []\n\n for (const [relName, relValue] of Object.entries(includeSpec)) {\n if (relValue === false) continue\n\n const indices = getFieldIndices(model)\n const field = indices.allFieldsByName.get(relName)\n if (!field || !isValidRelationField(field as any)) continue\n\n const relModel = getRelationModel(model, relName, schemas)\n if (!relModel) continue\n\n const result = buildLateralForRelation(\n relName,\n relValue,\n field as Field,\n relModel,\n model,\n from.alias,\n ctx,\n 0,\n )\n\n if (!result) continue\n\n lateralJoins.push(result.joinSql)\n lateralSelects.push(`${result.latAlias}.data AS ${quote(relName)}`)\n lateralMeta.push(result.meta)\n }\n\n if (lateralJoins.length === 0) return emptyResult\n\n const baseSelect = (spec.select ?? '').trim()\n const allSelects = [baseSelect, ...lateralSelects]\n .filter((s) => s && s.trim().length > 0)\n .join(', ')\n\n if (!allSelects) {\n return emptyResult\n }\n\n const pkField = getPrimaryKeyField(model)\n const pkOrder = `${from.alias}.${quoteColumn(model, pkField)} ASC`\n\n const sql =\n `SELECT ${allSelects}` +\n ` FROM (${parentSub}) ${from.alias}` +\n ` ${lateralJoins.join(' ')}` +\n ` ORDER BY ${pkOrder}`\n\n return {\n sql: sql.trim(),\n params: collector.values,\n requiresReduction: true,\n includeSpec,\n isLateral: true,\n lateralMeta,\n }\n}\n","import { SQL_TEMPLATES, SQL_SEPARATORS } from '../shared/constants'\nimport { col, quote } from '../shared/sql-utils'\nimport { SelectQuerySpec } from '../shared/types'\nimport {\n isNotNullish,\n isNonEmptyArray,\n isNonEmptyString,\n} from '../shared/validators/type-guards'\nimport { parseOrderByValue, buildOrderByFragment } from '../pagination'\nimport {\n normalizeOrderByInput,\n OrderBySortObject,\n} from '../shared/order-by-utils'\nimport { SqlDialect } from '../../sql-builder-dialect'\n\nconst DISTINCT_ROW_NUMBER_COLUMN = '__tp_rn'\nconst DISTINCT_WRAPPER_ALIAS = '__tp_distinct'\nconst DISTINCT_FIRST_ROW = 1\nconst DEFAULT_PRIMARY_KEY = 'id'\nexport const COUNT_SELECT_KEY = '_count'\n\nexport type OrderByEntry = {\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 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_SELECT_KEY]\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\nexport function getOrderByEntries(spec: SelectQuerySpec): OrderByEntry[] {\n if (!isNotNullish(spec.args.orderBy)) return []\n const normalized = normalizeOrderByInput(spec.args.orderBy, parseOrderByValue)\n const entries: OrderByEntry[] = []\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 if (typeof value === 'string') {\n entries.push({ field, direction: value as 'asc' | 'desc' })\n continue\n }\n const obj = value as OrderBySortObject\n entries.push({ field, direction: obj.direction, nulls: obj.nulls })\n }\n }\n return entries\n}\n\nexport function renderOrderBySql(\n entries: OrderByEntry[],\n alias: string,\n dialect: SqlDialect,\n model?: any,\n): string {\n return buildOrderByFragment(entries, alias, dialect, model)\n}\n\nfunction renderOrderBySimple(entries: OrderByEntry[], alias: string): string {\n if (entries.length === 0) return ''\n const out: string[] = []\n for (const e of entries) {\n const dir = e.direction.toUpperCase()\n const c = `${alias}.${quote(e.field)}`\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 } else {\n out.push(c + ' ' + dir)\n }\n }\n return out.join(SQL_SEPARATORS.ORDER_BY)\n}\n\nexport function ensureIdTiebreakerEntries(\n entries: OrderByEntry[],\n model: any,\n): OrderByEntry[] {\n const idField = model?.fields?.find?.(\n (f: any) => f.name === DEFAULT_PRIMARY_KEY && !f.isRelation,\n )\n if (!idField) return entries\n if (entries.some((e) => e.field === DEFAULT_PRIMARY_KEY)) return entries\n return [...entries, { field: DEFAULT_PRIMARY_KEY, direction: 'asc' }]\n}\n\nexport function ensurePostgresDistinctOrderEntries(args: {\n entries: OrderByEntry[]\n distinct: readonly string[]\n model: any\n}): OrderByEntry[] {\n const { entries, distinct, model } = args\n\n const distinctEntries: OrderByEntry[] = [...distinct].map((f) => ({\n field: f,\n direction: 'asc' as const,\n }))\n\n const canKeepAsIs =\n entries.length >= distinctEntries.length &&\n distinctEntries.every((de, i) => entries[i].field === de.field)\n\n const merged = canKeepAsIs ? entries : [...distinctEntries, ...entries]\n\n return ensureIdTiebreakerEntries(merged, model)\n}\n\nfunction extractDistinctOrderEntries(spec: SelectQuerySpec): OrderByEntry[] {\n const entries = getOrderByEntries(spec)\n if (entries.length > 0) return entries\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 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\nexport function buildSqliteDistinctQuery(\n spec: SelectQuerySpec,\n selectWithIncludes: string,\n countJoins?: string[],\n): string {\n const { includes, from, whereClause, whereJoins, distinct, model } = 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_SELECT_KEY])\n\n const outerSelectCols = buildOutputColumns(\n scalarNames,\n includeNames,\n hasCount,\n )\n const distinctCols = buildDistinctColumns([...distinct], from.alias, model)\n\n const baseEntries = getOrderByEntries(spec)\n const fallbackEntries: OrderByEntry[] = [...distinct].map((f) => ({\n field: f,\n direction: 'asc' as const,\n }))\n\n const resolvedEntries = baseEntries.length > 0 ? baseEntries : fallbackEntries\n\n const windowEntries = ensureIdTiebreakerEntries(resolvedEntries, model)\n const windowOrder = renderOrderBySql(\n windowEntries,\n from.alias,\n 'sqlite',\n model,\n )\n\n const outerEntries = extractDistinctOrderEntries(spec)\n const outerOrder = renderOrderBySimple(\n outerEntries,\n `\"${DISTINCT_WRAPPER_ALIAS}\"`,\n )\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 `\"${DISTINCT_ROW_NUMBER_COLUMN}\"`,\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 `\"${DISTINCT_WRAPPER_ALIAS}\"`,\n SQL_TEMPLATES.WHERE,\n `\"${DISTINCT_ROW_NUMBER_COLUMN}\" = ${DISTINCT_FIRST_ROW}`,\n ]\n if (isNonEmptyString(outerOrder)) {\n outerParts.push(SQL_TEMPLATES.ORDER_BY, outerOrder)\n }\n return outerParts.join(' ')\n}\n\nexport function 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","import type { PrismaQueryArgs } from '../../types'\nimport { SQL_TEMPLATES, SQL_SEPARATORS } from '../shared/constants'\nimport { 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 './include-count'\nimport { emptyJsonArray } from './include-join'\n\nimport { getRelationFieldSet } from '../shared/model-field-cache'\nimport { isDynamicParameter } from '@dee-wan/schema-parser'\nimport {\n hasChildPaginationAnywhere,\n pickIncludeStrategy,\n} from './strategy-estimator'\nimport { buildFlatJoinSql, canUseFlatJoinForAll } from './flat-join'\nimport { buildLateralJoinSql, canUseLateralJoin } from './lateral-join'\nimport {\n getOrderByEntries,\n renderOrderBySql,\n ensurePostgresDistinctOrderEntries,\n buildSqliteDistinctQuery,\n buildPostgresDistinctOnClause,\n COUNT_SELECT_KEY,\n} from './distinct'\nimport { joinNonEmpty } from '../shared/array-utils'\n\nconst ALWAYS_TRUE_CONDITION = '1=1'\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 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 =\n spec.args?.select?.[COUNT_SELECT_KEY] ??\n spec.args?.include?.[COUNT_SELECT_KEY]\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_SELECT_KEY)\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 = emptyJsonArray(dialect)\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\nfunction 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 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 !== ALWAYS_TRUE_CONDITION)\n 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 && key !== COUNT_SELECT_KEY) {\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\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 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 const takeValue = typeof pagination.take === 'number' ? pagination.take : null\n\n if (dialect === 'postgres' && hasIncludes) {\n const canFlatJoin = canUseFlatJoinForAll(includeSpec, model, schemas)\n const canLateral = canUseLateralJoin(includeSpec, model, schemas)\n const hasChildPag = hasChildPaginationAnywhere(includeSpec, model, schemas)\n\n const strategy = pickIncludeStrategy({\n includeSpec,\n model,\n schemas,\n method,\n args,\n takeValue,\n hasPagination,\n canFlatJoin,\n canLateral,\n hasChildPagination: hasChildPag,\n })\n\n if (strategy === 'flat-join') {\n const flatResult = buildFlatJoinSql(spec)\n\n if (flatResult.sql) {\n validateSelectQuery(flatResult.sql)\n validateParamConsistencyByDialect(\n flatResult.sql,\n flatResult.params,\n dialect,\n )\n return {\n sql: flatResult.sql,\n params: flatResult.params,\n paramMappings: flatResult.params.map((v: any, i: number) => ({\n index: i + 1,\n value: v,\n })),\n requiresReduction: true,\n includeSpec: flatResult.includeSpec,\n }\n }\n }\n\n if (strategy === 'lateral') {\n const lateralResult = buildLateralJoinSql(spec)\n if (lateralResult.sql) {\n return {\n sql: lateralResult.sql,\n params: lateralResult.params,\n requiresReduction: true,\n includeSpec: lateralResult.includeSpec,\n isLateral: true,\n lateralMeta: lateralResult.lateralMeta,\n }\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 const currentEntries = getOrderByEntries(spec)\n const mergedEntries = ensurePostgresDistinctOrderEntries({\n entries: currentEntries.length > 0 ? currentEntries : [],\n distinct: [...distinct],\n model,\n })\n finalOrderBy = renderOrderBySql(mergedEntries, from.alias, dialect, model)\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 { 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(\n `Unknown field '${unknown.join(\"', '\")}' does not exist on this model`,\n )\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 { 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 { buildRelationCountSql } from './include-count'\nimport { Model, PrismaQueryArgs, Field } from '../../types'\nimport { createAliasGenerator } from '../shared/alias-generator'\nimport { SQL_TEMPLATES, SQL_SEPARATORS, LIMITS } from '../shared/constants'\nimport { quote, quoteColumn, sqlStringLiteral } 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 isNonEmptyArray,\n isNotNullish,\n isPlainObject,\n} from '../shared/validators/type-guards'\nimport { normalizeOrderByInput as normalizeOrderByShared } from '../shared/order-by-utils'\nimport { addAutoScoped } from '../shared/dynamic-params'\nimport {\n getFieldIndices,\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 { extractRelationEntries } from '../shared/relation-extraction-utils'\nimport {\n buildIncludeScope,\n getRelationTableReference,\n emptyJsonArray,\n canUseJoinInclude,\n hasNestedRelationInArgs,\n buildJoinBasedNonPaginated,\n buildJoinBasedPaginated,\n} from './include-join'\nimport { extractWhereInput } from '../shared/relation-query-context'\nimport { isListRelation } from '../shared/field-type-utils'\nimport { maybeReverseNegativeTake } from '../shared/negative-take-utils'\nimport { getPrimaryKeyField } from '../shared/primary-key-utils'\n\nconst ROW_SUBQUERY_ALIAS_SUFFIX = '_row'\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 NestedToOneRelation {\n name: string\n field: Field\n model: Model\n args: unknown\n}\n\nfunction resolveRelationOrThrow(\n model: Model,\n schemaByName: Map<string, Model>,\n relName: string,\n): { field: Field; relModel: Model } {\n const indices = getFieldIndices(model)\n const field = indices.allFieldsByName.get(relName)\n\n if (!isNotNullish(field)) {\n throw new Error(\n `Unknown relation '${relName}' on model ${model.name}. ` +\n `Available relation fields: ${indices.relationNames.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 = normalizeOrderByShared(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 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 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 extractNestedToOneRelations(\n relArgs: unknown,\n relModel: Model,\n schemaByName: Map<string, Model>,\n): NestedToOneRelation[] {\n if (!isPlainObject(relArgs)) return []\n\n const entries = extractRelationEntries(relArgs as any, relModel)\n const toOneRelations: NestedToOneRelation[] = []\n\n for (const entry of entries) {\n const indices = getFieldIndices(relModel)\n const field = indices.allFieldsByName.get(entry.name)\n if (!field || !isValidRelationField(field as Field)) continue\n\n const isList = isListRelation(field as Field)\n if (isList) continue\n\n const nestedModel = schemaByName.get(field.relatedModel!)\n if (!nestedModel) continue\n\n toOneRelations.push({\n name: entry.name,\n field: field as Field,\n model: nestedModel,\n args: entry.value,\n })\n }\n\n return toOneRelations\n}\n\nfunction buildNestedToOneJoins(\n relations: NestedToOneRelation[],\n baseAlias: string,\n baseModel: Model,\n aliasGen: AliasGenerator,\n dialect: SqlDialect,\n): { joins: string[]; aliasMap: Map<string, string> } {\n const joins: string[] = []\n const aliasMap = new Map<string, string>()\n\n for (const rel of relations) {\n const relTable = getRelationTableReference(rel.model, dialect)\n const relAlias = aliasGen.next(`${rel.name}_joined`)\n const joinCond = joinCondition(\n rel.field,\n baseModel,\n rel.model,\n baseAlias,\n relAlias,\n )\n\n joins.push(`LEFT JOIN ${relTable} ${relAlias} ON ${joinCond}`)\n aliasMap.set(rel.name, relAlias)\n }\n\n return { joins, aliasMap }\n}\n\nfunction buildNestedToOneSelects(\n relations: NestedToOneRelation[],\n aliasMap: Map<string, string>,\n dialect: SqlDialect,\n): string[] {\n const selects: string[] = []\n\n for (const rel of relations) {\n const relAlias = aliasMap.get(rel.name)\n if (!relAlias) continue\n\n const relSelect = buildRelationSelect(rel.args, rel.model, relAlias)\n if (!relSelect || relSelect.trim().length === 0) continue\n\n const jsonExpr = jsonBuildObject(relSelect, dialect)\n const pkField = getPrimaryKeyField(rel.model)\n const pkCol = `${relAlias}.${quoteColumn(rel.model, pkField)}`\n const nullSafeExpr = `CASE WHEN ${pkCol} IS NOT NULL THEN ${jsonExpr} ELSE NULL END`\n\n selects.push(`${sqlStringLiteral(rel.name)}, ${nullSafeExpr}`)\n }\n\n return selects\n}\n\nfunction extractCountSelectFromRelArgs(\n relArgs: unknown,\n): Record<string, boolean> | null {\n if (!isPlainObject(relArgs)) return null\n const obj = relArgs as Record<string, unknown>\n if (!isPlainObject(obj.select)) return null\n const sel = obj.select as Record<string, unknown>\n const countRaw = sel['_count']\n if (!countRaw) return null\n if (isPlainObject(countRaw) && 'select' in countRaw) {\n return (countRaw as { select: Record<string, boolean> }).select\n }\n return null\n}\n\nfunction buildSelectWithNestedIncludes(\n relArgs: unknown,\n relModel: Model,\n relAlias: string,\n ctx: IncludeBuildContext,\n): { select: string; nestedJoins: string[] } {\n const nestedToOnes = extractNestedToOneRelations(\n relArgs,\n relModel,\n ctx.schemaByName,\n )\n\n const countSelect = extractCountSelectFromRelArgs(relArgs)\n const countJoins: string[] = []\n\n function appendCountToSelect(baseSelect: string): string {\n if (!countSelect || Object.keys(countSelect).length === 0) return baseSelect\n const countBuild = buildRelationCountSql(\n countSelect,\n relModel,\n ctx.schemas,\n relAlias,\n ctx.params,\n ctx.dialect,\n )\n if (!countBuild.jsonPairs) return baseSelect\n countJoins.push(...countBuild.joins)\n const countExpr = `'_count', ${jsonBuildObject(countBuild.jsonPairs, ctx.dialect)}`\n return baseSelect\n ? `${baseSelect}${SQL_SEPARATORS.FIELD_LIST}${countExpr}`\n : countExpr\n }\n\n if (nestedToOnes.length === 0) {\n let relSelect = buildRelationSelect(relArgs, relModel, relAlias)\n\n let nestedIncludes: IncludeSpec[] = []\n if (isPlainObject(relArgs)) {\n const prevModel = ctx.model\n const prevParentAlias = ctx.parentAlias\n const prevDepth = ctx.depth\n\n ctx.model = relModel\n ctx.parentAlias = relAlias\n ctx.depth = prevDepth + 1\n\n try {\n nestedIncludes = buildIncludeSqlInternal(\n relArgs as PrismaQueryArgs,\n ctx,\n )\n } finally {\n ctx.model = prevModel\n ctx.parentAlias = prevParentAlias\n ctx.depth = prevDepth\n }\n }\n\n if (isNonEmptyArray(nestedIncludes)) {\n const emptyJson = emptyJsonArray(ctx.dialect)\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 relSelect = appendCountToSelect(relSelect)\n\n return { select: relSelect, nestedJoins: countJoins }\n }\n\n const { joins, aliasMap } = buildNestedToOneJoins(\n nestedToOnes,\n relAlias,\n relModel,\n ctx.aliasGen,\n ctx.dialect,\n )\n\n const baseSelect = buildRelationSelect(relArgs, relModel, relAlias)\n const nestedSelects = buildNestedToOneSelects(\n nestedToOnes,\n aliasMap,\n ctx.dialect,\n )\n\n const allParts: string[] = []\n if (baseSelect && baseSelect.trim().length > 0) {\n allParts.push(baseSelect)\n }\n for (const ns of nestedSelects) {\n allParts.push(ns)\n }\n\n let finalSelect = allParts.join(SQL_SEPARATORS.FIELD_LIST)\n finalSelect = appendCountToSelect(finalSelect)\n\n return {\n select: finalSelect,\n nestedJoins: [...joins, ...countJoins],\n }\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 nestedJoins: string[]\n}): string {\n const allJoins = [args.joins, ...args.nestedJoins].filter((j) => j).join(' ')\n const joinsStr = allJoins ? ` ${allJoins}` : ''\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}${joinsStr} ` +\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 nestedJoins: string[]\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 nestedJoins: args.nestedJoins,\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 nestedJoins: string[]\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 = emptyJsonArray(args.ctx.dialect)\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 nestedJoins: args.nestedJoins,\n })\n\n return Object.freeze({ name: args.relName, sql, isOneToOne: false })\n }\n\n const rowAlias = args.ctx.aliasGen.next(\n `${args.relName}${ROW_SUBQUERY_ALIAS_SUFFIX}`,\n )\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 nestedJoins: args.nestedJoins,\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 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 = isListRelation(field)\n const joinPredicate = joinCondition(\n field,\n ctx.model,\n relModel,\n ctx.parentAlias,\n relAlias,\n )\n\n const whereInput = extractWhereInput(relArgs)\n const { select: relSelect, nestedJoins } = 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 nestedJoins,\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 nestedJoins,\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 nestedJoins,\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 nestedJoins,\n })\n}\n\nfunction buildIncludeSqlInternal(\n args: IncludeSelectArgs,\n ctx: IncludeBuildContext,\n): IncludeSpec[] {\n const depth = ctx.depth\n\n if (depth > LIMITS.MAX_INCLUDE_DEPTH) {\n throw new Error(\n `Maximum include depth of ${LIMITS.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 > LIMITS.MAX_SELF_REFERENTIAL_DEPTH) {\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 ${LIMITS.MAX_SELF_REFERENTIAL_DEPTH} 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 > LIMITS.MAX_INCLUDES_PER_LEVEL) {\n throw new Error(\n `Too many includes at depth ${depth} (${entries.length} > ${LIMITS.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 > LIMITS.MAX_TOTAL_SUBQUERIES) {\n throw new Error(\n `Query complexity limit exceeded: ${ctx.stats.totalIncludes} includes generated. ` +\n `Maximum allowed: ${LIMITS.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 ctx.includePath.push(relName)\n ctx.visitSet.add(relationPath)\n\n try {\n includes.push(\n buildSingleInclude(\n relName,\n relArgs,\n resolved.field,\n resolved.relModel,\n ctx,\n ),\n )\n } finally {\n ctx.includePath.pop()\n ctx.visitSet.delete(relationPath)\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","import { Field, Model } from '../../types'\nimport { SqlDialect } from '../../sql-builder-dialect'\nimport { buildTableReference, col, quote } from './sql-utils'\nimport { joinCondition, getModelByName } from '../joins'\nimport { getRelationFieldSet, getScalarFieldSet } from './model-field-cache'\nimport { SQL_SEPARATORS } from './constants'\nimport { isPlainObject, isNotNullish } from './validators/type-guards'\nimport {\n expandOrderByInput,\n normalizeAndValidateOrderBy,\n} from './order-by-utils'\nimport { parseOrderByValue, buildOrderByFragment } from '../pagination'\n\nconst MAX_RELATION_ORDER_BY_DEPTH = 10\n\ninterface OrderByWithRelationsResult {\n sql: string\n joins: string[]\n}\n\ninterface RelationOrderByContext {\n schemas: Model[]\n dialect: SqlDialect\n joins: string[]\n usedAliases: Set<string>\n aliasCounter: { value: number }\n}\n\nfunction resolveTableRef(model: Model, dialect: SqlDialect): string {\n const tableName =\n (model as any).tableName || (model as any).dbName || model.name\n if (dialect === 'sqlite') {\n return quote(tableName)\n }\n const schema = (model as any).schema || (model as any).schemaName || 'public'\n return buildTableReference(schema, tableName, dialect)\n}\n\nfunction findRelationField(model: Model, fieldName: string) {\n return model.fields.find((f) => f.name === fieldName && f.isRelation)\n}\n\nfunction nextJoinAlias(ctx: RelationOrderByContext): string {\n let alias: string\n do {\n alias = `ob_${ctx.aliasCounter.value++}`\n } while (ctx.usedAliases.has(alias))\n ctx.usedAliases.add(alias)\n return alias\n}\n\nfunction resolveRelationOrderByChain(\n relationFieldName: string,\n value: Record<string, unknown>,\n currentModel: Model,\n currentAlias: string,\n ctx: RelationOrderByContext,\n depth: number,\n): string[] {\n if (depth > MAX_RELATION_ORDER_BY_DEPTH) {\n throw new Error(\n `Relation orderBy nesting too deep (max ${MAX_RELATION_ORDER_BY_DEPTH} levels)`,\n )\n }\n\n if ('_count' in value && value._count !== undefined) {\n throw new Error(\n `Relation orderBy with _count on '${relationFieldName}' is not yet supported by prisma-sql`,\n )\n }\n\n const field = findRelationField(currentModel, relationFieldName)\n if (!field) {\n throw new Error(\n `Relation field '${relationFieldName}' not found on model ${currentModel.name}`,\n )\n }\n\n const relatedModel = getModelByName(ctx.schemas, field.relatedModel!)\n if (!relatedModel) {\n throw new Error(\n `Related model '${field.relatedModel}' not found for relation '${relationFieldName}'`,\n )\n }\n\n const joinAlias = nextJoinAlias(ctx)\n const tableRef = resolveTableRef(relatedModel, ctx.dialect)\n const cond = joinCondition(\n field as unknown as Field,\n currentModel,\n relatedModel,\n currentAlias,\n joinAlias,\n )\n ctx.joins.push(`LEFT JOIN ${tableRef} ${joinAlias} ON ${cond}`)\n\n const relScalarSet = getScalarFieldSet(relatedModel)\n const relRelationSet = getRelationFieldSet(relatedModel)\n const nestedEntries = Object.entries(value).filter(([, v]) => v !== undefined)\n const orderFragments: string[] = []\n\n for (const [nestedField, nestedValue] of nestedEntries) {\n if (relScalarSet.has(nestedField)) {\n const entries = normalizeAndValidateOrderBy(\n [{ [nestedField]: nestedValue }],\n relatedModel,\n parseOrderByValue,\n )\n const sql = buildOrderByFragment(\n entries,\n joinAlias,\n ctx.dialect,\n relatedModel,\n )\n if (sql) orderFragments.push(sql)\n continue\n }\n\n if (relRelationSet.has(nestedField)) {\n if (!isPlainObject(nestedValue)) {\n throw new Error(\n `Relation orderBy for '${nestedField}' must be an object`,\n )\n }\n const nested = resolveRelationOrderByChain(\n nestedField,\n nestedValue,\n relatedModel,\n joinAlias,\n ctx,\n depth + 1,\n )\n orderFragments.push(...nested)\n continue\n }\n\n throw new Error(\n `orderBy field '${nestedField}' does not exist on related model '${relatedModel.name}'`,\n )\n }\n\n return orderFragments\n}\n\nexport function buildOrderByWithRelations(\n orderBy: unknown,\n alias: string,\n dialect: SqlDialect,\n model: Model,\n schemas: Model[],\n): OrderByWithRelationsResult {\n if (!isNotNullish(orderBy)) return { sql: '', joins: [] }\n\n const expanded = expandOrderByInput(orderBy)\n if (expanded.length === 0) return { sql: '', joins: [] }\n\n const relationSet = getRelationFieldSet(model)\n const scalarSet = getScalarFieldSet(model)\n const orderFragments: string[] = []\n\n const ctx: RelationOrderByContext = {\n schemas,\n dialect,\n joins: [],\n usedAliases: new Set<string>(),\n aliasCounter: { value: 0 },\n }\n\n for (const [fieldName, value] of expanded) {\n if (scalarSet.has(fieldName)) {\n const entries = normalizeAndValidateOrderBy(\n [{ [fieldName]: value }],\n model,\n parseOrderByValue,\n )\n const sql = buildOrderByFragment(entries, alias, dialect, model)\n if (sql) orderFragments.push(sql)\n continue\n }\n\n if (relationSet.has(fieldName)) {\n if (!isPlainObject(value)) {\n throw new Error(`Relation orderBy for '${fieldName}' must be an object`)\n }\n\n const fragments = resolveRelationOrderByChain(\n fieldName,\n value,\n model,\n alias,\n ctx,\n 0,\n )\n orderFragments.push(...fragments)\n continue\n }\n\n throw new Error(\n `orderBy field '${fieldName}' does not exist on model ${model.name}`,\n )\n }\n\n return {\n sql: orderFragments.join(SQL_SEPARATORS.ORDER_BY),\n joins: ctx.joins,\n }\n}\n","import { SqlDialect, getGlobalDialect } from '../sql-builder-dialect'\nimport { PrismaQueryArgs, Model } from '../types'\nimport {\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 expandOrderByInput,\n} from './shared/order-by-utils'\nimport { buildOrderByWithRelations } from './shared/order-by-relation'\nimport { createParamStoreFrom } from './shared/param-store'\nimport { assertSafeAlias, assertSafeTableRef } from './shared/sql-utils'\nimport { WhereClauseResult, SqlResult, SelectQuerySpec } from './shared/types'\nimport {\n isNotNullish,\n isNonEmptyArray,\n isPlainObject,\n} from './shared/validators/type-guards'\nimport { assertScalarField } from './shared/validators/field-assertions'\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 field. 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 isScalarSortValue(v: unknown): boolean {\n if (typeof v === 'string') {\n const lower = v.toLowerCase()\n return lower === 'asc' || lower === 'desc'\n }\n if (\n isPlainObject(v) &&\n (Object.prototype.hasOwnProperty.call(v, 'sort') ||\n Object.prototype.hasOwnProperty.call(v, 'direction'))\n ) {\n return true\n }\n return false\n}\n\nfunction validateOrderBy(\n model: Model,\n orderBy: PrismaQueryArgs['orderBy'],\n schemas: Model[],\n): void {\n if (!isNotNullish(orderBy)) return\n\n const expanded = expandOrderByInput(orderBy)\n if (expanded.length === 0) return\n\n const scalarSet = getScalarFieldSet(model)\n const relationSet = getRelationFieldSet(model)\n\n for (const [fieldName, value] of expanded) {\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 assertScalarField(model, f, 'orderBy')\n continue\n }\n\n if (relationSet.has(f)) {\n if (!isPlainObject(value)) {\n throw new Error(`Relation orderBy for '${f}' must be an object`)\n }\n continue\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\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 orderByResult = buildOrderByWithRelations(\n normalizedArgs.orderBy,\n alias,\n dialect,\n model,\n schemas,\n )\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 const orderByJoins = orderByResult.joins\n const combinedWhereJoins: readonly string[] = whereResult.joins\n ? [...whereResult.joins, ...orderByJoins]\n : orderByJoins.length > 0\n ? orderByJoins\n : []\n\n return {\n select: selectFields,\n includes,\n from: { table: tableName, alias },\n whereClause: whereResult.clause,\n whereJoins: combinedWhereJoins,\n orderBy: orderByResult.sql,\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 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 validateParamConsistencyByDialect,\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 dialect?: SqlDialect,\n): SqlResult {\n assertSafeAlias(alias)\n assertSafeTableRef(tableName)\n\n const d = dialect ?? getGlobalDialect()\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 validateParamConsistencyByDialect(sql, whereResult.params, d)\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 validateParamConsistencyByDialect(sql, allParams, d)\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 dialect: SqlDialect,\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 validateParamConsistencyByDialect(sql, whereResult.params, dialect)\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 const d = dialect ?? getGlobalDialect()\n\n if (!model) {\n return buildSimpleCountSql(whereResult, tableName, alias, d)\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, d)\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 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 validateParamConsistencyByDialect(sql, sub.params, d)\n\n return {\n sql,\n params: sub.params,\n paramMappings: sub.paramMappings,\n }\n}\n","export const DIGIT_0 = 48\nexport const DIGIT_9 = 57\nexport const UPPER_A = 65\nexport const UPPER_Z = 90\nexport const LOWER_A = 97\nexport const LOWER_Z = 122\nexport const UNDERSCORE = 95\nexport const SINGLE_QUOTE = 39\nexport const DOUBLE_QUOTE = 34\nexport const DOLLAR = 36\nexport const DASH = 45\nexport const SLASH = 47\nexport const ASTERISK = 42\nexport const NEWLINE = 10\n\nexport function isDigit(charCode: number): boolean {\n return charCode >= DIGIT_0 && charCode <= DIGIT_9\n}\n\nexport function isAlphaNumericOrUnderscore(charCode: number): boolean {\n return (\n isDigit(charCode) ||\n (charCode >= UPPER_A && charCode <= UPPER_Z) ||\n (charCode >= LOWER_A && charCode <= LOWER_Z) ||\n charCode === UNDERSCORE\n )\n}\n\nexport function extractParameterNumber(\n sql: string,\n startPos: number,\n): { num: number; nextPos: number } | null {\n const n = sql.length\n let j = startPos + 1\n if (j >= n) return null\n\n const c1 = sql.charCodeAt(j)\n if (!isDigit(c1)) return null\n\n let num = c1 - DIGIT_0\n j++\n\n while (j < n && isDigit(sql.charCodeAt(j))) {\n num = num * 10 + (sql.charCodeAt(j) - DIGIT_0)\n j++\n }\n\n return { num, nextPos: j }\n}\n\nexport function readDollarTag(\n s: string,\n pos: number,\n n: number,\n): string | null {\n if (s.charCodeAt(pos) !== DOLLAR) return null\n\n let j = pos + 1\n while (j < n && isAlphaNumericOrUnderscore(s.charCodeAt(j))) {\n j++\n }\n\n if (j < n && s.charCodeAt(j) === DOLLAR && j > pos) {\n return s.slice(pos, j + 1)\n }\n\n if (pos + 1 < n && s.charCodeAt(pos + 1) === DOLLAR) {\n return '$$'\n }\n\n return null\n}\n\nexport function scanSingleQuote(sql: string, startPos: number): number {\n const n = sql.length\n let i = startPos + 1\n\n while (i < n) {\n if (sql.charCodeAt(i) === SINGLE_QUOTE) {\n if (i + 1 < n && sql.charCodeAt(i + 1) === SINGLE_QUOTE) {\n i += 2\n continue\n }\n return i + 1\n }\n i++\n }\n\n return n\n}\n\nexport function scanDoubleQuote(sql: string, startPos: number): number {\n const n = sql.length\n let i = startPos + 1\n\n while (i < n) {\n if (sql.charCodeAt(i) === DOUBLE_QUOTE) {\n if (i + 1 < n && sql.charCodeAt(i + 1) === DOUBLE_QUOTE) {\n i += 2\n continue\n }\n return i + 1\n }\n i++\n }\n\n return n\n}\n\nexport function scanDollarQuoted(\n sql: string,\n startPos: number,\n dollarTag: string,\n): number {\n const n = sql.length\n const tagLen = dollarTag.length\n let i = startPos + tagLen\n\n while (i < n) {\n if (sql.slice(i, i + tagLen) === dollarTag) {\n return i + tagLen\n }\n i++\n }\n\n return n\n}\n","import {\n extractParameterNumber,\n readDollarTag,\n DOLLAR,\n DOUBLE_QUOTE,\n SINGLE_QUOTE,\n DASH,\n SLASH,\n ASTERISK,\n NEWLINE,\n} from './sql-placeholder'\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\nexport type PlaceholderHandler = (oldIndex: number) => string\n\nexport interface ScanOptions {\n pgAware: boolean\n strictPlaceholders?: boolean\n}\n\nconst NORMAL_STATE: ScanState = Object.freeze({\n mode: 'normal' as const,\n dollarTag: null,\n})\n\nfunction processQuotedContent(\n sql: string,\n pos: number,\n len: number,\n quoteChar: number,\n): { endPos: number; text: string } {\n let i = pos\n let text = ''\n while (i < len) {\n const ch = sql.charCodeAt(i)\n if (ch === quoteChar) {\n if (i + 1 < len && sql.charCodeAt(i + 1) === quoteChar) {\n text += sql[i] + sql[i + 1]\n i += 2\n continue\n }\n text += sql[i]\n i++\n return { endPos: i, text }\n }\n text += sql[i]\n i++\n }\n return { endPos: i, text }\n}\n\nfunction findLineCommentEnd(sql: string, pos: number, len: number): number {\n let i = pos\n while (i < len) {\n if (sql.charCodeAt(i) === NEWLINE) return i + 1\n i++\n }\n return len\n}\n\nfunction findBlockCommentEnd(sql: string, pos: number, len: number): number {\n let i = pos\n while (i < len) {\n if (\n sql.charCodeAt(i) === ASTERISK &&\n i + 1 < len &&\n sql.charCodeAt(i + 1) === SLASH\n ) {\n return i + 2\n }\n i++\n }\n return len\n}\n\nfunction processPlaceholder(\n sql: string,\n pos: number,\n handler: PlaceholderHandler,\n strict: boolean,\n): { consumed: number; output: string } {\n const result = extractParameterNumber(sql, pos)\n\n if (!result) {\n return { consumed: 1, output: sql[pos] }\n }\n\n if (result.num < 1) {\n if (strict) {\n throw new Error(`Invalid param placeholder: $${result.num}`)\n }\n return { consumed: 1, output: sql[pos] }\n }\n\n return {\n consumed: result.nextPos - pos,\n output: handler(result.num),\n }\n}\n\nexport function scanSqlPlaceholders(\n sql: string,\n handler: PlaceholderHandler,\n options: ScanOptions,\n): string {\n const len = sql.length\n let i = 0\n let out = ''\n let state: ScanState = NORMAL_STATE\n const strict = options.strictPlaceholders !== false\n\n while (i < len) {\n const ch = sql.charCodeAt(i)\n\n if (state.mode === 'single' || state.mode === 'double') {\n const quoteChar = state.mode === 'single' ? SINGLE_QUOTE : DOUBLE_QUOTE\n const result = processQuotedContent(sql, i, len, quoteChar)\n out += result.text\n i = result.endPos\n state = NORMAL_STATE\n continue\n }\n\n if (options.pgAware && state.mode === 'lineComment') {\n const endPos = findLineCommentEnd(sql, i, len)\n out += sql.slice(i, endPos)\n i = endPos\n state = NORMAL_STATE\n continue\n }\n\n if (options.pgAware && state.mode === 'blockComment') {\n const endPos = findBlockCommentEnd(sql, i, len)\n out += sql.slice(i, endPos)\n i = endPos\n state = NORMAL_STATE\n continue\n }\n\n if (options.pgAware && state.mode === 'dollar' && state.dollarTag) {\n const tag = state.dollarTag\n if (sql.slice(i, i + tag.length) === tag) {\n out += tag\n i += tag.length\n state = NORMAL_STATE\n } else {\n out += sql[i]\n i++\n }\n continue\n }\n\n if (ch === SINGLE_QUOTE) {\n out += sql[i]\n i++\n state = { mode: 'single', dollarTag: null }\n continue\n }\n\n if (ch === DOUBLE_QUOTE) {\n out += sql[i]\n i++\n state = { mode: 'double', dollarTag: null }\n continue\n }\n\n if (options.pgAware) {\n if (ch === DASH && i + 1 < len && sql.charCodeAt(i + 1) === DASH) {\n out += sql[i] + sql[i + 1]\n i += 2\n state = { mode: 'lineComment', dollarTag: null }\n continue\n }\n\n if (ch === SLASH && i + 1 < len && sql.charCodeAt(i + 1) === ASTERISK) {\n out += sql[i] + sql[i + 1]\n i += 2\n state = { mode: 'blockComment', dollarTag: null }\n continue\n }\n }\n\n if (ch === DOLLAR) {\n if (options.pgAware) {\n const tag = readDollarTag(sql, i, len)\n if (tag) {\n out += tag\n i += tag.length\n state = { mode: 'dollar', dollarTag: tag }\n continue\n }\n }\n\n const placeholder = processPlaceholder(sql, i, handler, strict)\n out += placeholder.output\n i += placeholder.consumed\n continue\n }\n\n out += sql[i]\n i++\n }\n\n return out\n}\n\nexport function reindexPlaceholders(\n sql: string,\n params: readonly unknown[],\n offset: number,\n pgAware: boolean = true,\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 = scanSqlPlaceholders(\n sql,\n (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 { pgAware, strictPlaceholders: true },\n )\n\n return { sql: reindexed, params: newParams }\n}\n\nexport function pgToSqlitePlaceholders(\n sql: string,\n params: readonly unknown[],\n): { sql: string; params: unknown[] } {\n const reordered: unknown[] = []\n\n const converted = scanSqlPlaceholders(\n sql,\n (oldIndex) => {\n reordered.push(params[oldIndex - 1])\n return '?'\n },\n { pgAware: false, strictPlaceholders: false },\n )\n\n return { sql: converted, params: reordered }\n}\n\nexport function containsPlaceholder(sql: string): boolean {\n let found = false\n scanSqlPlaceholders(\n sql,\n (oldIndex) => {\n found = true\n return `$${oldIndex}`\n },\n { pgAware: true, strictPlaceholders: true },\n )\n return found\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'\nimport { LateralRelationMeta } from './builder/select/lateral-join'\nimport { scanSqlPlaceholders } from './builder/shared/sql-param-scanner'\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 isLateral: boolean\n lateralMeta?: LateralRelationMeta[]\n skipWhereIn?: boolean\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(\n processed,\n whereResult,\n tableName,\n alias,\n modelDef,\n dialect,\n )\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 expandedMappings: ParamMap[] = []\n\n const normalizedSql = scanSqlPlaceholders(\n sql,\n (oldIndex) => {\n const originalMapping = byIndex.get(oldIndex)\n if (!originalMapping) {\n throw new Error(`CRITICAL: No mapping found for parameter $${oldIndex}`)\n }\n expandedMappings.push({\n index: expandedMappings.length + 1,\n value: originalMapping.value,\n dynamicName: originalMapping.dynamicName,\n })\n return '?'\n },\n { pgAware: false, strictPlaceholders: false },\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 isLateral: boolean\n lateralMeta?: LateralRelationMeta[]\n skipWhereIn?: boolean\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 return {\n sql: normalized.sql,\n paramMappings: normalized.paramMappings,\n requiresReduction: sqlResult.requiresReduction === true,\n includeSpec,\n isLateral: sqlResult.isLateral === true,\n lateralMeta: sqlResult.lateralMeta,\n skipWhereIn: sqlResult.skipWhereIn === true,\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 isLateral: boolean\n lateralMeta?: LateralRelationMeta[]\n skipWhereIn?: boolean\n}): SQLDirective {\n const {\n directive,\n method,\n normalizedSql,\n normalizedMappings,\n dialect,\n requiresReduction,\n includeSpec,\n isLateral,\n lateralMeta,\n skipWhereIn,\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 isLateral,\n lateralMeta,\n skipWhereIn,\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 isLateral: built.isLateral,\n lateralMeta: built.lateralMeta,\n skipWhereIn: built.skipWhereIn,\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, PrismaMethod } from './types'\nimport type { SqlDialect } from './sql-builder-dialect'\nimport type { ParamMap } from '@dee-wan/schema-parser'\nimport type { LateralRelationMeta } from './builder/select/lateral-join'\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'\nimport { pgToSqlitePlaceholders } from './builder/shared/sql-param-scanner'\n\ninterface SqlResult {\n sql: string\n params: unknown[]\n paramMappings?: readonly ParamMap[]\n requiresReduction?: boolean\n includeSpec?: Record<string, any>\n isLateral?: boolean\n lateralMeta?: LateralRelationMeta[]\n skipWhereIn?: boolean\n}\n\ninterface CacheStats {\n hits: number\n misses: number\n size: number\n}\n\nclass QueryCacheStats {\n #hits = 0\n #misses = 0\n hit(): void {\n this.#hits++\n }\n miss(): void {\n this.#misses++\n }\n reset(): void {\n this.#hits = 0\n this.#misses = 0\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\nconst queryCache = createBoundedCache<string, SqlResult>(1000)\nconst 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\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 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 const withMethod = { ...args, method }\n let result: {\n sql: string\n params: readonly unknown[]\n paramMappings?: readonly ParamMap[]\n requiresReduction?: boolean\n includeSpec?: Record<string, any>\n isLateral?: boolean\n lateralMeta?: LateralRelationMeta[]\n skipWhereIn?: boolean\n }\n switch (method) {\n case 'aggregate':\n result = buildAggregateSql(\n withMethod,\n whereResult,\n tableName,\n alias,\n model,\n dialect,\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,\n dialect,\n model,\n models,\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 const needsPlaceholderConversion =\n dialect === 'sqlite' && result.sql.includes('$')\n const sqlResult = needsPlaceholderConversion\n ? pgToSqlitePlaceholders(result.sql, result.params)\n : { sql: result.sql, params: [...result.params] }\n return {\n ...sqlResult,\n paramMappings: result.paramMappings,\n requiresReduction: result.requiresReduction,\n includeSpec: result.includeSpec,\n isLateral: result.isLateral,\n lateralMeta: result.lateralMeta,\n skipWhereIn: result.skipWhereIn,\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 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 isLateral: cached.isLateral,\n lateralMeta: cached.lateralMeta,\n skipWhereIn: cached.skipWhereIn,\n }\n }\n queryCacheStats.miss()\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 const result = buildSQLFull(model, models, method, args, dialect)\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 isLateral: result.isLateral,\n lateralMeta: result.lateralMeta,\n skipWhereIn: result.skipWhereIn,\n })\n return result\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'\n\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'\nimport { executeWithPreFetchedParents } from './builder/select/streaming-where-in-executor'\nimport { getPrimaryKeyField } from './builder/shared/primary-key-utils'\nimport {\n buildLateralReducerConfig,\n reduceLateralRows,\n} from './builder/select/lateral-reducer'\nimport { LateralRelationMeta } from './builder/select/lateral-join'\nimport {\n BatchCountQuery,\n BatchQuery,\n buildBatchCountSql,\n buildBatchSql,\n} from './batch/batch-builder'\nimport { parseBatchCountResults, parseBatchResults } from './batch/batch-result'\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 generateSQL(directive: DirectiveProps): SQLDirective {\n return generateSQLInternal(directive)\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 type LateralRelationMeta,\n}\n\nexport {\n transformQueryResults,\n planQueryStrategy,\n createTransactionExecutor,\n executeWhereInSegments,\n executeWithPreFetchedParents,\n getPrimaryKeyField,\n buildLateralReducerConfig,\n reduceLateralRows,\n}\nexport { buildReducerConfig, reduceFlatRows } from './builder/select/reducer'\nexport type { ReducerConfig } from './builder/select/reducer'\nexport {\n normalizeValue,\n setNormalizeDateMode,\n detectSqliteDateMode,\n} 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'\nexport {\n setRelationStats,\n getRelationStats,\n setRoundtripRowEquivalent,\n setJsonRowFactor,\n countIncludeDepth,\n} from './builder/select/strategy-estimator'\n","import type { RelStats } from '../cardinality-planner'\n\nexport function toNumberOrZero(v: unknown): number {\n if (typeof v === 'number' && Number.isFinite(v)) return v\n if (typeof v === 'bigint') return Number(v)\n if (typeof v === 'string' && v.trim() !== '') {\n const n = Number(v)\n if (Number.isFinite(n)) return n\n }\n return 0\n}\n\nexport function clampStatsMonotonic(\n avg: number,\n p95: number,\n p99: number,\n max: number,\n coverage: number,\n): RelStats {\n const safeAvg = Math.max(1, avg)\n const safeP95 = Math.max(safeAvg, p95)\n const safeP99 = Math.max(safeP95, p99)\n const safeMax = Math.max(safeP99, max)\n const safeCoverage = Math.max(0, Math.min(1, coverage))\n return {\n avg: safeAvg,\n p95: safeP95,\n p99: safeP99,\n max: safeMax,\n coverage: safeCoverage,\n }\n}\n\nexport function normalizeStats(row: Record<string, unknown>): RelStats {\n return clampStatsMonotonic(\n toNumberOrZero(row.avg),\n toNumberOrZero(row.p95),\n toNumberOrZero(row.p99),\n toNumberOrZero(row.max),\n toNumberOrZero(row.coverage),\n )\n}\n\nexport function stableJson(value: unknown): string {\n return JSON.stringify(\n value,\n (_k, v) => {\n if (!v || typeof v !== 'object' || Array.isArray(v)) return v\n const obj = v as Record<string, unknown>\n const out: Record<string, unknown> = {}\n for (const k of Object.keys(obj).sort()) out[k] = obj[k]\n return out\n },\n 2,\n )\n}\n\nexport function cleanDatabaseUrl(url: string): string {\n try {\n const parsed = new URL(url)\n parsed.search = ''\n\n if (parsed.password) {\n parsed.password = '***'\n }\n\n if (parsed.username && parsed.username.length > 0) {\n if (parsed.username.length <= 3) {\n parsed.username = '***'\n } else {\n parsed.username = parsed.username.slice(0, 3) + '***'\n }\n }\n\n return parsed.toString()\n } catch (error) {\n return '[invalid-url]'\n }\n}\n\nexport function createQueryKey(\n processedQuery: Record<string, unknown>,\n): string {\n return JSON.stringify(processedQuery, (key, value) => {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const sorted: Record<string, unknown> = {}\n for (const k of Object.keys(value).sort()) {\n sorted[k] = (value as any)[k]\n }\n return sorted\n }\n return value\n })\n}\n\nexport function countTotalQueries(\n queries: Map<string, Map<string, Map<string, any>>>,\n): number {\n return Array.from(queries.values()).reduce(\n (sum, methodMap) =>\n sum +\n Array.from(methodMap.values()).reduce(\n (s, queryMap) => s + queryMap.size,\n 0,\n ),\n 0,\n )\n}\n","import { DMMF } from '@prisma/generator-helper'\nimport {\n toNumberOrZero,\n clampStatsMonotonic,\n normalizeStats,\n stableJson,\n cleanDatabaseUrl,\n} from './utils/pure-utils'\nimport { SqlDialect } from './sql-builder-dialect'\n\ntype Executor = {\n query: (\n sql: string,\n params?: unknown[],\n ) => Promise<Array<Record<string, unknown>>>\n}\n\ninterface DatabaseExecutor {\n query: (\n sql: string,\n params?: unknown[],\n ) => Promise<Array<Record<string, unknown>>>\n}\n\nexport type RelStats = {\n avg: number\n p95: number\n p99: number\n max: number\n coverage: number\n}\n\nexport type RelationStatsMap = Record<string, Record<string, RelStats>>\n\nexport type GeneratePlannerArtifacts = {\n relationStats: RelationStatsMap\n roundtripRowEquivalent: number\n jsonRowFactor: number\n}\n\ntype RelEdge = {\n parentModel: string\n relName: string\n childModel: string\n parentTable: string\n childTable: string\n parentPkColumns: string[]\n childFkColumns: string[]\n isMany: boolean\n}\n\nfunction quoteIdent(dialect: SqlDialect, ident: string): string {\n return `\"${ident.replace(/\"/g, '\"\"')}\"`\n}\n\nexport async function createDatabaseExecutor(options: {\n databaseUrl: string\n dialect: 'postgres' | 'sqlite'\n connectTimeoutMs?: number\n}): Promise<{ executor: DatabaseExecutor; cleanup: () => Promise<void> }> {\n const { databaseUrl, dialect, connectTimeoutMs = 30000 } = options\n\n if (dialect === 'postgres') {\n const postgres = await import('postgres')\n const sql = postgres.default(databaseUrl, {\n connect_timeout: Math.ceil(connectTimeoutMs / 1000),\n max: 1,\n })\n\n return {\n executor: {\n query: async (q: string, params?: unknown[]) => {\n return await sql.unsafe(q, (params ?? []) as any[])\n },\n },\n cleanup: async () => {\n await sql.end()\n },\n }\n }\n\n throw new Error(`createDatabaseExecutor does not support dialect: ${dialect}`)\n}\n\nfunction extractMeasurableOneToManyEdges(datamodel: DMMF.Datamodel): RelEdge[] {\n const modelByName = new Map(datamodel.models.map((m) => [m.name, m]))\n const edges: RelEdge[] = []\n\n for (const parent of datamodel.models) {\n const pkFields = parent.fields.filter((f) => f.isId)\n if (pkFields.length === 0) continue\n\n const parentPk = pkFields.map((f) => f.dbName || f.name)\n const parentTable = parent.dbName || parent.name\n\n for (const f of parent.fields) {\n if (!f.relationName) continue\n if (!f.isList) continue\n\n const child = modelByName.get(f.type)\n if (!child) continue\n\n const childRelField = child.fields.find(\n (cf) => cf.relationName === f.relationName && cf.type === parent.name,\n )\n if (!childRelField) continue\n\n const fkFieldNames = childRelField.relationFromFields || []\n if (fkFieldNames.length === 0) continue\n\n const fkFields = fkFieldNames.map((name) => {\n const fld = child.fields.find((x) => x.name === name)\n return fld ? fld.dbName || fld.name : name\n })\n\n const refFieldNames = childRelField.relationToFields || []\n if (refFieldNames.length === 0) continue\n\n const references = refFieldNames.map((name) => {\n const fld = parent.fields.find((x) => x.name === name)\n return fld ? fld.dbName || fld.name : name\n })\n\n if (fkFields.length !== references.length) continue\n\n const childTable = child.dbName || child.name\n\n edges.push({\n parentModel: parent.name,\n relName: f.name,\n childModel: child.name,\n parentTable,\n childTable,\n parentPkColumns: references,\n childFkColumns: fkFields,\n isMany: true,\n })\n }\n }\n\n return edges\n}\n\nfunction buildPostgresStatsSql(edge: RelEdge): string {\n const childTable = quoteIdent('postgres', edge.childTable)\n const parentTable = quoteIdent('postgres', edge.parentTable)\n const groupCols = edge.childFkColumns\n .map((c) => quoteIdent('postgres', c))\n .join(', ')\n\n return `\nWITH counts AS (\n SELECT ${groupCols}, COUNT(*) AS cnt\n FROM ${childTable}\n GROUP BY ${groupCols}\n),\ntotal_parents AS (\n SELECT COUNT(*) AS total FROM ${parentTable}\n)\nSELECT\n AVG(cnt)::float AS avg,\n MAX(cnt)::int AS max,\n PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY cnt)::float AS p95,\n PERCENTILE_CONT(0.99) WITHIN GROUP (ORDER BY cnt)::float AS p99,\n (SELECT COUNT(*) FROM counts)::float / GREATEST(1, (SELECT total FROM total_parents)) AS coverage\nFROM counts\n`.trim()\n}\n\nfunction buildSqliteStatsSql(edge: RelEdge): string {\n const childTable = quoteIdent('sqlite', edge.childTable)\n const parentTable = quoteIdent('sqlite', edge.parentTable)\n const groupCols = edge.childFkColumns\n .map((c) => quoteIdent('sqlite', c))\n .join(', ')\n\n return `\nWITH counts AS (\n SELECT ${groupCols}, COUNT(*) AS cnt\n FROM ${childTable}\n GROUP BY ${groupCols}\n),\nn AS (\n SELECT COUNT(*) AS total FROM counts\n),\nparent_n AS (\n SELECT COUNT(*) AS total FROM ${parentTable}\n),\nordered AS (\n SELECT cnt\n FROM counts\n ORDER BY cnt\n)\nSELECT\n (SELECT AVG(cnt) FROM counts) AS avg,\n (SELECT MAX(cnt) FROM counts) AS max,\n (\n SELECT cnt\n FROM ordered\n LIMIT 1\n OFFSET (\n SELECT\n CASE\n WHEN total <= 1 THEN 0\n ELSE CAST((0.95 * (total - 1)) AS INT)\n END\n FROM n\n )\n ) AS p95,\n (\n SELECT cnt\n FROM ordered\n LIMIT 1\n OFFSET (\n SELECT\n CASE\n WHEN total <= 1 THEN 0\n ELSE CAST((0.99 * (total - 1)) AS INT)\n END\n FROM n\n )\n ) AS p99,\n CAST((SELECT total FROM n) AS FLOAT) / MAX(1, (SELECT total FROM parent_n)) AS coverage\n`.trim()\n}\n\nfunction buildFanoutStatsSql(dialect: SqlDialect, edge: RelEdge): string {\n return dialect === 'postgres'\n ? buildPostgresStatsSql(edge)\n : buildSqliteStatsSql(edge)\n}\n\nasync function findLargestTable(params: {\n executor: Executor\n dialect: SqlDialect\n datamodel: DMMF.Datamodel\n}): Promise<{ tableName: string; rowCount: number } | null> {\n const { executor, dialect, datamodel } = params\n\n let best: { tableName: string; rowCount: number } | null = null\n\n for (const model of datamodel.models) {\n const table = quoteIdent(dialect, model.dbName || model.name)\n try {\n const rows = await executor.query(`SELECT COUNT(*) AS cnt FROM ${table}`)\n const count = toNumberOrZero(rows[0]?.cnt)\n if (!best || count > best.rowCount) {\n best = { tableName: table, rowCount: count }\n }\n } catch (_) {}\n }\n\n return best\n}\n\nasync function measureRoundtripCost(params: {\n executor: Executor\n dialect: SqlDialect\n datamodel: DMMF.Datamodel\n}): Promise<number> {\n const { executor, dialect, datamodel } = params\n const WARMUP = 5\n const SAMPLES = 15\n\n for (let i = 0; i < WARMUP; i++) {\n await executor.query('SELECT 1')\n }\n\n const roundtripTimes: number[] = []\n for (let i = 0; i < SAMPLES; i++) {\n const start = performance.now()\n await executor.query('SELECT 1')\n roundtripTimes.push(performance.now() - start)\n }\n roundtripTimes.sort((a, b) => a - b)\n const medianRoundtrip = roundtripTimes[Math.floor(SAMPLES / 2)]\n\n console.log(\n ` [roundtrip] SELECT 1 times (ms): min=${roundtripTimes[0].toFixed(3)} median=${medianRoundtrip.toFixed(3)} max=${roundtripTimes[SAMPLES - 1].toFixed(3)}`,\n )\n\n const largest = await findLargestTable({ executor, dialect, datamodel })\n\n if (!largest || largest.rowCount < 50) {\n console.log(\n ` [roundtrip] Largest table: ${largest?.tableName ?? 'none'} (${largest?.rowCount ?? 0} rows) — too small, using default 50`,\n )\n return 50\n }\n\n console.log(\n ` [roundtrip] Using table ${largest.tableName} (${largest.rowCount} rows)`,\n )\n\n return estimateFromQueryPairRatio({\n executor,\n tableName: largest.tableName,\n medianRoundtrip,\n tableRowCount: largest.rowCount,\n })\n}\n\nasync function estimateFromQueryPairRatio(params: {\n executor: Executor\n tableName: string\n medianRoundtrip: number\n tableRowCount: number\n}): Promise<number> {\n const { executor, tableName, medianRoundtrip, tableRowCount } = params\n const WARMUP = 5\n const SAMPLES = 10\n\n const smallLimit = 1\n const largeLimit = Math.min(1000, tableRowCount)\n\n for (let i = 0; i < WARMUP; i++) {\n await executor.query(`SELECT * FROM ${tableName} LIMIT ${largeLimit}`)\n }\n\n const smallTimes: number[] = []\n for (let i = 0; i < SAMPLES; i++) {\n const start = performance.now()\n await executor.query(`SELECT * FROM ${tableName} LIMIT ${smallLimit}`)\n smallTimes.push(performance.now() - start)\n }\n smallTimes.sort((a, b) => a - b)\n const medianSmall = smallTimes[Math.floor(SAMPLES / 2)]\n\n const largeTimes: number[] = []\n let actualLargeRows = 0\n for (let i = 0; i < SAMPLES; i++) {\n const start = performance.now()\n const rows = await executor.query(\n `SELECT * FROM ${tableName} LIMIT ${largeLimit}`,\n )\n largeTimes.push(performance.now() - start)\n actualLargeRows = rows.length\n }\n largeTimes.sort((a, b) => a - b)\n const medianLarge = largeTimes[Math.floor(SAMPLES / 2)]\n\n const rowDiff = actualLargeRows - smallLimit\n const timeDiff = medianLarge - medianSmall\n\n console.log(\n ` [roundtrip] LIMIT ${smallLimit}: median=${medianSmall.toFixed(3)}ms`,\n )\n console.log(\n ` [roundtrip] LIMIT ${largeLimit} (got ${actualLargeRows}): median=${medianLarge.toFixed(3)}ms`,\n )\n console.log(\n ` [roundtrip] Time diff: ${timeDiff.toFixed(3)}ms for ${rowDiff} rows`,\n )\n\n if (rowDiff < 50 || timeDiff <= 0.05) {\n console.log(\n ` [roundtrip] Insufficient signal (need ≥50 row diff and >0.05ms time diff), defaulting to 50`,\n )\n return 50\n }\n\n const perRow = timeDiff / rowDiff\n\n const sequentialTimes: number[] = []\n for (let i = 0; i < SAMPLES; i++) {\n const start = performance.now()\n await executor.query(`SELECT * FROM ${tableName} LIMIT ${smallLimit}`)\n await executor.query(`SELECT * FROM ${tableName} LIMIT ${smallLimit}`)\n await executor.query(`SELECT * FROM ${tableName} LIMIT ${smallLimit}`)\n sequentialTimes.push(performance.now() - start)\n }\n sequentialTimes.sort((a, b) => a - b)\n const median3Sequential = sequentialTimes[Math.floor(SAMPLES / 2)]\n\n const marginalQueryCost = (median3Sequential - medianSmall) / 2\n\n console.log(\n ` [roundtrip] 3x sequential LIMIT 1: median=${median3Sequential.toFixed(3)}ms`,\n )\n console.log(` [roundtrip] Single query: ${medianSmall.toFixed(3)}ms`)\n console.log(\n ` [roundtrip] Marginal query cost: ${marginalQueryCost.toFixed(3)}ms`,\n )\n console.log(` [roundtrip] Per-row cost: ${perRow.toFixed(4)}ms`)\n\n const equivalent = Math.round(marginalQueryCost / perRow)\n\n console.log(` [roundtrip] Raw equivalent: ${equivalent} rows`)\n\n const clamped = Math.max(10, Math.min(500, equivalent))\n console.log(` [roundtrip] Final (clamped): ${clamped} rows`)\n\n return clamped\n}\n\nasync function measureJsonOverhead(params: {\n executor: Executor\n tableName: string\n tableRowCount: number\n}): Promise<number> {\n const { executor, tableName, tableRowCount } = params\n const WARMUP = 3\n const SAMPLES = 10\n const limit = Math.min(500, tableRowCount)\n\n const rawSql = `SELECT * FROM ${tableName} LIMIT ${limit}`\n\n const colsResult = await executor.query(\n `SELECT column_name FROM information_schema.columns WHERE table_name = ${tableName.replace(/\"/g, \"'\")} LIMIT 10`,\n )\n\n let aggSql: string\n if (colsResult.length >= 3) {\n const cols = colsResult.slice(0, 6).map((r) => `\"${r.column_name}\"`)\n const aggExprs = cols.map((c) => `array_agg(${c})`).join(', ')\n const groupCol = cols[0]\n aggSql = `SELECT ${groupCol}, ${aggExprs} FROM ${tableName} GROUP BY ${groupCol} LIMIT ${limit}`\n } else {\n aggSql = `SELECT json_agg(t) FROM (SELECT * FROM ${tableName} LIMIT ${limit}) t`\n }\n\n for (let i = 0; i < WARMUP; i++) {\n await executor.query(rawSql)\n await executor.query(aggSql)\n }\n\n const rawTimes: number[] = []\n for (let i = 0; i < SAMPLES; i++) {\n const start = performance.now()\n await executor.query(rawSql)\n rawTimes.push(performance.now() - start)\n }\n rawTimes.sort((a, b) => a - b)\n const medianRaw = rawTimes[Math.floor(SAMPLES / 2)]\n\n const aggTimes: number[] = []\n for (let i = 0; i < SAMPLES; i++) {\n const start = performance.now()\n await executor.query(aggSql)\n aggTimes.push(performance.now() - start)\n }\n aggTimes.sort((a, b) => a - b)\n const medianAgg = aggTimes[Math.floor(SAMPLES / 2)]\n\n const factor = medianRaw > 0.01 ? medianAgg / medianRaw : 3.0\n\n console.log(` [json] Raw ${limit} rows: ${medianRaw.toFixed(3)}ms`)\n console.log(` [json] array_agg grouped: ${medianAgg.toFixed(3)}ms`)\n console.log(` [json] Overhead factor: ${factor.toFixed(2)}x`)\n\n return Math.max(1.5, Math.min(8.0, factor))\n}\n\nasync function collectPostgresStatsFromCatalog(params: {\n executor: Executor\n datamodel: DMMF.Datamodel\n}): Promise<RelationStatsMap> {\n const { executor, datamodel } = params\n const edges = extractMeasurableOneToManyEdges(datamodel)\n const out: RelationStatsMap = {}\n\n const tablesToAnalyze = new Set<string>()\n for (const edge of edges) {\n tablesToAnalyze.add(edge.parentTable)\n tablesToAnalyze.add(edge.childTable)\n }\n\n for (const table of tablesToAnalyze) {\n try {\n await executor.query(`ANALYZE ${quoteIdent('postgres', table)}`)\n } catch (_) {}\n }\n\n const tableStatsQuery = `\n SELECT\n c.relname as table_name,\n c.reltuples::bigint as row_count\n FROM pg_class c\n JOIN pg_namespace n ON n.oid = c.relnamespace\n WHERE c.relkind = 'r'\n AND n.nspname NOT IN ('pg_catalog', 'information_schema')\n `\n\n const tableStats = await executor.query(tableStatsQuery, [])\n const rowCounts = new Map<string, number>()\n\n for (const row of tableStats) {\n const tableName = String(row.table_name)\n const count = toNumberOrZero(row.row_count)\n rowCounts.set(tableName, count)\n }\n\n for (const edge of edges) {\n const parentRows = rowCounts.get(edge.parentTable) || 0\n const childRows = rowCounts.get(edge.childTable) || 0\n\n if (parentRows === 0 || childRows === 0) {\n if (!out[edge.parentModel]) out[edge.parentModel] = {}\n out[edge.parentModel][edge.relName] = {\n avg: 1,\n p95: 1,\n p99: 1,\n max: 1,\n coverage: 0,\n }\n continue\n }\n\n const fkColumn = edge.childFkColumns[0]\n\n const statsQuery = `\n SELECT\n s.n_distinct,\n s.correlation,\n (s.most_common_freqs)[1] as max_freq\n FROM pg_stats s\n WHERE s.tablename = $1\n AND s.attname = $2\n AND s.schemaname NOT IN ('pg_catalog', 'information_schema')\n `\n\n const statsRows = await executor.query(statsQuery, [\n edge.childTable,\n fkColumn,\n ])\n\n let avg: number\n let p95: number\n let p99: number\n let max: number\n let coverage: number\n\n if (statsRows.length > 0) {\n const stats = statsRows[0]\n const nDistinct = toNumberOrZero(stats.n_distinct)\n const correlation =\n stats.correlation !== null ? Number(stats.correlation) : 0\n const maxFreq = stats.max_freq !== null ? Number(stats.max_freq) : null\n\n const distinctCount =\n nDistinct < 0\n ? Math.abs(nDistinct) * childRows\n : nDistinct > 0\n ? nDistinct\n : parentRows\n\n avg =\n distinctCount > 0 ? childRows / distinctCount : childRows / parentRows\n coverage = Math.min(1, distinctCount / parentRows)\n\n const skewFactor = Math.abs(correlation) > 0.5 ? 2.5 : 1.5\n p95 = avg * skewFactor\n p99 = avg * (skewFactor * 1.3)\n\n max = maxFreq ? Math.ceil(childRows * maxFreq) : Math.ceil(p99 * 1.5)\n } else {\n avg = childRows / parentRows\n coverage = 1\n p95 = avg * 2\n p99 = avg * 3\n max = avg * 5\n }\n\n if (!out[edge.parentModel]) out[edge.parentModel] = {}\n out[edge.parentModel][edge.relName] = clampStatsMonotonic(\n Math.ceil(avg),\n Math.ceil(p95),\n Math.ceil(p99),\n Math.ceil(max),\n coverage,\n )\n }\n\n return out\n}\n\nasync function collectPreciseCardinalities(params: {\n executor: Executor\n datamodel: DMMF.Datamodel\n dialect: SqlDialect\n}): Promise<RelationStatsMap> {\n const { executor, datamodel, dialect } = params\n const edges = extractMeasurableOneToManyEdges(datamodel)\n const out: RelationStatsMap = {}\n\n for (const edge of edges) {\n const sql = buildFanoutStatsSql(dialect, edge)\n const rows = await executor.query(sql, [])\n const row = rows[0] || {}\n const stats = normalizeStats(row)\n\n if (!out[edge.parentModel]) out[edge.parentModel] = {}\n out[edge.parentModel][edge.relName] = stats\n }\n\n return out\n}\n\nasync function collectRelationCardinalities(params: {\n executor: Executor\n datamodel: DMMF.Datamodel\n dialect: SqlDialect\n mode?: 'fast' | 'precise'\n}): Promise<RelationStatsMap> {\n const { executor, datamodel, dialect, mode = 'precise' } = params\n\n if (dialect === 'postgres' && mode === 'fast') {\n const stats = await collectPostgresStatsFromCatalog({ executor, datamodel })\n\n let allTrivial = true\n for (const model of Object.values(stats)) {\n for (const rel of Object.values(model)) {\n if (rel.avg > 1 || rel.coverage > 0.5) {\n allTrivial = false\n break\n }\n }\n if (!allTrivial) break\n }\n\n if (allTrivial && Object.keys(stats).length > 0) {\n console.warn('⚠ Catalog stats look stale, falling back to precise mode')\n return collectPreciseCardinalities({ executor, datamodel, dialect })\n }\n\n return stats\n }\n\n return collectPreciseCardinalities({ executor, datamodel, dialect })\n}\n\nexport async function collectPlannerArtifacts(params: {\n executor: Executor\n datamodel: DMMF.Datamodel\n dialect: SqlDialect\n mode?: 'fast' | 'precise'\n}): Promise<GeneratePlannerArtifacts> {\n const { executor, datamodel, dialect, mode } = params\n\n const largest = await findLargestTable({ executor, dialect, datamodel })\n\n const [relationStats, roundtripRowEquivalent, jsonRowFactor] =\n await Promise.all([\n collectRelationCardinalities({ executor, datamodel, dialect, mode }),\n measureRoundtripCost({ executor, dialect, datamodel }),\n largest && largest.rowCount >= 50 && dialect === 'postgres'\n ? measureJsonOverhead({\n executor,\n tableName: largest.tableName,\n tableRowCount: largest.rowCount,\n })\n : Promise.resolve(1.5),\n ])\n\n console.log(` Roundtrip cost: ~${roundtripRowEquivalent} row equivalents`)\n console.log(` JSON overhead factor: ${jsonRowFactor.toFixed(2)}x`)\n\n return { relationStats, roundtripRowEquivalent, jsonRowFactor }\n}\n\nexport function emitPlannerGeneratedModule(\n artifacts: GeneratePlannerArtifacts,\n): string {\n return [\n `export const RELATION_STATS = ${stableJson(artifacts.relationStats)} as const`,\n ``,\n `export type RelationStats = typeof RELATION_STATS`,\n ``,\n `export const ROUNDTRIP_ROW_EQUIVALENT = ${artifacts.roundtripRowEquivalent}`,\n ``,\n `export const JSON_ROW_FACTOR = ${artifacts.jsonRowFactor.toFixed(2)}`,\n ``,\n ].join('\\n')\n}\n","import {\n convertDMMFToModels,\n processAllDirectives,\n} from '@dee-wan/schema-parser'\nimport { DMMF } from '@prisma/generator-helper'\nimport { mkdir, writeFile } from 'fs/promises'\nimport { join, resolve } from 'path'\nimport { generateSQL } from '.'\nimport { setGlobalDialect } from './sql-builder-dialect'\nimport {\n emitPlannerGeneratedModule,\n type GeneratePlannerArtifacts,\n collectPlannerArtifacts,\n createDatabaseExecutor,\n} from './cardinality-planner'\nimport { createQueryKey, countTotalQueries } from './utils/pure-utils'\n\nconst DB_CONNECT_TIMEOUT_MS = 5000\n\ninterface GenerateConfig {\n dialect: 'postgres' | 'sqlite'\n skipInvalid: boolean\n}\n\ninterface GenerateClientOptions {\n datamodel: DMMF.Datamodel\n outputDir: string\n config: GenerateConfig\n runtimeImportPath?: string\n plannerArtifacts?: GeneratePlannerArtifacts\n executor?: {\n query: (\n sql: string,\n params?: unknown[],\n ) => Promise<Array<Record<string, unknown>>>\n }\n datasourceUrl?: string\n}\n\ninterface EnumInfo {\n mappings: Record<string, Record<string, string>>\n fieldTypes: Record<string, Record<string, string>>\n}\n\nfunction extractEnumMappings(datamodel: DMMF.Datamodel): EnumInfo {\n const mappings: Record<string, Record<string, string>> = {}\n const fieldTypes: Record<string, Record<string, string>> = {}\n\n for (const enumDef of datamodel.enums) {\n const enumMapping: Record<string, string> = {}\n for (const value of enumDef.values) {\n enumMapping[value.name] = value.dbName || value.name\n }\n if (Object.keys(enumMapping).length > 0) {\n mappings[enumDef.name] = enumMapping\n }\n }\n\n for (const model of datamodel.models) {\n fieldTypes[model.name] = {}\n for (const field of model.fields) {\n const baseType = field.type.replace(/\\[\\]|\\?/g, '')\n if (mappings[baseType]) {\n fieldTypes[model.name][field.name] = baseType\n }\n }\n }\n\n return { mappings, fieldTypes }\n}\n\ninterface ProcessDirectiveResult {\n queries: Map<string, Map<string, Map<string, any>>>\n skippedCount: number\n}\n\nfunction processModelDirectives(\n modelName: string,\n result: any,\n config: GenerateConfig,\n): { modelQueries: Map<string, Map<string, any>>; skipped: number } {\n const modelQueries = new Map<string, Map<string, any>>()\n let skipped = 0\n\n for (const directive of result.directives) {\n try {\n const method = directive.method\n const sqlDirective = generateSQL(directive)\n\n if (!modelQueries.has(method)) {\n modelQueries.set(method, new Map())\n }\n\n const methodQueriesMap = modelQueries.get(method)!\n const queryKey = createQueryKey(directive.query.processed)\n\n methodQueriesMap.set(queryKey, {\n sql: sqlDirective.sql,\n params: sqlDirective.staticParams,\n dynamicKeys: sqlDirective.dynamicKeys,\n paramMappings: sqlDirective.paramMappings,\n requiresReduction: sqlDirective.requiresReduction || false,\n includeSpec: sqlDirective.includeSpec || {},\n isLateral: sqlDirective.isLateral || false,\n lateralMeta: sqlDirective.lateralMeta,\n skipWhereIn: sqlDirective.skipWhereIn || false,\n })\n } catch (error) {\n if (!config.skipInvalid) throw error\n skipped++\n const errMsg = error instanceof Error ? error.message : String(error)\n console.warn(` ⚠ Skipped ${modelName}.${directive.method}: ${errMsg}`)\n }\n }\n\n return { modelQueries, skipped }\n}\n\nfunction processAllModelDirectives(\n directiveResults: Map<string, any>,\n config: GenerateConfig,\n): ProcessDirectiveResult {\n const queries = new Map<string, Map<string, Map<string, any>>>()\n let skippedCount = 0\n\n for (const [modelName, result] of directiveResults) {\n if (result.directives.length === 0) continue\n\n const { modelQueries, skipped } = processModelDirectives(\n modelName,\n result,\n config,\n )\n\n queries.set(modelName, modelQueries)\n skippedCount += skipped\n }\n\n return { queries, skippedCount }\n}\n\nexport async function generateClient(options: GenerateClientOptions) {\n const { datamodel, outputDir, config, datasourceUrl } = options\n const runtimeImportPath = options.runtimeImportPath ?? 'prisma-sql'\n\n setGlobalDialect(config.dialect)\n\n const models = convertDMMFToModels(datamodel)\n\n const directiveResults = processAllDirectives(\n datamodel.models as unknown as DMMF.Model[],\n datamodel,\n { skipInvalid: config.skipInvalid },\n )\n\n const { queries, skippedCount } = processAllModelDirectives(\n directiveResults,\n config,\n )\n\n const absoluteOutputDir = resolve(process.cwd(), outputDir)\n await mkdir(absoluteOutputDir, { recursive: true })\n\n let plannerArtifacts = options.plannerArtifacts\n\n if (!plannerArtifacts) {\n let executor = options.executor\n let cleanup: (() => Promise<void>) | undefined\n\n if (!executor && datasourceUrl) {\n try {\n const dbConn = await createDatabaseExecutor({\n databaseUrl: datasourceUrl,\n dialect: config.dialect,\n connectTimeoutMs: DB_CONNECT_TIMEOUT_MS,\n })\n executor = dbConn.executor\n cleanup = dbConn.cleanup\n } catch (error) {\n console.warn(\n '⚠ Failed to connect:',\n error instanceof Error ? error.message : error,\n )\n }\n }\n\n if (executor) {\n try {\n console.log(\n '📊 Collecting relation cardinalities and roundtrip cost...',\n )\n plannerArtifacts = await collectPlannerArtifacts({\n executor,\n datamodel,\n dialect: config.dialect,\n })\n } catch (error) {\n console.warn(\n '⚠ Failed to collect stats:',\n error instanceof Error ? error.message : error,\n )\n } finally {\n if (cleanup) {\n await cleanup()\n }\n }\n }\n }\n\n if (!plannerArtifacts) {\n plannerArtifacts = {\n relationStats: {},\n roundtripRowEquivalent: 73,\n jsonRowFactor: 1.5,\n }\n }\n\n const plannerCode = emitPlannerGeneratedModule(plannerArtifacts)\n const plannerPath = join(absoluteOutputDir, 'planner.generated.ts')\n await writeFile(plannerPath, plannerCode)\n\n const code = generateCode(\n models,\n queries,\n config.dialect,\n datamodel,\n runtimeImportPath,\n )\n const outputPath = join(absoluteOutputDir, 'index.ts')\n await writeFile(outputPath, code)\n\n const totalQueries = countTotalQueries(queries)\n\n console.log(\n `✓ Generated ${queries.size} models, ${totalQueries} prebaked queries`,\n )\n if (skippedCount > 0) {\n console.log(`⚠ Skipped ${skippedCount} directive(s) due to errors`)\n }\n console.log(`✓ Output: ${outputPath}`)\n}\n\nfunction generateImports(runtimeImportPath: string): string {\n return `import { \n buildSQL, \n buildBatchSql, \n parseBatchResults, \n buildBatchCountSql, \n parseBatchCountResults, \n createTransactionExecutor, \n transformQueryResults, \n normalizeValue, \n setNormalizeDateMode,\n detectSqliteDateMode,\n planQueryStrategy, \n executeWhereInSegments,\n buildReducerConfig,\n setRelationStats,\n setRoundtripRowEquivalent,\n setJsonRowFactor,\n type LateralRelationMeta, \n type PrismaMethod, \n type Model, \n type BatchQuery, \n type BatchCountQuery, \n type TransactionQuery, \n type TransactionOptions,\n getOrPrepareStatement,\n normalizeParams,\n executePostgresQuery,\n executeSqliteQuery,\n executeRaw,\n} from ${JSON.stringify(runtimeImportPath)}`\n}\n\nfunction generateStatsInit(): string {\n return `import { RELATION_STATS, ROUNDTRIP_ROW_EQUIVALENT, JSON_ROW_FACTOR } from './planner.generated'\n\nsetRelationStats(RELATION_STATS as any)\nsetRoundtripRowEquivalent(ROUNDTRIP_ROW_EQUIVALENT)\nsetJsonRowFactor(JSON_ROW_FACTOR)`\n}\n\nfunction generateCoreTypes(): string {\n return `class DeferredQuery {\n constructor(\n public readonly model: string,\n public readonly method: PrismaMethod,\n public readonly args: any,\n ) {}\n\n then(onfulfilled?: any, onrejected?: any): any {\n throw new Error(\n 'Cannot await a batch query. Batch queries must not be awaited inside the $batch callback.',\n )\n }\n}\n\ninterface BatchProxy {\n [modelName: string]: {\n findMany: (args?: any) => DeferredQuery\n findFirst: (args?: any) => DeferredQuery\n findUnique: (args?: any) => DeferredQuery\n count: (args?: any) => DeferredQuery\n aggregate: (args?: any) => DeferredQuery\n groupBy: (args?: any) => DeferredQuery\n }\n}\n\nconst ACCELERATED_METHODS = new Set<PrismaMethod>([\n 'findMany',\n 'findFirst',\n 'findUnique',\n 'count',\n 'aggregate',\n 'groupBy',\n])`\n}\n\nfunction generateHelpers(): string {\n return `function createBatchProxy(): BatchProxy {\n return new Proxy(\n {},\n {\n get(_target, modelName: string): any {\n if (typeof modelName === 'symbol') return undefined\n const model = MODEL_MAP.get(modelName)\n if (!model) {\n throw new Error(\n \\`Model '\\${modelName}' not found. Available: \\${[...MODEL_MAP.keys()].join(', ')}\\`,\n )\n }\n return new Proxy(\n {},\n {\n get(_target, method: string): (args?: any) => DeferredQuery {\n if (!ACCELERATED_METHODS.has(method as PrismaMethod)) {\n throw new Error(\n \\`Method '\\${method}' not supported in batch. Supported: \\${[...ACCELERATED_METHODS].join(', ')}\\`,\n )\n }\n return (args?: any): DeferredQuery => {\n return new DeferredQuery(\n modelName,\n method as PrismaMethod,\n args,\n )\n }\n },\n },\n )\n },\n },\n ) as BatchProxy\n}\n\nfunction getByPath(obj: any, path: string): unknown {\n if (!obj || !path) return undefined\n const keys = path.split('.')\n let result = obj\n for (const key of keys) {\n if (result == null) return undefined\n result = result[key]\n }\n return result\n}\n\nfunction resolveParamsFromMappings(args: any, paramMappings: any[]): unknown[] {\n const params: unknown[] = []\n for (let i = 0; i < paramMappings.length; i++) {\n const m = paramMappings[i]\n if (m.value !== undefined) {\n params.push(m.value)\n continue\n }\n if (m.dynamicName === undefined) {\n throw new Error(\\`CRITICAL: ParamMap \\${m.index} has neither dynamicName nor value\\`)\n }\n const colonIdx = m.dynamicName.indexOf(':')\n const scopePath = colonIdx !== -1 ? m.dynamicName.slice(0, colonIdx) : null\n const name = colonIdx !== -1 ? m.dynamicName.slice(colonIdx + 1) : m.dynamicName\n let value: unknown\n if (!scopePath || scopePath.startsWith('root.')) {\n value = name.includes('.')\n ? getByPath(args, name)\n : args?.[name]\n } else {\n value = getByPath(args, scopePath)\n }\n if (value === undefined) {\n throw new Error(\\`Missing required parameter: \\${m.dynamicName}\\`)\n }\n params.push(normalizeValue(value))\n }\n return params\n}`\n}\n\nfunction generateDataConstants(\n cleanModels: any[],\n mappings: Record<string, Record<string, string>>,\n fieldTypes: Record<string, Record<string, string>>,\n queries: Map<string, Map<string, Map<string, any>>>,\n dialect: string,\n): string {\n return `const MODELS: Model[] = ${JSON.stringify(cleanModels, null, 2)}\n\nconst ENUM_MAPPINGS: Record<string, Record<string, string>> = ${JSON.stringify(mappings, null, 2)}\n\nconst ENUM_FIELDS: Record<string, Record<string, string>> = ${JSON.stringify(fieldTypes, null, 2)}\n\nconst QUERIES: Record<string, Record<string, Record<string, {\n sql: string\n params: unknown[]\n dynamicKeys: string[]\n paramMappings: any[]\n requiresReduction: boolean\n includeSpec: Record<string, any>\n isLateral?: boolean\n lateralMeta?: any[]\n skipWhereIn?: boolean\n}>>> = ${formatQueries(queries)}\n\nconst DIALECT = ${JSON.stringify(dialect)}\n\nconst MODEL_MAP = new Map(MODELS.map(m => [m.name, m]))`\n}\n\nfunction generateTransformLogic(): string {\n return `function isDynamicKeyForQueryKey(path: string[], key: string): boolean {\n if (key !== 'skip' && key !== 'take' && key !== 'cursor') return false\n const parent = path.length > 0 ? path[path.length - 1] : null\n if (!parent) return true\n if (parent === 'include' || parent === 'select') return false\n if (path.includes('where')) return false\n if (path.includes('data')) return false\n if (path.includes('orderBy')) return false\n if (path.includes('having')) return false\n if (path.includes('by')) return false\n return true\n}\n\nfunction shouldSkipEnumTransform(path: string[], key: string): boolean {\n if (path.length === 0) return false\n \n const parent = path[path.length - 1]\n \n if (parent === 'orderBy') return true\n if (path.includes('orderBy')) return true\n \n if (parent === 'cursor') return true\n if (path.includes('cursor')) return true\n \n return false\n}\n\nfunction transformEnumInValue(value: unknown, enumType: string | undefined): unknown {\n if (!enumType || value === null || value === undefined) {\n return value\n }\n\n const mapping = ENUM_MAPPINGS[enumType]\n if (!mapping) {\n return value\n }\n\n if (Array.isArray(value)) {\n return value.map(v => {\n if (typeof v === 'string') {\n if (mapping[v] !== undefined) {\n return mapping[v]\n }\n throw new Error(\n \\`Invalid enum value '\\${v}' for type \\${enumType}. Valid values: \\${Object.keys(mapping).join(', ')}\\`\n )\n }\n return v\n })\n }\n\n if (typeof value === 'string') {\n if (mapping[value] !== undefined) {\n return mapping[value]\n }\n throw new Error(\n \\`Invalid enum value '\\${value}' for type \\${enumType}. Valid values: \\${Object.keys(mapping).join(', ')}\\`\n )\n }\n\n if (typeof value === 'object' && !(value instanceof Date)) {\n const result: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n result[k] = transformEnumInValue(v, enumType)\n }\n return result\n }\n\n return value\n}\n\nfunction getRelatedModelName(currentModelName: string, relationFieldName: string): string | null {\n const m = MODEL_MAP.get(currentModelName)\n if (!m) return null\n const f: any = (m as any).fields?.find((x: any) => x?.name === relationFieldName)\n if (!f || !f.isRelation) return null\n return f.relatedModel || null\n}\n\nfunction transformEnumValuesByModel(modelName: string, obj: any, path: string[] = []): any {\n if (obj === null || obj === undefined) {\n return obj\n }\n\n if (Array.isArray(obj)) {\n return obj.map(item => transformEnumValuesByModel(modelName, item, path))\n }\n\n if (obj instanceof Date) {\n return obj\n }\n\n if (typeof obj === 'object') {\n const transformed: any = {}\n const modelFields = (ENUM_FIELDS as any)[modelName] || {}\n for (const [key, value] of Object.entries(obj)) {\n const nextPath = [...path, key]\n\n if (shouldSkipEnumTransform(path, key)) {\n transformed[key] = value\n continue\n }\n\n const relModel = getRelatedModelName(modelName, key)\n if (relModel && value && typeof value === 'object') {\n transformed[key] = transformEnumValuesByModel(relModel, value, nextPath)\n continue\n }\n\n const enumType = modelFields[key]\n if (enumType) {\n if (value && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)) {\n const transformedOperators: any = {}\n for (const [op, opValue] of Object.entries(value)) {\n transformedOperators[op] = transformEnumInValue(opValue, enumType)\n }\n transformed[key] = transformedOperators\n } else {\n transformed[key] = transformEnumInValue(value, enumType)\n }\n } else if (value instanceof Date) {\n transformed[key] = value\n } else if (typeof value === 'object' && value !== null) {\n transformed[key] = transformEnumValuesByModel(modelName, value, nextPath)\n } else {\n transformed[key] = value\n }\n }\n return transformed\n }\n\n return obj\n}\n\nconst BIGINT_MARKER = '\\x00BIGINT\\x00'\n\nfunction bigIntSafeReplacer(_key: string, value: unknown): unknown {\n if (typeof value === 'bigint') return BIGINT_MARKER + value.toString()\n return value\n}\n\nfunction bigIntReviver(_key: string, value: unknown): unknown {\n if (typeof value === 'string' && value.startsWith(BIGINT_MARKER)) {\n return BigInt(value.slice(BIGINT_MARKER.length))\n }\n return value\n}\n\nfunction normalizeQuery(args: any): string {\n if (!args) return '{}'\n const jsonStr = JSON.stringify(args, bigIntSafeReplacer)\n const normalized = JSON.parse(jsonStr, bigIntReviver)\n\n function replaceDynamicParams(obj: any, path: string[] = []): any {\n if (!obj || typeof obj !== 'object') return obj\n if (Array.isArray(obj)) {\n return obj.map((v) => replaceDynamicParams(v, path))\n }\n const result: any = {}\n for (const [key, value] of Object.entries(obj)) {\n if (isDynamicKeyForQueryKey(path, key)) {\n result[key] = \\`__DYNAMIC_\\${key}__\\`\n } else {\n result[key] = replaceDynamicParams(value, [...path, key])\n }\n }\n return result\n }\n\n const withMarkers = replaceDynamicParams(normalized)\n\n return JSON.stringify(withMarkers, (key, value) => {\n if (typeof value === 'bigint') return '__bigint__' + value.toString()\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const sorted: Record<string, unknown> = {}\n for (const k of Object.keys(value).sort()) {\n sorted[k] = (value as any)[k]\n }\n return sorted\n }\n return value\n })\n}`\n}\n\nfunction generateExtension(runtimeImportPath: string): string {\n return `export function speedExtension(config: {\n postgres?: any\n sqlite?: any\n debug?: boolean\n onQuery?: (info: {\n model: string\n method: string\n sql: string\n params: unknown[]\n duration: number\n prebaked: boolean\n }) => void\n}) {\n const { postgres, sqlite, debug, onQuery } = config\n if (!postgres && !sqlite) {\n throw new Error('speedExtension requires postgres or sqlite client')\n }\n const client = postgres || sqlite\n const actualDialect = postgres ? 'postgres' : 'sqlite'\n if (actualDialect !== DIALECT) {\n throw new Error(\\`Generated code is for \\${DIALECT}, but you provided \\${actualDialect}\\`)\n }\n\n if ((DIALECT as string) === 'sqlite') {\n setNormalizeDateMode(detectSqliteDateMode(client))\n }\n\n async function executeQuery(\n sql: string,\n params: unknown[],\n method: string,\n requiresReduction: boolean,\n includeSpec: Record<string, any> | undefined,\n model: any | undefined,\n isLateral?: boolean,\n lateralMeta?: LateralRelationMeta[],\n ): Promise<unknown[]> {\n if (DIALECT === 'postgres') {\n return executePostgresQuery({\n client,\n sql,\n params,\n method,\n requiresReduction,\n includeSpec,\n model,\n allModels: MODELS,\n isLateral,\n lateralMeta,\n })\n }\n \n try {\n const result = executeSqliteQuery(client, sql, params, method)\n return result\n } catch (err) {\n console.log('[sqlite-debug] FAILED:', err instanceof Error ? err.message : err)\n throw err\n }\n }\n\n async function executeWhereInQuery(sql: string, params: unknown[]): Promise<unknown[]> {\n const normalizedParams = normalizeParams(params)\n \n if (DIALECT === 'postgres') {\n const results: any[] = []\n await client.unsafe(sql, normalizedParams).forEach((row: any) => {\n results.push(row)\n })\n return results\n }\n \n const stmt = getOrPrepareStatement(client, sql)\n return stmt.all(...normalizedParams)\n }\n\n return (prisma: any) => {\n const txExecutor = createTransactionExecutor({\n modelMap: MODEL_MAP,\n allModels: MODELS,\n dialect: DIALECT,\n executeRaw: (sql: string, params?: unknown[]) => executeRaw(client, sql, params, DIALECT),\n postgresClient: postgres,\n })\n\n interface ModelContext {\n name?: string\n $name?: string\n $parent?: any\n }\n\n async function handleMethod(\n this: ModelContext,\n method: PrismaMethod,\n args: unknown\n ): Promise<unknown> {\n const modelName = this?.name || this?.$name\n \n if (!modelName || typeof modelName !== 'string') {\n throw new Error('Cannot determine model name from context')\n }\n \n const startTime = Date.now()\n\n try {\n if (args !== undefined && args !== null && typeof args !== 'object') {\n throw new Error(\n \\`Invalid args type for \\${modelName}.\\${method}: expected object, got \\${typeof args}\\`\n )\n }\n\n const transformedArgs = transformEnumValuesByModel(modelName, args || {})\n\n const model = MODEL_MAP.get(modelName)\n if (!model) {\n if (!this.$parent?.[modelName]?.[method]) {\n throw new Error(\\`Model '\\${modelName}' not found and no Prisma fallback available\\`)\n }\n return this.$parent[modelName][method](args)\n }\n\n const plan = planQueryStrategy({\n model,\n method,\n args: transformedArgs,\n allModels: MODELS,\n dialect: DIALECT,\n })\n\n const queryKey = normalizeQuery(plan.filteredArgs)\n const prebakedQuery = QUERIES[modelName]?.[method]?.[queryKey]\n let sql: string\n let params: unknown[]\n let prebaked = false\n let requiresReduction = false\n let includeSpec: Record<string, any> | undefined\n let isLateral = false\n let lateralMeta: any[] | undefined\n let skipWhereIn = false\n\n if (prebakedQuery) {\n sql = prebakedQuery.sql\n params = resolveParamsFromMappings(plan.filteredArgs, prebakedQuery.paramMappings)\n prebaked = true\n requiresReduction = prebakedQuery.requiresReduction || false\n includeSpec = prebakedQuery.includeSpec\n isLateral = prebakedQuery.isLateral || false\n lateralMeta = prebakedQuery.lateralMeta\n skipWhereIn = prebakedQuery.skipWhereIn || false\n } else {\n const buildArgs = plan.whereInSegments.length > 0\n ? { ...plan.filteredArgs, __originalArgs: plan.originalArgs }\n : plan.filteredArgs\n const result = buildSQL(model, MODELS, method, buildArgs, DIALECT)\n sql = result.sql\n params = result.params as unknown[]\n requiresReduction = result.requiresReduction || false\n includeSpec = result.includeSpec\n isLateral = result.isLateral || false\n lateralMeta = result.lateralMeta\n skipWhereIn = result.skipWhereIn || false\n }\n\n if (debug) {\n const strategy = DIALECT === 'postgres'\n ? (isLateral ? 'LATERAL JOIN' : requiresReduction ? 'STREAMING REDUCTION' : 'STREAMING')\n : (requiresReduction ? 'BUFFERED REDUCTION' : 'DIRECT')\n \n const whereInMode = plan.whereInSegments.length > 0 && !skipWhereIn\n ? (DIALECT === 'postgres' ? 'STREAMING PARALLEL' : 'SEQUENTIAL')\n : 'NONE'\n \n console.log(\\`[\\${DIALECT}] \\${modelName}.\\${method} - \\${strategy} + WHERE IN: \\${whereInMode}\\`)\n console.log(\\` Invoked: \\${modelName}.\\${method}(\\`, args, \\`)\\`)\n console.log(\\` Prebaked: \\${prebaked}, skipWhereIn: \\${skipWhereIn}\\`)\n console.log(' SQL:', sql)\n console.log(' Params:', params)\n }\n\n if (plan.whereInSegments.length > 0 && !skipWhereIn) {\n if (DIALECT === 'postgres') {\n const { executeWhereInSegmentsStreaming } = await import(${JSON.stringify(runtimeImportPath)})\n \n const results = await executeWhereInSegmentsStreaming({\n segments: plan.whereInSegments,\n parentSql: sql,\n parentParams: normalizeParams(params),\n parentModel: model,\n allModels: MODELS,\n modelMap: MODEL_MAP,\n dialect: DIALECT,\n execute: async (sql: string, params: unknown[]) => {\n const results: any[] = []\n await client.unsafe(sql, normalizeParams(params)).forEach((row: any) => {\n results.push(row)\n })\n return results\n },\n stream: async (sql: string, params: unknown[], onRow: (row: any) => void) => {\n await client.unsafe(sql, normalizeParams(params)).forEach(onRow)\n },\n parentTake: typeof plan.filteredArgs?.take === 'number'\n ? plan.filteredArgs.take\n : undefined,\n })\n\n if (plan.injectedParentKeys.length > 0) {\n for (const row of results) {\n for (const key of plan.injectedParentKeys) {\n delete row[key]\n }\n }\n }\n\n const duration = Date.now() - startTime\n onQuery?.({ model: modelName, method, sql, params, duration, prebaked })\n\n return transformQueryResults(method, results)\n } else {\n const parentRows = await executeQuery(sql, params, method, requiresReduction, includeSpec, model, isLateral, lateralMeta) as any[]\n\n if (parentRows.length > 0) {\n await executeWhereInSegments({\n segments: plan.whereInSegments,\n parentRows,\n parentModel: model,\n allModels: MODELS,\n modelMap: MODEL_MAP,\n dialect: DIALECT,\n execute: executeWhereInQuery,\n })\n\n if (plan.injectedParentKeys.length > 0) {\n for (const row of parentRows) {\n for (const key of plan.injectedParentKeys) {\n delete row[key]\n }\n }\n }\n }\n\n const duration = Date.now() - startTime\n onQuery?.({ model: modelName, method, sql, params, duration, prebaked })\n\n return transformQueryResults(method, parentRows)\n }\n }\n\n const results = await executeQuery(sql, params, method, requiresReduction, includeSpec, model, isLateral, lateralMeta)\n \n const duration = Date.now() - startTime\n onQuery?.({ model: modelName, method, sql, params, duration, prebaked })\n\n return transformQueryResults(method, results)\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error)\n console.warn(\\`[prisma-sql] \\${modelName}.\\${method} acceleration failed: \\${msg}\\`)\n if (debug && error instanceof Error && error.stack) {\n console.warn(error.stack)\n }\n \n if (!this.$parent?.[modelName]?.[method]) {\n throw error\n }\n \n return this.$parent[modelName][method](args)\n }\n }\n\n async function* findManyStream(\n this: ModelContext,\n args?: unknown\n ): AsyncIterableIterator<any> {\n const modelName = this?.name || this?.$name\n \n if (!modelName || typeof modelName !== 'string') {\n throw new Error('Cannot determine model name from context')\n }\n \n if (DIALECT !== 'postgres') {\n throw new Error('Streaming requires postgres.js client')\n }\n \n const transformedArgs = transformEnumValuesByModel(modelName, args || {})\n const model = MODEL_MAP.get(modelName)\n if (!model) {\n throw new Error(\\`Model '\\${modelName}' not found\\`)\n }\n \n const plan = planQueryStrategy({\n model,\n method: 'findMany',\n args: transformedArgs,\n allModels: MODELS,\n dialect: DIALECT,\n })\n \n const queryKey = normalizeQuery(plan.filteredArgs)\n const prebakedQuery = QUERIES[modelName]?.['findMany']?.[queryKey]\n \n let sql: string\n let params: unknown[]\n let requiresReduction = false\n let includeSpec: Record<string, any> | undefined\n let isLateral = false\n let lateralMeta: any[] | undefined\n \n if (prebakedQuery) {\n sql = prebakedQuery.sql\n params = resolveParamsFromMappings(plan.filteredArgs, prebakedQuery.paramMappings)\n requiresReduction = prebakedQuery.requiresReduction\n includeSpec = prebakedQuery.includeSpec\n isLateral = prebakedQuery.isLateral || false\n lateralMeta = prebakedQuery.lateralMeta\n } else {\n const result = buildSQL(model, MODELS, 'findMany', plan.filteredArgs, DIALECT)\n sql = result.sql\n params = result.params as unknown[]\n requiresReduction = result.requiresReduction || false\n includeSpec = result.includeSpec\n isLateral = result.isLateral || false\n lateralMeta = result.lateralMeta\n }\n \n const normalizedParams = normalizeParams(params)\n\n if (isLateral && lateralMeta) {\n const { buildLateralReducerConfig, reduceLateralRows } = await import(${JSON.stringify(runtimeImportPath)})\n const config = buildLateralReducerConfig(model, lateralMeta)\n const results: any[] = []\n\n await client.unsafe(sql, normalizedParams).forEach((row: any) => {\n results.push(row)\n })\n\n const reduced = reduceLateralRows(results, config)\n for (const item of reduced) {\n yield item\n }\n } else if (requiresReduction && includeSpec) {\n const { createProgressiveReducer } = await import(${JSON.stringify(runtimeImportPath)})\n const config = buildReducerConfig(model, includeSpec, MODELS)\n const reducer = createProgressiveReducer(config)\n \n const completed: any[] = []\n let lastParentKey: string | null = null\n \n await client.unsafe(sql, normalizedParams).forEach((row: any) => {\n reducer.processRow(row)\n const currentKey = reducer.getCurrentParentKey(row)\n \n if (currentKey !== lastParentKey && lastParentKey !== null) {\n const parent = reducer.getCompletedParent(lastParentKey)\n if (parent) {\n completed.push(parent)\n }\n }\n \n lastParentKey = currentKey\n })\n \n const remaining = reducer.getRemainingParents()\n for (const parent of remaining) {\n completed.push(parent)\n }\n \n for (const item of completed) {\n yield item\n }\n } else {\n const rows: any[] = []\n await client.unsafe(sql, normalizedParams).forEach((row: any) => {\n rows.push(row)\n })\n \n for (const row of rows) {\n yield row\n }\n }\n }\n\n async function batch<T extends Record<string, DeferredQuery>>(\n callback: (batch: BatchProxy) => T | Promise<T>,\n ): Promise<{ [K in keyof T]: any }> {\n const batchProxy = createBatchProxy()\n const queries = await callback(batchProxy)\n const batchQueries: Record<string, BatchQuery> = {}\n for (const [key, deferred] of Object.entries(queries)) {\n if (!(deferred instanceof DeferredQuery)) {\n throw new Error(\n \\`Batch query '\\${key}' must be a deferred query. Did you await it?\\`,\n )\n }\n batchQueries[key] = {\n model: deferred.model,\n method: deferred.method,\n args: transformEnumValuesByModel(deferred.model, deferred.args || {}),\n }\n }\n\n const startTime = Date.now()\n const { sql, params, keys, aliases } = buildBatchSql(\n batchQueries,\n MODEL_MAP,\n MODELS,\n DIALECT,\n )\n\n if (debug) {\n console.log(\\`[\\${DIALECT}] $batch (\\${keys.length} queries)\\`)\n console.log('SQL:', sql)\n console.log('Params:', params)\n }\n\n const normalizedParams = normalizeParams(params)\n \n let row: Record<string, unknown>\n if (DIALECT === 'postgres') {\n const rows: any[] = []\n await client.unsafe(sql, normalizedParams as any[]).forEach((r: any) => {\n rows.push(r)\n })\n row = rows[0] as Record<string, unknown>\n } else {\n const stmt = getOrPrepareStatement(client, sql)\n row = stmt.get(...normalizedParams) as Record<string, unknown>\n }\n \n const results = parseBatchResults(row, keys, batchQueries, aliases, MODEL_MAP)\n\n const duration = Date.now() - startTime\n onQuery?.({\n model: '_batch',\n method: 'batch',\n sql,\n params: normalizedParams,\n duration,\n prebaked: false,\n })\n\n return results as { [K in keyof T]: any }\n }\n\n async function batchCount(queries: BatchCountQuery[]): Promise<number[]> {\n if (queries.length === 0) return []\n const startTime = Date.now()\n const { sql, params } = buildBatchCountSql(\n queries,\n MODEL_MAP,\n MODELS,\n DIALECT,\n )\n\n if (debug) {\n console.log(\\`[\\${DIALECT}] $batchCount (\\${queries.length} queries)\\`)\n console.log('SQL:', sql)\n console.log('Params:', params)\n }\n\n const normalizedParams = normalizeParams(params)\n \n let row: Record<string, unknown>\n if (DIALECT === 'postgres') {\n const rows: any[] = []\n await client.unsafe(sql, normalizedParams as any[]).forEach((r: any) => {\n rows.push(r)\n })\n row = rows[0] as Record<string, unknown>\n } else {\n const stmt = getOrPrepareStatement(client, sql)\n row = stmt.get(...normalizedParams) as Record<string, unknown>\n }\n \n const results = parseBatchCountResults(row, queries.length)\n\n const duration = Date.now() - startTime\n onQuery?.({\n model: '_batch',\n method: 'count',\n sql,\n params: normalizedParams,\n duration,\n prebaked: false,\n })\n\n return results\n }\n\n async function transaction(\n queries: TransactionQuery[] | any[],\n options?: TransactionOptions,\n ): Promise<unknown[]> {\n if (!queries || queries.length === 0) {\n return []\n }\n\n const isTransactionQuery = queries.every(q => \n q && \n typeof q === 'object' && \n !q.then &&\n 'model' in q && \n 'method' in q &&\n typeof q.model === 'string' &&\n typeof q.method === 'string'\n )\n\n if (!isTransactionQuery) {\n return Promise.all(queries)\n }\n\n const startTime = Date.now()\n if (debug) {\n console.log(\\`[\\${DIALECT}] $transaction (\\${queries.length} queries)\\`)\n if (options?.isolationLevel) {\n console.log(\\` Isolation level: \\${options.isolationLevel}\\`)\n }\n }\n const transformedQueries = queries.map(q => ({\n ...q,\n args: transformEnumValuesByModel(q.model, q.args || {}),\n }))\n const results = await txExecutor.execute(transformedQueries, options)\n const duration = Date.now() - startTime\n onQuery?.({\n model: '_transaction',\n method: 'transaction',\n sql: \\`TRANSACTION(\\${queries.length})\\`,\n params: [],\n duration,\n prebaked: false,\n })\n return results\n }\n\n return prisma.$extends({\n name: 'prisma-sql-generated',\n client: {\n $original: prisma,\n $batch: batch as <T extends Record<string, DeferredQuery>>(\n callback: (batch: BatchProxy) => T | Promise<T>,\n ) => Promise<{ [K in keyof T]: any }>,\n $batchCount: batchCount as (...args: any[]) => Promise<number[]>,\n $transaction: transaction as (...args: any[]) => Promise<unknown[]>,\n },\n model: {\n $allModels: {\n async findMany(this: ModelContext, args: any) {\n return handleMethod.call(this, 'findMany', args)\n },\n async findFirst(this: ModelContext, args: any) {\n return handleMethod.call(this, 'findFirst', args)\n },\n async findUnique(this: ModelContext, args: any) {\n return handleMethod.call(this, 'findUnique', args)\n },\n async count(this: ModelContext, args: any) {\n return handleMethod.call(this, 'count', args)\n },\n async aggregate(this: ModelContext, args: any) {\n return handleMethod.call(this, 'aggregate', args)\n },\n async groupBy(this: ModelContext, args: any) {\n return handleMethod.call(this, 'groupBy', args)\n },\n findManyStream(this: ModelContext, args?: any): AsyncIterableIterator<any> {\n return findManyStream.call(this, args)\n },\n },\n },\n })\n }\n}`\n}\n\nfunction generateTypeExports(): string {\n return `type SpeedExtensionReturn = ReturnType<ReturnType<typeof speedExtension>>\n\nexport type SpeedClient<T> = T & {\n $batch<T extends Record<string, DeferredQuery>>(\n callback: (batch: BatchProxy) => T | Promise<T>,\n ): Promise<{ [K in keyof T]: any }>\n $batchCount(queries: BatchCountQuery[]): Promise<number[]>\n $transaction(queries: TransactionQuery[], options?: TransactionOptions): Promise<unknown[]>\n}\n\nexport type WithStreaming<T> = T & {\n findManyStream(args?: any): AsyncIterableIterator<any>\n}\n\nexport type { BatchCountQuery, TransactionQuery, TransactionOptions }`\n}\n\nfunction generateCode(\n models: any[],\n queries: Map<string, Map<string, Map<string, any>>>,\n dialect: 'postgres' | 'sqlite',\n datamodel: DMMF.Datamodel,\n runtimeImportPath: string,\n): string {\n const cleanModels = models.map((model) => ({\n ...model,\n fields: model.fields.filter((f: any) => f !== undefined && f !== null),\n }))\n\n const { mappings, fieldTypes } = extractEnumMappings(datamodel)\n\n return [\n generateImports(runtimeImportPath),\n generateStatsInit(),\n generateCoreTypes(),\n generateHelpers(),\n generateDataConstants(cleanModels, mappings, fieldTypes, queries, dialect),\n generateTransformLogic(),\n generateExtension(runtimeImportPath),\n generateTypeExports(),\n ].join('\\n\\n')\n}\n\nfunction formatQueries(\n queries: Map<string, Map<string, Map<string, any>>>,\n): string {\n if (queries.size === 0) {\n return '{}'\n }\n\n const modelEntries: string[] = []\n\n for (const [modelName, methodMap] of queries) {\n const methodEntries: string[] = []\n\n for (const [method, queryMap] of methodMap) {\n const queryEntries: string[] = []\n\n for (const [queryKey, query] of queryMap) {\n const parts = [\n ` sql: ${JSON.stringify(query.sql)}`,\n ` params: ${JSON.stringify(query.params)}`,\n ` dynamicKeys: ${JSON.stringify(query.dynamicKeys)}`,\n ` paramMappings: ${JSON.stringify(query.paramMappings)}`,\n ` requiresReduction: ${query.requiresReduction || false}`,\n ` includeSpec: ${JSON.stringify(query.includeSpec || {})}`,\n ]\n\n if (query.isLateral) {\n parts.push(` isLateral: true`)\n parts.push(` lateralMeta: ${JSON.stringify(query.lateralMeta)}`)\n }\n\n if (query.skipWhereIn) {\n parts.push(` skipWhereIn: true`)\n }\n\n queryEntries.push(\n ` ${JSON.stringify(queryKey)}: {\\n${parts.join(',\\n')}\\n }`,\n )\n }\n\n methodEntries.push(\n ` ${JSON.stringify(method)}: {\\n${queryEntries.join(',\\n')}\\n }`,\n )\n }\n\n modelEntries.push(\n ` ${JSON.stringify(modelName)}: {\\n${methodEntries.join(',\\n')}\\n }`,\n )\n }\n\n return `{\\n${modelEntries.join(',\\n')}\\n}`\n}\n","#!/usr/bin/env node\nimport { generatorHandler, GeneratorOptions } from '@prisma/generator-helper'\nimport { generateClient } from './code-emitter'\nimport { dirname, join, resolve } from 'path'\nconst { version } = require('../package.json')\n\nfunction getDialectFromProvider(provider: string): 'postgres' | 'sqlite' {\n const normalized = provider.toLowerCase()\n if (normalized === 'sqlite') return 'sqlite'\n if (normalized === 'postgresql' || normalized === 'postgres')\n return 'postgres'\n throw new Error(\n `Unsupported database provider: ${provider}. ` +\n `Supported: postgresql, postgres, sqlite`,\n )\n}\n\nfunction getOutputDir(options: GeneratorOptions): string {\n const schemaDir = dirname(options.schemaPath)\n if (options.generator.output?.value) {\n return resolve(schemaDir, options.generator.output.value)\n }\n const clientGenerator = options.otherGenerators.find(\n (g) => g.provider.value === 'prisma-client-js',\n )\n if (clientGenerator?.output?.value) {\n const clientOutput = resolve(schemaDir, clientGenerator.output.value)\n return join(resolve(dirname(clientOutput), '..'), 'sql')\n }\n return resolve(schemaDir, './generated/sql')\n}\n\nfunction getDatasourceUrl(options: GeneratorOptions): string | undefined {\n const configUrl = options.generator.config.databaseUrl\n if (typeof configUrl === 'string' && configUrl) {\n return configUrl\n }\n\n return process.env.DATABASE_URL || undefined\n}\n\ngeneratorHandler({\n onManifest() {\n return {\n version,\n defaultOutput: './generated/sql',\n prettyName: 'prisma-sql-generator',\n }\n },\n async onGenerate(options: GeneratorOptions) {\n const { generator, dmmf, datasources } = options\n if (!datasources || datasources.length === 0) {\n throw new Error('No datasource found in schema')\n }\n\n const autoDialect = getDialectFromProvider(datasources[0].provider)\n const configDialect = generator.config.dialect as\n | 'postgres'\n | 'sqlite'\n | undefined\n const dialect = configDialect || autoDialect\n\n if (configDialect && configDialect !== autoDialect) {\n console.warn(\n `Generator dialect (${configDialect}) differs from datasource provider (${datasources[0].provider}). ` +\n `Using generator config: ${configDialect}`,\n )\n }\n\n const config = {\n dialect,\n skipInvalid: generator.config.skipInvalid === 'true',\n }\n\n const outputDir = getOutputDir(options)\n const datasourceUrl = getDatasourceUrl(options)\n\n console.info(`Generating SQL client to ${outputDir}`)\n console.info(`Datasource: ${datasources[0].provider}`)\n console.info(`Dialect: ${config.dialect}`)\n console.info(`Skip invalid: ${config.skipInvalid}`)\n console.info(\n `Database URL: ${datasourceUrl ? '✓ available' : '✗ not available (stats collection will be skipped)'}`,\n )\n\n await generateClient({\n datamodel: dmmf.datamodel,\n outputDir,\n config,\n datasourceUrl,\n })\n\n console.info('✓ Generated SQL client successfully')\n },\n})\n"]}
|