@vibeorm/sql 5.9.0 → 5.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ast.d.ts +337 -4
- package/dist/codecs.d.ts +106 -12
- package/dist/composable.d.ts +44 -4
- package/dist/dialect.d.ts +73 -1
- package/dist/dialects/migration-inventory.d.ts +0 -11
- package/dist/dialects/mysql-generated-columns.d.ts +1 -5
- package/dist/dialects/mysql-index-expressions.d.ts +1 -19
- package/dist/dialects/mysql-json-keys.d.ts +26 -0
- package/dist/dialects/mysql-row-rules.d.ts +1 -7
- package/dist/dialects/postgres-generated-columns.d.ts +0 -5
- package/dist/dialects/postgres-index-expressions.d.ts +1 -11
- package/dist/dialects/postgres-rls-readiness.d.ts +0 -2
- package/dist/dialects/postgres-rls.d.ts +7 -1
- package/dist/dialects/postgres-row-rules.d.ts +1 -24
- package/dist/dialects/sqlite-fts.d.ts +2 -2
- package/dist/dialects/sqlite-generated-columns.d.ts +1 -12
- package/dist/dialects/sqlite-index-expressions.d.ts +1 -24
- package/dist/dialects/sqlite-json-equality.d.ts +1 -14
- package/dist/dialects/sqlite-row-rules.d.ts +1 -7
- package/dist/dialects/sqlite-table-definition.d.ts +0 -19
- package/dist/dialects/test-databases.d.ts +96 -0
- package/dist/expr-fragment.d.ts +13 -0
- package/dist/identifiers.d.ts +1 -4
- package/dist/index.d.ts +11 -6
- package/dist/index.js +3023 -2064
- package/dist/index.js.map +47 -43
- package/dist/json-patch.d.ts +0 -14
- package/dist/json-path.d.ts +1 -2
- package/dist/key-list.d.ts +38 -21
- package/dist/native-types.d.ts +3 -1
- package/dist/params.d.ts +0 -2
- package/dist/query/expressions.d.ts +1 -33
- package/dist/query/index.js.map +7 -7
- package/dist/query/mutations.d.ts +1 -14
- package/dist/query/reusable.d.ts +1 -16
- package/dist/query/select.d.ts +1 -10
- package/dist/query/sources.d.ts +1 -36
- package/dist/query/state.d.ts +1 -77
- package/dist/query-plan.d.ts +2 -2
- package/dist/result-decoder.d.ts +21 -1
- package/dist/row-rules.d.ts +1 -19
- package/dist/sql-bindings.d.ts +7 -43
- package/dist/sql-handles.d.ts +1 -3
- package/dist/sql-input.d.ts +8 -24
- package/dist/timestamp-identity.d.ts +6 -12
- package/dist/timestamp-text.d.ts +36 -0
- package/package.json +2 -2
package/dist/query/index.js.map
CHANGED
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/query/select.ts", "../src/query/state.ts", "../src/query/sources.ts", "../src/query/expressions.ts", "../src/query/mutations.ts", "../src/query/reusable.ts", "../src/query/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import { assertSqlParamBuilding, createSqlQuery, isSqlParam, recordSqlBinding, sameResultDecoder, sqlParamContract } from \"@vibeorm/sql\";\nimport type { SqlParam, SqlQuery } from \"@vibeorm/sql\";\nimport type { Expression, Order, Projection, ProjectionRow, Scope, NullableRow, SelectBuilder, Source } from \"./types.ts\";\nimport { builderTerminals, checkScope, expressionState, identifier, invalid, makeExpression, readState, readStates, sourceState, unsupported } from \"./state.ts\";\nimport type { Binding, ProjectionEntry, ReadState, RenderContext } from \"./state.ts\";\nimport { groupKeys, makeBinding, projectionDecoder, projectionEntries, renderEntries, renderSource, scope } from \"./sources.ts\";\nimport { transportProjection } from \"./expressions.ts\";\n\ntype Join = { readonly binding: Binding; readonly kind: \"INNER\" | \"LEFT\" | \"CROSS\"; readonly on?: Expression<boolean | null> };\ntype SelectState = {\n readonly bindings: readonly Binding[];\n readonly joins: readonly Join[];\n readonly where: readonly Expression<boolean | null>[];\n readonly group?: readonly Expression<unknown>[];\n readonly having: readonly Expression<boolean | null>[];\n readonly order: readonly Order[];\n readonly limit?: number | SqlParam<number>;\n readonly offset?: number | SqlParam<number>;\n};\n\nfunction count(value: number): number {\n if (!Number.isSafeInteger(value) || value < 0) invalid(\"SQL LIMIT/OFFSET must be non-negative safe integers\");\n return value;\n}\n\nfunction pageValue(value: number | SqlParam<number>): number | SqlParam<number> {\n if (isSqlParam(value)) { assertSqlParamBuilding({ param: value }); return value; }\n return count(value);\n}\n\nfunction renderPage(params: { value: number | SqlParam<number>; context: RenderContext }): string {\n if (!isSqlParam(params.value)) return String(params.value);\n const contract = sqlParamContract({ param: params.value });\n if (contract.scalar !== \"Int\" || contract.list || contract.nullable || contract.nativeType !== undefined) invalid(\"SQL pagination inputs require a non-null Int contract\");\n return recordSqlBinding({ collector: params.context.collector, source: { kind: \"input\", param: params.value }, contract, transport: { kind: \"plain\" }, rejectNull: true,\n validate: (value: unknown): void => { if (typeof value !== \"number\") invalid(\"SQL LIMIT/OFFSET must be non-negative safe integers\"); count(value); },\n encode: ({ value, dialect }) => contract.encoder.encode({ value, dialect: dialect.name }),\n });\n}\n\nfunction predicate(expression: Expression<boolean | null>, bindings: readonly Binding[], aggregates: boolean): Expression<boolean | null> {\n checkScope({ expression, bindings, aggregates });\n return expression;\n}\n\nfunction collectCtes(bindings: readonly Binding[]): readonly Source<unknown>[] {\n const ctes: Source<unknown>[] = [];\n for (const binding of bindings) {\n const state = sourceState(binding.source);\n if (state.query !== undefined) ctes.push(...state.query.ctes);\n if (state.cte !== undefined) ctes.push(binding.source);\n }\n const unique = [...new Set(ctes)];\n const names = unique.map((source) => sourceState(source).cte!);\n if (new Set(names).size !== names.length) invalid(\"Read CTE names must be unique across composed queries\");\n for (const binding of bindings) {\n const source = sourceState(binding.source);\n if (source.name !== undefined && source.namespace === undefined && names.includes(source.name)) invalid(\"A read CTE cannot shadow a physical source table\");\n }\n return Object.freeze(unique);\n}\n\nfunction withCtes(params: { state: ReadState; context: RenderContext }): string {\n const { state, context } = params;\n if (state.ctes.length === 0) return state.render(context);\n const definitions = state.ctes.map((source) => {\n const cte = sourceState(source);\n return `${context.dialect.quoteIdent({ name: cte.cte! })} AS (${cte.query!.render({ ...context, transport: false })})`;\n });\n return `WITH ${definitions.join(\", \")} ${state.render(context)}`;\n}\n\nfunction finish<P extends Projection>(state: ReadState): SqlQuery<ProjectionRow<P>> {\n const query = createSqlQuery({ decoder: projectionDecoder<P>(state.entries), render: (context: RenderContext) => withCtes({ state, context }) });\n readStates.set(query, Object.freeze(state));\n builderTerminals.add(query);\n return query;\n}\n\nfunction renderOrder(params: { terms: readonly Order[]; context: RenderContext }): string {\n const { context } = params;\n const terms = params.terms.flatMap((term) => {\n const state = expressionState(term.expression);\n if (state.definition?.scalar === \"Decimal\" && context.dialect.name === \"sqlite\") unsupported(\"SQLite Decimal ordering is not exact; use an explicit raw numeric contract\");\n const expression = (): string => state.render(context);\n const direction = term.direction === \"desc\" ? \"DESC\" : \"ASC\";\n if (term.nulls === undefined) return [`${expression()} ${direction}`];\n if (context.dialect.orderByNullsMode === \"native\") return [`${expression()} ${direction} NULLS ${term.nulls.toUpperCase()}`];\n return [`(${expression()} IS NULL) ${term.nulls === \"first\" ? \"DESC\" : \"ASC\"}`, `${expression()} ${direction}`];\n });\n return terms.length === 0 ? \"\" : ` ORDER BY ${terms.join(\", \")}`;\n}\n\nfunction select<P extends Projection>(params: { state: SelectState; projection: P; distinct?: boolean }): SqlQuery<ProjectionRow<P>> {\n const { state } = params;\n const entries = projectionEntries({ projection: params.projection, bindings: state.bindings });\n const groupedExpressions = [...entries.map((entry) => entry.expression), ...state.having, ...state.order.map((term) => term.expression)];\n const aggregate = groupedExpressions.some((expression) => expressionState(expression).aggregate);\n if (state.having.length > 0 && state.group === undefined && !aggregate) invalid(\"HAVING requires a grouped or aggregate query\");\n if (state.group !== undefined || aggregate) {\n const keys = groupKeys(state.group ?? []);\n for (const expression of groupedExpressions) {\n if (state.group?.includes(expression)) continue;\n for (const key of expressionState(expression).ungrouped) if (!keys.has(key)) invalid(\"Every non-aggregate projection, HAVING and ORDER expression must be grouped\");\n }\n }\n const ctes = collectCtes(state.bindings);\n const physicalNames = Object.freeze([...new Set(state.bindings.flatMap((binding) => {\n const source = sourceState(binding.source);\n return source.query?.physicalNames ?? (source.name !== undefined && source.namespace === undefined ? [source.name] : []);\n }))]);\n if (ctes.some((source) => physicalNames.includes(sourceState(source).cte!))) invalid(\"A read CTE cannot shadow a physical source table\");\n const distinct = params.distinct === true;\n const distinctEntries = distinct ? entries.map(({ alias, expression }) => {\n const original = expressionState(expression);\n const render = (context: RenderContext): string => `${context.dialect.quoteIdent({ name: \"__vibe_distinct\" })}.${context.dialect.quoteIdent({ name: alias })}`;\n return { alias, expression: makeExpression({ ...original, render, projection: original.definition === undefined ? undefined : (context) => transportProjection({ context, expression: render(context), definition: original.definition! }) }) };\n }) : entries;\n const distinctOrder = distinct ? state.order.map((term) => {\n const ordered = expressionState(term.expression);\n const index = entries.findIndex((entry) => entry.expression === term.expression || (ordered.column !== undefined && expressionState(entry.expression).column === ordered.column));\n if (index < 0) invalid(\"DISTINCT ordering must use a selected column or the same selected expression\");\n return { ...term, expression: distinctEntries[index]!.expression };\n }) : state.order;\n return finish<P>({ entries, ctes, physicalNames, render: (context) => {\n const columns = renderEntries({ entries, context: distinct ? { ...context, transport: false } : context });\n const from = renderSource({ context, binding: state.bindings[0]! });\n const joins = state.joins.map((join) => ` ${join.kind} JOIN ${renderSource({ context, binding: join.binding })}${join.on === undefined ? \"\" : ` ON ${expressionState(join.on).render(context)}`}`).join(\"\");\n const where = state.where.length === 0 ? \"\" : ` WHERE ${state.where.map((expression) => expressionState(expression).render(context)).join(\" AND \")}`;\n const group = state.group === undefined || state.group.length === 0 ? \"\" : ` GROUP BY ${state.group.map((expression) => expressionState(expression).render(context)).join(\", \")}`;\n const having = state.having.length === 0 ? \"\" : ` HAVING ${state.having.map((expression) => expressionState(expression).render(context)).join(\" AND \")}`;\n const order = renderOrder({ terms: distinctOrder, context });\n const limit = state.limit === undefined ? (state.offset === undefined || context.dialect.offsetRequiresLimit === null ? \"\" : ` LIMIT ${context.dialect.offsetRequiresLimit.limitText}`) : ` LIMIT ${renderPage({ value: state.limit, context })}`;\n const offset = state.offset === undefined ? \"\" : ` OFFSET ${renderPage({ value: state.offset, context })}`;\n const native = `SELECT ${distinct ? \"DISTINCT \" : \"\"}${columns} FROM ${from}${joins}${where}${group}${having}`;\n const query = distinct ? `SELECT ${renderEntries({ entries: distinctEntries, context })} FROM (${native}) AS ${context.dialect.quoteIdent({ name: \"__vibe_distinct\" })}` : native;\n return `${query}${order}${limit}${offset}`;\n } });\n}\n\nfunction builder<S>(state: SelectState): SelectBuilder<S> {\n const addJoin = <Row, A extends string>(params: { source: Source<Row>; as: A; on?: (scope: Scope<S & Record<A, Row>>) => Expression<boolean | null>; kind: \"INNER\" | \"LEFT\" | \"CROSS\" }): SelectBuilder<S & Record<A, Row>> => {\n if (state.bindings.some((binding) => binding.alias === params.as)) invalid(\"SQL source aliases must be unique within a SELECT\");\n const joined = makeBinding({ source: params.source, alias: params.as });\n const onBindings = [...state.bindings, joined];\n const on = params.kind === \"CROSS\" ? undefined : predicate(params.on!(scope<S & Record<A, Row>>(onBindings)), onBindings, false);\n const output = params.kind === \"LEFT\" ? Object.freeze({ ...joined, nullable: true }) : joined;\n return builder<S & Record<A, Row>>({ ...state, bindings: Object.freeze([...state.bindings, output]), joins: Object.freeze([...state.joins, Object.freeze({ binding: output, kind: params.kind, on })]) });\n };\n return Object.freeze({\n innerJoin: (params) => addJoin({ ...params, kind: \"INNER\" }),\n leftJoin: <Row, A extends string>(params: { source: Source<Row>; as: A; on: (scope: Scope<S & Record<A, Row>>) => Expression<boolean | null> }): SelectBuilder<S & Record<A, NullableRow<Row>>> => addJoin({ ...params, kind: \"LEFT\" }) as SelectBuilder<S & Record<A, NullableRow<Row>>>,\n crossJoin: (params) => addJoin({ ...params, kind: \"CROSS\" }),\n where: (callback) => {\n if (typeof callback !== \"function\") invalid(\"SQL WHERE requires a callback\");\n return builder<S>({ ...state, where: Object.freeze([...state.where, predicate(callback(scope<S>(state.bindings)), state.bindings, false)]) });\n },\n groupBy: (callback) => {\n if (typeof callback !== \"function\") invalid(\"SQL GROUP BY requires a callback\");\n const expressions = [...callback(scope<S>(state.bindings))];\n for (const expression of expressions) checkScope({ expression, bindings: state.bindings, aggregates: false });\n return builder<S>({ ...state, group: Object.freeze(expressions) });\n },\n having: (callback) => {\n if (typeof callback !== \"function\") invalid(\"SQL HAVING requires a callback\");\n return builder<S>({ ...state, having: Object.freeze([...state.having, predicate(callback(scope<S>(state.bindings)), state.bindings, true)]) });\n },\n orderBy: (callback) => {\n if (typeof callback !== \"function\") invalid(\"SQL ORDER BY requires a callback\");\n const terms = callback(scope<S>(state.bindings)).map((term) => {\n checkScope({ expression: term.expression, bindings: state.bindings });\n if (term.direction !== undefined && term.direction !== \"asc\" && term.direction !== \"desc\") invalid(\"SQL order direction must be asc or desc\");\n if (term.nulls !== undefined && term.nulls !== \"first\" && term.nulls !== \"last\") invalid(\"SQL null ordering must be first or last\");\n return Object.freeze({ ...term });\n });\n return builder<S>({ ...state, order: Object.freeze([...state.order, ...terms]) });\n },\n limit: (value) => builder<S>({ ...state, limit: pageValue(value) }),\n offset: (value) => builder<S>({ ...state, offset: pageValue(value) }),\n select: (callback, options) => {\n if (typeof callback !== \"function\") invalid(\"SQL SELECT requires a callback\");\n return select({ state, projection: callback(scope<S>(state.bindings)), distinct: options?.distinct });\n },\n } satisfies SelectBuilder<S>);\n}\n\nexport function from<Row, A extends string>(params: { source: Source<Row>; as: A }): SelectBuilder<Record<A, Row>> {\n const binding = makeBinding({ source: params.source, alias: params.as });\n return builder<Record<A, Row>>({ bindings: Object.freeze([binding]), joins: Object.freeze([]), where: Object.freeze([]), having: Object.freeze([]), order: Object.freeze([]) });\n}\n\nexport function union<Row>(params: { queries: readonly SqlQuery<Row>[]; all?: boolean }): SqlQuery<Row> {\n if (!Array.isArray(params.queries) || params.queries.length < 2) invalid(\"UNION requires at least two builder read queries\");\n const all = params.all === true;\n const branches = params.queries.map(readState);\n const first = branches[0]!;\n for (const branch of branches.slice(1)) {\n if (branch.entries.length !== first.entries.length) invalid(\"UNION branches must expose the same aliases and result contracts\");\n for (const expected of first.entries) {\n const other = branch.entries.find((entry) => entry.alias === expected.alias);\n if (other === undefined) invalid(\"UNION branches must expose the same aliases\");\n const left = expressionState(expected.expression);\n const right = expressionState(other.expression);\n const leftDecoder = left.definition?.decoder ?? left.decoder;\n const rightDecoder = right.definition?.decoder ?? right.decoder;\n if (left.contract !== right.contract || !sameResultDecoder({ left: leftDecoder, right: rightDecoder })) invalid(\"UNION output decoders, physical types and nullability must match by alias\");\n }\n }\n const ctes = [...new Set(branches.flatMap((branch) => [...branch.ctes]))];\n const names = ctes.map((source) => sourceState(source).cte!);\n if (new Set(names).size !== names.length) invalid(\"UNION read CTE names must be unique\");\n if (names.some((name) => branches.some((branch) => branch.physicalNames.includes(name)))) invalid(\"A UNION read CTE cannot shadow a physical source table\");\n const entries: readonly ProjectionEntry[] = first.entries.map(({ alias, expression }) => {\n identifier(alias);\n const original = expressionState(expression);\n return { alias, expression: makeExpression({ ...original, references: new Set(), ungrouped: new Set(), aggregate: false, column: undefined, render: (context) => `${context.dialect.quoteIdent({ name: \"__vibe_union\" })}.${context.dialect.quoteIdent({ name: alias })}`, projection: original.definition === undefined ? undefined : (context) => transportProjection({ context, expression: `${context.dialect.quoteIdent({ name: \"__vibe_union\" })}.${context.dialect.quoteIdent({ name: alias })}`, definition: original.definition! }) }) };\n });\n const state: ReadState = {\n entries, ctes: Object.freeze(ctes), physicalNames: Object.freeze([...new Set(branches.flatMap((branch) => [...branch.physicalNames]))]), render: (context) => {\n const rendered = branches.map((branch, index) => {\n const alias = context.dialect.quoteIdent({ name: `__vibe_branch_${index}` });\n const columns = first.entries.map((entry) => `${alias}.${context.dialect.quoteIdent({ name: entry.alias })}`).join(\", \");\n return `SELECT ${columns} FROM (${branch.render({ ...context, transport: false })}) AS ${alias}`;\n }).join(all ? \" UNION ALL \" : \" UNION \");\n return `SELECT ${renderEntries({ entries, context })} FROM (${rendered}) AS ${context.dialect.quoteIdent({ name: \"__vibe_union\" })}`;\n },\n };\n return finish<Projection>(state) as unknown as SqlQuery<Row>;\n}\n",
|
|
6
|
-
"import { VibeError } from \"@vibeorm/schema\";\nimport { registerSqlHandleCheck } from \"@vibeorm/sql\";\nimport type { ParamCollector, ResultDecoder, ResultReadDecoder, SqlDialect, SqlQuery } from \"@vibeorm/sql\";\nimport type { ColumnDefinition, Expression, Source } from \"./types.ts\";\n\nexport type RenderContext = { readonly dialect: SqlDialect; readonly collector: ParamCollector; readonly transport?: boolean };\nexport type ColumnKey = { readonly binding: object; readonly name: string };\nexport type ExpressionState = {\n readonly decoder: ResultReadDecoder<unknown>;\n readonly render: (context: RenderContext) => string;\n readonly projection?: (context: RenderContext) => string;\n readonly references: ReadonlySet<object>;\n readonly ungrouped: ReadonlySet<ColumnKey>;\n readonly aggregate: boolean;\n readonly contract: object | string;\n readonly definition?: ColumnDefinition<unknown>;\n readonly column?: ColumnKey;\n readonly parameter?: { readonly value: unknown; readonly decoder: ResultDecoder<unknown> };\n readonly default?: boolean;\n};\nexport type ProjectionEntry = { readonly alias: string; readonly expression: Expression<unknown> };\nexport type ReadState = {\n readonly entries: readonly ProjectionEntry[];\n readonly render: (context: RenderContext) => string;\n readonly physicalNames: readonly string[];\n readonly ctes: readonly Source<unknown>[];\n};\nexport type SourceState = {\n readonly name?: string;\n readonly namespace?: string;\n readonly columns: Readonly<Record<string, ColumnDefinition<unknown>>>;\n readonly required: readonly string[];\n readonly readOnly?: boolean;\n readonly query?: ReadState;\n readonly cte?: string;\n};\nexport type Binding = {\n readonly source: Source<unknown>;\n readonly alias: string;\n readonly token: object;\n readonly nullable: boolean;\n readonly keys: Readonly<Record<string, ColumnKey>>;\n};\n\nexport const expressionStates: WeakMap<object, ExpressionState> = new WeakMap();\nexport const sourceStates: WeakMap<object, SourceState> = new WeakMap();\nexport const readStates: WeakMap<object, ReadState> = new WeakMap();\nexport const builderTerminals: WeakSet<object> = new WeakSet();\nregisterSqlHandleCheck({ check: (value: object) => expressionStates.has(value) || sourceStates.has(value) || builderTerminals.has(value) });\n\nexport function columnContract(definition: ColumnDefinition<unknown>): string {\n return JSON.stringify({ scalar: definition.scalar, nullable: definition.nullable === true, list: definition.list === true, enumType: definition.enumType, enumValues: definition.enumValues, nativeType: definition.nativeType, transport: definition.transport });\n}\n\n
|
|
7
|
-
"import { assertSqlNamespace } from \"@vibeorm/schema\";\nimport type { ResultParameterEncoder, ResultReadDecoder, SqlQuery } from \"@vibeorm/sql\";\nimport type { ColumnDefinition, ColumnDefinitions, Columns, Expression, Projection, ProjectionRow, Scope, Source, Table } from \"./types.ts\";\nimport { assertDecoder, nativeColumnDefinition, nullableDecoder, transportProjection } from \"./expressions.ts\";\nimport { assertWritableColumn, checkScope, columnContract, expressionState, identifier, invalid, invalidData, makeExpression, readState, sourceState, sourceStates, unsupported } from \"./state.ts\";\nimport type { Binding, ColumnKey, ProjectionEntry, RenderContext } from \"./state.ts\";\n\nexport function makeTable<Row, Input = Partial<Row>>(params: { name: string; namespace?: string; columns: ColumnDefinitions<Row>; required?: readonly string[]; readOnly?: boolean }): Table<Row, Input> {\n identifier(params.name);\n if (params.namespace !== undefined) identifier(params.namespace);\n const columns = Object.fromEntries(Object.entries(params.columns as Record<string, ColumnDefinition<unknown>>).map(([key, definition]) => {\n identifier(key);\n identifier(definition.name);\n assertDecoder(definition.decoder);\n if (definition.generated !== undefined && definition.generated !== true) invalid(\"SQL generated-column metadata must be true when present\");\n if (definition.inputDecoder !== undefined && typeof definition.inputDecoder.encode !== \"function\") invalid(\"SQL input decoders must have an encoder\");\n if (definition.enumType !== undefined) {\n identifier(definition.enumType.name);\n identifier(definition.enumType.namespace);\n }\n return [key, Object.freeze({ ...nativeColumnDefinition(definition), ...(definition.enumValues === undefined ? {} : { enumValues: Object.freeze([...definition.enumValues]) }), ...(definition.enumType === undefined ? {} : { enumType: Object.freeze({ ...definition.enumType }) }) })];\n }));\n if (Object.keys(columns).length === 0) invalid(\"SQL sources require at least one column\");\n const physical = Object.values(columns).map((column) => column.name);\n if (new Set(physical).size !== physical.length) invalid(\"Physical column names must be unique within a source\");\n const required = [...(params.required ?? Object.entries(columns).filter(([, definition]) => definition.nullable !== true && definition.dbDefault !== true && definition.generated !== true).map(([name]) => name))];\n if (required.some((key) => !Object.hasOwn(columns, key))) invalid(\"Required insert columns must belong to the table\");\n for (const column of required) assertWritableColumn({ table: { name: params.name, columns, required }, column });\n const source = Object.freeze(Object.create(null)) as Table<Row, Input>;\n sourceStates.set(source, Object.freeze({ name: params.name, namespace: params.namespace, columns: Object.freeze(columns), required: Object.freeze(required), readOnly: params.readOnly === true }));\n return source;\n}\n\nexport function makeDerived<Row>(params: { query: SqlQuery<Row>; name?: string }): Source<Row> {\n const query = readState(params.query);\n if (params.name !== undefined) {\n identifier(params.name);\n if (query.physicalNames.includes(params.name)) invalid(\"A read CTE cannot shadow a physical source table\");\n }\n const columns = Object.fromEntries(query.entries.map(({ alias, expression }) => {\n const state = expressionState(expression);\n const decoder = state.definition?.inputDecoder ?? state.definition?.decoder ?? state.decoder;\n const inputDecoder = \"encode\" in decoder && typeof decoder.encode === \"function\" ? decoder as ResultParameterEncoder : undefined;\n return [alias, Object.freeze({ ...state.definition, name: alias, decoder: state.decoder, inputDecoder, scalar: state.definition?.scalar ?? \"Unknown\", dbDefault: false })];\n }));\n const source = Object.freeze(Object.create(null)) as Source<Row>;\n sourceStates.set(source, Object.freeze({ columns: Object.freeze(columns), required: Object.freeze([]), query, cte: params.name, readOnly: true }));\n return source;\n}\n\nexport function makeBinding(params: { source: Source<unknown>; alias: string; nullable?: boolean }): Binding {\n const state = sourceState(params.source);\n identifier(params.alias);\n const token = Object.freeze({});\n const keys = Object.fromEntries(Object.keys(state.columns).map((name) => [name, Object.freeze({ binding: token, name })]));\n return Object.freeze({ source: params.source, alias: params.alias, token, keys: Object.freeze(keys), nullable: params.nullable === true });\n}\n\nexport function bindingColumns<Row>(binding: Binding, qualified = true): Columns<Row> {\n const source = sourceState(binding.source);\n return Object.freeze(Object.fromEntries(Object.entries(source.columns).map(([name, original]) => {\n const definition = binding.nullable ? Object.freeze({ ...original, nullable: true }) : original;\n const decoder = definition.nullable === true ? nullableDecoder(definition.decoder) : definition.decoder;\n const readDecoder: ResultReadDecoder<unknown> = definition.transport === \"text\" || definition.scalar === \"Json\" ? Object.freeze({ decode: (params: Parameters<ResultReadDecoder<unknown>[\"decode\"]>[0]): unknown => decoder.decode({ ...params, wire: { ...params.wire, json: \"text\" } }) }) : decoder;\n const column = binding.keys[name]!;\n const render = (context: RenderContext): string => {\n if (definition.list === true && !context.dialect.capabilities.scalarArrays) unsupported(\"Scalar array columns require native array support\");\n const name = context.dialect.quoteIdent({ name: definition.name });\n return qualified ? `${context.dialect.quoteIdent({ name: binding.alias })}.${name}` : name;\n };\n return [name, makeExpression({\n decoder: readDecoder,\n render,\n projection: (context) => transportProjection({ context, expression: render(context), definition }),\n references: new Set([binding.token]), ungrouped: new Set([column]), aggregate: false, column, definition,\n contract: columnContract(definition),\n })];\n }))) as Columns<Row>;\n}\n\nexport function scope<S>(bindings: readonly Binding[]): Scope<S> {\n return Object.freeze(Object.fromEntries(bindings.map((binding) => [binding.alias, bindingColumns(binding)]))) as Scope<S>;\n}\n\nexport function renderSource(params: { context: RenderContext; binding: Binding }): string {\n const { context, binding } = params;\n const state = sourceState(binding.source);\n const alias = context.dialect.quoteIdent({ name: binding.alias });\n if (state.cte !== undefined) return `${context.dialect.quoteIdent({ name: state.cte })} AS ${alias}`;\n if (state.query !== undefined) return `(${state.query.render({ ...context, transport: false })}) AS ${alias}`;\n if (state.namespace !== undefined) assertSqlNamespace({ dialect: context.dialect.name, namespace: state.namespace });\n const name = context.dialect.quoteIdent({ name: state.name! });\n return `${state.namespace === undefined ? \"\" : `${context.dialect.quoteIdent({ name: state.namespace })}.`}${name} AS ${alias}`;\n}\n\nexport function projectionEntries(params: { projection: Projection; bindings: readonly Binding[]; aggregates?: boolean }): readonly ProjectionEntry[] {\n const entries = Object.entries(params.projection);\n if (entries.length === 0) invalid(\"SELECT/RETURNING requires a non-empty explicit projection\");\n return Object.freeze(entries.map(([alias, expression]) => {\n identifier(alias);\n checkScope({ expression, bindings: params.bindings, aggregates: params.aggregates, nullableContracts: true });\n return Object.freeze({ alias, expression });\n }));\n}\n\nexport function renderEntries(params: { entries: readonly ProjectionEntry[]; context: RenderContext }): string {\n return params.entries.map(({ alias, expression }) => {\n const state = expressionState(expression);\n const rendered = params.context.transport !== false && state.projection !== undefined ? state.projection(params.context) : state.render(params.context);\n return `${rendered} AS ${params.context.dialect.quoteIdent({ name: alias })}`;\n }).join(\", \");\n}\n\nexport function projectionDecoder<P extends Projection>(entries: readonly ProjectionEntry[]): ResultReadDecoder<ProjectionRow<P>> {\n return Object.freeze({\n decode: (params: Parameters<ResultReadDecoder<unknown>[\"decode\"]>[0]): ProjectionRow<P> => {\n if (typeof params.value !== \"object\" || params.value === null || Array.isArray(params.value)) invalidData(\"SQL query decoder requires a row object\");\n const row = params.value as Record<string, unknown>;\n return Object.fromEntries(entries.map(({ alias, expression }) => {\n if (!Object.hasOwn(row, alias)) invalidData(`Missing SQL result alias \"${alias}\"`);\n return [alias, expressionState(expression).decoder.decode({ ...params, value: row[alias] })];\n })) as ProjectionRow<P>;\n },\n });\n}\n\nexport function groupKeys(expressions: readonly Expression<unknown>[]): ReadonlySet<ColumnKey> {\n return new Set(expressions.flatMap((expression) => {\n const state = expressionState(expression);\n return state.column === undefined ? [] : [state.column];\n }));\n}\n",
|
|
8
|
-
"import { isLocalDateField } from \"@vibeorm/schema\";\nimport { assertSqlParamBuilding, decode, float32Codec, isSqlBindingCollector, isSqlFragment, isSqlParam, jsonListParameter, localDateCodec, nativeEnumArrayParameter, parsePgArrayLiteral, recordSqlBinding, renderSqlFragment, resultScalarContract, snapshotSqlValue, sqlParamContract, timeOfDayCodec, toPgArrayLiteral } from \"@vibeorm/sql\";\nimport type { ResultDecoder, ResultReadDecoder, ResultParameterEncoder, SqlDialect, SqlFragment, SqlInputContract, SqlParam, SqlParameterTransport } from \"@vibeorm/sql\";\nimport type { ColumnDefinition, Expression, Expressions } from \"./types.ts\";\nimport { columnContract, expressionState, expressionStates, invalid, makeExpression, unsupported } from \"./state.ts\";\nimport type { ExpressionState, RenderContext } from \"./state.ts\";\n\nconst nullableFloat: ResultDecoder<number | null> = decode.nullable({ decoder: decode.float });\nconst countDefinition: ColumnDefinition<bigint> = Object.freeze({ name: \"\", scalar: \"BigInt\", decoder: decode.bigInt });\nconst floatDefinition: ColumnDefinition<number | null> = Object.freeze({ name: \"\", scalar: \"Float\", nullable: true, decoder: nullableFloat });\nconst nullableDecoders = new WeakMap<object, ResultReadDecoder<unknown>>();\n\nexport function nullableDecoder<T>(decoder: ResultReadDecoder<T>): ResultReadDecoder<T | null> {\n let lifted = nullableDecoders.get(decoder);\n if (lifted === undefined) {\n lifted = Object.freeze({ decode: (params: Parameters<ResultReadDecoder<unknown>[\"decode\"]>[0]): unknown => params.value === null ? null : decoder.decode(params) });\n nullableDecoders.set(decoder, lifted);\n if (localDateValueDecoders.has(decoder)) localDateValueDecoders.add(lifted);\n }\n return lifted as ResultReadDecoder<T | null>;\n}\n\nexport function assertDecoder(decoder: ResultReadDecoder<unknown>): void {\n if (typeof decoder?.decode !== \"function\") invalid(\"SQL expressions require an explicit result decoder\");\n}\n\nfunction inputDecoder(definition: ColumnDefinition<unknown>): ResultParameterEncoder {\n const decoder = definition.inputDecoder ?? definition.decoder;\n if (!(\"encode\" in decoder) || typeof decoder.encode !== \"function\") invalid(\"A decode-only projection requires a separate inputDecoder for parameters and writes\");\n return decoder as ResultParameterEncoder;\n}\n\nfunction isLocalDateColumn({ definition }: { readonly definition: ColumnDefinition<unknown> | undefined }): boolean {\n return definition?.scalar === \"String\" && isLocalDateField({ field: { type: \"String\", nativeType: definition.nativeType } });\n}\n\n/** Keep physical native refinements in the central codec implementations. */\nexport function nativeColumnDefinition(definition: ColumnDefinition<unknown>): ColumnDefinition<unknown> {\n const localDate = isLocalDateColumn({ definition });\n if (localDate && definition.list === true) invalid(\"Local-date list columns are unsupported\");\n if (localDate && localDateDecoders.has(definition.decoder)) return definition;\n const contract = resultScalarContract({ decoder: definition.decoder });\n if (!localDate && (contract === undefined || contract.scalar !== definition.scalar)) return definition;\n const codec = localDate ? localDateCodec : definition.scalar === \"DateTime\" ? timeOfDayCodec({ nativeType: definition.nativeType })\n : definition.scalar === \"Float\" && /^(real|float4)$/i.test(definition.nativeType ?? \"\") ? float32Codec : undefined;\n if (codec === undefined) return definition;\n const original = definition.decoder;\n const list = definition.list === true;\n let decoders = nativeDecoders.get(original);\n if (decoders === undefined) { decoders = new Map(); nativeDecoders.set(original, decoders); }\n const key = localDate ? \"local-date\" : `${definition.nativeType}|${list}`;\n let decoder = decoders.get(key);\n if (decoder === undefined) {\n decoder = Object.freeze({\n decode: (params: Parameters<ResultReadDecoder<unknown>[\"decode\"]>[0]): unknown => {\n const raw = params.value;\n const convert = (value: unknown): unknown => value === null ? null : codec.decode(value);\n const elements = typeof raw === \"string\" && list && params.dialect === \"postgres\" ? parsePgArrayLiteral({ literal: raw })\n : ArrayBuffer.isView(raw) && \"length\" in raw ? Array.from(raw as unknown as ArrayLike<unknown>) : raw;\n const value = raw === null ? null : list && Array.isArray(elements) ? elements.map(convert) : convert(raw);\n return original.decode({ ...params, value });\n },\n ...(\"encode\" in original && typeof original.encode === \"function\" ? {\n encode: (params: Parameters<ResultParameterEncoder[\"encode\"]>[0]): unknown => {\n const encoded = (original as ResultDecoder<unknown>).encode(params);\n const convert = (value: unknown): unknown => value === null ? null : codec.encode(value);\n return list && Array.isArray(encoded) ? encoded.map(convert) : convert(encoded);\n },\n } : {}),\n });\n decoders.set(key, decoder);\n if (localDate) {\n localDateDecoders.add(decoder);\n if (contract?.scalar === \"String\" && !contract.list) localDateValueDecoders.add(decoder);\n }\n }\n return { ...definition, decoder };\n}\n\nconst nativeDecoders = new WeakMap<object, Map<string, ResultReadDecoder<unknown>>>();\nconst localDateDecoders = new WeakSet<object>();\n// Built-in date decoders and their transparent nullable lifts keep the same input domain.\nconst localDateValueDecoders = new WeakSet<object>();\n\nfunction hasLocalDateValueInput({ definition }: { readonly definition: ColumnDefinition<unknown> }): boolean {\n return isLocalDateColumn({ definition }) && localDateValueDecoders.has(definition.decoder) &&\n (definition.inputDecoder === undefined || localDateValueDecoders.has(definition.inputDecoder));\n}\n\n/** Transport conversion belongs only at the final result boundary. */\nexport function transportProjection(params: { context: RenderContext; expression: string; definition: ColumnDefinition<unknown> }): string {\n const { context, expression, definition } = params;\n if ((context.dialect.name !== \"sqlite\" && isLocalDateColumn({ definition })) || definition.transport === \"text\" || definition.scalar === \"Json\" || definition.scalar === \"BigInt\" || (definition.list === true && definition.scalar === \"Float\")) {\n return `CAST(${expression} AS ${context.dialect.name === \"mysql\" ? \"CHAR\" : \"TEXT\"})`;\n }\n return expression;\n}\n\n/** Write contracts carry encoding identity independently from projection output. */\nexport function columnInputContract(definition: ColumnDefinition<unknown>): SqlInputContract {\n const encoder = inputDecoder(definition);\n return {\n encoder, scalar: definition.scalar, nullable: definition.nullable === true, list: definition.list === true,\n nativeType: definition.nativeType, enumValues: definition.enumValues, enumType: definition.enumType, jsonStorage: definition.jsonStorage,\n ...(definition.inputDecoder !== undefined && definition.inputDecoder !== (definition.decoder as object) && !hasLocalDateValueInput({ definition }) ? { columnIdentity: encoder } : {}),\n };\n}\n\nfunction physicalInput(contract: SqlInputContract): string {\n return JSON.stringify({ scalar: contract.scalar, list: contract.list, nativeType: contract.nativeType, enumValues: contract.enumValues, enumType: contract.enumType === undefined ? undefined : [contract.enumType.namespace, contract.enumType.name], jsonStorage: contract.jsonStorage });\n}\n\nfunction parameterDefinition(params: { definition: ColumnDefinition<unknown>; param: SqlParam<unknown> }): ColumnDefinition<unknown> {\n const declared = sqlParamContract({ param: params.param });\n const target = columnInputContract(params.definition);\n if (declared.columnIdentity !== undefined || target.columnIdentity !== undefined) {\n if (declared.encoder !== target.encoder || physicalInput(declared) !== physicalInput(target)) invalid(\"SQL input token does not match this column's write encoder and physical contract\");\n return { ...params.definition, nullable: declared.nullable && target.nullable, inputDecoder: declared.encoder };\n }\n if (declared.scalar !== \"Unknown\" && (declared.scalar !== target.scalar || declared.list !== target.list)) invalid(\"SQL input token has an incompatible scalar or list contract\");\n if (declared.scalar === \"Unknown\" && (target.nativeType !== undefined || target.scalar === \"Enum\" || target.scalar === \"Json\")) invalid(\"Opaque SQL input decoders need qb.input for native, enum and JSON columns\");\n if (declared.nativeType !== undefined && physicalInput(declared) !== physicalInput(target)) invalid(\"SQL input token has an incompatible native column contract\");\n if (declared.scalar === \"Enum\" && physicalInput(declared) !== physicalInput(target)) invalid(\"SQL input token has an incompatible enum column contract\");\n if (\"decode\" in declared.encoder && typeof declared.encoder.decode === \"function\") {\n return nativeColumnDefinition({ ...params.definition, nullable: declared.nullable && target.nullable, decoder: declared.encoder as ResultDecoder<unknown>, inputDecoder: undefined });\n }\n if (declared.encoder !== target.encoder) invalid(\"A write-only SQL input token must match its column encoder\");\n return { ...params.definition, nullable: declared.nullable && target.nullable, inputDecoder: declared.encoder };\n}\n\nfunction columnTransport(definition: ColumnDefinition<unknown>): SqlParameterTransport {\n if (definition.list === true && definition.scalar === \"Enum\" && definition.enumType !== undefined) return { kind: \"native-enum-array\", type: definition.enumType };\n if (definition.list === true && definition.scalar === \"Json\") return { kind: \"json-list\", storage: definition.jsonStorage ?? \"jsonb\", whole: true };\n return { kind: \"plain\" };\n}\n\nfunction encodeColumnValue(params: { dialect: SqlDialect; definition: ColumnDefinition<unknown>; value: unknown }): unknown {\n const { dialect, definition } = params;\n if (params.value === null) {\n if (definition.nullable !== true) invalid(\"A non-null SQL column cannot receive SQL NULL\");\n return null;\n }\n const encoded = snapshotSqlValue(inputDecoder(definition).encode({ value: snapshotSqlValue(params.value), dialect: dialect.name }));\n if (encoded === null) {\n if (definition.nullable !== true) invalid(\"A non-null SQL column cannot receive SQL NULL from its encoder\");\n return null;\n }\n if (isLocalDateColumn({ definition })) return localDateCodec.encode(encoded);\n if (definition.scalar === \"BigInt\" && definition.list !== true && dialect.name === \"sqlite\") {\n const integer = decode.bigInt.decode({ value: encoded, dialect: \"sqlite\" });\n if (integer < -9223372036854775808n || integer > 9223372036854775807n) invalid(\"SQLite BigInt parameters must fit signed int64\");\n }\n if (definition.list === true && definition.scalar === \"Enum\" && definition.enumType !== undefined) {\n if (!Array.isArray(encoded)) invalid(\"Native enum list encoder must return an array\");\n return nativeEnumArrayParameter({ value: toPgArrayLiteral({ values: encoded }), type: definition.enumType });\n }\n if (definition.list === true && definition.scalar === \"Json\") {\n if (!Array.isArray(encoded) || encoded.some((entry) => typeof entry !== \"string\")) invalid(\"JSON list encoder must return encoded JSON text elements\");\n return jsonListParameter({ value: encoded as string[], storage: definition.jsonStorage ?? \"jsonb\" });\n }\n return encoded;\n}\n\nexport function bindColumnValue(params: { context: RenderContext; definition: ColumnDefinition<unknown>; value: unknown; encoder?: ResultDecoder<unknown>; rejectNull?: boolean }): string {\n const { context, definition } = params;\n if (definition.list === true && !context.dialect.capabilities.scalarArrays) unsupported(\"Scalar array parameters require a dialect with native scalar arrays\");\n const token = isSqlParam(params.value) ? params.value : undefined;\n const input = token !== undefined ? parameterDefinition({ definition, param: token })\n : params.encoder === undefined ? definition : nativeColumnDefinition({ ...definition, decoder: params.encoder, inputDecoder: undefined });\n let placeholder: string;\n if (isSqlBindingCollector({ collector: context.collector })) {\n placeholder = recordSqlBinding({\n collector: context.collector,\n source: token === undefined ? { kind: \"literal\", value: params.value } : { kind: \"input\", param: token },\n contract: columnInputContract(input), transport: columnTransport(definition), rejectNull: params.rejectNull,\n encode: ({ value, dialect }) => encodeColumnValue({ value, dialect, definition: input }),\n });\n } else {\n if (token !== undefined) invalid(\"SQL input tokens require execution through their reusable template\");\n const encoded = encodeColumnValue({ dialect: context.dialect, definition: input, value: params.value });\n placeholder = context.collector.add(encoded);\n if (encoded === null) return placeholder;\n }\n if (definition.scalar === \"BigInt\" && definition.list !== true && context.dialect.name === \"sqlite\") return `CAST(${placeholder} AS INTEGER)`;\n if (definition.scalar === \"Json\" && definition.list !== true) return placeholder + (definition.jsonStorage === \"json\" && context.dialect.name === \"postgres\" ? \"::text::json\" : context.dialect.jsonParamCast);\n return placeholder;\n}\n\nfunction predicateDefinition(expression: Expression<unknown>): ColumnDefinition<unknown> {\n const state = expressionState(expression);\n if (state.definition?.inputDecoder !== undefined && (!(\"encode\" in state.definition.decoder) || typeof state.definition.decoder.encode !== \"function\") && !hasLocalDateValueInput({ definition: state.definition })) unsupported(\"Input tokens cannot infer predicates over read-transformed columns\");\n if (state.definition !== undefined) return state.definition;\n if (!(\"encode\" in state.decoder) || typeof state.decoder.encode !== \"function\") invalid(\"A decode-only expression cannot infer a parameter encoder\");\n const physical = resultScalarContract({ decoder: state.decoder });\n return { name: \"\", scalar: physical?.scalar ?? \"Unknown\", nullable: physical?.nullable ?? true, list: physical?.list ?? false, decoder: state.decoder };\n}\n\nfunction bindPredicateParam(params: { context: RenderContext; expression: Expression<unknown>; param: SqlParam<unknown> }): string {\n return bindColumnValue({ context: params.context, definition: predicateDefinition(params.expression), value: params.param, rejectNull: true });\n}\n\nfunction childrenState(params: { children: readonly Expression<unknown>[]; decoder: ResultReadDecoder<unknown>; render: (context: RenderContext) => string; contract?: object | string; aggregate?: boolean }): ExpressionState {\n const states = params.children.map(expressionState);\n if (states.some((state) => state.default === true)) invalid(\"SQL DEFAULT cannot be used in expressions\");\n return {\n decoder: params.decoder,\n render: params.render,\n contract: params.contract ?? params.decoder,\n references: new Set(states.flatMap((state) => [...state.references])),\n ungrouped: new Set(states.flatMap((state) => [...state.ungrouped])),\n aggregate: params.aggregate === true || states.some((state) => state.aggregate),\n };\n}\n\n/** Construct a typed value for the public qb.value contract. */\nexport function literal<T>(params: { value: T; decoder: ResultDecoder<T> }): Expression<T> {\n assertDecoder(params.decoder);\n if (typeof params.decoder.encode !== \"function\") invalid(\"SQL values require a bidirectional decoder\");\n const decoder = params.decoder;\n const physical = resultScalarContract({ decoder });\n if (physical === undefined) invalid(\"qb.value requires a built-in scalar decoder with a physical SQL type; use qb.raw with explicit SQL for custom decoders\");\n const value = snapshotSqlValue(params.value);\n const definition: ColumnDefinition<unknown> = Object.freeze({ ...physical, name: \"\", decoder, inputDecoder: decoder });\n const readDecoder: ResultReadDecoder<unknown> = physical.scalar === \"Json\" ? Object.freeze({ decode: (result: Parameters<ResultReadDecoder<unknown>[\"decode\"]>[0]): unknown => decoder.decode({ ...result, wire: { ...result.wire, json: \"text\" } }) }) : decoder;\n const render = (context: RenderContext): string => {\n const operand = bindColumnValue({ context, definition, value });\n if (physical.scalar === \"Json\" && context.dialect.name === \"postgres\") return operand;\n const type = context.dialect.valueCastTypes[physical.scalar];\n return `CAST(${operand} AS ${type}${physical.list ? \"[]\" : \"\"})`;\n };\n return makeExpression<T>({\n decoder: readDecoder, contract: decoder, references: new Set(), ungrouped: new Set(), aggregate: false,\n parameter: Object.freeze({ value, decoder }), definition, render,\n projection: (context) => transportProjection({ context, expression: render(context), definition }),\n });\n}\n\nfunction comparedLiteral(params: { expression: Expression<unknown>; value: unknown }): Expression<unknown> {\n const state = expressionState(params.expression);\n const definition = state.definition;\n if (definition?.inputDecoder !== undefined && (!(\"encode\" in definition.decoder) || typeof definition.decoder.encode !== \"function\") && !hasLocalDateValueInput({ definition })) {\n unsupported(\"Implicit literal predicates are unavailable for read-transformed columns; use an explicit trusted SQL input contract\");\n }\n const value = snapshotSqlValue(params.value);\n return makeExpression({\n decoder: state.decoder, contract: state.contract, references: new Set(), ungrouped: new Set(), aggregate: false,\n render: (context) => {\n if (state.definition !== undefined) return bindColumnValue({ context, definition: state.definition, value });\n if (!(\"encode\" in state.decoder) || typeof state.decoder.encode !== \"function\") invalid(\"A decode-only expression cannot infer a parameter encoder; use qb.value with an explicit write decoder\");\n if (isSqlBindingCollector({ collector: context.collector })) return recordSqlBinding({ collector: context.collector, source: { kind: \"literal\", value }, transport: { kind: \"plain\" }, encode: (input) => (state.decoder as ResultDecoder<unknown>).encode({ value: input.value, dialect: input.dialect.name }) });\n return context.collector.add(snapshotSqlValue((state.decoder as ResultDecoder<unknown>).encode({ value: snapshotSqlValue(value), dialect: context.dialect.name })));\n },\n });\n}\n\nfunction comparison(params: { left: Expression<unknown>; right: unknown; operator: string }): Expression<boolean | null> {\n const initialLeft = expressionState(params.left);\n if (isSqlParam(params.right)) {\n const param = params.right;\n assertSqlParamBuilding({ param });\n predicateDefinition(params.left);\n return makeExpression(childrenState({ children: [params.left], decoder: nullableDecoder(decode.boolean), render: (context) => {\n if (context.dialect.name === \"sqlite\" && initialLeft.definition?.scalar === \"Decimal\") unsupported(\"SQLite Decimal comparisons are not exact; use an explicit raw numeric contract\");\n return `(${initialLeft.render(context)} ${params.operator} ${bindPredicateParam({ context, expression: params.left, param })})`;\n } }));\n }\n if (params.right === null) invalid(\"Use isNull for SQL NULL predicates\");\n const right = typeof params.right === \"object\" && params.right !== null && expressionStates.has(params.right) ? params.right as Expression<unknown> : comparedLiteral({ expression: params.left, value: params.right });\n const leftState = expressionState(params.left);\n const rightState = expressionState(right);\n if (leftState.parameter === undefined && rightState.parameter === undefined && leftState.definition !== undefined && rightState.definition !== undefined &&\n isLocalDateColumn({ definition: leftState.definition }) !== isLocalDateColumn({ definition: rightState.definition })) {\n invalid(\"Local-date comparisons require matching local-date columns, not plain text or another scalar\");\n }\n const unsafeDecimal = (state: ExpressionState): boolean => state.definition?.scalar === \"Decimal\";\n return makeExpression(childrenState({\n children: [params.left, right], decoder: nullableDecoder(decode.boolean),\n render: (context) => {\n if (context.dialect.name === \"sqlite\" && (unsafeDecimal(leftState) || unsafeDecimal(rightState))) unsupported(\"SQLite Decimal comparisons are not exact; use an explicit raw numeric contract\");\n const left = leftState.parameter !== undefined && isLocalDateColumn({ definition: rightState.definition })\n ? bindColumnValue({ context, definition: rightState.definition!, encoder: leftState.parameter.decoder, value: leftState.parameter.value }) : leftState.render(context);\n const operand = leftState.parameter === undefined && leftState.definition !== undefined && rightState.parameter !== undefined ? bindColumnValue({ context, definition: leftState.definition, encoder: rightState.parameter.decoder, value: rightState.parameter.value }) : rightState.render(context);\n return `(${left} ${params.operator} ${operand})`;\n },\n }));\n}\n\nfunction logic(params: { predicates: readonly Expression<boolean | null>[]; operator: \"AND\" | \"OR\" }): Expression<boolean | null> {\n const predicates = [...params.predicates];\n return makeExpression(childrenState({\n children: predicates, decoder: nullableDecoder(decode.boolean),\n render: (context) => predicates.length === 0 ? (params.operator === \"AND\" ? \"(1 = 1)\" : \"(1 = 0)\") : `(${predicates.map((predicate) => expressionState(predicate).render(context)).join(` ${params.operator} `)})`,\n }));\n}\n\nfunction aggregate<T>(params: { expression: Expression<T>; fn: \"MIN\" | \"MAX\" }): Expression<T | null> {\n const state = expressionState(params.expression);\n const definition = state.definition;\n if (state.aggregate) invalid(\"Nested aggregate expressions are unsupported\");\n if (definition === undefined || definition.list === true || ![\"String\", \"Int\", \"BigInt\", \"Float\", \"DateTime\"].includes(definition.scalar)) unsupported(\"MIN/MAX require a qualified ordered scalar column; use an explicit raw decoder otherwise\");\n if (definition.scalar === \"String\" && !isLocalDateColumn({ definition }) && definition.nativeType !== undefined && !/^(text|varchar|char|bpchar|tinytext|mediumtext|longtext)(?:\\s*\\(.*\\))?$/i.test(definition.nativeType)) unsupported(\"MIN/MAX do not support this native String type; UUID and other non-text types need explicit SQL\");\n return makeExpression<T | null>({\n ...state, parameter: undefined, column: undefined, definition: { ...definition, nullable: true }, decoder: nullableDecoder(state.decoder), contract: columnContract({ ...definition, nullable: true }),\n ungrouped: new Set(), aggregate: true,\n render: (context) => `${params.fn}(${state.render(context)})`,\n projection: definition.scalar === \"BigInt\" || isLocalDateColumn({ definition }) ? (context) => transportProjection({ context, expression: `${params.fn}(${state.render(context)})`, definition }) : undefined,\n });\n}\n\nfunction floatAggregate(params: { expression: Expression<number | null>; fn: \"SUM\" | \"AVG\" }): Expression<number | null> {\n const state = expressionState(params.expression);\n const definition = state.definition;\n if (state.aggregate) invalid(\"Nested aggregate expressions are unsupported\");\n if (definition?.scalar !== \"Float\" || definition.list === true || (definition.nativeType !== undefined && ![\"doubleprecision\", \"double\", \"float8\"].includes(definition.nativeType.toLowerCase()))) unsupported(\"SUM/AVG support only qualified double-precision Float columns; Int, BigInt, Decimal and real/float4 require an explicit raw result contract\");\n return makeExpression({\n ...state, parameter: undefined, column: undefined, definition: floatDefinition, projection: undefined, decoder: nullableDecoder(decode.float), contract: columnContract(floatDefinition),\n ungrouped: new Set(), aggregate: true,\n render: (context) => `${params.fn}(${state.render(context)})`,\n });\n}\n\n/** Construct an explicit fragment projection for the public qb.raw contract. */\nexport function rawExpression<T>(params: { sql: SqlFragment; decoder: ResultReadDecoder<T>; references?: readonly Expression<unknown>[] }): Expression<T> {\n if (!isSqlFragment(params.sql)) invalid(\"Raw expressions require an authentic core SQL fragment\");\n assertDecoder(params.decoder);\n const fragment = params.sql;\n return makeExpression<T>(childrenState({ children: [...(params.references ?? [])], decoder: params.decoder, render: (context) => renderSqlFragment({ ...context, fragment }) }));\n}\n\nfunction nullTest(params: { expression: Expression<unknown>; not: boolean }): Expression<boolean | null> {\n const { expression, not } = params;\n return makeExpression<boolean>(childrenState({ children: [expression], decoder: decode.boolean, render: (context) => `(${expressionState(expression).render(context)} IS ${not ? \"NOT \" : \"\"}NULL)` }));\n}\n\nfunction membership(params: { expression: Expression<unknown>; values: readonly unknown[]; not: boolean }): Expression<boolean | null> {\n // Untyped callers may still pass the removed object form or an iterable string; refuse before spreading.\n if (!Array.isArray(params.values)) invalid(\"inList/notInList require an expression and a literal value array\");\n const { not } = params;\n const values = [...params.values].map((value) => {\n if (!isSqlParam(value)) return comparedLiteral({ expression: params.expression, value });\n assertSqlParamBuilding({ param: value });\n predicateDefinition(params.expression);\n return value;\n });\n const renderValue = (value: Expression<unknown> | SqlParam<unknown>, context: RenderContext): string => isSqlParam(value) ? bindPredicateParam({ context, expression: params.expression, param: value }) : expressionState(value).render(context);\n const state = expressionState(params.expression);\n return makeExpression(childrenState({\n children: [params.expression, ...values.filter((value): value is Expression<unknown> => !isSqlParam(value))], decoder: nullableDecoder(decode.boolean),\n render: (context) => {\n if (state.definition?.scalar === \"Decimal\" && context.dialect.name === \"sqlite\") unsupported(\"SQLite Decimal membership is not exact\");\n if (values.length === 0) return not ? \"(1 = 1)\" : \"(1 = 0)\";\n if (state.definition?.scalar === \"DateTime\" && timeOfDayCodec({ nativeType: state.definition.nativeType }) !== undefined && context.dialect.timeOfDayInStrategy === \"equalities\") {\n const equalities = values.map((value) => `(${state.render(context)} = ${renderValue(value, context)})`).join(\" OR \");\n return not ? `(NOT (${equalities}))` : `(${equalities})`;\n }\n return `(${state.render(context)} ${not ? \"NOT \" : \"\"}IN (${values.map((value) => renderValue(value, context)).join(\", \")}))`;\n },\n }));\n}\n\n/** Compare typed operands for equality, preserving SQL NULL propagation. */\nexport const eq: Expressions[\"eq\"] = (left, right) => comparison({ left, right, operator: \"=\" });\n/** Compare typed operands for inequality. */\nexport const ne: Expressions[\"ne\"] = (left, right) => comparison({ left, right, operator: \"<>\" });\n/** Compare typed operands using greater-than. */\nexport const gt: Expressions[\"gt\"] = (left, right) => comparison({ left, right, operator: \">\" });\n/** Compare typed operands using greater-than-or-equal. */\nexport const gte: Expressions[\"gte\"] = (left, right) => comparison({ left, right, operator: \">=\" });\n/** Compare typed operands using less-than. */\nexport const lt: Expressions[\"lt\"] = (left, right) => comparison({ left, right, operator: \"<\" });\n/** Compare typed operands using less-than-or-equal. */\nexport const lte: Expressions[\"lte\"] = (left, right) => comparison({ left, right, operator: \"<=\" });\n/** Test SQL NULL without comparing a bound null value. */\nexport const isNull: Expressions[\"isNull\"] = (expression) => nullTest({ expression, not: false });\n/** Test SQL non-nullness without comparing a bound null value. */\nexport const isNotNull: Expressions[\"isNotNull\"] = (expression) => nullTest({ expression, not: true });\n/** Combine predicates with SQL AND; an empty conjunction is true. */\nexport const and: Expressions[\"and\"] = (...predicates) => logic({ predicates, operator: \"AND\" });\n/** Combine predicates with SQL OR; an empty disjunction is false. */\nexport const or: Expressions[\"or\"] = (...predicates) => logic({ predicates, operator: \"OR\" });\n/** Negate a predicate with SQL's three-valued boolean semantics. */\nexport const not: Expressions[\"not\"] = (predicate) => makeExpression<boolean | null>(childrenState({ children: [predicate], decoder: nullableDecoder(decode.boolean), render: (context) => `(NOT ${expressionState(predicate).render(context)})` }));\n/** Match a literal list; an empty list is false. */\nexport const inList: Expressions[\"inList\"] = (expression, values) => membership({ expression, values, not: false });\n/** Exclude a literal list; an empty list is true. */\nexport const notInList: Expressions[\"notInList\"] = (expression, values) => membership({ expression, values, not: true });\n/** Count rows or non-null expression values with exact bigint transport. */\nexport const count: Expressions[\"count\"] = (expression, options) => {\n const distinct = options?.distinct === true;\n if (distinct && expression === undefined) invalid(\"COUNT DISTINCT requires an expression\");\n const operand = expression === undefined ? undefined : expressionState(expression);\n if (operand?.default === true) invalid(\"COUNT cannot consume SQL DEFAULT\");\n if (operand?.aggregate === true) invalid(\"Nested aggregate expressions are unsupported\");\n return makeExpression<bigint>({\n decoder: decode.bigInt, contract: columnContract(countDefinition), references: operand?.references ?? new Set(), ungrouped: new Set(), aggregate: true,\n definition: countDefinition,\n render: (context) => `COUNT(${distinct ? \"DISTINCT \" : \"\"}${operand === undefined ? \"*\" : operand.render(context)})`,\n projection: (context) => {\n const count = `COUNT(${distinct ? \"DISTINCT \" : \"\"}${operand === undefined ? \"*\" : operand.render(context)})`;\n // SQLite drivers may read int64 as an unsafe Number: transport text BEFORE decode.\n return `CAST(${count} AS ${context.dialect.name === \"mysql\" ? \"CHAR\" : \"TEXT\"})`;\n },\n });\n};\n/** Minimum of a qualified ordered scalar, nullable for empty input. */\nexport const min: Expressions[\"min\"] = (expression) => aggregate({ expression, fn: \"MIN\" });\n/** Maximum of a qualified ordered scalar, nullable for empty input. */\nexport const max: Expressions[\"max\"] = (expression) => aggregate({ expression, fn: \"MAX\" });\n/** Sum of a qualified double-precision Float, nullable for empty input. */\nexport const sum: Expressions[\"sum\"] = (expression) => floatAggregate({ expression, fn: \"SUM\" });\n/** Average of a qualified double-precision Float, nullable for empty input. */\nexport const avg: Expressions[\"avg\"] = (expression) => floatAggregate({ expression, fn: \"AVG\" });\n",
|
|
9
|
-
"import { assertSqlNamespace } from \"@vibeorm/schema\";\nimport { assertSqlParamBuilding, createSqlCommand, createSqlQuery, decode, isSqlParam, snapshotSqlValue } from \"@vibeorm/sql\";\nimport type { SqlCommand, SqlQuery } from \"@vibeorm/sql\";\nimport type { Columns, Expression, MutationBuilder, Projection, ProjectionRow, Source, Table, WriteValues } from \"./types.ts\";\nimport { bindColumnValue } from \"./expressions.ts\";\nimport { bindingColumns, makeBinding, projectionDecoder, projectionEntries, renderEntries } from \"./sources.ts\";\nimport { assertWritableColumn, builderTerminals, checkScope, expressionState, expressionStates, invalid, makeExpression, sourceState, unsupported } from \"./state.ts\";\nimport type { Binding, RenderContext } from \"./state.ts\";\n\ntype Cell = { readonly name: string; readonly value: unknown; readonly expression?: Expression<unknown> };\ntype WriteState = {\n readonly binding: Binding;\n readonly kind: \"insert\" | \"update\" | \"delete\";\n readonly rows?: readonly (readonly Cell[])[];\n readonly set?: readonly Cell[];\n readonly where: readonly Expression<boolean | null>[];\n};\n\n
|
|
10
|
-
"import { createReusableSqlCommand, createReusableSqlQuery, createSqlInput, createSqlInputScope, isSqlCommand, isSqlQuery, sealSqlInputScope } from \"@vibeorm/sql\";\nimport type { ReusableSqlCommand, ReusableSqlQuery, SqlCommand, SqlInput, SqlInputMap, SqlInputTokens, SqlInputValues, SqlQuery } from \"@vibeorm/sql\";\nimport { columnInputContract } from \"./expressions.ts\";\nimport { assertWritableColumn, builderTerminals, expressionStates, invalid, sourceState, sourceStates } from \"./state.ts\";\nimport type { Expression, Table } from \"./types.ts\";\n\nconst columnInputs = new WeakMap<object, SqlInput<unknown>>();\n\n
|
|
5
|
+
"import { assertSqlParamBuilding, createSqlQuery, isSqlParam, recordSqlBinding, sameResultDecoder, sqlParamContract } from \"@vibeorm/sql\";\nimport type { SqlParam, SqlQuery } from \"@vibeorm/sql\";\nimport type { Expression, Order, Projection, ProjectionRow, Scope, NullableRow, SelectBuilder, Source } from \"./types.ts\";\nimport { builderTerminals, checkScope, expressionState, identifier, invalid, makeExpression, readState, readStates, sourceState, unsupported } from \"./state.ts\";\nimport type { Binding, ProjectionEntry, ReadState, RenderContext } from \"./state.ts\";\nimport { groupKeys, makeBinding, projectionDecoder, projectionEntries, renderEntries, renderSource, scope } from \"./sources.ts\";\nimport { transportProjection } from \"./expressions.ts\";\n\ntype Join = { readonly binding: Binding; readonly kind: \"INNER\" | \"LEFT\" | \"CROSS\"; readonly on?: Expression<boolean | null> };\ntype SelectState = {\n readonly bindings: readonly Binding[];\n readonly joins: readonly Join[];\n readonly where: readonly Expression<boolean | null>[];\n readonly group?: readonly Expression<unknown>[];\n readonly having: readonly Expression<boolean | null>[];\n readonly order: readonly Order[];\n readonly limit?: number | SqlParam<number>;\n readonly offset?: number | SqlParam<number>;\n};\n\nfunction count(value: number): number {\n if (!Number.isSafeInteger(value) || value < 0) invalid(\"SQL LIMIT/OFFSET must be non-negative safe integers\");\n return value;\n}\n\nfunction pageValue(value: number | SqlParam<number>): number | SqlParam<number> {\n if (isSqlParam(value)) { assertSqlParamBuilding({ param: value }); return value; }\n return count(value);\n}\n\nfunction renderPage(params: { value: number | SqlParam<number>; context: RenderContext }): string {\n if (!isSqlParam(params.value)) return String(params.value);\n const contract = sqlParamContract({ param: params.value });\n if (contract.scalar !== \"Int\" || contract.list || contract.nullable || contract.nativeType !== undefined) invalid(\"SQL pagination inputs require a non-null Int contract\");\n return recordSqlBinding({ collector: params.context.collector, source: { kind: \"input\", param: params.value }, contract, transport: { kind: \"plain\" }, rejectNull: true,\n validate: (value: unknown): void => { if (typeof value !== \"number\") invalid(\"SQL LIMIT/OFFSET must be non-negative safe integers\"); count(value); },\n encode: ({ value, dialect }) => contract.encoder.encode({ value, dialect: dialect.name }),\n });\n}\n\nfunction predicate(expression: Expression<boolean | null>, bindings: readonly Binding[], aggregates: boolean): Expression<boolean | null> {\n checkScope({ expression, bindings, aggregates });\n return expression;\n}\n\nfunction collectCtes(bindings: readonly Binding[]): readonly Source<unknown>[] {\n const ctes: Source<unknown>[] = [];\n for (const binding of bindings) {\n const state = sourceState(binding.source);\n if (state.query !== undefined) ctes.push(...state.query.ctes);\n if (state.cte !== undefined) ctes.push(binding.source);\n }\n const unique = [...new Set(ctes)];\n const names = unique.map((source) => sourceState(source).cte!);\n if (new Set(names).size !== names.length) invalid(\"Read CTE names must be unique across composed queries\");\n for (const binding of bindings) {\n const source = sourceState(binding.source);\n if (source.name !== undefined && source.namespace === undefined && names.includes(source.name)) invalid(\"A read CTE cannot shadow a physical source table\");\n }\n return Object.freeze(unique);\n}\n\nfunction withCtes(params: { state: ReadState; context: RenderContext }): string {\n const { state, context } = params;\n if (state.ctes.length === 0) return state.render(context);\n const definitions = state.ctes.map((source) => {\n const cte = sourceState(source);\n return `${context.dialect.quoteIdent({ name: cte.cte! })} AS (${cte.query!.render({ ...context, transport: false })})`;\n });\n return `WITH ${definitions.join(\", \")} ${state.render(context)}`;\n}\n\nfunction finish<P extends Projection>(state: ReadState): SqlQuery<ProjectionRow<P>> {\n const query = createSqlQuery({ decoder: projectionDecoder<P>(state.entries), render: (context: RenderContext) => withCtes({ state, context }) });\n readStates.set(query, Object.freeze(state));\n builderTerminals.add(query);\n return query;\n}\n\nfunction renderOrder(params: { terms: readonly Order[]; context: RenderContext }): string {\n const { context } = params;\n const terms = params.terms.flatMap((term) => {\n const state = expressionState(term.expression);\n if (state.definition?.scalar === \"Decimal\" && context.dialect.name === \"sqlite\") unsupported(\"SQLite Decimal ordering is not exact; use an explicit raw numeric contract\");\n const expression = (): string => state.render(context);\n const direction = term.direction === \"desc\" ? \"DESC\" : \"ASC\";\n if (term.nulls === undefined) return [`${expression()} ${direction}`];\n if (context.dialect.orderByNullsMode === \"native\") return [`${expression()} ${direction} NULLS ${term.nulls.toUpperCase()}`];\n return [`(${expression()} IS NULL) ${term.nulls === \"first\" ? \"DESC\" : \"ASC\"}`, `${expression()} ${direction}`];\n });\n return terms.length === 0 ? \"\" : ` ORDER BY ${terms.join(\", \")}`;\n}\n\nfunction select<P extends Projection>(params: { state: SelectState; projection: P; distinct?: boolean }): SqlQuery<ProjectionRow<P>> {\n const { state } = params;\n const entries = projectionEntries({ projection: params.projection, bindings: state.bindings });\n const groupedExpressions = [...entries.map((entry) => entry.expression), ...state.having, ...state.order.map((term) => term.expression)];\n const aggregate = groupedExpressions.some((expression) => expressionState(expression).aggregate);\n if (state.having.length > 0 && state.group === undefined && !aggregate) invalid(\"HAVING requires a grouped or aggregate query\");\n if (state.group !== undefined || aggregate) {\n const keys = groupKeys(state.group ?? []);\n for (const expression of groupedExpressions) {\n if (state.group?.includes(expression)) continue;\n for (const key of expressionState(expression).ungrouped) if (!keys.has(key)) invalid(\"Every non-aggregate projection, HAVING and ORDER expression must be grouped\");\n }\n }\n const ctes = collectCtes(state.bindings);\n const physicalNames = Object.freeze([...new Set(state.bindings.flatMap((binding) => {\n const source = sourceState(binding.source);\n return source.query?.physicalNames ?? (source.name !== undefined && source.namespace === undefined ? [source.name] : []);\n }))]);\n if (ctes.some((source) => physicalNames.includes(sourceState(source).cte!))) invalid(\"A read CTE cannot shadow a physical source table\");\n const distinct = params.distinct === true;\n const distinctEntries = distinct ? entries.map(({ alias, expression }) => {\n const original = expressionState(expression);\n const render = (context: RenderContext): string => `${context.dialect.quoteIdent({ name: \"__vibe_distinct\" })}.${context.dialect.quoteIdent({ name: alias })}`;\n return { alias, expression: makeExpression({ ...original, render, projection: original.definition === undefined ? undefined : (context) => transportProjection({ context, expression: render(context), definition: original.definition! }) }) };\n }) : entries;\n const distinctOrder = distinct ? state.order.map((term) => {\n const ordered = expressionState(term.expression);\n const index = entries.findIndex((entry) => entry.expression === term.expression || (ordered.column !== undefined && expressionState(entry.expression).column === ordered.column));\n if (index < 0) invalid(\"DISTINCT ordering must use a selected column or the same selected expression\");\n return { ...term, expression: distinctEntries[index]!.expression };\n }) : state.order;\n return finish<P>({ entries, ctes, physicalNames, render: (context) => {\n const columns = renderEntries({ entries, context: distinct ? { ...context, transport: false } : context });\n const from = renderSource({ context, binding: state.bindings[0]! });\n const joins = state.joins.map((join) => ` ${join.kind} JOIN ${renderSource({ context, binding: join.binding })}${join.on === undefined ? \"\" : ` ON ${expressionState(join.on).render(context)}`}`).join(\"\");\n const where = state.where.length === 0 ? \"\" : ` WHERE ${state.where.map((expression) => expressionState(expression).render(context)).join(\" AND \")}`;\n const group = state.group === undefined || state.group.length === 0 ? \"\" : ` GROUP BY ${state.group.map((expression) => expressionState(expression).render(context)).join(\", \")}`;\n const having = state.having.length === 0 ? \"\" : ` HAVING ${state.having.map((expression) => expressionState(expression).render(context)).join(\" AND \")}`;\n const order = renderOrder({ terms: distinctOrder, context });\n const limit = state.limit === undefined ? (state.offset === undefined || context.dialect.offsetRequiresLimit === null ? \"\" : ` LIMIT ${context.dialect.offsetRequiresLimit.limitText}`) : ` LIMIT ${renderPage({ value: state.limit, context })}`;\n const offset = state.offset === undefined ? \"\" : ` OFFSET ${renderPage({ value: state.offset, context })}`;\n const native = `SELECT ${distinct ? \"DISTINCT \" : \"\"}${columns} FROM ${from}${joins}${where}${group}${having}`;\n const query = distinct ? `SELECT ${renderEntries({ entries: distinctEntries, context })} FROM (${native}) AS ${context.dialect.quoteIdent({ name: \"__vibe_distinct\" })}` : native;\n return `${query}${order}${limit}${offset}`;\n } });\n}\n\nfunction builder<S>(state: SelectState): SelectBuilder<S> {\n const addJoin = <Row, A extends string>(params: { source: Source<Row>; as: A; on?: (scope: Scope<S & Record<A, Row>>) => Expression<boolean | null>; kind: \"INNER\" | \"LEFT\" | \"CROSS\" }): SelectBuilder<S & Record<A, Row>> => {\n if (state.bindings.some((binding) => binding.alias === params.as)) invalid(\"SQL source aliases must be unique within a SELECT\");\n const joined = makeBinding({ source: params.source, alias: params.as });\n const onBindings = [...state.bindings, joined];\n const on = params.kind === \"CROSS\" ? undefined : predicate(params.on!(scope<S & Record<A, Row>>(onBindings)), onBindings, false);\n const output = params.kind === \"LEFT\" ? Object.freeze({ ...joined, nullable: true }) : joined;\n return builder<S & Record<A, Row>>({ ...state, bindings: Object.freeze([...state.bindings, output]), joins: Object.freeze([...state.joins, Object.freeze({ binding: output, kind: params.kind, on })]) });\n };\n return Object.freeze({\n innerJoin: (params) => addJoin({ ...params, kind: \"INNER\" }),\n leftJoin: <Row, A extends string>(params: { source: Source<Row>; as: A; on: (scope: Scope<S & Record<A, Row>>) => Expression<boolean | null> }): SelectBuilder<S & Record<A, NullableRow<Row>>> => addJoin({ ...params, kind: \"LEFT\" }) as SelectBuilder<S & Record<A, NullableRow<Row>>>,\n crossJoin: (params) => addJoin({ ...params, kind: \"CROSS\" }),\n where: (callback) => {\n if (typeof callback !== \"function\") invalid(\"SQL WHERE requires a callback\");\n return builder<S>({ ...state, where: Object.freeze([...state.where, predicate(callback(scope<S>(state.bindings)), state.bindings, false)]) });\n },\n groupBy: (callback) => {\n if (typeof callback !== \"function\") invalid(\"SQL GROUP BY requires a callback\");\n const expressions = [...callback(scope<S>(state.bindings))];\n for (const expression of expressions) checkScope({ expression, bindings: state.bindings, aggregates: false });\n return builder<S>({ ...state, group: Object.freeze(expressions) });\n },\n having: (callback) => {\n if (typeof callback !== \"function\") invalid(\"SQL HAVING requires a callback\");\n return builder<S>({ ...state, having: Object.freeze([...state.having, predicate(callback(scope<S>(state.bindings)), state.bindings, true)]) });\n },\n orderBy: (callback) => {\n if (typeof callback !== \"function\") invalid(\"SQL ORDER BY requires a callback\");\n const terms = callback(scope<S>(state.bindings)).map((term) => {\n checkScope({ expression: term.expression, bindings: state.bindings });\n if (term.direction !== undefined && term.direction !== \"asc\" && term.direction !== \"desc\") invalid(\"SQL order direction must be asc or desc\");\n if (term.nulls !== undefined && term.nulls !== \"first\" && term.nulls !== \"last\") invalid(\"SQL null ordering must be first or last\");\n return Object.freeze({ ...term });\n });\n return builder<S>({ ...state, order: Object.freeze([...state.order, ...terms]) });\n },\n limit: (value) => builder<S>({ ...state, limit: pageValue(value) }),\n offset: (value) => builder<S>({ ...state, offset: pageValue(value) }),\n select: (callback, options) => {\n if (typeof callback !== \"function\") invalid(\"SQL SELECT requires a callback\");\n return select({ state, projection: callback(scope<S>(state.bindings)), distinct: options?.distinct });\n },\n } satisfies SelectBuilder<S>);\n}\n\n/** @internal */\nexport function from<Row, A extends string>(params: { source: Source<Row>; as: A }): SelectBuilder<Record<A, Row>> {\n const binding = makeBinding({ source: params.source, alias: params.as });\n return builder<Record<A, Row>>({ bindings: Object.freeze([binding]), joins: Object.freeze([]), where: Object.freeze([]), having: Object.freeze([]), order: Object.freeze([]) });\n}\n\n/** @internal */\nexport function union<Row>(params: { queries: readonly SqlQuery<Row>[]; all?: boolean }): SqlQuery<Row> {\n if (!Array.isArray(params.queries) || params.queries.length < 2) invalid(\"UNION requires at least two builder read queries\");\n const all = params.all === true;\n const branches = params.queries.map(readState);\n const first = branches[0]!;\n for (const branch of branches.slice(1)) {\n if (branch.entries.length !== first.entries.length) invalid(\"UNION branches must expose the same aliases and result contracts\");\n for (const expected of first.entries) {\n const other = branch.entries.find((entry) => entry.alias === expected.alias);\n if (other === undefined) invalid(\"UNION branches must expose the same aliases\");\n const left = expressionState(expected.expression);\n const right = expressionState(other.expression);\n const leftDecoder = left.definition?.decoder ?? left.decoder;\n const rightDecoder = right.definition?.decoder ?? right.decoder;\n if (left.contract !== right.contract || !sameResultDecoder({ left: leftDecoder, right: rightDecoder })) invalid(\"UNION output decoders, physical types and nullability must match by alias\");\n }\n }\n const ctes = [...new Set(branches.flatMap((branch) => [...branch.ctes]))];\n const names = ctes.map((source) => sourceState(source).cte!);\n if (new Set(names).size !== names.length) invalid(\"UNION read CTE names must be unique\");\n if (names.some((name) => branches.some((branch) => branch.physicalNames.includes(name)))) invalid(\"A UNION read CTE cannot shadow a physical source table\");\n const entries: readonly ProjectionEntry[] = first.entries.map(({ alias, expression }) => {\n identifier(alias);\n const original = expressionState(expression);\n return { alias, expression: makeExpression({ ...original, references: new Set(), ungrouped: new Set(), aggregate: false, column: undefined, render: (context) => `${context.dialect.quoteIdent({ name: \"__vibe_union\" })}.${context.dialect.quoteIdent({ name: alias })}`, projection: original.definition === undefined ? undefined : (context) => transportProjection({ context, expression: `${context.dialect.quoteIdent({ name: \"__vibe_union\" })}.${context.dialect.quoteIdent({ name: alias })}`, definition: original.definition! }) }) };\n });\n const state: ReadState = {\n entries, ctes: Object.freeze(ctes), physicalNames: Object.freeze([...new Set(branches.flatMap((branch) => [...branch.physicalNames]))]), render: (context) => {\n const rendered = branches.map((branch, index) => {\n const alias = context.dialect.quoteIdent({ name: `__vibe_branch_${index}` });\n const columns = first.entries.map((entry) => `${alias}.${context.dialect.quoteIdent({ name: entry.alias })}`).join(\", \");\n return `SELECT ${columns} FROM (${branch.render({ ...context, transport: false })}) AS ${alias}`;\n }).join(all ? \" UNION ALL \" : \" UNION \");\n return `SELECT ${renderEntries({ entries, context })} FROM (${rendered}) AS ${context.dialect.quoteIdent({ name: \"__vibe_union\" })}`;\n },\n };\n return finish<Projection>(state) as unknown as SqlQuery<Row>;\n}\n",
|
|
6
|
+
"import { VibeError } from \"@vibeorm/schema\";\nimport { registerSqlHandleCheck } from \"@vibeorm/sql\";\nimport type { ParamCollector, ResultDecoder, ResultReadDecoder, SqlDialect, SqlQuery } from \"@vibeorm/sql\";\nimport type { ColumnDefinition, Expression, Source } from \"./types.ts\";\n\n/** @internal */\nexport type RenderContext = { readonly dialect: SqlDialect; readonly collector: ParamCollector; readonly transport?: boolean };\n/** @internal */\nexport type ColumnKey = { readonly binding: object; readonly name: string };\n/** @internal */\nexport type ExpressionState = {\n readonly decoder: ResultReadDecoder<unknown>;\n readonly render: (context: RenderContext) => string;\n readonly projection?: (context: RenderContext) => string;\n readonly references: ReadonlySet<object>;\n readonly ungrouped: ReadonlySet<ColumnKey>;\n readonly aggregate: boolean;\n readonly contract: object | string;\n readonly definition?: ColumnDefinition<unknown>;\n readonly column?: ColumnKey;\n readonly parameter?: { readonly value: unknown; readonly decoder: ResultDecoder<unknown> };\n readonly default?: boolean;\n};\n/** @internal */\nexport type ProjectionEntry = { readonly alias: string; readonly expression: Expression<unknown> };\n/** @internal */\nexport type ReadState = {\n readonly entries: readonly ProjectionEntry[];\n readonly render: (context: RenderContext) => string;\n readonly physicalNames: readonly string[];\n readonly ctes: readonly Source<unknown>[];\n};\n/** @internal */\nexport type SourceState = {\n readonly name?: string;\n readonly namespace?: string;\n readonly columns: Readonly<Record<string, ColumnDefinition<unknown>>>;\n readonly required: readonly string[];\n readonly readOnly?: boolean;\n readonly query?: ReadState;\n readonly cte?: string;\n};\n/** @internal */\nexport type Binding = {\n readonly source: Source<unknown>;\n readonly alias: string;\n readonly token: object;\n readonly nullable: boolean;\n readonly keys: Readonly<Record<string, ColumnKey>>;\n};\n\n/** @internal */\nexport const expressionStates: WeakMap<object, ExpressionState> = new WeakMap();\n/** @internal */\nexport const sourceStates: WeakMap<object, SourceState> = new WeakMap();\n/** @internal */\nexport const readStates: WeakMap<object, ReadState> = new WeakMap();\n/** @internal */\nexport const builderTerminals: WeakSet<object> = new WeakSet();\nregisterSqlHandleCheck({ check: (value: object) => expressionStates.has(value) || sourceStates.has(value) || builderTerminals.has(value) });\n\n/** @internal */\nexport function columnContract(definition: ColumnDefinition<unknown>): string {\n return JSON.stringify({ scalar: definition.scalar, nullable: definition.nullable === true, list: definition.list === true, enumType: definition.enumType, enumValues: definition.enumValues, nativeType: definition.nativeType, transport: definition.transport });\n}\n\n/**\n * Reject database-owned assignments before reading values or deriving input encoders.\n * @internal\n */\nexport function assertWritableColumn({ table, column }: { readonly table: SourceState; readonly column: string }): void {\n if (table.columns[column]?.generated === true) {\n throw new VibeError({ code: \"VIBE_VALIDATION\", message: `Generated SQL column \"${column}\" is read-only`, meta: { reason: \"generated-column-write\", table: table.name, field: column, path: [column] } });\n }\n}\n\n/** @internal */\nexport function invalid(message: string): never {\n throw new VibeError({ code: \"VIBE_VALIDATION\", message });\n}\n\n/** @internal */\nexport function invalidData(message: string): never {\n throw new VibeError({ code: \"VIBE_DATA_INVALID\", message });\n}\n\n/** @internal */\nexport function unsupported(message: string): never {\n throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message });\n}\n\n/** @internal */\nexport function identifier(name: string): void {\n if (typeof name !== \"string\" || name.length === 0 || name.includes(\"\\0\")) invalid(\"SQL names must be non-empty and NUL-free\");\n}\n\n/** @internal */\nexport function expressionState(expression: Expression<unknown>): ExpressionState {\n if (typeof expression !== \"object\" || expression === null) invalid(\"Expected an authentic SQL expression\");\n return expressionStates.get(expression) ?? invalid(\"Expected an authentic SQL expression\");\n}\n\n/** @internal */\nexport function sourceState(source: Source<unknown>): SourceState {\n if (typeof source !== \"object\" || source === null) invalid(\"Expected an authentic SQL source\");\n return sourceStates.get(source) ?? invalid(\"Expected an authentic SQL source\");\n}\n\n/** @internal */\nexport function readState(query: SqlQuery<unknown>): ReadState {\n if (typeof query !== \"object\" || query === null) invalid(\"Expected a builder read query\");\n return readStates.get(query) ?? invalid(\"Derived sources and unions require builder SELECT queries, not raw or write plans\");\n}\n\n/** @internal */\nexport function makeExpression<T>(state: ExpressionState): Expression<T> {\n const expression = Object.freeze(Object.create(null)) as Expression<T>;\n expressionStates.set(expression, Object.freeze(state));\n return expression;\n}\n\n/** @internal */\nexport function checkScope(params: { expression: Expression<unknown>; bindings: readonly Binding[]; aggregates?: boolean; nullableContracts?: boolean }): void {\n const state = expressionState(params.expression);\n if (state.default === true) invalid(\"SQL DEFAULT is only valid in write values\");\n const available = new Set(params.bindings.map((binding) => binding.token));\n for (const token of state.references) if (!available.has(token)) invalid(\"SQL expression belongs to a different source scope\");\n if (params.nullableContracts === true && state.column !== undefined && state.definition?.nullable !== true && params.bindings.some((binding) => binding.token === state.column!.binding && binding.nullable)) invalid(\"A captured pre-join column cannot bypass outer-join nullability; use the output scope\");\n if (params.aggregates === false && state.aggregate) invalid(\"Aggregate expressions are not valid in this clause\");\n}\n",
|
|
7
|
+
"import { assertSqlNamespace } from \"@vibeorm/schema\";\nimport type { ResultParameterEncoder, ResultReadDecoder, SqlQuery } from \"@vibeorm/sql\";\nimport type { ColumnDefinition, ColumnDefinitions, Columns, Expression, Projection, ProjectionRow, Scope, Source, Table } from \"./types.ts\";\nimport { assertDecoder, nativeColumnDefinition, nullableDecoder, transportProjection } from \"./expressions.ts\";\nimport { assertWritableColumn, checkScope, columnContract, expressionState, identifier, invalid, invalidData, makeExpression, readState, sourceState, sourceStates, unsupported } from \"./state.ts\";\nimport type { Binding, ColumnKey, ProjectionEntry, RenderContext } from \"./state.ts\";\n\n/** @internal */\nexport function makeTable<Row, Input = Partial<Row>>(params: { name: string; namespace?: string; columns: ColumnDefinitions<Row>; required?: readonly string[]; readOnly?: boolean }): Table<Row, Input> {\n identifier(params.name);\n if (params.namespace !== undefined) identifier(params.namespace);\n const columns = Object.fromEntries(Object.entries(params.columns as Record<string, ColumnDefinition<unknown>>).map(([key, definition]) => {\n identifier(key);\n identifier(definition.name);\n assertDecoder(definition.decoder);\n if (definition.generated !== undefined && definition.generated !== true) invalid(\"SQL generated-column metadata must be true when present\");\n if (definition.inputDecoder !== undefined && typeof definition.inputDecoder.encode !== \"function\") invalid(\"SQL input decoders must have an encoder\");\n if (definition.enumType !== undefined) {\n identifier(definition.enumType.name);\n identifier(definition.enumType.namespace);\n }\n return [key, Object.freeze({ ...nativeColumnDefinition(definition), ...(definition.enumValues === undefined ? {} : { enumValues: Object.freeze([...definition.enumValues]) }), ...(definition.enumType === undefined ? {} : { enumType: Object.freeze({ ...definition.enumType }) }) })];\n }));\n if (Object.keys(columns).length === 0) invalid(\"SQL sources require at least one column\");\n const physical = Object.values(columns).map((column) => column.name);\n if (new Set(physical).size !== physical.length) invalid(\"Physical column names must be unique within a source\");\n const required = [...(params.required ?? Object.entries(columns).filter(([, definition]) => definition.nullable !== true && definition.dbDefault !== true && definition.generated !== true).map(([name]) => name))];\n if (required.some((key) => !Object.hasOwn(columns, key))) invalid(\"Required insert columns must belong to the table\");\n for (const column of required) assertWritableColumn({ table: { name: params.name, columns, required }, column });\n const source = Object.freeze(Object.create(null)) as Table<Row, Input>;\n sourceStates.set(source, Object.freeze({ name: params.name, namespace: params.namespace, columns: Object.freeze(columns), required: Object.freeze(required), readOnly: params.readOnly === true }));\n return source;\n}\n\n/** @internal */\nexport function makeDerived<Row>(params: { query: SqlQuery<Row>; name?: string }): Source<Row> {\n const query = readState(params.query);\n if (params.name !== undefined) {\n identifier(params.name);\n if (query.physicalNames.includes(params.name)) invalid(\"A read CTE cannot shadow a physical source table\");\n }\n const columns = Object.fromEntries(query.entries.map(({ alias, expression }) => {\n const state = expressionState(expression);\n const decoder = state.definition?.inputDecoder ?? state.definition?.decoder ?? state.decoder;\n const inputDecoder = \"encode\" in decoder && typeof decoder.encode === \"function\" ? decoder as ResultParameterEncoder : undefined;\n return [alias, Object.freeze({ ...state.definition, name: alias, decoder: state.decoder, inputDecoder, scalar: state.definition?.scalar ?? \"Unknown\", dbDefault: false })];\n }));\n const source = Object.freeze(Object.create(null)) as Source<Row>;\n sourceStates.set(source, Object.freeze({ columns: Object.freeze(columns), required: Object.freeze([]), query, cte: params.name, readOnly: true }));\n return source;\n}\n\n/** @internal */\nexport function makeBinding(params: { source: Source<unknown>; alias: string; nullable?: boolean }): Binding {\n const state = sourceState(params.source);\n identifier(params.alias);\n const token = Object.freeze({});\n const keys = Object.fromEntries(Object.keys(state.columns).map((name) => [name, Object.freeze({ binding: token, name })]));\n return Object.freeze({ source: params.source, alias: params.alias, token, keys: Object.freeze(keys), nullable: params.nullable === true });\n}\n\n/** @internal */\nexport function bindingColumns<Row>(binding: Binding, qualified = true): Columns<Row> {\n const source = sourceState(binding.source);\n return Object.freeze(Object.fromEntries(Object.entries(source.columns).map(([name, original]) => {\n const definition = binding.nullable ? Object.freeze({ ...original, nullable: true }) : original;\n const decoder = definition.nullable === true ? nullableDecoder(definition.decoder) : definition.decoder;\n const readDecoder: ResultReadDecoder<unknown> = definition.transport === \"text\" || definition.scalar === \"Json\" ? Object.freeze({ decode: (params: Parameters<ResultReadDecoder<unknown>[\"decode\"]>[0]): unknown => decoder.decode({ ...params, wire: { ...params.wire, json: \"text\" } }) }) : decoder;\n const column = binding.keys[name]!;\n const render = (context: RenderContext): string => {\n if (definition.list === true && !context.dialect.capabilities.scalarArrays) unsupported(\"Scalar array columns require native array support\");\n const name = context.dialect.quoteIdent({ name: definition.name });\n return qualified ? `${context.dialect.quoteIdent({ name: binding.alias })}.${name}` : name;\n };\n return [name, makeExpression({\n decoder: readDecoder,\n render,\n projection: (context) => transportProjection({ context, expression: render(context), definition }),\n references: new Set([binding.token]), ungrouped: new Set([column]), aggregate: false, column, definition,\n contract: columnContract(definition),\n })];\n }))) as Columns<Row>;\n}\n\n/** @internal */\nexport function scope<S>(bindings: readonly Binding[]): Scope<S> {\n return Object.freeze(Object.fromEntries(bindings.map((binding) => [binding.alias, bindingColumns(binding)]))) as Scope<S>;\n}\n\n/** @internal */\nexport function renderSource(params: { context: RenderContext; binding: Binding }): string {\n const { context, binding } = params;\n const state = sourceState(binding.source);\n const alias = context.dialect.quoteIdent({ name: binding.alias });\n if (state.cte !== undefined) return `${context.dialect.quoteIdent({ name: state.cte })} AS ${alias}`;\n if (state.query !== undefined) return `(${state.query.render({ ...context, transport: false })}) AS ${alias}`;\n if (state.namespace !== undefined) assertSqlNamespace({ dialect: context.dialect.name, namespace: state.namespace });\n const name = context.dialect.quoteIdent({ name: state.name! });\n return `${state.namespace === undefined ? \"\" : `${context.dialect.quoteIdent({ name: state.namespace })}.`}${name} AS ${alias}`;\n}\n\n/** @internal */\nexport function projectionEntries(params: { projection: Projection; bindings: readonly Binding[]; aggregates?: boolean }): readonly ProjectionEntry[] {\n const entries = Object.entries(params.projection);\n if (entries.length === 0) invalid(\"SELECT/RETURNING requires a non-empty explicit projection\");\n return Object.freeze(entries.map(([alias, expression]) => {\n identifier(alias);\n checkScope({ expression, bindings: params.bindings, aggregates: params.aggregates, nullableContracts: true });\n return Object.freeze({ alias, expression });\n }));\n}\n\n/** @internal */\nexport function renderEntries(params: { entries: readonly ProjectionEntry[]; context: RenderContext }): string {\n return params.entries.map(({ alias, expression }) => {\n const state = expressionState(expression);\n const rendered = params.context.transport !== false && state.projection !== undefined ? state.projection(params.context) : state.render(params.context);\n return `${rendered} AS ${params.context.dialect.quoteIdent({ name: alias })}`;\n }).join(\", \");\n}\n\n/** @internal */\nexport function projectionDecoder<P extends Projection>(entries: readonly ProjectionEntry[]): ResultReadDecoder<ProjectionRow<P>> {\n return Object.freeze({\n decode: (params: Parameters<ResultReadDecoder<unknown>[\"decode\"]>[0]): ProjectionRow<P> => {\n if (typeof params.value !== \"object\" || params.value === null || Array.isArray(params.value)) invalidData(\"SQL query decoder requires a row object\");\n const row = params.value as Record<string, unknown>;\n return Object.fromEntries(entries.map(({ alias, expression }) => {\n if (!Object.hasOwn(row, alias)) invalidData(`Missing SQL result alias \"${alias}\"`);\n return [alias, expressionState(expression).decoder.decode({ ...params, value: row[alias] })];\n })) as ProjectionRow<P>;\n },\n });\n}\n\n/** @internal */\nexport function groupKeys(expressions: readonly Expression<unknown>[]): ReadonlySet<ColumnKey> {\n return new Set(expressions.flatMap((expression) => {\n const state = expressionState(expression);\n return state.column === undefined ? [] : [state.column];\n }));\n}\n",
|
|
8
|
+
"import { isLocalDateField } from \"@vibeorm/schema\";\nimport { assertSqlParamBuilding, decode, float32Codec, isSqlBindingCollector, isSqlFragment, isSqlParam, jsonListParameter, localDateCodec, nativeEnumArrayParameter, parsePgArrayLiteral, recordSqlBinding, renderSqlFragment, resultScalarContract, snapshotSqlValue, sqlParamContract, timeOfDayCodec, toPgArrayLiteral } from \"@vibeorm/sql\";\nimport type { ResultDecoder, ResultReadDecoder, ResultParameterEncoder, SqlDialect, SqlFragment, SqlInputContract, SqlParam, SqlParameterTransport } from \"@vibeorm/sql\";\nimport type { ColumnDefinition, Expression, Expressions } from \"./types.ts\";\nimport { columnContract, expressionState, expressionStates, invalid, makeExpression, unsupported } from \"./state.ts\";\nimport type { ExpressionState, RenderContext } from \"./state.ts\";\n\nconst nullableFloat: ResultDecoder<number | null> = decode.nullable({ decoder: decode.float });\nconst countDefinition: ColumnDefinition<bigint> = Object.freeze({ name: \"\", scalar: \"BigInt\", decoder: decode.bigInt });\nconst floatDefinition: ColumnDefinition<number | null> = Object.freeze({ name: \"\", scalar: \"Float\", nullable: true, decoder: nullableFloat });\nconst nullableDecoders = new WeakMap<object, ResultReadDecoder<unknown>>();\n\n/** @internal */\nexport function nullableDecoder<T>(decoder: ResultReadDecoder<T>): ResultReadDecoder<T | null> {\n let lifted = nullableDecoders.get(decoder);\n if (lifted === undefined) {\n lifted = Object.freeze({ decode: (params: Parameters<ResultReadDecoder<unknown>[\"decode\"]>[0]): unknown => params.value === null ? null : decoder.decode(params) });\n nullableDecoders.set(decoder, lifted);\n if (localDateValueDecoders.has(decoder)) localDateValueDecoders.add(lifted);\n }\n return lifted as ResultReadDecoder<T | null>;\n}\n\n/** @internal */\nexport function assertDecoder(decoder: ResultReadDecoder<unknown>): void {\n if (typeof decoder?.decode !== \"function\") invalid(\"SQL expressions require an explicit result decoder\");\n}\n\nfunction inputDecoder(definition: ColumnDefinition<unknown>): ResultParameterEncoder {\n const decoder = definition.inputDecoder ?? definition.decoder;\n if (!(\"encode\" in decoder) || typeof decoder.encode !== \"function\") invalid(\"A decode-only projection requires a separate inputDecoder for parameters and writes\");\n return decoder as ResultParameterEncoder;\n}\n\nfunction isLocalDateColumn({ definition }: { readonly definition: ColumnDefinition<unknown> | undefined }): boolean {\n return definition?.scalar === \"String\" && isLocalDateField({ field: { type: \"String\", nativeType: definition.nativeType } });\n}\n\n/**\n * Keep physical native refinements in the central codec implementations.\n * @internal\n */\nexport function nativeColumnDefinition(definition: ColumnDefinition<unknown>): ColumnDefinition<unknown> {\n const localDate = isLocalDateColumn({ definition });\n if (localDate && definition.list === true) invalid(\"Local-date list columns are unsupported\");\n if (localDate && localDateDecoders.has(definition.decoder)) return definition;\n const contract = resultScalarContract({ decoder: definition.decoder });\n if (!localDate && (contract === undefined || contract.scalar !== definition.scalar)) return definition;\n const codec = localDate ? localDateCodec : definition.scalar === \"DateTime\" ? timeOfDayCodec({ nativeType: definition.nativeType })\n : definition.scalar === \"Float\" && /^(real|float4)$/i.test(definition.nativeType ?? \"\") ? float32Codec : undefined;\n if (codec === undefined) return definition;\n const original = definition.decoder;\n const list = definition.list === true;\n let decoders = nativeDecoders.get(original);\n if (decoders === undefined) { decoders = new Map(); nativeDecoders.set(original, decoders); }\n const key = localDate ? \"local-date\" : `${definition.nativeType}|${list}`;\n let decoder = decoders.get(key);\n if (decoder === undefined) {\n decoder = Object.freeze({\n decode: (params: Parameters<ResultReadDecoder<unknown>[\"decode\"]>[0]): unknown => {\n const raw = params.value;\n const convert = (value: unknown): unknown => value === null ? null : codec.decode(value);\n const elements = typeof raw === \"string\" && list && params.dialect === \"postgres\" ? parsePgArrayLiteral({ literal: raw })\n : ArrayBuffer.isView(raw) && \"length\" in raw ? Array.from(raw as unknown as ArrayLike<unknown>) : raw;\n const value = raw === null ? null : list && Array.isArray(elements) ? elements.map(convert) : convert(raw);\n return original.decode({ ...params, value });\n },\n ...(\"encode\" in original && typeof original.encode === \"function\" ? {\n encode: (params: Parameters<ResultParameterEncoder[\"encode\"]>[0]): unknown => {\n const encoded = (original as ResultDecoder<unknown>).encode(params);\n const convert = (value: unknown): unknown => value === null ? null : codec.encode(value);\n return list && Array.isArray(encoded) ? encoded.map(convert) : convert(encoded);\n },\n } : {}),\n });\n decoders.set(key, decoder);\n if (localDate) {\n localDateDecoders.add(decoder);\n if (contract?.scalar === \"String\" && !contract.list) localDateValueDecoders.add(decoder);\n }\n }\n return { ...definition, decoder };\n}\n\nconst nativeDecoders = new WeakMap<object, Map<string, ResultReadDecoder<unknown>>>();\nconst localDateDecoders = new WeakSet<object>();\n// Built-in date decoders and their transparent nullable lifts keep the same input domain.\nconst localDateValueDecoders = new WeakSet<object>();\n\nfunction hasLocalDateValueInput({ definition }: { readonly definition: ColumnDefinition<unknown> }): boolean {\n return isLocalDateColumn({ definition }) && localDateValueDecoders.has(definition.decoder) &&\n (definition.inputDecoder === undefined || localDateValueDecoders.has(definition.inputDecoder));\n}\n\n/**\n * Transport conversion belongs only at the final result boundary.\n * @internal\n */\nexport function transportProjection(params: { context: RenderContext; expression: string; definition: ColumnDefinition<unknown> }): string {\n const { context, expression, definition } = params;\n if ((context.dialect.name !== \"sqlite\" && isLocalDateColumn({ definition })) || definition.transport === \"text\" || definition.scalar === \"Json\" || definition.scalar === \"BigInt\" || (definition.list === true && definition.scalar === \"Float\")) {\n return `CAST(${expression} AS ${context.dialect.name === \"mysql\" ? \"CHAR\" : \"TEXT\"})`;\n }\n return expression;\n}\n\n/**\n * Write contracts carry encoding identity independently from projection output.\n * @internal\n */\nexport function columnInputContract(definition: ColumnDefinition<unknown>): SqlInputContract {\n const encoder = inputDecoder(definition);\n return {\n encoder, scalar: definition.scalar, nullable: definition.nullable === true, list: definition.list === true,\n nativeType: definition.nativeType, enumValues: definition.enumValues, enumType: definition.enumType, jsonStorage: definition.jsonStorage,\n ...(definition.inputDecoder !== undefined && definition.inputDecoder !== (definition.decoder as object) && !hasLocalDateValueInput({ definition }) ? { columnIdentity: encoder } : {}),\n };\n}\n\nfunction physicalInput(contract: SqlInputContract): string {\n return JSON.stringify({ scalar: contract.scalar, list: contract.list, nativeType: contract.nativeType, enumValues: contract.enumValues, enumType: contract.enumType === undefined ? undefined : [contract.enumType.namespace, contract.enumType.name], jsonStorage: contract.jsonStorage });\n}\n\nfunction parameterDefinition(params: { definition: ColumnDefinition<unknown>; param: SqlParam<unknown> }): ColumnDefinition<unknown> {\n const declared = sqlParamContract({ param: params.param });\n const target = columnInputContract(params.definition);\n if (declared.columnIdentity !== undefined || target.columnIdentity !== undefined) {\n if (declared.encoder !== target.encoder || physicalInput(declared) !== physicalInput(target)) invalid(\"SQL input token does not match this column's write encoder and physical contract\");\n return { ...params.definition, nullable: declared.nullable && target.nullable, inputDecoder: declared.encoder };\n }\n if (declared.scalar !== \"Unknown\" && (declared.scalar !== target.scalar || declared.list !== target.list)) invalid(\"SQL input token has an incompatible scalar or list contract\");\n if (declared.scalar === \"Unknown\" && (target.nativeType !== undefined || target.scalar === \"Enum\" || target.scalar === \"Json\")) invalid(\"Opaque SQL input decoders need qb.input for native, enum and JSON columns\");\n if (declared.nativeType !== undefined && physicalInput(declared) !== physicalInput(target)) invalid(\"SQL input token has an incompatible native column contract\");\n if (declared.scalar === \"Enum\" && physicalInput(declared) !== physicalInput(target)) invalid(\"SQL input token has an incompatible enum column contract\");\n if (\"decode\" in declared.encoder && typeof declared.encoder.decode === \"function\") {\n return nativeColumnDefinition({ ...params.definition, nullable: declared.nullable && target.nullable, decoder: declared.encoder as ResultDecoder<unknown>, inputDecoder: undefined });\n }\n if (declared.encoder !== target.encoder) invalid(\"A write-only SQL input token must match its column encoder\");\n return { ...params.definition, nullable: declared.nullable && target.nullable, inputDecoder: declared.encoder };\n}\n\nfunction columnTransport(definition: ColumnDefinition<unknown>): SqlParameterTransport {\n if (definition.list === true && definition.scalar === \"Enum\" && definition.enumType !== undefined) return { kind: \"native-enum-array\", type: definition.enumType };\n if (definition.list === true && definition.scalar === \"Json\") return { kind: \"json-list\", storage: definition.jsonStorage ?? \"jsonb\", whole: true };\n return { kind: \"plain\" };\n}\n\nfunction encodeColumnValue(params: { dialect: SqlDialect; definition: ColumnDefinition<unknown>; value: unknown }): unknown {\n const { dialect, definition } = params;\n if (params.value === null) {\n if (definition.nullable !== true) invalid(\"A non-null SQL column cannot receive SQL NULL\");\n return null;\n }\n const encoded = snapshotSqlValue(inputDecoder(definition).encode({ value: snapshotSqlValue(params.value), dialect: dialect.name }));\n if (encoded === null) {\n if (definition.nullable !== true) invalid(\"A non-null SQL column cannot receive SQL NULL from its encoder\");\n return null;\n }\n if (isLocalDateColumn({ definition })) return localDateCodec.encode(encoded);\n if (definition.scalar === \"BigInt\" && definition.list !== true && dialect.name === \"sqlite\") {\n const integer = decode.bigInt.decode({ value: encoded, dialect: \"sqlite\" });\n if (integer < -9223372036854775808n || integer > 9223372036854775807n) invalid(\"SQLite BigInt parameters must fit signed int64\");\n }\n if (definition.list === true && definition.scalar === \"Enum\" && definition.enumType !== undefined) {\n if (!Array.isArray(encoded)) invalid(\"Native enum list encoder must return an array\");\n return nativeEnumArrayParameter({ value: toPgArrayLiteral({ values: encoded }), type: definition.enumType });\n }\n if (definition.list === true && definition.scalar === \"Json\") {\n if (!Array.isArray(encoded) || encoded.some((entry) => typeof entry !== \"string\")) invalid(\"JSON list encoder must return encoded JSON text elements\");\n return jsonListParameter({ value: encoded as string[], storage: definition.jsonStorage ?? \"jsonb\" });\n }\n return encoded;\n}\n\n/** @internal */\nexport function bindColumnValue(params: { context: RenderContext; definition: ColumnDefinition<unknown>; value: unknown; encoder?: ResultDecoder<unknown>; rejectNull?: boolean }): string {\n const { context, definition } = params;\n if (definition.list === true && !context.dialect.capabilities.scalarArrays) unsupported(\"Scalar array parameters require a dialect with native scalar arrays\");\n const token = isSqlParam(params.value) ? params.value : undefined;\n const input = token !== undefined ? parameterDefinition({ definition, param: token })\n : params.encoder === undefined ? definition : nativeColumnDefinition({ ...definition, decoder: params.encoder, inputDecoder: undefined });\n let placeholder: string;\n if (isSqlBindingCollector({ collector: context.collector })) {\n placeholder = recordSqlBinding({\n collector: context.collector,\n source: token === undefined ? { kind: \"literal\", value: params.value } : { kind: \"input\", param: token },\n contract: columnInputContract(input), transport: columnTransport(definition), rejectNull: params.rejectNull,\n encode: ({ value, dialect }) => encodeColumnValue({ value, dialect, definition: input }),\n });\n } else {\n if (token !== undefined) invalid(\"SQL input tokens require execution through their reusable template\");\n const encoded = encodeColumnValue({ dialect: context.dialect, definition: input, value: params.value });\n placeholder = context.collector.add(encoded);\n if (encoded === null) return placeholder;\n }\n if (definition.scalar === \"BigInt\" && definition.list !== true && context.dialect.name === \"sqlite\") return `CAST(${placeholder} AS INTEGER)`;\n if (definition.scalar === \"Json\" && definition.list !== true) return placeholder + (definition.jsonStorage === \"json\" && context.dialect.name === \"postgres\" ? \"::text::json\" : context.dialect.jsonParamCast);\n return placeholder;\n}\n\nfunction predicateDefinition(expression: Expression<unknown>): ColumnDefinition<unknown> {\n const state = expressionState(expression);\n if (state.definition?.inputDecoder !== undefined && (!(\"encode\" in state.definition.decoder) || typeof state.definition.decoder.encode !== \"function\") && !hasLocalDateValueInput({ definition: state.definition })) unsupported(\"Input tokens cannot infer predicates over read-transformed columns\");\n if (state.definition !== undefined) return state.definition;\n if (!(\"encode\" in state.decoder) || typeof state.decoder.encode !== \"function\") invalid(\"A decode-only expression cannot infer a parameter encoder\");\n const physical = resultScalarContract({ decoder: state.decoder });\n return { name: \"\", scalar: physical?.scalar ?? \"Unknown\", nullable: physical?.nullable ?? true, list: physical?.list ?? false, decoder: state.decoder };\n}\n\nfunction bindPredicateParam(params: { context: RenderContext; expression: Expression<unknown>; param: SqlParam<unknown> }): string {\n return bindColumnValue({ context: params.context, definition: predicateDefinition(params.expression), value: params.param, rejectNull: true });\n}\n\nfunction childrenState(params: { children: readonly Expression<unknown>[]; decoder: ResultReadDecoder<unknown>; render: (context: RenderContext) => string; contract?: object | string; aggregate?: boolean }): ExpressionState {\n const states = params.children.map(expressionState);\n if (states.some((state) => state.default === true)) invalid(\"SQL DEFAULT cannot be used in expressions\");\n return {\n decoder: params.decoder,\n render: params.render,\n contract: params.contract ?? params.decoder,\n references: new Set(states.flatMap((state) => [...state.references])),\n ungrouped: new Set(states.flatMap((state) => [...state.ungrouped])),\n aggregate: params.aggregate === true || states.some((state) => state.aggregate),\n };\n}\n\n/**\n * Construct a typed value for the public qb.value contract.\n * @internal\n */\nexport function literal<T>(params: { value: T; decoder: ResultDecoder<T> }): Expression<T> {\n assertDecoder(params.decoder);\n if (typeof params.decoder.encode !== \"function\") invalid(\"SQL values require a bidirectional decoder\");\n const decoder = params.decoder;\n const physical = resultScalarContract({ decoder });\n if (physical === undefined) invalid(\"qb.value requires a built-in scalar decoder with a physical SQL type; use qb.raw with explicit SQL for custom decoders\");\n const value = snapshotSqlValue(params.value);\n const definition: ColumnDefinition<unknown> = Object.freeze({ ...physical, name: \"\", decoder, inputDecoder: decoder });\n const readDecoder: ResultReadDecoder<unknown> = physical.scalar === \"Json\" ? Object.freeze({ decode: (result: Parameters<ResultReadDecoder<unknown>[\"decode\"]>[0]): unknown => decoder.decode({ ...result, wire: { ...result.wire, json: \"text\" } }) }) : decoder;\n const render = (context: RenderContext): string => {\n const operand = bindColumnValue({ context, definition, value });\n if (physical.scalar === \"Json\" && context.dialect.name === \"postgres\") return operand;\n const type = context.dialect.valueCastTypes[physical.scalar];\n return `CAST(${operand} AS ${type}${physical.list ? \"[]\" : \"\"})`;\n };\n return makeExpression<T>({\n decoder: readDecoder, contract: decoder, references: new Set(), ungrouped: new Set(), aggregate: false,\n parameter: Object.freeze({ value, decoder }), definition, render,\n projection: (context) => transportProjection({ context, expression: render(context), definition }),\n });\n}\n\nfunction comparedLiteral(params: { expression: Expression<unknown>; value: unknown }): Expression<unknown> {\n const state = expressionState(params.expression);\n const definition = state.definition;\n if (definition?.inputDecoder !== undefined && (!(\"encode\" in definition.decoder) || typeof definition.decoder.encode !== \"function\") && !hasLocalDateValueInput({ definition })) {\n unsupported(\"Implicit literal predicates are unavailable for read-transformed columns; use an explicit trusted SQL input contract\");\n }\n const value = snapshotSqlValue(params.value);\n return makeExpression({\n decoder: state.decoder, contract: state.contract, references: new Set(), ungrouped: new Set(), aggregate: false,\n render: (context) => {\n if (state.definition !== undefined) return bindColumnValue({ context, definition: state.definition, value });\n if (!(\"encode\" in state.decoder) || typeof state.decoder.encode !== \"function\") invalid(\"A decode-only expression cannot infer a parameter encoder; use qb.value with an explicit write decoder\");\n if (isSqlBindingCollector({ collector: context.collector })) return recordSqlBinding({ collector: context.collector, source: { kind: \"literal\", value }, transport: { kind: \"plain\" }, encode: (input) => (state.decoder as ResultDecoder<unknown>).encode({ value: input.value, dialect: input.dialect.name }) });\n return context.collector.add(snapshotSqlValue((state.decoder as ResultDecoder<unknown>).encode({ value: snapshotSqlValue(value), dialect: context.dialect.name })));\n },\n });\n}\n\nfunction comparison(params: { left: Expression<unknown>; right: unknown; operator: string }): Expression<boolean | null> {\n const initialLeft = expressionState(params.left);\n if (isSqlParam(params.right)) {\n const param = params.right;\n assertSqlParamBuilding({ param });\n predicateDefinition(params.left);\n return makeExpression(childrenState({ children: [params.left], decoder: nullableDecoder(decode.boolean), render: (context) => {\n if (context.dialect.name === \"sqlite\" && initialLeft.definition?.scalar === \"Decimal\") unsupported(\"SQLite Decimal comparisons are not exact; use an explicit raw numeric contract\");\n return `(${initialLeft.render(context)} ${params.operator} ${bindPredicateParam({ context, expression: params.left, param })})`;\n } }));\n }\n if (params.right === null) invalid(\"Use isNull for SQL NULL predicates\");\n const right = typeof params.right === \"object\" && params.right !== null && expressionStates.has(params.right) ? params.right as Expression<unknown> : comparedLiteral({ expression: params.left, value: params.right });\n const leftState = expressionState(params.left);\n const rightState = expressionState(right);\n if (leftState.parameter === undefined && rightState.parameter === undefined && leftState.definition !== undefined && rightState.definition !== undefined &&\n isLocalDateColumn({ definition: leftState.definition }) !== isLocalDateColumn({ definition: rightState.definition })) {\n invalid(\"Local-date comparisons require matching local-date columns, not plain text or another scalar\");\n }\n const unsafeDecimal = (state: ExpressionState): boolean => state.definition?.scalar === \"Decimal\";\n return makeExpression(childrenState({\n children: [params.left, right], decoder: nullableDecoder(decode.boolean),\n render: (context) => {\n if (context.dialect.name === \"sqlite\" && (unsafeDecimal(leftState) || unsafeDecimal(rightState))) unsupported(\"SQLite Decimal comparisons are not exact; use an explicit raw numeric contract\");\n const left = leftState.parameter !== undefined && isLocalDateColumn({ definition: rightState.definition })\n ? bindColumnValue({ context, definition: rightState.definition!, encoder: leftState.parameter.decoder, value: leftState.parameter.value }) : leftState.render(context);\n const operand = leftState.parameter === undefined && leftState.definition !== undefined && rightState.parameter !== undefined ? bindColumnValue({ context, definition: leftState.definition, encoder: rightState.parameter.decoder, value: rightState.parameter.value }) : rightState.render(context);\n return `(${left} ${params.operator} ${operand})`;\n },\n }));\n}\n\nfunction logic(params: { predicates: readonly Expression<boolean | null>[]; operator: \"AND\" | \"OR\" }): Expression<boolean | null> {\n const predicates = [...params.predicates];\n return makeExpression(childrenState({\n children: predicates, decoder: nullableDecoder(decode.boolean),\n render: (context) => predicates.length === 0 ? (params.operator === \"AND\" ? \"(1 = 1)\" : \"(1 = 0)\") : `(${predicates.map((predicate) => expressionState(predicate).render(context)).join(` ${params.operator} `)})`,\n }));\n}\n\nfunction aggregate<T>(params: { expression: Expression<T>; fn: \"MIN\" | \"MAX\" }): Expression<T | null> {\n const state = expressionState(params.expression);\n const definition = state.definition;\n if (state.aggregate) invalid(\"Nested aggregate expressions are unsupported\");\n if (definition === undefined || definition.list === true || ![\"String\", \"Int\", \"BigInt\", \"Float\", \"DateTime\"].includes(definition.scalar)) unsupported(\"MIN/MAX require a qualified ordered scalar column; use an explicit raw decoder otherwise\");\n if (definition.scalar === \"String\" && !isLocalDateColumn({ definition }) && definition.nativeType !== undefined && !/^(text|varchar|char|bpchar|tinytext|mediumtext|longtext)(?:\\s*\\(.*\\))?$/i.test(definition.nativeType)) unsupported(\"MIN/MAX do not support this native String type; UUID and other non-text types need explicit SQL\");\n return makeExpression<T | null>({\n ...state, parameter: undefined, column: undefined, definition: { ...definition, nullable: true }, decoder: nullableDecoder(state.decoder), contract: columnContract({ ...definition, nullable: true }),\n ungrouped: new Set(), aggregate: true,\n render: (context) => `${params.fn}(${state.render(context)})`,\n projection: definition.scalar === \"BigInt\" || isLocalDateColumn({ definition }) ? (context) => transportProjection({ context, expression: `${params.fn}(${state.render(context)})`, definition }) : undefined,\n });\n}\n\nfunction floatAggregate(params: { expression: Expression<number | null>; fn: \"SUM\" | \"AVG\" }): Expression<number | null> {\n const state = expressionState(params.expression);\n const definition = state.definition;\n if (state.aggregate) invalid(\"Nested aggregate expressions are unsupported\");\n if (definition?.scalar !== \"Float\" || definition.list === true || (definition.nativeType !== undefined && ![\"doubleprecision\", \"double\", \"float8\"].includes(definition.nativeType.toLowerCase()))) unsupported(\"SUM/AVG support only qualified double-precision Float columns; Int, BigInt, Decimal and real/float4 require an explicit raw result contract\");\n return makeExpression({\n ...state, parameter: undefined, column: undefined, definition: floatDefinition, projection: undefined, decoder: nullableDecoder(decode.float), contract: columnContract(floatDefinition),\n ungrouped: new Set(), aggregate: true,\n render: (context) => `${params.fn}(${state.render(context)})`,\n });\n}\n\n/**\n * Construct an explicit fragment projection for the public qb.raw contract.\n * @internal\n */\nexport function rawExpression<T>(params: { sql: SqlFragment; decoder: ResultReadDecoder<T>; references?: readonly Expression<unknown>[] }): Expression<T> {\n if (!isSqlFragment(params.sql)) invalid(\"Raw expressions require an authentic core SQL fragment\");\n assertDecoder(params.decoder);\n const fragment = params.sql;\n return makeExpression<T>(childrenState({ children: [...(params.references ?? [])], decoder: params.decoder, render: (context) => renderSqlFragment({ ...context, fragment }) }));\n}\n\nfunction nullTest(params: { expression: Expression<unknown>; not: boolean }): Expression<boolean | null> {\n const { expression, not } = params;\n return makeExpression<boolean>(childrenState({ children: [expression], decoder: decode.boolean, render: (context) => `(${expressionState(expression).render(context)} IS ${not ? \"NOT \" : \"\"}NULL)` }));\n}\n\nfunction membership(params: { expression: Expression<unknown>; values: readonly unknown[]; not: boolean }): Expression<boolean | null> {\n // Untyped callers may still pass the removed object form or an iterable string; refuse before spreading.\n if (!Array.isArray(params.values)) invalid(\"inList/notInList require an expression and a literal value array\");\n const { not } = params;\n const values = [...params.values].map((value) => {\n if (!isSqlParam(value)) return comparedLiteral({ expression: params.expression, value });\n assertSqlParamBuilding({ param: value });\n predicateDefinition(params.expression);\n return value;\n });\n const renderValue = (value: Expression<unknown> | SqlParam<unknown>, context: RenderContext): string => isSqlParam(value) ? bindPredicateParam({ context, expression: params.expression, param: value }) : expressionState(value).render(context);\n const state = expressionState(params.expression);\n return makeExpression(childrenState({\n children: [params.expression, ...values.filter((value): value is Expression<unknown> => !isSqlParam(value))], decoder: nullableDecoder(decode.boolean),\n render: (context) => {\n if (state.definition?.scalar === \"Decimal\" && context.dialect.name === \"sqlite\") unsupported(\"SQLite Decimal membership is not exact\");\n if (values.length === 0) return not ? \"(1 = 1)\" : \"(1 = 0)\";\n if (state.definition?.scalar === \"DateTime\" && timeOfDayCodec({ nativeType: state.definition.nativeType }) !== undefined && context.dialect.timeOfDayInStrategy === \"equalities\") {\n const equalities = values.map((value) => `(${state.render(context)} = ${renderValue(value, context)})`).join(\" OR \");\n return not ? `(NOT (${equalities}))` : `(${equalities})`;\n }\n return `(${state.render(context)} ${not ? \"NOT \" : \"\"}IN (${values.map((value) => renderValue(value, context)).join(\", \")}))`;\n },\n }));\n}\n\n/** Compare typed operands for equality, preserving SQL NULL propagation. */\nexport const eq: Expressions[\"eq\"] = (left, right) => comparison({ left, right, operator: \"=\" });\n/** Compare typed operands for inequality. */\nexport const ne: Expressions[\"ne\"] = (left, right) => comparison({ left, right, operator: \"<>\" });\n/** Compare typed operands using greater-than. */\nexport const gt: Expressions[\"gt\"] = (left, right) => comparison({ left, right, operator: \">\" });\n/** Compare typed operands using greater-than-or-equal. */\nexport const gte: Expressions[\"gte\"] = (left, right) => comparison({ left, right, operator: \">=\" });\n/** Compare typed operands using less-than. */\nexport const lt: Expressions[\"lt\"] = (left, right) => comparison({ left, right, operator: \"<\" });\n/** Compare typed operands using less-than-or-equal. */\nexport const lte: Expressions[\"lte\"] = (left, right) => comparison({ left, right, operator: \"<=\" });\n/** Test SQL NULL without comparing a bound null value. */\nexport const isNull: Expressions[\"isNull\"] = (expression) => nullTest({ expression, not: false });\n/** Test SQL non-nullness without comparing a bound null value. */\nexport const isNotNull: Expressions[\"isNotNull\"] = (expression) => nullTest({ expression, not: true });\n/** Combine predicates with SQL AND; an empty conjunction is true. */\nexport const and: Expressions[\"and\"] = (...predicates) => logic({ predicates, operator: \"AND\" });\n/** Combine predicates with SQL OR; an empty disjunction is false. */\nexport const or: Expressions[\"or\"] = (...predicates) => logic({ predicates, operator: \"OR\" });\n/** Negate a predicate with SQL's three-valued boolean semantics. */\nexport const not: Expressions[\"not\"] = (predicate) => makeExpression<boolean | null>(childrenState({ children: [predicate], decoder: nullableDecoder(decode.boolean), render: (context) => `(NOT ${expressionState(predicate).render(context)})` }));\n/** Match a literal list; an empty list is false. */\nexport const inList: Expressions[\"inList\"] = (expression, values) => membership({ expression, values, not: false });\n/** Exclude a literal list; an empty list is true. */\nexport const notInList: Expressions[\"notInList\"] = (expression, values) => membership({ expression, values, not: true });\n/** Count rows or non-null expression values with exact bigint transport. */\nexport const count: Expressions[\"count\"] = (expression, options) => {\n const distinct = options?.distinct === true;\n if (distinct && expression === undefined) invalid(\"COUNT DISTINCT requires an expression\");\n const operand = expression === undefined ? undefined : expressionState(expression);\n if (operand?.default === true) invalid(\"COUNT cannot consume SQL DEFAULT\");\n if (operand?.aggregate === true) invalid(\"Nested aggregate expressions are unsupported\");\n return makeExpression<bigint>({\n decoder: decode.bigInt, contract: columnContract(countDefinition), references: operand?.references ?? new Set(), ungrouped: new Set(), aggregate: true,\n definition: countDefinition,\n render: (context) => `COUNT(${distinct ? \"DISTINCT \" : \"\"}${operand === undefined ? \"*\" : operand.render(context)})`,\n projection: (context) => {\n const count = `COUNT(${distinct ? \"DISTINCT \" : \"\"}${operand === undefined ? \"*\" : operand.render(context)})`;\n // SQLite drivers may read int64 as an unsafe Number: transport text BEFORE decode.\n return `CAST(${count} AS ${context.dialect.name === \"mysql\" ? \"CHAR\" : \"TEXT\"})`;\n },\n });\n};\n/** Minimum of a qualified ordered scalar, nullable for empty input. */\nexport const min: Expressions[\"min\"] = (expression) => aggregate({ expression, fn: \"MIN\" });\n/** Maximum of a qualified ordered scalar, nullable for empty input. */\nexport const max: Expressions[\"max\"] = (expression) => aggregate({ expression, fn: \"MAX\" });\n/** Sum of a qualified double-precision Float, nullable for empty input. */\nexport const sum: Expressions[\"sum\"] = (expression) => floatAggregate({ expression, fn: \"SUM\" });\n/** Average of a qualified double-precision Float, nullable for empty input. */\nexport const avg: Expressions[\"avg\"] = (expression) => floatAggregate({ expression, fn: \"AVG\" });\n",
|
|
9
|
+
"import { assertSqlNamespace } from \"@vibeorm/schema\";\nimport { assertSqlParamBuilding, createSqlCommand, createSqlQuery, decode, isSqlParam, snapshotSqlValue } from \"@vibeorm/sql\";\nimport type { SqlCommand, SqlQuery } from \"@vibeorm/sql\";\nimport type { Columns, Expression, MutationBuilder, Projection, ProjectionRow, Source, Table, WriteValues } from \"./types.ts\";\nimport { bindColumnValue } from \"./expressions.ts\";\nimport { bindingColumns, makeBinding, projectionDecoder, projectionEntries, renderEntries } from \"./sources.ts\";\nimport { assertWritableColumn, builderTerminals, checkScope, expressionState, expressionStates, invalid, makeExpression, sourceState, unsupported } from \"./state.ts\";\nimport type { Binding, RenderContext } from \"./state.ts\";\n\ntype Cell = { readonly name: string; readonly value: unknown; readonly expression?: Expression<unknown> };\ntype WriteState = {\n readonly binding: Binding;\n readonly kind: \"insert\" | \"update\" | \"delete\";\n readonly rows?: readonly (readonly Cell[])[];\n readonly set?: readonly Cell[];\n readonly where: readonly Expression<boolean | null>[];\n};\n\n/**\n * Explicit physical SQL DEFAULT, not an application-side default callback.\n * @internal\n */\nexport const sqlDefault: Expression<never> = makeExpression({ decoder: decode.json, contract: \"sql-default\", references: new Set(), ungrouped: new Set(), aggregate: false, default: true, render: () => \"DEFAULT\" });\n\nfunction tableBinding(table: Source<unknown>): Binding {\n const state = sourceState(table);\n if (state.readOnly === true || state.query !== undefined || state.name === undefined) invalid(\"SQL writes require a writable physical table; views and read sources cannot be mutated\");\n return makeBinding({ source: table, alias: \"__vibe_write\" });\n}\n\nfunction cells(params: { value: unknown; binding: Binding }): readonly Cell[] {\n if (typeof params.value !== \"object\" || params.value === null || Array.isArray(params.value)) invalid(\"SQL write rows must be field objects\");\n const table = sourceState(params.binding.source);\n const row = params.value as Record<string, unknown>;\n for (const name of Object.keys(row)) {\n if (!Object.hasOwn(table.columns, name)) invalid(`Unknown SQL write field \"${name}\"`);\n assertWritableColumn({ table, column: name });\n }\n return Object.freeze(Object.keys(table.columns).filter((name) => Object.hasOwn(row, name)).map((name) => {\n const value = row[name];\n if (isSqlParam(value)) {\n assertSqlParamBuilding({ param: value });\n return Object.freeze({ name, value });\n }\n if (typeof value === \"object\" && value !== null && expressionStates.has(value)) {\n const expression = value as Expression<unknown>;\n const state = expressionState(expression);\n if (state.default === true) {\n if (table.columns[name]!.dbDefault !== true || table.required.includes(name)) invalid(`SQL DEFAULT requires a physical database default on \"${name}\"`);\n } else checkScope({ expression, bindings: [params.binding], aggregates: false });\n return Object.freeze({ name, value: undefined, expression });\n }\n return Object.freeze({ name, value: snapshotSqlValue(value) });\n }));\n}\n\nfunction physicalTable(context: RenderContext, binding: Binding): string {\n const table = sourceState(binding.source);\n if (table.namespace !== undefined) assertSqlNamespace({ namespace: table.namespace, dialect: context.dialect.name });\n return `${table.namespace === undefined ? \"\" : `${context.dialect.quoteIdent({ name: table.namespace })}.`}${context.dialect.quoteIdent({ name: table.name! })}`;\n}\n\nfunction renderCell(params: { cell: Cell; state: WriteState; context: RenderContext }): string {\n const definition = sourceState(params.state.binding.source).columns[params.cell.name]!;\n if (params.cell.expression !== undefined) {\n const expression = expressionState(params.cell.expression);\n if (expression.default === true && params.state.kind === \"insert\" && !params.context.dialect.rowDefaultKeyword) unsupported(\"This dialect cannot render SQL DEFAULT in VALUES cells; omit the defaulted column\");\n if (expression.default === true && params.state.kind === \"update\" && !params.context.dialect.rowDefaultKeyword) unsupported(\"This dialect cannot render SQL DEFAULT in UPDATE assignments\");\n if (expression.parameter !== undefined) return bindColumnValue({ context: params.context, definition, encoder: expression.parameter.decoder, value: expression.parameter.value });\n return expression.render(params.context);\n }\n return bindColumnValue({ context: params.context, definition, value: params.cell.value });\n}\n\nfunction renderWrite(params: { state: WriteState; context: RenderContext }): string {\n const { state, context } = params;\n const table = physicalTable(context, state.binding);\n const alias = context.dialect.quoteIdent({ name: state.binding.alias });\n if (state.kind === \"insert\") {\n const rows = state.rows!;\n const fields = rows[0]!;\n if (fields.length === 0) {\n if (rows.length > 1) unsupported(\"Multiple all-default insert rows cannot preserve one portable statement\");\n return context.dialect.name === \"mysql\" ? `INSERT INTO ${table} () VALUES ()` : `INSERT INTO ${table} DEFAULT VALUES`;\n }\n const definitions = sourceState(state.binding.source).columns;\n const columns = fields.map((cell) => context.dialect.quoteIdent({ name: definitions[cell.name]!.name })).join(\", \");\n const values = rows.map((row) => `(${row.map((cell) => renderCell({ cell, state, context })).join(\", \")})`).join(\", \");\n return `INSERT INTO ${table} (${columns}) VALUES ${values}`;\n }\n const where = (): string => state.where.length === 0 ? \"\" : ` WHERE ${state.where.map((expression) => expressionState(expression).render(context)).join(\" AND \")}`;\n if (state.kind === \"delete\") return `DELETE FROM ${table} AS ${alias}${where()}`;\n const definitions = sourceState(state.binding.source).columns;\n const set = state.set!.map((cell) => `${context.dialect.quoteIdent({ name: definitions[cell.name]!.name })} = ${renderCell({ cell, state, context })}`).join(\", \");\n return `UPDATE ${table} AS ${alias} SET ${set}${where()}`;\n}\n\nfunction mutation<Row>(state: WriteState): MutationBuilder<Row> {\n return Object.freeze({\n where: (callback) => {\n if (state.kind === \"insert\") invalid(\"INSERT does not accept WHERE\");\n if (typeof callback !== \"function\") invalid(\"SQL WHERE requires a callback\");\n const expression = callback(bindingColumns<Row>(state.binding));\n checkScope({ expression, bindings: [state.binding], aggregates: false });\n return mutation<Row>({ ...state, where: Object.freeze([...state.where, expression]) });\n },\n command: (): SqlCommand => {\n const query = createSqlCommand({ render: (context: RenderContext) => renderWrite({ state, context }) });\n builderTerminals.add(query);\n return query;\n },\n returning: <P extends Projection>(callback: (columns: Columns<Row>) => P): SqlQuery<ProjectionRow<P>> => {\n if (typeof callback !== \"function\") invalid(\"SQL RETURNING requires a callback\");\n const entries = projectionEntries({ projection: callback(bindingColumns<Row>(state.binding, false)), bindings: [state.binding], aggregates: false });\n const query = createSqlQuery({ decoder: projectionDecoder<P>(entries), render: (context: RenderContext) => {\n if (!context.dialect.capabilities.returning) unsupported(\"This dialect does not support native RETURNING; use a command instead\");\n return `${renderWrite({ state, context })} RETURNING ${renderEntries({ entries, context })}`;\n } });\n builderTerminals.add(query);\n return query;\n },\n } satisfies MutationBuilder<Row>);\n}\n\n/** @internal */\nexport function insert<Row, Input>(params: { into: Table<Row, Input>; values: WriteValues<NoInfer<Input>> | readonly WriteValues<NoInfer<Input>>[] }): MutationBuilder<Row> {\n const binding = tableBinding(params.into);\n const table = sourceState(params.into);\n const values = Array.isArray(params.values) ? params.values : [params.values];\n if (values.length === 0) invalid(\"INSERT requires at least one row\");\n const rows = values.map((value) => cells({ value, binding }));\n for (const row of rows) {\n const names = row.map((cell) => cell.name);\n if (table.required.some((name) => !names.includes(name))) invalid(\"INSERT is missing a required physical column; application defaults are not generated\");\n if (names.length !== rows[0]!.length || names.some((name, index) => name !== rows[0]![index]!.name)) invalid(\"Batch INSERT rows must have one homogeneous field set; statements are never split implicitly\");\n for (const cell of row) if (cell.expression !== undefined && expressionState(cell.expression).references.size > 0) invalid(\"INSERT values cannot reference the target table\");\n }\n return mutation<Row>({ binding, kind: \"insert\", rows: Object.freeze(rows), where: Object.freeze([]) });\n}\n\n/** @internal */\nexport function update<Row, Input>(params: { table: Table<Row, Input>; set: Partial<WriteValues<NoInfer<Input>>> }): MutationBuilder<Row> {\n const binding = tableBinding(params.table);\n const set = cells({ value: params.set, binding });\n if (set.length === 0) invalid(\"UPDATE requires at least one assignment\");\n return mutation<Row>({ binding, kind: \"update\", set, where: Object.freeze([]) });\n}\n\n/** @internal */\nexport function deleteRows<Row, Input>(params: { table: Table<Row, Input> }): MutationBuilder<Row> {\n return mutation<Row>({ binding: tableBinding(params.table), kind: \"delete\", where: Object.freeze([]) });\n}\n",
|
|
10
|
+
"import { createReusableSqlCommand, createReusableSqlQuery, createSqlInput, createSqlInputScope, isSqlCommand, isSqlQuery, sealSqlInputScope } from \"@vibeorm/sql\";\nimport type { ReusableSqlCommand, ReusableSqlQuery, SqlCommand, SqlInput, SqlInputMap, SqlInputTokens, SqlInputValues, SqlQuery } from \"@vibeorm/sql\";\nimport { columnInputContract } from \"./expressions.ts\";\nimport { assertWritableColumn, builderTerminals, expressionStates, invalid, sourceState, sourceStates } from \"./state.ts\";\nimport type { Expression, Table } from \"./types.ts\";\n\nconst columnInputs = new WeakMap<object, SqlInput<unknown>>();\n\n/**\n * Capture a physical column's write input without borrowing its read output type.\n * @internal\n */\nexport function input<Row, Input, K extends keyof Row & keyof Input & string>(params: { readonly table: Table<Row, Input>; readonly column: K }): SqlInput<Exclude<Input[K], undefined | Expression<never>>> {\n const table = sourceState(params.table);\n if (table.readOnly || table.query !== undefined || table.name === undefined) invalid(\"qb.input requires a writable physical table\");\n if (!Object.hasOwn(table.columns, params.column)) invalid(\"SQL input column does not belong to its table\");\n assertWritableColumn({ table, column: params.column });\n const definition = table.columns[params.column]!;\n let descriptor = columnInputs.get(definition);\n if (descriptor === undefined) {\n descriptor = createSqlInput({ contract: { ...columnInputContract(definition), columnIdentity: definition } });\n columnInputs.set(definition, descriptor);\n }\n return descriptor as SqlInput<Exclude<Input[K], undefined | Expression<never>>>;\n}\n\n/** This bundle's expressions (including qb.default) and sources are code, never execution data. */\nfunction builderHandle(value: object): boolean {\n return expressionStates.has(value) || sourceStates.has(value);\n}\n\n/**\n * Run one synchronous builder callback with private, write-only input tokens.\n * @internal\n */\nexport function reusable<const D extends SqlInputMap, Row>(params: { readonly params: D; readonly build: (params: SqlInputTokens<D>) => SqlQuery<Row> }): ReusableSqlQuery<SqlInputValues<D>, Row>;\n/** @internal */\nexport function reusable<const D extends SqlInputMap>(params: { readonly params: D; readonly build: (params: SqlInputTokens<D>) => SqlCommand }): ReusableSqlCommand<SqlInputValues<D>>;\n/** @internal */\nexport function reusable<const D extends SqlInputMap>(params: { readonly params: D; readonly build: (params: SqlInputTokens<D>) => SqlQuery<unknown> | SqlCommand }): ReusableSqlQuery<SqlInputValues<D>, unknown> | ReusableSqlCommand<SqlInputValues<D>> {\n if (typeof params.build !== \"function\") invalid(\"Reusable SQL requires a synchronous builder callback\");\n const environment = createSqlInputScope({ inputs: params.params, isHandle: builderHandle });\n let query: SqlQuery<unknown> | SqlCommand;\n try {\n query = params.build(environment.params);\n } finally {\n sealSqlInputScope({ scope: environment.scope });\n }\n if (typeof query !== \"object\" || query === null || !builderTerminals.has(query)) invalid(\"Reusable SQL requires an ordinary builder query or command terminal\");\n if (isSqlQuery(query)) return createReusableSqlQuery({ query, scope: environment.scope });\n if (isSqlCommand(query)) return createReusableSqlCommand({ query, scope: environment.scope });\n return invalid(\"Reusable SQL requires an ordinary builder query or command terminal\");\n}\n",
|
|
11
11
|
"import type { QueryBuilder } from \"./types.ts\";\nimport { from, union } from \"./select.ts\";\nimport { makeDerived, makeTable } from \"./sources.ts\";\nimport { deleteRows, insert, sqlDefault, update } from \"./mutations.ts\";\nimport { input, reusable } from \"./reusable.ts\";\nimport { literal, rawExpression } from \"./expressions.ts\";\n\n/** Opt-in native SQL builder. Core fragments/plans are bare-imported from @vibeorm/sql. */\nexport const qb: QueryBuilder = Object.freeze({\n input,\n reusable,\n table: makeTable,\n from,\n derived: (params) => makeDerived(params),\n cte: (params) => makeDerived(params),\n union,\n insert,\n update,\n delete: deleteRows,\n default: sqlDefault,\n value: literal,\n raw: rawExpression,\n} satisfies QueryBuilder);\n\nexport { and, avg, count, eq, gt, gte, inList, isNotNull, isNull, lt, lte, max, min, ne, not, notInList, or, sum } from \"./expressions.ts\";\nexport type { ColumnDefinition, ColumnDefinitions, Columns, Expression, Expressions, MutationBuilder, NullableRow, Order, Projection, ProjectionRow, QueryBuilder, Scope, SelectBuilder, Source, Table, WriteValues } from \"./types.ts\";\n"
|
|
12
12
|
],
|
|
13
|
-
"mappings": "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",
|
|
13
|
+
"mappings": "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",
|
|
14
14
|
"debugId": "3FADE857D3991B3164756E2164756E21",
|
|
15
15
|
"names": []
|
|
16
16
|
}
|