@dbsp/adapter-pgsql 1.7.0 → 1.8.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/index.js +95 -40
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -4859,10 +4859,7 @@ var init_where = __esm({
|
|
|
4859
4859
|
hasRelationHandler,
|
|
4860
4860
|
hasNoRelationHandler
|
|
4861
4861
|
];
|
|
4862
|
-
allWhereHandlers = [
|
|
4863
|
-
...simpleWhereHandlers,
|
|
4864
|
-
...complexWhereHandlers
|
|
4865
|
-
];
|
|
4862
|
+
allWhereHandlers = [...simpleWhereHandlers, ...complexWhereHandlers];
|
|
4866
4863
|
}
|
|
4867
4864
|
});
|
|
4868
4865
|
|
|
@@ -5385,10 +5382,6 @@ __export(handlers_exports, {
|
|
|
5385
5382
|
LOGICAL_OPERATORS: () => LOGICAL_OPERATORS,
|
|
5386
5383
|
NULL_OPERATORS: () => NULL_OPERATORS,
|
|
5387
5384
|
PATTERN_OPERATORS: () => PATTERN_OPERATORS,
|
|
5388
|
-
aggregateExpressionHandlers: () => aggregateExpressionHandlers,
|
|
5389
|
-
allExpressionHandlers: () => allExpressionHandlers,
|
|
5390
|
-
allIncludeHandlers: () => allIncludeHandlers,
|
|
5391
|
-
allWhereHandlers: () => allWhereHandlers,
|
|
5392
5385
|
andHandler: () => andHandler,
|
|
5393
5386
|
anyHandler: () => anyHandler,
|
|
5394
5387
|
arithmeticHandler: () => arithmeticHandler,
|
|
@@ -5399,12 +5392,9 @@ __export(handlers_exports, {
|
|
|
5399
5392
|
clearHandlers: () => clearHandlers,
|
|
5400
5393
|
coalesceHandler: () => coalesceHandler,
|
|
5401
5394
|
columnAliasHandler: () => columnAliasHandler,
|
|
5402
|
-
columnExpressionHandlers: () => columnExpressionHandlers,
|
|
5403
5395
|
columnHandler: () => columnHandler,
|
|
5404
5396
|
comparisonHandler: () => comparisonHandler,
|
|
5405
5397
|
compileExpressionIntent: () => compileExpressionIntent,
|
|
5406
|
-
complexWhereHandlers: () => complexWhereHandlers,
|
|
5407
|
-
conditionalExpressionHandlers: () => conditionalExpressionHandlers,
|
|
5408
5398
|
countDistinctHandler: () => countDistinctHandler,
|
|
5409
5399
|
countHandler: () => countHandler,
|
|
5410
5400
|
createCompilerState: () => createCompilerState,
|
|
@@ -5441,7 +5431,6 @@ __export(handlers_exports, {
|
|
|
5441
5431
|
jsonComparisonHandler: () => jsonComparisonHandler,
|
|
5442
5432
|
jsonContainsHandler: () => jsonContainsHandler,
|
|
5443
5433
|
jsonExistsHandler: () => jsonExistsHandler,
|
|
5444
|
-
jsonExpressionHandlers: () => jsonExpressionHandlers,
|
|
5445
5434
|
jsonExtractHandler: () => jsonExtractHandler,
|
|
5446
5435
|
jsonPathExtractHandler: () => jsonPathExtractHandler,
|
|
5447
5436
|
lagHandler: () => lagHandler,
|
|
@@ -5462,11 +5451,9 @@ __export(handlers_exports, {
|
|
|
5462
5451
|
orHandler: () => orHandler,
|
|
5463
5452
|
prefixedRelationColumnHandler: () => prefixedRelationColumnHandler,
|
|
5464
5453
|
pseudoColumnHandler: () => pseudoColumnHandler,
|
|
5465
|
-
pseudoExpressionHandlers: () => pseudoExpressionHandlers,
|
|
5466
5454
|
rangeHandler: () => rangeHandler,
|
|
5467
5455
|
rankHandler: () => rankHandler,
|
|
5468
5456
|
rawExistsHandler: () => rawExistsHandler,
|
|
5469
|
-
rawExpressionHandlers: () => rawExpressionHandlers,
|
|
5470
5457
|
rawHandler: () => rawHandler,
|
|
5471
5458
|
registerAllExpressionHandlers: () => registerAllExpressionHandlers,
|
|
5472
5459
|
registerAllIncludeHandlers: () => registerAllIncludeHandlers,
|
|
@@ -5478,7 +5465,6 @@ __export(handlers_exports, {
|
|
|
5478
5465
|
relationAliasHandler: () => relationAliasHandler,
|
|
5479
5466
|
relationColumnHandler: () => relationColumnHandler,
|
|
5480
5467
|
relationColumnsHandler: () => relationColumnsHandler,
|
|
5481
|
-
relationExpressionHandlers: () => relationExpressionHandlers,
|
|
5482
5468
|
relationFilterHandler: () => relationFilterHandler,
|
|
5483
5469
|
relationStarHandler: () => relationStarHandler,
|
|
5484
5470
|
rowNumberHandler: () => rowNumberHandler,
|
|
@@ -5488,8 +5474,7 @@ __export(handlers_exports, {
|
|
|
5488
5474
|
singleHopPseudoHandler: () => singleHopPseudoHandler,
|
|
5489
5475
|
sqlFunctionHandler: () => sqlFunctionHandler,
|
|
5490
5476
|
starHandler: () => starHandler,
|
|
5491
|
-
sumHandler: () => sumHandler
|
|
5492
|
-
windowExpressionHandlers: () => windowExpressionHandlers
|
|
5477
|
+
sumHandler: () => sumHandler
|
|
5493
5478
|
});
|
|
5494
5479
|
function registerWhereHandler(handler) {
|
|
5495
5480
|
for (const op3 of handler.operators) {
|
|
@@ -6929,6 +6914,14 @@ var init_raw = __esm({
|
|
|
6929
6914
|
});
|
|
6930
6915
|
|
|
6931
6916
|
// src/handlers/expression/relation.ts
|
|
6917
|
+
function resolveRelationAlias(relation, state, options = {}) {
|
|
6918
|
+
if (options.resolveDottedLeaf && relation.includes(".")) {
|
|
6919
|
+
const segments = relation.split(".");
|
|
6920
|
+
const leaf = segments[segments.length - 1];
|
|
6921
|
+
return state.aliases.get(relation) ?? state.aliases.get(leaf) ?? leaf;
|
|
6922
|
+
}
|
|
6923
|
+
return state.aliases.get(relation) ?? relation;
|
|
6924
|
+
}
|
|
6932
6925
|
var relationStarHandler, relationColumnHandler, relationColumnsHandler, relationAliasHandler, prefixedRelationColumnHandler;
|
|
6933
6926
|
var init_relation = __esm({
|
|
6934
6927
|
"src/handlers/expression/relation.ts"() {
|
|
@@ -6961,14 +6954,9 @@ var init_relation = __esm({
|
|
|
6961
6954
|
if (!column) {
|
|
6962
6955
|
throw new Error("Relation column handler requires column name");
|
|
6963
6956
|
}
|
|
6964
|
-
|
|
6965
|
-
|
|
6966
|
-
|
|
6967
|
-
const leaf = segments[segments.length - 1];
|
|
6968
|
-
alias = state.aliases.get(relation) ?? state.aliases.get(leaf) ?? leaf;
|
|
6969
|
-
} else {
|
|
6970
|
-
alias = state.aliases.get(relation) ?? relation;
|
|
6971
|
-
}
|
|
6957
|
+
const alias = resolveRelationAlias(relation, state, {
|
|
6958
|
+
resolveDottedLeaf: true
|
|
6959
|
+
});
|
|
6972
6960
|
if (column === "*") {
|
|
6973
6961
|
return columnRefStar(alias, ctx.naming);
|
|
6974
6962
|
}
|
|
@@ -6986,7 +6974,7 @@ var init_relation = __esm({
|
|
|
6986
6974
|
if (!columns || columns.length === 0) {
|
|
6987
6975
|
throw new Error("Relation columns handler requires columns array");
|
|
6988
6976
|
}
|
|
6989
|
-
const alias =
|
|
6977
|
+
const alias = resolveRelationAlias(relation, state);
|
|
6990
6978
|
const column = columns[0];
|
|
6991
6979
|
const colRef = columnRef(column, alias, void 0, ctx.naming);
|
|
6992
6980
|
const outputAlias = decision.alias;
|
|
@@ -7012,7 +7000,7 @@ var init_relation = __esm({
|
|
|
7012
7000
|
if (!column) {
|
|
7013
7001
|
throw new Error("Relation alias handler requires column name");
|
|
7014
7002
|
}
|
|
7015
|
-
const tableAlias =
|
|
7003
|
+
const tableAlias = resolveRelationAlias(relation, state);
|
|
7016
7004
|
const colRef = columnRef(column, tableAlias, void 0, ctx.naming);
|
|
7017
7005
|
if (!outputAlias) {
|
|
7018
7006
|
return colRef;
|
|
@@ -7283,15 +7271,8 @@ var init_expression = __esm({
|
|
|
7283
7271
|
lastValueHandler,
|
|
7284
7272
|
genericWindowHandler
|
|
7285
7273
|
];
|
|
7286
|
-
rawExpressionHandlers = [
|
|
7287
|
-
|
|
7288
|
-
sqlFunctionHandler,
|
|
7289
|
-
literalHandler
|
|
7290
|
-
];
|
|
7291
|
-
jsonExpressionHandlers = [
|
|
7292
|
-
jsonExtractHandler,
|
|
7293
|
-
jsonPathExtractHandler
|
|
7294
|
-
];
|
|
7274
|
+
rawExpressionHandlers = [rawHandler, sqlFunctionHandler, literalHandler];
|
|
7275
|
+
jsonExpressionHandlers = [jsonExtractHandler, jsonPathExtractHandler];
|
|
7295
7276
|
pseudoExpressionHandlers = [
|
|
7296
7277
|
pseudoColumnHandler,
|
|
7297
7278
|
singleHopPseudoHandler,
|
|
@@ -15960,9 +15941,6 @@ function assertSafeTypeName(typeName, colIndex) {
|
|
|
15960
15941
|
}
|
|
15961
15942
|
}
|
|
15962
15943
|
}
|
|
15963
|
-
function bridgeLegacyDecisions(decisions) {
|
|
15964
|
-
return decisions;
|
|
15965
|
-
}
|
|
15966
15944
|
function buildBatchValuesRangeFn(bv, startParamIndex, aliasOverride) {
|
|
15967
15945
|
const params = [];
|
|
15968
15946
|
let paramIdx = startParamIndex - 1;
|
|
@@ -16369,7 +16347,7 @@ function compileSelect(plan, options, deps) {
|
|
|
16369
16347
|
} else {
|
|
16370
16348
|
simplifiedPlan = {
|
|
16371
16349
|
rootTable: plan.rootTable,
|
|
16372
|
-
decisions:
|
|
16350
|
+
decisions: plan.decisions,
|
|
16373
16351
|
...schemaName ? { schema: schemaName } : {}
|
|
16374
16352
|
};
|
|
16375
16353
|
}
|
|
@@ -18505,6 +18483,73 @@ function assertRuntimeBindingValuesParameterCount(name, binding, parameterOffset
|
|
|
18505
18483
|
`NQL runtime binding '${name}' would materialize ${valueParameterCount} VALUES parameters; limit is ${MAX_NQL_RUNTIME_BINDING_VALUES_PARAMETERS}. Current parameter offset is ${parameterOffset}, which would make ${totalParameterCount} total parameters before compiling the final statement.`
|
|
18506
18484
|
);
|
|
18507
18485
|
}
|
|
18486
|
+
function resolvePgTypeForColumnTypeInfo(bindingName, column, info) {
|
|
18487
|
+
if (info.kind === "aggregate" && info.fn !== "count") {
|
|
18488
|
+
throw new Error(
|
|
18489
|
+
`NQL runtime binding '${bindingName}' cannot resolve a PostgreSQL type for projected column '${column}': unsupported aggregate kind '${String(info.fn)}'.`
|
|
18490
|
+
);
|
|
18491
|
+
}
|
|
18492
|
+
const rawType = info.kind === "aggregate" ? "bigint" : info.originalDbType?.trim() || mapRuntimeBindingColumnType(info.type);
|
|
18493
|
+
if (rawType === void 0 || rawType.trim() === "") {
|
|
18494
|
+
throw new Error(
|
|
18495
|
+
`NQL runtime binding '${bindingName}' cannot resolve a PostgreSQL type for projected column '${column}'.`
|
|
18496
|
+
);
|
|
18497
|
+
}
|
|
18498
|
+
const typeName = rawType.trim();
|
|
18499
|
+
try {
|
|
18500
|
+
validateTypeName4(typeName);
|
|
18501
|
+
} catch (error) {
|
|
18502
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
18503
|
+
throw new Error(
|
|
18504
|
+
`NQL runtime binding '${bindingName}' cannot use PostgreSQL cast type for projected column '${column}': ${reason}`
|
|
18505
|
+
);
|
|
18506
|
+
}
|
|
18507
|
+
return typeName;
|
|
18508
|
+
}
|
|
18509
|
+
function resolveRuntimeBindingCteColumnTypes(name, binding) {
|
|
18510
|
+
const columnTypes = binding.columnTypes;
|
|
18511
|
+
if (columnTypes === void 0) {
|
|
18512
|
+
throw new Error(
|
|
18513
|
+
`NQL runtime binding '${name}' cannot resolve typed columns without a columnTypes map.`
|
|
18514
|
+
);
|
|
18515
|
+
}
|
|
18516
|
+
return binding.columns.map((column) => {
|
|
18517
|
+
const info = columnTypes[column];
|
|
18518
|
+
if (info === void 0) {
|
|
18519
|
+
throw new Error(
|
|
18520
|
+
`NQL runtime binding '${name}' is missing type info for projected column '${column}'.`
|
|
18521
|
+
);
|
|
18522
|
+
}
|
|
18523
|
+
return resolvePgTypeForColumnTypeInfo(name, column, info);
|
|
18524
|
+
});
|
|
18525
|
+
}
|
|
18526
|
+
function compileTypedNqlRuntimeBindingCte(name, binding, naming, parameterOffset, cteName, columnSql) {
|
|
18527
|
+
const pgTypes = resolveRuntimeBindingCteColumnTypes(name, binding);
|
|
18528
|
+
const anchorColumns = binding.columns.map(
|
|
18529
|
+
(column, columnIndex) => `CAST(NULL AS ${pgTypes[columnIndex]}) AS ${quoteIdent2(naming.toDatabase(column), "column")}`
|
|
18530
|
+
).join(", ");
|
|
18531
|
+
const sourceAnchorSql = `SELECT ${anchorColumns} WHERE false`;
|
|
18532
|
+
if (binding.rows.length === 0) {
|
|
18533
|
+
return {
|
|
18534
|
+
cte: `${cteName} (${columnSql}) as (${sourceAnchorSql})`,
|
|
18535
|
+
parameters: []
|
|
18536
|
+
};
|
|
18537
|
+
}
|
|
18538
|
+
assertRuntimeBindingValuesParameterCount(name, binding, parameterOffset);
|
|
18539
|
+
const parameters = [];
|
|
18540
|
+
let nextParam = parameterOffset + 1;
|
|
18541
|
+
const valuesSql = binding.rows.map((row) => {
|
|
18542
|
+
const placeholders = binding.columns.map((column, columnIndex) => {
|
|
18543
|
+
parameters.push(row[column]);
|
|
18544
|
+
return `$${nextParam++}::${pgTypes[columnIndex]}`;
|
|
18545
|
+
});
|
|
18546
|
+
return `(${placeholders.join(", ")})`;
|
|
18547
|
+
}).join(", ");
|
|
18548
|
+
return {
|
|
18549
|
+
cte: `${cteName} (${columnSql}) as (${sourceAnchorSql} UNION ALL VALUES ${valuesSql})`,
|
|
18550
|
+
parameters
|
|
18551
|
+
};
|
|
18552
|
+
}
|
|
18508
18553
|
function compileNqlRuntimeBindingCte(name, binding, naming, parameterOffset, sourceTable, schemaName, model) {
|
|
18509
18554
|
if (binding.columns.length === 0) {
|
|
18510
18555
|
throw new Error(
|
|
@@ -18513,6 +18558,16 @@ function compileNqlRuntimeBindingCte(name, binding, naming, parameterOffset, sou
|
|
|
18513
18558
|
}
|
|
18514
18559
|
const cteName = quoteIdent2(emittedBindName(name, naming), "alias");
|
|
18515
18560
|
const columnSql = binding.columns.map((column) => quoteIdent2(naming.toDatabase(column), "column")).join(", ");
|
|
18561
|
+
if (binding.columnTypes !== void 0) {
|
|
18562
|
+
return compileTypedNqlRuntimeBindingCte(
|
|
18563
|
+
name,
|
|
18564
|
+
binding,
|
|
18565
|
+
naming,
|
|
18566
|
+
parameterOffset,
|
|
18567
|
+
cteName,
|
|
18568
|
+
columnSql
|
|
18569
|
+
);
|
|
18570
|
+
}
|
|
18516
18571
|
if (sourceTable === void 0) {
|
|
18517
18572
|
throw new Error(
|
|
18518
18573
|
`NQL runtime binding '${name}' cannot materialize a typed relation because its source table is unavailable.`
|