Skip to content

Commit c3cf894

Browse files
fix: Support type overrides in RETURNING clause (#390)
- Ensure column type overrides are respected in INSERT, UPDATE, and DELETE statements that use the RETURNING clause. - Add test cases for overridden text type in RETURNING. Fixes #388
1 parent 09dcf16 commit c3cf894

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

packages/generate/src/generate.test.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -639,6 +639,33 @@ test("insert into table without returning", async () => {
639639
});
640640
});
641641

642+
test("insert into table with overridden type in RETURNING", async () => {
643+
await testQuery({
644+
options: { overrides: { types: { text: "CustomType" } } },
645+
query: `INSERT INTO agency (name) VALUES ('overriden_type_inserted') RETURNING name`,
646+
expected: [["name", { kind: "type", value: "CustomType", type: "text" }]],
647+
unknownColumns: ["name"],
648+
});
649+
});
650+
651+
test("update row with overridden type in RETURNING", async () => {
652+
await testQuery({
653+
options: { overrides: { types: { text: "CustomType" } } },
654+
query: `UPDATE agency SET name = 'overriden_type_updated' WHERE name = 'overriden_type_inserted' RETURNING name`,
655+
expected: [["name", { kind: "type", value: "CustomType", type: "text" }]],
656+
unknownColumns: ["name"],
657+
});
658+
});
659+
660+
test("delete row with overridden type in RETURNING", async () => {
661+
await testQuery({
662+
options: { overrides: { types: { text: "CustomType" } } },
663+
query: `DELETE FROM agency WHERE name = 'overriden_type_updated' RETURNING name`,
664+
expected: [["name", { kind: "type", value: "CustomType", type: "text" }]],
665+
unknownColumns: ["name"],
666+
});
667+
});
668+
642669
test("insert into returning overriden column", async () => {
643670
await testQuery({
644671
schema: `

packages/generate/src/generate.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,7 @@ function getResolvedTargetEntry(params: {
481481

482482
if (!pgType) return undefined;
483483

484-
if (params.context.overrides?.columns) {
484+
if (params.context.overrides?.columns && params.context.overrides.columns.size > 0) {
485485
const override = params.context.overrides.columns
486486
.get(params.col.introspected?.tableName ?? "")
487487
?.get(params.col.described.name);

0 commit comments

Comments
 (0)