orez 0.4.15 → 0.4.17
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/pg-proxy-do-backend.d.ts +1 -0
- package/dist/pg-proxy-do-backend.d.ts.map +1 -1
- package/dist/pg-proxy-do-backend.js +75 -7
- package/dist/pg-proxy-do-backend.js.map +1 -1
- package/dist/pg-sqlite-compiler/index.d.ts +6 -1
- package/dist/pg-sqlite-compiler/index.d.ts.map +1 -1
- package/dist/pg-sqlite-compiler/index.js +24 -3
- package/dist/pg-sqlite-compiler/index.js.map +1 -1
- package/dist/pg-sqlite-compiler/passes/index.d.ts.map +1 -1
- package/dist/pg-sqlite-compiler/passes/index.js +4 -0
- package/dist/pg-sqlite-compiler/passes/index.js.map +1 -1
- package/dist/pg-sqlite-compiler/passes/schema.d.ts +3 -0
- package/dist/pg-sqlite-compiler/passes/schema.d.ts.map +1 -0
- package/dist/pg-sqlite-compiler/passes/schema.js +113 -0
- package/dist/pg-sqlite-compiler/passes/schema.js.map +1 -0
- package/dist/pg-sqlite-compiler/passes/unsupported.d.ts +3 -0
- package/dist/pg-sqlite-compiler/passes/unsupported.d.ts.map +1 -0
- package/dist/pg-sqlite-compiler/passes/unsupported.js +33 -0
- package/dist/pg-sqlite-compiler/passes/unsupported.js.map +1 -0
- package/dist/pg-sqlite-compiler/types.d.ts +2 -0
- package/dist/pg-sqlite-compiler/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pg-proxy-do-backend.d.ts","sourceRoot":"","sources":["../src/pg-proxy-do-backend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pg-proxy-do-backend.d.ts","sourceRoot":"","sources":["../src/pg-proxy-do-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -467,6 +467,8 @@ function expressionOid(value) {
|
|
|
467
467
|
const node = value;
|
|
468
468
|
if (!node || typeof node !== 'object')
|
|
469
469
|
return undefined;
|
|
470
|
+
if (node.SubLink?.subLinkType === 'EXISTS_SUBLINK')
|
|
471
|
+
return PG_TYPE_BOOL;
|
|
470
472
|
if (node.FuncCall) {
|
|
471
473
|
const name = functionName(node.FuncCall);
|
|
472
474
|
if (name && JSON_PRODUCING_FUNCTIONS.has(name))
|
|
@@ -1200,6 +1202,45 @@ function postgresTimestampText(value) {
|
|
|
1200
1202
|
const withSpace = raw.replace('T', ' ');
|
|
1201
1203
|
return withSpace.endsWith('Z') ? `${withSpace.slice(0, -1)}+00` : withSpace;
|
|
1202
1204
|
}
|
|
1205
|
+
function postgresQueryBoolean(value) {
|
|
1206
|
+
if (value === true || value === 1 || value === '1' || value === 't' || value === 'true')
|
|
1207
|
+
return true;
|
|
1208
|
+
if (value === false ||
|
|
1209
|
+
value === 0 ||
|
|
1210
|
+
value === '0' ||
|
|
1211
|
+
value === 'f' ||
|
|
1212
|
+
value === 'false')
|
|
1213
|
+
return false;
|
|
1214
|
+
return value;
|
|
1215
|
+
}
|
|
1216
|
+
function postgresQueryJson(value) {
|
|
1217
|
+
if (typeof value !== 'string')
|
|
1218
|
+
return value;
|
|
1219
|
+
try {
|
|
1220
|
+
return JSON.parse(value);
|
|
1221
|
+
}
|
|
1222
|
+
catch {
|
|
1223
|
+
return value;
|
|
1224
|
+
}
|
|
1225
|
+
}
|
|
1226
|
+
function postgresQueryTimestamp(value) {
|
|
1227
|
+
if (value instanceof Date)
|
|
1228
|
+
return value;
|
|
1229
|
+
const millis = timestampMillisValue(value);
|
|
1230
|
+
const date = millis !== null ? new Date(millis) : new Date(String(value));
|
|
1231
|
+
return Number.isFinite(date.getTime()) ? date : value;
|
|
1232
|
+
}
|
|
1233
|
+
function postgresQueryValue(value, oid) {
|
|
1234
|
+
if (value === null || value === undefined)
|
|
1235
|
+
return value;
|
|
1236
|
+
if (oid === PG_TYPE_BOOL)
|
|
1237
|
+
return postgresQueryBoolean(value);
|
|
1238
|
+
if (oid === PG_TYPE_JSON || oid === PG_TYPE_JSONB)
|
|
1239
|
+
return postgresQueryJson(value);
|
|
1240
|
+
if (isTimestampOid(oid))
|
|
1241
|
+
return postgresQueryTimestamp(value);
|
|
1242
|
+
return value;
|
|
1243
|
+
}
|
|
1203
1244
|
function epochMillisParamValue(value) {
|
|
1204
1245
|
const millis = timestampMillisValue(value);
|
|
1205
1246
|
if (millis !== null)
|
|
@@ -2377,6 +2418,19 @@ function normalizeInsertSelectOnConflict(stmt) {
|
|
|
2377
2418
|
return;
|
|
2378
2419
|
select.whereClause = intConst(1);
|
|
2379
2420
|
}
|
|
2421
|
+
function normalizeInsert(stmt, context) {
|
|
2422
|
+
const from = stmt.relation?.alias?.aliasname ??
|
|
2423
|
+
(stmt.relation?.schemaname ? stmt.relation.relname : null);
|
|
2424
|
+
const table = flattenRangeVar(stmt.relation);
|
|
2425
|
+
if (from && table) {
|
|
2426
|
+
if (stmt.relation?.alias?.aliasname)
|
|
2427
|
+
delete stmt.relation.alias;
|
|
2428
|
+
rewriteColumnRefQualifier(stmt, from, table);
|
|
2429
|
+
}
|
|
2430
|
+
rewriteInsertDefaults(stmt);
|
|
2431
|
+
normalizeInsertSelectOnConflict(stmt);
|
|
2432
|
+
rewriteNode(stmt, context);
|
|
2433
|
+
}
|
|
2380
2434
|
function firstSourceTable(value, cteNames = new Set()) {
|
|
2381
2435
|
if (!value || typeof value !== 'object')
|
|
2382
2436
|
return null;
|
|
@@ -3414,15 +3468,12 @@ function rewriteParsedStatement(version, rawStmt, context) {
|
|
|
3414
3468
|
else if (nodeType === 'InsertStmt') {
|
|
3415
3469
|
const table = publicationTableRefForRangeVar(node.relation);
|
|
3416
3470
|
writeTable = table;
|
|
3417
|
-
|
|
3418
|
-
rewriteInsertDefaults(node);
|
|
3419
|
-
normalizeInsertSelectOnConflict(node);
|
|
3471
|
+
normalizeInsert(node, context);
|
|
3420
3472
|
if (node.selectStmt?.SelectStmt?.withClause) {
|
|
3421
3473
|
const sourceTable = firstSourceTable(node.selectStmt);
|
|
3422
3474
|
if (sourceTable)
|
|
3423
3475
|
skipIfTableEmpty = { table: sourceTable };
|
|
3424
3476
|
}
|
|
3425
|
-
rewriteNode(node, context);
|
|
3426
3477
|
changeTracking = changeTrackingForDML(version, stmt, nodeType, table, 'INSERT');
|
|
3427
3478
|
}
|
|
3428
3479
|
else if (nodeType === 'UpdateStmt') {
|
|
@@ -5549,14 +5600,14 @@ export class DoBackend {
|
|
|
5549
5600
|
const result = await this.executeRewrittenStatements(statements);
|
|
5550
5601
|
await this.applyStatementMetadata(statements);
|
|
5551
5602
|
const tracking = statement ? this.trackingForStatement(statement) : undefined;
|
|
5552
|
-
return this.visibleResultForTracking(result, tracking).rows;
|
|
5603
|
+
return this.normalizedHighLevelResult(rewritten, this.visibleResultForTracking(result, tracking)).rows;
|
|
5553
5604
|
}
|
|
5554
5605
|
if (statement)
|
|
5555
5606
|
await this.snapshotTransactionWrite(statement);
|
|
5556
5607
|
const tracking = statement ? this.trackingForStatement(statement) : undefined;
|
|
5557
5608
|
const result = await this.doExecResult(tracking?.returningSQL ?? rewritten, undefined, tracking ? this.trackingRequest(tracking) : undefined);
|
|
5558
5609
|
await this.applyStatementMetadata(statements);
|
|
5559
|
-
return this.visibleResultForTracking(result, tracking).rows;
|
|
5610
|
+
return this.normalizedHighLevelResult(rewritten, this.visibleResultForTracking(result, tracking)).rows;
|
|
5560
5611
|
}
|
|
5561
5612
|
async handleTransactionControl(sql) {
|
|
5562
5613
|
const action = transactionAction(sql);
|
|
@@ -5629,7 +5680,9 @@ export class DoBackend {
|
|
|
5629
5680
|
const exec = await this.materializePublishedSchemaFunctions(execBound.sql, statement, execBound.params);
|
|
5630
5681
|
const result = await this.doExecResult(exec.sql, exec.params, tracking ? this.trackingRequest(tracking) : undefined);
|
|
5631
5682
|
await this.applyStatementMetadata(statements);
|
|
5632
|
-
return {
|
|
5683
|
+
return {
|
|
5684
|
+
rows: this.normalizedHighLevelResult(rewritten, this.visibleResultForTracking(result, tracking)).rows,
|
|
5685
|
+
};
|
|
5633
5686
|
}
|
|
5634
5687
|
// ── Internal helpers ─────────────────────────────────────────────────────
|
|
5635
5688
|
url(path) {
|
|
@@ -5693,6 +5746,21 @@ export class DoBackend {
|
|
|
5693
5746
|
epochMillisParamNumbers,
|
|
5694
5747
|
});
|
|
5695
5748
|
}
|
|
5749
|
+
normalizedHighLevelResult(sql, result) {
|
|
5750
|
+
if (result.rows.length === 0)
|
|
5751
|
+
return result;
|
|
5752
|
+
const fields = this.fieldsForResult(sql, result);
|
|
5753
|
+
if (fields.length === 0 || fields.every((field) => !field.oid))
|
|
5754
|
+
return result;
|
|
5755
|
+
const fieldByName = new Map(fields.map((field) => [field.name, field]));
|
|
5756
|
+
return {
|
|
5757
|
+
...result,
|
|
5758
|
+
rows: result.rows.map((row) => Object.fromEntries(Object.entries(row).map(([name, value]) => [
|
|
5759
|
+
name,
|
|
5760
|
+
postgresQueryValue(value, fieldByName.get(name)?.oid),
|
|
5761
|
+
]))),
|
|
5762
|
+
};
|
|
5763
|
+
}
|
|
5696
5764
|
inlineStatementParams(sql, params, statements, inferredJsonParamNumbers = new Set(), timestampParamNumbers = new Set(), epochMillisParamNumbers = new Set(), booleanParamNumbers = new Set()) {
|
|
5697
5765
|
if (!params?.length)
|
|
5698
5766
|
return sql;
|