@prisma-next/adapter-postgres 0.3.0-pr.106.1 → 0.3.0-pr.107.1
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/{chunk-Y6L4BBLR.js → chunk-T6S3A6VT.js} +3 -11
- package/dist/chunk-T6S3A6VT.js.map +1 -0
- package/dist/core/adapter.d.ts.map +1 -1
- package/dist/exports/adapter.js +1 -1
- package/dist/exports/runtime.js +1 -1
- package/package.json +13 -13
- package/src/core/adapter.ts +4 -15
- package/dist/chunk-Y6L4BBLR.js.map +0 -1
|
@@ -97,16 +97,8 @@ function renderWhere(expr, contract) {
|
|
|
97
97
|
const subquery = renderSelect(expr.subquery, contract);
|
|
98
98
|
return `${notKeyword}EXISTS (${subquery})`;
|
|
99
99
|
}
|
|
100
|
-
if (expr.kind === "nullCheck") {
|
|
101
|
-
return renderNullCheck(expr, contract);
|
|
102
|
-
}
|
|
103
100
|
return renderBinary(expr, contract);
|
|
104
101
|
}
|
|
105
|
-
function renderNullCheck(expr, contract) {
|
|
106
|
-
const rendered = renderExpr(expr.expr, contract);
|
|
107
|
-
const renderedExpr = isOperationExpr(expr.expr) ? `(${rendered})` : rendered;
|
|
108
|
-
return expr.isNull ? `${renderedExpr} IS NULL` : `${renderedExpr} IS NOT NULL`;
|
|
109
|
-
}
|
|
110
102
|
function renderBinary(expr, contract) {
|
|
111
103
|
const leftExpr = expr.left;
|
|
112
104
|
const left = renderExpr(leftExpr, contract);
|
|
@@ -289,13 +281,13 @@ function renderUpdate(ast, contract) {
|
|
|
289
281
|
}
|
|
290
282
|
return `${column} = ${value}`;
|
|
291
283
|
});
|
|
292
|
-
const whereClause = ` WHERE ${
|
|
284
|
+
const whereClause = ` WHERE ${renderBinary(ast.where, contract)}`;
|
|
293
285
|
const returningClause = ast.returning?.length ? ` RETURNING ${ast.returning.map((col) => `${quoteIdentifier(col.table)}.${quoteIdentifier(col.column)}`).join(", ")}` : "";
|
|
294
286
|
return `UPDATE ${table} SET ${setClauses.join(", ")}${whereClause}${returningClause}`;
|
|
295
287
|
}
|
|
296
288
|
function renderDelete(ast, contract) {
|
|
297
289
|
const table = quoteIdentifier(ast.table.name);
|
|
298
|
-
const whereClause = ` WHERE ${
|
|
290
|
+
const whereClause = ` WHERE ${renderBinary(ast.where, contract)}`;
|
|
299
291
|
const returningClause = ast.returning?.length ? ` RETURNING ${ast.returning.map((col) => `${quoteIdentifier(col.table)}.${quoteIdentifier(col.column)}`).join(", ")}` : "";
|
|
300
292
|
return `DELETE FROM ${table}${whereClause}${returningClause}`;
|
|
301
293
|
}
|
|
@@ -306,4 +298,4 @@ function createPostgresAdapter(options) {
|
|
|
306
298
|
export {
|
|
307
299
|
createPostgresAdapter
|
|
308
300
|
};
|
|
309
|
-
//# sourceMappingURL=chunk-
|
|
301
|
+
//# sourceMappingURL=chunk-T6S3A6VT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/adapter.ts"],"sourcesContent":["import type {\n Adapter,\n AdapterProfile,\n BinaryExpr,\n ColumnRef,\n DeleteAst,\n ExistsExpr,\n IncludeRef,\n InsertAst,\n JoinAst,\n LiteralExpr,\n LowererContext,\n OperationExpr,\n ParamRef,\n QueryAst,\n SelectAst,\n UpdateAst,\n} from '@prisma-next/sql-relational-core/ast';\nimport { createCodecRegistry, isOperationExpr } from '@prisma-next/sql-relational-core/ast';\nimport { codecDefinitions } from './codecs';\nimport type { PostgresAdapterOptions, PostgresContract, PostgresLoweredStatement } from './types';\n\nconst VECTOR_CODEC_ID = 'pg/vector@1' as const;\n\nconst defaultCapabilities = Object.freeze({\n postgres: {\n orderBy: true,\n limit: true,\n lateral: true,\n jsonAgg: true,\n returning: true,\n },\n});\n\nclass PostgresAdapterImpl implements Adapter<QueryAst, PostgresContract, PostgresLoweredStatement> {\n // These fields make the adapter instance structurally compatible with\n // RuntimeAdapterInstance<'sql', 'postgres'> without introducing a runtime-plane dependency.\n readonly familyId = 'sql' as const;\n readonly targetId = 'postgres' as const;\n\n readonly profile: AdapterProfile<'postgres'>;\n private readonly codecRegistry = (() => {\n const registry = createCodecRegistry();\n for (const definition of Object.values(codecDefinitions)) {\n registry.register(definition.codec);\n }\n return registry;\n })();\n\n constructor(options?: PostgresAdapterOptions) {\n this.profile = Object.freeze({\n id: options?.profileId ?? 'postgres/default@1',\n target: 'postgres',\n capabilities: defaultCapabilities,\n codecs: () => this.codecRegistry,\n });\n }\n\n lower(ast: QueryAst, context: LowererContext<PostgresContract>) {\n let sql: string;\n const params = context.params ? [...context.params] : [];\n\n if (ast.kind === 'select') {\n sql = renderSelect(ast, context.contract);\n } else if (ast.kind === 'insert') {\n sql = renderInsert(ast, context.contract);\n } else if (ast.kind === 'update') {\n sql = renderUpdate(ast, context.contract);\n } else if (ast.kind === 'delete') {\n sql = renderDelete(ast, context.contract);\n } else {\n throw new Error(`Unsupported AST kind: ${(ast as { kind: string }).kind}`);\n }\n\n return Object.freeze({\n profileId: this.profile.id,\n body: Object.freeze({ sql, params }),\n });\n }\n}\n\nfunction renderSelect(ast: SelectAst, contract?: PostgresContract): string {\n const selectClause = `SELECT ${renderProjection(ast, contract)}`;\n const fromClause = `FROM ${quoteIdentifier(ast.from.name)}`;\n\n const joinsClause = ast.joins?.length\n ? ast.joins.map((join) => renderJoin(join, contract)).join(' ')\n : '';\n const includesClause = ast.includes?.length\n ? ast.includes.map((include) => renderInclude(include, contract)).join(' ')\n : '';\n\n const whereClause = ast.where ? ` WHERE ${renderWhere(ast.where, contract)}` : '';\n const orderClause = ast.orderBy?.length\n ? ` ORDER BY ${ast.orderBy\n .map((order) => {\n const expr = renderExpr(order.expr as ColumnRef | OperationExpr, contract);\n return `${expr} ${order.dir.toUpperCase()}`;\n })\n .join(', ')}`\n : '';\n const limitClause = typeof ast.limit === 'number' ? ` LIMIT ${ast.limit}` : '';\n\n const clauses = [joinsClause, includesClause].filter(Boolean).join(' ');\n return `${selectClause} ${fromClause}${clauses ? ` ${clauses}` : ''}${whereClause}${orderClause}${limitClause}`.trim();\n}\n\nfunction renderProjection(ast: SelectAst, contract?: PostgresContract): string {\n return ast.project\n .map((item) => {\n const expr = item.expr as ColumnRef | IncludeRef | OperationExpr | LiteralExpr;\n if (expr.kind === 'includeRef') {\n // For include references, select the column from the LATERAL join alias\n // The LATERAL subquery returns a single column (the JSON array) with the alias\n // The table is aliased as {alias}_lateral, and the column inside is aliased as the include alias\n // We select it using table_alias.column_alias\n const tableAlias = `${expr.alias}_lateral`;\n return `${quoteIdentifier(tableAlias)}.${quoteIdentifier(expr.alias)} AS ${quoteIdentifier(item.alias)}`;\n }\n if (expr.kind === 'operation') {\n const operation = renderOperation(expr, contract);\n const alias = quoteIdentifier(item.alias);\n return `${operation} AS ${alias}`;\n }\n if (expr.kind === 'literal') {\n const literal = renderLiteral(expr);\n const alias = quoteIdentifier(item.alias);\n return `${literal} AS ${alias}`;\n }\n const column = renderColumn(expr as ColumnRef);\n const alias = quoteIdentifier(item.alias);\n return `${column} AS ${alias}`;\n })\n .join(', ');\n}\n\nfunction renderWhere(expr: BinaryExpr | ExistsExpr, contract?: PostgresContract): string {\n if (expr.kind === 'exists') {\n const notKeyword = expr.not ? 'NOT ' : '';\n const subquery = renderSelect(expr.subquery, contract);\n return `${notKeyword}EXISTS (${subquery})`;\n }\n return renderBinary(expr, contract);\n}\n\nfunction renderBinary(expr: BinaryExpr, contract?: PostgresContract): string {\n const leftExpr = expr.left as ColumnRef | OperationExpr;\n const left = renderExpr(leftExpr, contract);\n // Handle both ParamRef and ColumnRef on the right side\n // (ColumnRef can appear in EXISTS subqueries for correlation)\n const rightExpr = expr.right as ParamRef | ColumnRef;\n const right =\n rightExpr.kind === 'col'\n ? renderColumn(rightExpr)\n : renderParam(rightExpr as ParamRef, contract);\n // Only wrap in parentheses if it's an operation expression\n const leftRendered = isOperationExpr(leftExpr) ? `(${left})` : left;\n\n // Map operators to SQL symbols\n const operatorMap: Record<BinaryExpr['op'], string> = {\n eq: '=',\n neq: '!=',\n gt: '>',\n lt: '<',\n gte: '>=',\n lte: '<=',\n };\n\n return `${leftRendered} ${operatorMap[expr.op]} ${right}`;\n}\n\nfunction renderColumn(ref: ColumnRef): string {\n return `${quoteIdentifier(ref.table)}.${quoteIdentifier(ref.column)}`;\n}\n\nfunction renderExpr(expr: ColumnRef | OperationExpr, contract?: PostgresContract): string {\n if (isOperationExpr(expr)) {\n return renderOperation(expr, contract);\n }\n return renderColumn(expr);\n}\n\nfunction renderParam(\n ref: ParamRef,\n contract?: PostgresContract,\n tableName?: string,\n columnName?: string,\n): string {\n // Cast vector parameters to vector type for PostgreSQL\n if (contract && tableName && columnName) {\n const tableMeta = contract.storage.tables[tableName];\n const columnMeta = tableMeta?.columns[columnName];\n if (columnMeta?.codecId === VECTOR_CODEC_ID) {\n return `$${ref.index}::vector`;\n }\n }\n return `$${ref.index}`;\n}\n\nfunction renderLiteral(expr: LiteralExpr): string {\n if (typeof expr.value === 'string') {\n return `'${expr.value.replace(/'/g, \"''\")}'`;\n }\n if (typeof expr.value === 'number' || typeof expr.value === 'boolean') {\n return String(expr.value);\n }\n if (expr.value === null) {\n return 'NULL';\n }\n if (Array.isArray(expr.value)) {\n return `ARRAY[${expr.value.map((v: unknown) => renderLiteral({ kind: 'literal', value: v })).join(', ')}]`;\n }\n return JSON.stringify(expr.value);\n}\n\nfunction renderOperation(expr: OperationExpr, contract?: PostgresContract): string {\n const self = renderExpr(expr.self, contract);\n // For vector operations, cast param arguments to vector type\n const isVectorOperation = expr.forTypeId === VECTOR_CODEC_ID;\n const args = expr.args.map((arg: ColumnRef | ParamRef | LiteralExpr | OperationExpr) => {\n if (arg.kind === 'col') {\n return renderColumn(arg);\n }\n if (arg.kind === 'param') {\n // Cast vector operation parameters to vector type\n return isVectorOperation ? `$${arg.index}::vector` : renderParam(arg, contract);\n }\n if (arg.kind === 'literal') {\n return renderLiteral(arg);\n }\n if (arg.kind === 'operation') {\n return renderOperation(arg, contract);\n }\n const _exhaustive: never = arg;\n throw new Error(`Unsupported argument kind: ${(_exhaustive as { kind: string }).kind}`);\n });\n\n let result = expr.lowering.template;\n result = result.replace(/\\$\\{self\\}/g, self);\n for (let i = 0; i < args.length; i++) {\n result = result.replace(new RegExp(`\\\\$\\\\{arg${i}\\\\}`, 'g'), args[i] ?? '');\n }\n\n if (expr.lowering.strategy === 'function') {\n return result;\n }\n\n return result;\n}\n\nfunction renderJoin(join: JoinAst, _contract?: PostgresContract): string {\n const joinType = join.joinType.toUpperCase();\n const table = quoteIdentifier(join.table.name);\n const onClause = renderJoinOn(join.on);\n return `${joinType} JOIN ${table} ON ${onClause}`;\n}\n\nfunction renderJoinOn(on: JoinAst['on']): string {\n if (on.kind === 'eqCol') {\n const left = renderColumn(on.left);\n const right = renderColumn(on.right);\n return `${left} = ${right}`;\n }\n throw new Error(`Unsupported join ON expression kind: ${on.kind}`);\n}\n\nfunction renderInclude(\n include: NonNullable<SelectAst['includes']>[number],\n contract?: PostgresContract,\n): string {\n const alias = include.alias;\n\n // Build the lateral subquery\n const childProjection = include.child.project\n .map((item: { alias: string; expr: ColumnRef | OperationExpr }) => {\n const expr = renderExpr(item.expr, contract);\n return `'${item.alias}', ${expr}`;\n })\n .join(', ');\n\n const jsonBuildObject = `json_build_object(${childProjection})`;\n\n // Build the ON condition from the include's ON clause - this goes in the WHERE clause\n const onCondition = renderJoinOn(include.child.on);\n\n // Build WHERE clause: combine ON condition with any additional WHERE clauses\n let whereClause = ` WHERE ${onCondition}`;\n if (include.child.where) {\n whereClause += ` AND ${renderWhere(include.child.where, contract)}`;\n }\n\n // Add ORDER BY if present - it goes inside json_agg() call\n const childOrderBy = include.child.orderBy?.length\n ? ` ORDER BY ${include.child.orderBy\n .map(\n (order: { expr: ColumnRef | OperationExpr; dir: string }) =>\n `${renderExpr(order.expr, contract)} ${order.dir.toUpperCase()}`,\n )\n .join(', ')}`\n : '';\n\n // Add LIMIT if present\n const childLimit = typeof include.child.limit === 'number' ? ` LIMIT ${include.child.limit}` : '';\n\n // Build the lateral subquery\n // When ORDER BY is present without LIMIT, it goes inside json_agg() call: json_agg(expr ORDER BY ...)\n // When LIMIT is present (with or without ORDER BY), we need to wrap in a subquery\n const childTable = quoteIdentifier(include.child.table.name);\n let subquery: string;\n if (typeof include.child.limit === 'number') {\n // With LIMIT, we need to wrap in a subquery\n // Select individual columns in inner query, then aggregate\n // Create a map of column references to their aliases for ORDER BY\n // Only ColumnRef can be mapped (OperationExpr doesn't have table/column properties)\n const columnAliasMap = new Map<string, string>();\n for (const item of include.child.project) {\n if (item.expr.kind === 'col') {\n const columnKey = `${item.expr.table}.${item.expr.column}`;\n columnAliasMap.set(columnKey, item.alias);\n }\n }\n\n const innerColumns = include.child.project\n .map((item: { alias: string; expr: ColumnRef | OperationExpr }) => {\n const expr = renderExpr(item.expr, contract);\n return `${expr} AS ${quoteIdentifier(item.alias)}`;\n })\n .join(', ');\n\n // For ORDER BY, use column aliases if the column is in the SELECT list\n const childOrderByWithAliases = include.child.orderBy?.length\n ? ` ORDER BY ${include.child.orderBy\n .map((order: { expr: ColumnRef | OperationExpr; dir: string }) => {\n if (order.expr.kind === 'col') {\n const columnKey = `${order.expr.table}.${order.expr.column}`;\n const alias = columnAliasMap.get(columnKey);\n if (alias) {\n return `${quoteIdentifier(alias)} ${order.dir.toUpperCase()}`;\n }\n }\n return `${renderExpr(order.expr, contract)} ${order.dir.toUpperCase()}`;\n })\n .join(', ')}`\n : '';\n\n const innerSelect = `SELECT ${innerColumns} FROM ${childTable}${whereClause}${childOrderByWithAliases}${childLimit}`;\n subquery = `(SELECT json_agg(row_to_json(sub.*)) AS ${quoteIdentifier(alias)} FROM (${innerSelect}) sub)`;\n } else if (childOrderBy) {\n // With ORDER BY but no LIMIT, ORDER BY goes inside json_agg()\n subquery = `(SELECT json_agg(${jsonBuildObject}${childOrderBy}) AS ${quoteIdentifier(alias)} FROM ${childTable}${whereClause})`;\n } else {\n // No ORDER BY or LIMIT\n subquery = `(SELECT json_agg(${jsonBuildObject}) AS ${quoteIdentifier(alias)} FROM ${childTable}${whereClause})`;\n }\n\n // Return the LATERAL join with ON true (the condition is in the WHERE clause)\n // The subquery returns a single column (the JSON array) with the alias\n // We use a different alias for the table to avoid ambiguity when selecting the column\n const tableAlias = `${alias}_lateral`;\n return `LEFT JOIN LATERAL ${subquery} AS ${quoteIdentifier(tableAlias)} ON true`;\n}\n\nfunction quoteIdentifier(identifier: string): string {\n return `\"${identifier.replace(/\"/g, '\"\"')}\"`;\n}\n\nfunction renderInsert(ast: InsertAst, contract: PostgresContract): string {\n const table = quoteIdentifier(ast.table.name);\n const columns = Object.keys(ast.values).map((col) => quoteIdentifier(col));\n const tableMeta = contract.storage.tables[ast.table.name];\n const values = Object.entries(ast.values).map(([colName, val]) => {\n if (val.kind === 'param') {\n const columnMeta = tableMeta?.columns[colName];\n const isVector = columnMeta?.codecId === VECTOR_CODEC_ID;\n return isVector ? `$${val.index}::vector` : `$${val.index}`;\n }\n if (val.kind === 'col') {\n return `${quoteIdentifier(val.table)}.${quoteIdentifier(val.column)}`;\n }\n throw new Error(`Unsupported value kind in INSERT: ${(val as { kind: string }).kind}`);\n });\n\n const insertClause = `INSERT INTO ${table} (${columns.join(', ')}) VALUES (${values.join(', ')})`;\n const returningClause = ast.returning?.length\n ? ` RETURNING ${ast.returning.map((col) => `${quoteIdentifier(col.table)}.${quoteIdentifier(col.column)}`).join(', ')}`\n : '';\n\n return `${insertClause}${returningClause}`;\n}\n\nfunction renderUpdate(ast: UpdateAst, contract: PostgresContract): string {\n const table = quoteIdentifier(ast.table.name);\n const tableMeta = contract.storage.tables[ast.table.name];\n const setClauses = Object.entries(ast.set).map(([col, val]) => {\n const column = quoteIdentifier(col);\n let value: string;\n if (val.kind === 'param') {\n const columnMeta = tableMeta?.columns[col];\n const isVector = columnMeta?.codecId === VECTOR_CODEC_ID;\n value = isVector ? `$${val.index}::vector` : `$${val.index}`;\n } else if (val.kind === 'col') {\n value = `${quoteIdentifier(val.table)}.${quoteIdentifier(val.column)}`;\n } else {\n throw new Error(`Unsupported value kind in UPDATE: ${(val as { kind: string }).kind}`);\n }\n return `${column} = ${value}`;\n });\n\n const whereClause = ` WHERE ${renderBinary(ast.where, contract)}`;\n const returningClause = ast.returning?.length\n ? ` RETURNING ${ast.returning.map((col) => `${quoteIdentifier(col.table)}.${quoteIdentifier(col.column)}`).join(', ')}`\n : '';\n\n return `UPDATE ${table} SET ${setClauses.join(', ')}${whereClause}${returningClause}`;\n}\n\nfunction renderDelete(ast: DeleteAst, contract?: PostgresContract): string {\n const table = quoteIdentifier(ast.table.name);\n const whereClause = ` WHERE ${renderBinary(ast.where, contract)}`;\n const returningClause = ast.returning?.length\n ? ` RETURNING ${ast.returning.map((col) => `${quoteIdentifier(col.table)}.${quoteIdentifier(col.column)}`).join(', ')}`\n : '';\n\n return `DELETE FROM ${table}${whereClause}${returningClause}`;\n}\n\nexport function createPostgresAdapter(options?: PostgresAdapterOptions) {\n return Object.freeze(new PostgresAdapterImpl(options));\n}\n"],"mappings":"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","names":["alias"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/core/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,cAAc,
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/core/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EASd,cAAc,EAGd,QAAQ,EAGT,MAAM,sCAAsC,CAAC;AAG9C,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAclG,cAAM,mBAAoB,YAAW,OAAO,CAAC,QAAQ,EAAE,gBAAgB,EAAE,wBAAwB,CAAC;IAGhG,QAAQ,CAAC,QAAQ,EAAG,KAAK,CAAU;IACnC,QAAQ,CAAC,QAAQ,EAAG,UAAU,CAAU;IAExC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAMzB;gBAEO,OAAO,CAAC,EAAE,sBAAsB;IAS5C,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC,gBAAgB,CAAC;;;;;;;CAqB/D;AA2VD,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,sBAAsB,iCAErE"}
|
package/dist/exports/adapter.js
CHANGED
package/dist/exports/runtime.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma-next/adapter-postgres",
|
|
3
|
-
"version": "0.3.0-pr.
|
|
3
|
+
"version": "0.3.0-pr.107.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"files": [
|
|
@@ -9,17 +9,17 @@
|
|
|
9
9
|
],
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"arktype": "^2.0.0",
|
|
12
|
-
"@prisma-next/cli": "0.3.0-pr.
|
|
13
|
-
"@prisma-next/contract
|
|
14
|
-
"@prisma-next/
|
|
15
|
-
"@prisma-next/
|
|
16
|
-
"@prisma-next/core-execution-plane": "0.3.0-pr.
|
|
17
|
-
"@prisma-next/family-sql": "0.3.0-pr.
|
|
18
|
-
"@prisma-next/sql-contract": "0.3.0-pr.
|
|
19
|
-
"@prisma-next/sql-contract-ts": "0.3.0-pr.
|
|
20
|
-
"@prisma-next/sql-operations": "0.3.0-pr.
|
|
21
|
-
"@prisma-next/sql-relational-core": "0.3.0-pr.
|
|
22
|
-
"@prisma-next/sql-schema-ir": "0.3.0-pr.
|
|
12
|
+
"@prisma-next/cli": "0.3.0-pr.107.1",
|
|
13
|
+
"@prisma-next/contract": "0.3.0-pr.107.1",
|
|
14
|
+
"@prisma-next/contract-authoring": "0.3.0-pr.107.1",
|
|
15
|
+
"@prisma-next/core-control-plane": "0.3.0-pr.107.1",
|
|
16
|
+
"@prisma-next/core-execution-plane": "0.3.0-pr.107.1",
|
|
17
|
+
"@prisma-next/family-sql": "0.3.0-pr.107.1",
|
|
18
|
+
"@prisma-next/sql-contract": "0.3.0-pr.107.1",
|
|
19
|
+
"@prisma-next/sql-contract-ts": "0.3.0-pr.107.1",
|
|
20
|
+
"@prisma-next/sql-operations": "0.3.0-pr.107.1",
|
|
21
|
+
"@prisma-next/sql-relational-core": "0.3.0-pr.107.1",
|
|
22
|
+
"@prisma-next/sql-schema-ir": "0.3.0-pr.107.1"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"tsup": "8.5.1",
|
|
@@ -63,6 +63,6 @@
|
|
|
63
63
|
"lint": "biome check . --error-on-warnings",
|
|
64
64
|
"lint:fix": "biome check --write .",
|
|
65
65
|
"lint:fix:unsafe": "biome check --write --unsafe .",
|
|
66
|
-
"clean": "rm -rf dist coverage .tmp-output"
|
|
66
|
+
"clean": "rm -rf dist dist-tsc dist-tsc-prod coverage .tmp-output"
|
|
67
67
|
}
|
|
68
68
|
}
|
package/src/core/adapter.ts
CHANGED
|
@@ -4,18 +4,17 @@ import type {
|
|
|
4
4
|
BinaryExpr,
|
|
5
5
|
ColumnRef,
|
|
6
6
|
DeleteAst,
|
|
7
|
+
ExistsExpr,
|
|
7
8
|
IncludeRef,
|
|
8
9
|
InsertAst,
|
|
9
10
|
JoinAst,
|
|
10
11
|
LiteralExpr,
|
|
11
12
|
LowererContext,
|
|
12
|
-
NullCheckExpr,
|
|
13
13
|
OperationExpr,
|
|
14
14
|
ParamRef,
|
|
15
15
|
QueryAst,
|
|
16
16
|
SelectAst,
|
|
17
17
|
UpdateAst,
|
|
18
|
-
WhereExpr,
|
|
19
18
|
} from '@prisma-next/sql-relational-core/ast';
|
|
20
19
|
import { createCodecRegistry, isOperationExpr } from '@prisma-next/sql-relational-core/ast';
|
|
21
20
|
import { codecDefinitions } from './codecs';
|
|
@@ -135,25 +134,15 @@ function renderProjection(ast: SelectAst, contract?: PostgresContract): string {
|
|
|
135
134
|
.join(', ');
|
|
136
135
|
}
|
|
137
136
|
|
|
138
|
-
function renderWhere(expr:
|
|
137
|
+
function renderWhere(expr: BinaryExpr | ExistsExpr, contract?: PostgresContract): string {
|
|
139
138
|
if (expr.kind === 'exists') {
|
|
140
139
|
const notKeyword = expr.not ? 'NOT ' : '';
|
|
141
140
|
const subquery = renderSelect(expr.subquery, contract);
|
|
142
141
|
return `${notKeyword}EXISTS (${subquery})`;
|
|
143
142
|
}
|
|
144
|
-
if (expr.kind === 'nullCheck') {
|
|
145
|
-
return renderNullCheck(expr, contract);
|
|
146
|
-
}
|
|
147
143
|
return renderBinary(expr, contract);
|
|
148
144
|
}
|
|
149
145
|
|
|
150
|
-
function renderNullCheck(expr: NullCheckExpr, contract?: PostgresContract): string {
|
|
151
|
-
const rendered = renderExpr(expr.expr as ColumnRef | OperationExpr, contract);
|
|
152
|
-
// Only wrap in parentheses if it's an operation expression
|
|
153
|
-
const renderedExpr = isOperationExpr(expr.expr) ? `(${rendered})` : rendered;
|
|
154
|
-
return expr.isNull ? `${renderedExpr} IS NULL` : `${renderedExpr} IS NOT NULL`;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
146
|
function renderBinary(expr: BinaryExpr, contract?: PostgresContract): string {
|
|
158
147
|
const leftExpr = expr.left as ColumnRef | OperationExpr;
|
|
159
148
|
const left = renderExpr(leftExpr, contract);
|
|
@@ -417,7 +406,7 @@ function renderUpdate(ast: UpdateAst, contract: PostgresContract): string {
|
|
|
417
406
|
return `${column} = ${value}`;
|
|
418
407
|
});
|
|
419
408
|
|
|
420
|
-
const whereClause = ` WHERE ${
|
|
409
|
+
const whereClause = ` WHERE ${renderBinary(ast.where, contract)}`;
|
|
421
410
|
const returningClause = ast.returning?.length
|
|
422
411
|
? ` RETURNING ${ast.returning.map((col) => `${quoteIdentifier(col.table)}.${quoteIdentifier(col.column)}`).join(', ')}`
|
|
423
412
|
: '';
|
|
@@ -427,7 +416,7 @@ function renderUpdate(ast: UpdateAst, contract: PostgresContract): string {
|
|
|
427
416
|
|
|
428
417
|
function renderDelete(ast: DeleteAst, contract?: PostgresContract): string {
|
|
429
418
|
const table = quoteIdentifier(ast.table.name);
|
|
430
|
-
const whereClause = ` WHERE ${
|
|
419
|
+
const whereClause = ` WHERE ${renderBinary(ast.where, contract)}`;
|
|
431
420
|
const returningClause = ast.returning?.length
|
|
432
421
|
? ` RETURNING ${ast.returning.map((col) => `${quoteIdentifier(col.table)}.${quoteIdentifier(col.column)}`).join(', ')}`
|
|
433
422
|
: '';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/adapter.ts"],"sourcesContent":["import type {\n Adapter,\n AdapterProfile,\n BinaryExpr,\n ColumnRef,\n DeleteAst,\n IncludeRef,\n InsertAst,\n JoinAst,\n LiteralExpr,\n LowererContext,\n NullCheckExpr,\n OperationExpr,\n ParamRef,\n QueryAst,\n SelectAst,\n UpdateAst,\n WhereExpr,\n} from '@prisma-next/sql-relational-core/ast';\nimport { createCodecRegistry, isOperationExpr } from '@prisma-next/sql-relational-core/ast';\nimport { codecDefinitions } from './codecs';\nimport type { PostgresAdapterOptions, PostgresContract, PostgresLoweredStatement } from './types';\n\nconst VECTOR_CODEC_ID = 'pg/vector@1' as const;\n\nconst defaultCapabilities = Object.freeze({\n postgres: {\n orderBy: true,\n limit: true,\n lateral: true,\n jsonAgg: true,\n returning: true,\n },\n});\n\nclass PostgresAdapterImpl implements Adapter<QueryAst, PostgresContract, PostgresLoweredStatement> {\n // These fields make the adapter instance structurally compatible with\n // RuntimeAdapterInstance<'sql', 'postgres'> without introducing a runtime-plane dependency.\n readonly familyId = 'sql' as const;\n readonly targetId = 'postgres' as const;\n\n readonly profile: AdapterProfile<'postgres'>;\n private readonly codecRegistry = (() => {\n const registry = createCodecRegistry();\n for (const definition of Object.values(codecDefinitions)) {\n registry.register(definition.codec);\n }\n return registry;\n })();\n\n constructor(options?: PostgresAdapterOptions) {\n this.profile = Object.freeze({\n id: options?.profileId ?? 'postgres/default@1',\n target: 'postgres',\n capabilities: defaultCapabilities,\n codecs: () => this.codecRegistry,\n });\n }\n\n lower(ast: QueryAst, context: LowererContext<PostgresContract>) {\n let sql: string;\n const params = context.params ? [...context.params] : [];\n\n if (ast.kind === 'select') {\n sql = renderSelect(ast, context.contract);\n } else if (ast.kind === 'insert') {\n sql = renderInsert(ast, context.contract);\n } else if (ast.kind === 'update') {\n sql = renderUpdate(ast, context.contract);\n } else if (ast.kind === 'delete') {\n sql = renderDelete(ast, context.contract);\n } else {\n throw new Error(`Unsupported AST kind: ${(ast as { kind: string }).kind}`);\n }\n\n return Object.freeze({\n profileId: this.profile.id,\n body: Object.freeze({ sql, params }),\n });\n }\n}\n\nfunction renderSelect(ast: SelectAst, contract?: PostgresContract): string {\n const selectClause = `SELECT ${renderProjection(ast, contract)}`;\n const fromClause = `FROM ${quoteIdentifier(ast.from.name)}`;\n\n const joinsClause = ast.joins?.length\n ? ast.joins.map((join) => renderJoin(join, contract)).join(' ')\n : '';\n const includesClause = ast.includes?.length\n ? ast.includes.map((include) => renderInclude(include, contract)).join(' ')\n : '';\n\n const whereClause = ast.where ? ` WHERE ${renderWhere(ast.where, contract)}` : '';\n const orderClause = ast.orderBy?.length\n ? ` ORDER BY ${ast.orderBy\n .map((order) => {\n const expr = renderExpr(order.expr as ColumnRef | OperationExpr, contract);\n return `${expr} ${order.dir.toUpperCase()}`;\n })\n .join(', ')}`\n : '';\n const limitClause = typeof ast.limit === 'number' ? ` LIMIT ${ast.limit}` : '';\n\n const clauses = [joinsClause, includesClause].filter(Boolean).join(' ');\n return `${selectClause} ${fromClause}${clauses ? ` ${clauses}` : ''}${whereClause}${orderClause}${limitClause}`.trim();\n}\n\nfunction renderProjection(ast: SelectAst, contract?: PostgresContract): string {\n return ast.project\n .map((item) => {\n const expr = item.expr as ColumnRef | IncludeRef | OperationExpr | LiteralExpr;\n if (expr.kind === 'includeRef') {\n // For include references, select the column from the LATERAL join alias\n // The LATERAL subquery returns a single column (the JSON array) with the alias\n // The table is aliased as {alias}_lateral, and the column inside is aliased as the include alias\n // We select it using table_alias.column_alias\n const tableAlias = `${expr.alias}_lateral`;\n return `${quoteIdentifier(tableAlias)}.${quoteIdentifier(expr.alias)} AS ${quoteIdentifier(item.alias)}`;\n }\n if (expr.kind === 'operation') {\n const operation = renderOperation(expr, contract);\n const alias = quoteIdentifier(item.alias);\n return `${operation} AS ${alias}`;\n }\n if (expr.kind === 'literal') {\n const literal = renderLiteral(expr);\n const alias = quoteIdentifier(item.alias);\n return `${literal} AS ${alias}`;\n }\n const column = renderColumn(expr as ColumnRef);\n const alias = quoteIdentifier(item.alias);\n return `${column} AS ${alias}`;\n })\n .join(', ');\n}\n\nfunction renderWhere(expr: WhereExpr, contract?: PostgresContract): string {\n if (expr.kind === 'exists') {\n const notKeyword = expr.not ? 'NOT ' : '';\n const subquery = renderSelect(expr.subquery, contract);\n return `${notKeyword}EXISTS (${subquery})`;\n }\n if (expr.kind === 'nullCheck') {\n return renderNullCheck(expr, contract);\n }\n return renderBinary(expr, contract);\n}\n\nfunction renderNullCheck(expr: NullCheckExpr, contract?: PostgresContract): string {\n const rendered = renderExpr(expr.expr as ColumnRef | OperationExpr, contract);\n // Only wrap in parentheses if it's an operation expression\n const renderedExpr = isOperationExpr(expr.expr) ? `(${rendered})` : rendered;\n return expr.isNull ? `${renderedExpr} IS NULL` : `${renderedExpr} IS NOT NULL`;\n}\n\nfunction renderBinary(expr: BinaryExpr, contract?: PostgresContract): string {\n const leftExpr = expr.left as ColumnRef | OperationExpr;\n const left = renderExpr(leftExpr, contract);\n // Handle both ParamRef and ColumnRef on the right side\n // (ColumnRef can appear in EXISTS subqueries for correlation)\n const rightExpr = expr.right as ParamRef | ColumnRef;\n const right =\n rightExpr.kind === 'col'\n ? renderColumn(rightExpr)\n : renderParam(rightExpr as ParamRef, contract);\n // Only wrap in parentheses if it's an operation expression\n const leftRendered = isOperationExpr(leftExpr) ? `(${left})` : left;\n\n // Map operators to SQL symbols\n const operatorMap: Record<BinaryExpr['op'], string> = {\n eq: '=',\n neq: '!=',\n gt: '>',\n lt: '<',\n gte: '>=',\n lte: '<=',\n };\n\n return `${leftRendered} ${operatorMap[expr.op]} ${right}`;\n}\n\nfunction renderColumn(ref: ColumnRef): string {\n return `${quoteIdentifier(ref.table)}.${quoteIdentifier(ref.column)}`;\n}\n\nfunction renderExpr(expr: ColumnRef | OperationExpr, contract?: PostgresContract): string {\n if (isOperationExpr(expr)) {\n return renderOperation(expr, contract);\n }\n return renderColumn(expr);\n}\n\nfunction renderParam(\n ref: ParamRef,\n contract?: PostgresContract,\n tableName?: string,\n columnName?: string,\n): string {\n // Cast vector parameters to vector type for PostgreSQL\n if (contract && tableName && columnName) {\n const tableMeta = contract.storage.tables[tableName];\n const columnMeta = tableMeta?.columns[columnName];\n if (columnMeta?.codecId === VECTOR_CODEC_ID) {\n return `$${ref.index}::vector`;\n }\n }\n return `$${ref.index}`;\n}\n\nfunction renderLiteral(expr: LiteralExpr): string {\n if (typeof expr.value === 'string') {\n return `'${expr.value.replace(/'/g, \"''\")}'`;\n }\n if (typeof expr.value === 'number' || typeof expr.value === 'boolean') {\n return String(expr.value);\n }\n if (expr.value === null) {\n return 'NULL';\n }\n if (Array.isArray(expr.value)) {\n return `ARRAY[${expr.value.map((v: unknown) => renderLiteral({ kind: 'literal', value: v })).join(', ')}]`;\n }\n return JSON.stringify(expr.value);\n}\n\nfunction renderOperation(expr: OperationExpr, contract?: PostgresContract): string {\n const self = renderExpr(expr.self, contract);\n // For vector operations, cast param arguments to vector type\n const isVectorOperation = expr.forTypeId === VECTOR_CODEC_ID;\n const args = expr.args.map((arg: ColumnRef | ParamRef | LiteralExpr | OperationExpr) => {\n if (arg.kind === 'col') {\n return renderColumn(arg);\n }\n if (arg.kind === 'param') {\n // Cast vector operation parameters to vector type\n return isVectorOperation ? `$${arg.index}::vector` : renderParam(arg, contract);\n }\n if (arg.kind === 'literal') {\n return renderLiteral(arg);\n }\n if (arg.kind === 'operation') {\n return renderOperation(arg, contract);\n }\n const _exhaustive: never = arg;\n throw new Error(`Unsupported argument kind: ${(_exhaustive as { kind: string }).kind}`);\n });\n\n let result = expr.lowering.template;\n result = result.replace(/\\$\\{self\\}/g, self);\n for (let i = 0; i < args.length; i++) {\n result = result.replace(new RegExp(`\\\\$\\\\{arg${i}\\\\}`, 'g'), args[i] ?? '');\n }\n\n if (expr.lowering.strategy === 'function') {\n return result;\n }\n\n return result;\n}\n\nfunction renderJoin(join: JoinAst, _contract?: PostgresContract): string {\n const joinType = join.joinType.toUpperCase();\n const table = quoteIdentifier(join.table.name);\n const onClause = renderJoinOn(join.on);\n return `${joinType} JOIN ${table} ON ${onClause}`;\n}\n\nfunction renderJoinOn(on: JoinAst['on']): string {\n if (on.kind === 'eqCol') {\n const left = renderColumn(on.left);\n const right = renderColumn(on.right);\n return `${left} = ${right}`;\n }\n throw new Error(`Unsupported join ON expression kind: ${on.kind}`);\n}\n\nfunction renderInclude(\n include: NonNullable<SelectAst['includes']>[number],\n contract?: PostgresContract,\n): string {\n const alias = include.alias;\n\n // Build the lateral subquery\n const childProjection = include.child.project\n .map((item: { alias: string; expr: ColumnRef | OperationExpr }) => {\n const expr = renderExpr(item.expr, contract);\n return `'${item.alias}', ${expr}`;\n })\n .join(', ');\n\n const jsonBuildObject = `json_build_object(${childProjection})`;\n\n // Build the ON condition from the include's ON clause - this goes in the WHERE clause\n const onCondition = renderJoinOn(include.child.on);\n\n // Build WHERE clause: combine ON condition with any additional WHERE clauses\n let whereClause = ` WHERE ${onCondition}`;\n if (include.child.where) {\n whereClause += ` AND ${renderWhere(include.child.where, contract)}`;\n }\n\n // Add ORDER BY if present - it goes inside json_agg() call\n const childOrderBy = include.child.orderBy?.length\n ? ` ORDER BY ${include.child.orderBy\n .map(\n (order: { expr: ColumnRef | OperationExpr; dir: string }) =>\n `${renderExpr(order.expr, contract)} ${order.dir.toUpperCase()}`,\n )\n .join(', ')}`\n : '';\n\n // Add LIMIT if present\n const childLimit = typeof include.child.limit === 'number' ? ` LIMIT ${include.child.limit}` : '';\n\n // Build the lateral subquery\n // When ORDER BY is present without LIMIT, it goes inside json_agg() call: json_agg(expr ORDER BY ...)\n // When LIMIT is present (with or without ORDER BY), we need to wrap in a subquery\n const childTable = quoteIdentifier(include.child.table.name);\n let subquery: string;\n if (typeof include.child.limit === 'number') {\n // With LIMIT, we need to wrap in a subquery\n // Select individual columns in inner query, then aggregate\n // Create a map of column references to their aliases for ORDER BY\n // Only ColumnRef can be mapped (OperationExpr doesn't have table/column properties)\n const columnAliasMap = new Map<string, string>();\n for (const item of include.child.project) {\n if (item.expr.kind === 'col') {\n const columnKey = `${item.expr.table}.${item.expr.column}`;\n columnAliasMap.set(columnKey, item.alias);\n }\n }\n\n const innerColumns = include.child.project\n .map((item: { alias: string; expr: ColumnRef | OperationExpr }) => {\n const expr = renderExpr(item.expr, contract);\n return `${expr} AS ${quoteIdentifier(item.alias)}`;\n })\n .join(', ');\n\n // For ORDER BY, use column aliases if the column is in the SELECT list\n const childOrderByWithAliases = include.child.orderBy?.length\n ? ` ORDER BY ${include.child.orderBy\n .map((order: { expr: ColumnRef | OperationExpr; dir: string }) => {\n if (order.expr.kind === 'col') {\n const columnKey = `${order.expr.table}.${order.expr.column}`;\n const alias = columnAliasMap.get(columnKey);\n if (alias) {\n return `${quoteIdentifier(alias)} ${order.dir.toUpperCase()}`;\n }\n }\n return `${renderExpr(order.expr, contract)} ${order.dir.toUpperCase()}`;\n })\n .join(', ')}`\n : '';\n\n const innerSelect = `SELECT ${innerColumns} FROM ${childTable}${whereClause}${childOrderByWithAliases}${childLimit}`;\n subquery = `(SELECT json_agg(row_to_json(sub.*)) AS ${quoteIdentifier(alias)} FROM (${innerSelect}) sub)`;\n } else if (childOrderBy) {\n // With ORDER BY but no LIMIT, ORDER BY goes inside json_agg()\n subquery = `(SELECT json_agg(${jsonBuildObject}${childOrderBy}) AS ${quoteIdentifier(alias)} FROM ${childTable}${whereClause})`;\n } else {\n // No ORDER BY or LIMIT\n subquery = `(SELECT json_agg(${jsonBuildObject}) AS ${quoteIdentifier(alias)} FROM ${childTable}${whereClause})`;\n }\n\n // Return the LATERAL join with ON true (the condition is in the WHERE clause)\n // The subquery returns a single column (the JSON array) with the alias\n // We use a different alias for the table to avoid ambiguity when selecting the column\n const tableAlias = `${alias}_lateral`;\n return `LEFT JOIN LATERAL ${subquery} AS ${quoteIdentifier(tableAlias)} ON true`;\n}\n\nfunction quoteIdentifier(identifier: string): string {\n return `\"${identifier.replace(/\"/g, '\"\"')}\"`;\n}\n\nfunction renderInsert(ast: InsertAst, contract: PostgresContract): string {\n const table = quoteIdentifier(ast.table.name);\n const columns = Object.keys(ast.values).map((col) => quoteIdentifier(col));\n const tableMeta = contract.storage.tables[ast.table.name];\n const values = Object.entries(ast.values).map(([colName, val]) => {\n if (val.kind === 'param') {\n const columnMeta = tableMeta?.columns[colName];\n const isVector = columnMeta?.codecId === VECTOR_CODEC_ID;\n return isVector ? `$${val.index}::vector` : `$${val.index}`;\n }\n if (val.kind === 'col') {\n return `${quoteIdentifier(val.table)}.${quoteIdentifier(val.column)}`;\n }\n throw new Error(`Unsupported value kind in INSERT: ${(val as { kind: string }).kind}`);\n });\n\n const insertClause = `INSERT INTO ${table} (${columns.join(', ')}) VALUES (${values.join(', ')})`;\n const returningClause = ast.returning?.length\n ? ` RETURNING ${ast.returning.map((col) => `${quoteIdentifier(col.table)}.${quoteIdentifier(col.column)}`).join(', ')}`\n : '';\n\n return `${insertClause}${returningClause}`;\n}\n\nfunction renderUpdate(ast: UpdateAst, contract: PostgresContract): string {\n const table = quoteIdentifier(ast.table.name);\n const tableMeta = contract.storage.tables[ast.table.name];\n const setClauses = Object.entries(ast.set).map(([col, val]) => {\n const column = quoteIdentifier(col);\n let value: string;\n if (val.kind === 'param') {\n const columnMeta = tableMeta?.columns[col];\n const isVector = columnMeta?.codecId === VECTOR_CODEC_ID;\n value = isVector ? `$${val.index}::vector` : `$${val.index}`;\n } else if (val.kind === 'col') {\n value = `${quoteIdentifier(val.table)}.${quoteIdentifier(val.column)}`;\n } else {\n throw new Error(`Unsupported value kind in UPDATE: ${(val as { kind: string }).kind}`);\n }\n return `${column} = ${value}`;\n });\n\n const whereClause = ` WHERE ${renderWhere(ast.where, contract)}`;\n const returningClause = ast.returning?.length\n ? ` RETURNING ${ast.returning.map((col) => `${quoteIdentifier(col.table)}.${quoteIdentifier(col.column)}`).join(', ')}`\n : '';\n\n return `UPDATE ${table} SET ${setClauses.join(', ')}${whereClause}${returningClause}`;\n}\n\nfunction renderDelete(ast: DeleteAst, contract?: PostgresContract): string {\n const table = quoteIdentifier(ast.table.name);\n const whereClause = ` WHERE ${renderWhere(ast.where, contract)}`;\n const returningClause = ast.returning?.length\n ? ` RETURNING ${ast.returning.map((col) => `${quoteIdentifier(col.table)}.${quoteIdentifier(col.column)}`).join(', ')}`\n : '';\n\n return `DELETE FROM ${table}${whereClause}${returningClause}`;\n}\n\nexport function createPostgresAdapter(options?: PostgresAdapterOptions) {\n return Object.freeze(new PostgresAdapterImpl(options));\n}\n"],"mappings":"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","names":["alias"]}
|