Skip to content

Commit cd7ab97

Browse files
te1gioboanaorpeled
authored
fix: update RelationIdLoader to use DriverUtils.getAlias (typeorm#11228)
Co-authored-by: gioboa <giorgiob.boa@gmail.com> Co-authored-by: Naor Peled <me@naor.dev>
1 parent 60b10c8 commit cd7ab97

4 files changed

Lines changed: 121 additions & 29 deletions

File tree

src/query-builder/RelationIdLoader.ts

Lines changed: 45 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,13 @@ export class RelationIdLoader {
148148
return column.compareEntityValue(
149149
entity,
150150
relationId[
151-
column.entityMetadata.name +
152-
"_" +
153-
column.propertyAliasName
151+
DriverUtils.buildAlias(
152+
this.connection.driver,
153+
undefined,
154+
column.entityMetadata.name +
155+
"_" +
156+
column.propertyAliasName,
157+
)
154158
],
155159
)
156160
})
@@ -437,10 +441,13 @@ export class RelationIdLoader {
437441
const relationIdMap: ObjectLiteral = {}
438442
relation.entityMetadata.primaryColumns.forEach(
439443
(primaryColumn) => {
440-
const key =
444+
const key = DriverUtils.buildAlias(
445+
this.connection.driver,
446+
undefined,
441447
primaryColumn.entityMetadata.name +
442-
"_" +
443-
primaryColumn.propertyPath.replace(".", "_")
448+
"_" +
449+
primaryColumn.propertyPath.replace(".", "_"),
450+
)
444451
relationIdMap[key] =
445452
primaryColumn.getEntityValue(entity)
446453
},
@@ -461,16 +468,19 @@ export class RelationIdLoader {
461468
return
462469

463470
if (entityColumnValue === relatedEntityColumnValue) {
464-
const key =
471+
const key = DriverUtils.buildAlias(
472+
this.connection.driver,
473+
undefined,
465474
joinColumn.referencedColumn!.entityMetadata
466475
.name +
467-
"_" +
468-
relation.propertyPath.replace(".", "_") +
469-
"_" +
470-
joinColumn.referencedColumn!.propertyPath.replace(
471-
".",
472-
"_",
473-
)
476+
"_" +
477+
relation.propertyPath.replace(".", "_") +
478+
"_" +
479+
joinColumn.referencedColumn!.propertyPath.replace(
480+
".",
481+
"_",
482+
),
483+
)
474484
relationIdMap[key] = relatedEntityColumnValue
475485
}
476486
})
@@ -596,28 +606,34 @@ export class RelationIdLoader {
596606
return Promise.resolve(
597607
entities.map((entity) => {
598608
const result: ObjectLiteral = {}
599-
relation.joinColumns.forEach(function (joinColumn) {
609+
relation.joinColumns.forEach((joinColumn) => {
600610
const value =
601611
joinColumn.referencedColumn!.getEntityValue(
602612
entity,
603613
)
604-
const joinColumnName =
614+
const joinColumnName = DriverUtils.buildAlias(
615+
this.connection.driver,
616+
undefined,
605617
joinColumn.referencedColumn!.entityMetadata
606618
.name +
607-
"_" +
608-
joinColumn.referencedColumn!.propertyPath.replace(
609-
".",
610-
"_",
611-
)
612-
const primaryColumnName =
619+
"_" +
620+
joinColumn.referencedColumn!.propertyPath.replace(
621+
".",
622+
"_",
623+
),
624+
)
625+
const primaryColumnName = DriverUtils.buildAlias(
626+
this.connection.driver,
627+
undefined,
613628
joinColumn.entityMetadata.name +
614-
"_" +
615-
originalRelation.propertyPath.replace(
616-
".",
617-
"_",
618-
) +
619-
"_" +
620-
joinColumn.propertyPath.replace(".", "_")
629+
"_" +
630+
originalRelation.propertyPath.replace(
631+
".",
632+
"_",
633+
) +
634+
"_" +
635+
joinColumn.propertyPath.replace(".", "_"),
636+
)
621637
result[joinColumnName] = value
622638
result[primaryColumnName] = value
623639
})
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import {
2+
Entity,
3+
PrimaryGeneratedColumn,
4+
Column,
5+
OneToOne,
6+
JoinColumn,
7+
} from "../../../../src"
8+
import { SuperLongRelatedEntityNameDontAskWhy } from "./SuperLongRelatedEntityNameDontAskWhy"
9+
10+
@Entity()
11+
export class SomeEntity {
12+
@PrimaryGeneratedColumn()
13+
id: number
14+
15+
@Column()
16+
superLongRelatedEntityNameDontAskWhy_id: number
17+
18+
@OneToOne(() => SuperLongRelatedEntityNameDontAskWhy)
19+
@JoinColumn({ name: "superLongRelatedEntityNameDontAskWhy_id" })
20+
superLongRelatedEntityNameDontAskWhy: SuperLongRelatedEntityNameDontAskWhy
21+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { Entity, PrimaryGeneratedColumn, Column } from "../../../../src"
2+
3+
@Entity()
4+
export class SuperLongRelatedEntityNameDontAskWhy {
5+
@PrimaryGeneratedColumn()
6+
id: number
7+
8+
@Column()
9+
name: string
10+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import "reflect-metadata"
2+
import { expect } from "chai"
3+
import { DataSource } from "../../../src/data-source/DataSource"
4+
import {
5+
closeTestingConnections,
6+
createTestingConnections,
7+
reloadTestingDatabases,
8+
} from "../../utils/test-utils"
9+
import { SomeEntity } from "./entity/SomeEntity"
10+
import { SuperLongRelatedEntityNameDontAskWhy } from "./entity/SuperLongRelatedEntityNameDontAskWhy"
11+
12+
describe("github issues > #11227 RelationIdLoader is not consistently respecting maxAliasLength", () => {
13+
let connections: DataSource[]
14+
before(
15+
async () =>
16+
(connections = await createTestingConnections({
17+
entities: [__dirname + "/entity/*{.js,.ts}"],
18+
enabledDrivers: ["postgres"],
19+
})),
20+
)
21+
beforeEach(() => reloadTestingDatabases(connections))
22+
after(() => closeTestingConnections(connections))
23+
24+
it("should fetch related entities properly", async () => {
25+
for (const connection of connections) {
26+
const related = await connection
27+
.getRepository(SuperLongRelatedEntityNameDontAskWhy)
28+
.save({ name: "test" })
29+
30+
const entity = await connection.getRepository(SomeEntity).save({
31+
superLongRelatedEntityNameDontAskWhy_id: related.id,
32+
})
33+
34+
const result = await connection.getRepository(SomeEntity).findOne({
35+
where: { id: entity.id },
36+
relations: { superLongRelatedEntityNameDontAskWhy: true },
37+
relationLoadStrategy: "query",
38+
})
39+
40+
expect(result?.superLongRelatedEntityNameDontAskWhy?.name).to.eq(
41+
"test",
42+
)
43+
}
44+
})
45+
})

0 commit comments

Comments
 (0)