Skip to content

Commit f232ba7

Browse files
fix: include asExpression columns in returning clause (#10632)
* fix: include asExpression columns in returning clause Closes: #8450 * test: add test for issue #8450
1 parent 8aa8690 commit f232ba7

File tree

4 files changed

+61
-1
lines changed

4 files changed

+61
-1
lines changed

src/metadata/EntityMetadata.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1127,6 +1127,7 @@ export class EntityMetadata {
11271127
return this.columns.filter((column) => {
11281128
return (
11291129
column.default !== undefined ||
1130+
column.asExpression !== undefined ||
11301131
column.isGenerated ||
11311132
column.isCreateDate ||
11321133
column.isUpdateDate ||

src/query-builder/ReturningResultsEntityUpdator.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,11 @@ export class ReturningResultsEntityUpdator {
274274
getUpdationReturningColumns(): ColumnMetadata[] {
275275
return this.expressionMap.mainAlias!.metadata.columns.filter(
276276
(column) => {
277-
return column.isUpdateDate || column.isVersion
277+
return (
278+
column.asExpression !== undefined ||
279+
column.isUpdateDate ||
280+
column.isVersion
281+
)
278282
},
279283
)
280284
}
@@ -286,6 +290,7 @@ export class ReturningResultsEntityUpdator {
286290
return this.expressionMap.mainAlias!.metadata.columns.filter(
287291
(column) => {
288292
return (
293+
column.asExpression !== undefined ||
289294
column.isUpdateDate ||
290295
column.isVersion ||
291296
column.isDeleteDate
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { Entity } from "../../../../src/decorator/entity/Entity"
2+
import { PrimaryColumn } from "../../../../src/decorator/columns/PrimaryColumn"
3+
import { Column } from "../../../../src/decorator/columns/Column"
4+
5+
@Entity("user")
6+
export class UserEntity {
7+
@PrimaryColumn("int")
8+
id: number
9+
10+
@Column({
11+
type: "int",
12+
generatedType: "STORED",
13+
asExpression: "id * 2",
14+
})
15+
generated: number
16+
}

test/github-issues/8450/issue-8450.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import "reflect-metadata"
2+
import {
3+
closeTestingConnections,
4+
createTestingConnections,
5+
reloadTestingDatabases,
6+
} from "../../utils/test-utils"
7+
import { UserEntity } from "./entity/UserEntity"
8+
import { expect } from "chai"
9+
import { DataSource } from "../../../src"
10+
11+
describe("github issues > #8450 Generated column not in RETURNING clause on save", () => {
12+
let connections: DataSource[]
13+
14+
before(
15+
async () =>
16+
(connections = await createTestingConnections({
17+
entities: [__dirname + "/entity/*{.js,.ts}"],
18+
enabledDrivers: ["postgres", "mysql"],
19+
})),
20+
)
21+
beforeEach(() => reloadTestingDatabases(connections))
22+
after(() => closeTestingConnections(connections))
23+
24+
it("should populate an object with generated column values after saving", () =>
25+
Promise.all(
26+
connections.map(async (connection) => {
27+
const user = new UserEntity()
28+
user.id = 100
29+
30+
expect(user.generated).to.be.undefined
31+
32+
await connection.manager.save(user)
33+
34+
expect(user.generated).to.be.a("number")
35+
expect(user.generated).to.be.equal(user.id * 2)
36+
}),
37+
))
38+
})

0 commit comments

Comments
 (0)