From 6e15eb08d129e169a60538cf4a9bcdf6760155cd Mon Sep 17 00:00:00 2001 From: Kononnable Date: Wed, 18 Apr 2018 22:14:35 +0200 Subject: [PATCH] #58 primary keys on join columns --- src/entity.mst | 2 +- .../github-issues/58/entity/feedextrainfo.ts | 36 +++++++++++++++++++ .../github-issues/58/entity/quests.ts | 20 +++++++++++ .../github-issues/58/entity/users.ts | 25 +++++++++++++ 4 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 test/integration/github-issues/58/entity/feedextrainfo.ts create mode 100644 test/integration/github-issues/58/entity/quests.ts create mode 100644 test/integration/github-issues/58/entity/users.ts diff --git a/src/entity.mst b/src/entity.mst index e252dbb..21f0a0f 100644 --- a/src/entity.mst +++ b/src/entity.mst @@ -24,7 +24,7 @@ import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, Man }) {{toPropertyName name}}:{{ts_type}}; {{/relations}}{{#relations}} - @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toPropertyName ../name}}=>{{toPropertyName ../name}}.{{#if isOwner}}{{toPropertyName ownerColumn}}{{else}}{{toPropertyName relatedColumn}}{{/if}}){{#isOwner}} + @{{relationType}}(type=>{{toEntityName relatedTable}}, {{toPropertyName ../name}}=>{{toPropertyName ../name}}.{{#if isOwner}}{{toPropertyName ownerColumn}}{{#../isPrimary}},{primary:true{{^is_nullable}}, nullable:false,{{/is_nullable}} }{{/../isPrimary}}{{else}}{{toPropertyName relatedColumn}}{{/if}}){{#isOwner}} {{#if isManyToMany}}@JoinTable(){{else}}@JoinColumn({ name:'{{ ../name}}'}){{/if}}{{/isOwner}} {{#if (or isOneToMany isManyToMany)}}{{toPropertyName ../name}}:{{toEntityName relatedTable}}[]; {{else}}{{toPropertyName ../name}}:{{toEntityName relatedTable}}; diff --git a/test/integration/github-issues/58/entity/feedextrainfo.ts b/test/integration/github-issues/58/entity/feedextrainfo.ts new file mode 100644 index 0000000..f402b83 --- /dev/null +++ b/test/integration/github-issues/58/entity/feedextrainfo.ts @@ -0,0 +1,36 @@ +import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable} from "typeorm"; +import {users} from "./users"; +import {quests} from "./quests"; + + +@Entity("feedextrainfo") +@Index("feedExtraInfo_FeedOwnerId_idx",["FeedOwnerId",]) +@Index("feedExtraInfo_ReaderId_idx",["ReaderId",]) +@Index("feedExtraInfo_QuestId_idx",["QuestId",]) +export class feedextrainfo { + + + @OneToOne(type=>users, FeedOwnerId=>FeedOwnerId.feedextrainfo,{primary:true, nullable:false, }) + @JoinColumn({ name:'FeedOwnerId'}) + FeedOwnerId:users; + + + + @OneToOne(type=>quests, QuestId=>QuestId.feedextrainfo,{primary:true, nullable:false, }) + @JoinColumn({ name:'QuestId'}) + QuestId:quests; + + + + @OneToOne(type=>users, ReaderId=>ReaderId.feedextrainfo2,{primary:true, nullable:false, }) + @JoinColumn({ name:'ReaderId'}) + ReaderId:users; + + + @Column("int",{ + nullable:false, + name:"MostUpdatedFeedEntryIdUserRead" + }) + MostUpdatedFeedEntryIdUserRead:number; + +} diff --git a/test/integration/github-issues/58/entity/quests.ts b/test/integration/github-issues/58/entity/quests.ts new file mode 100644 index 0000000..f24de9d --- /dev/null +++ b/test/integration/github-issues/58/entity/quests.ts @@ -0,0 +1,20 @@ +import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable} from "typeorm"; +import {feedextrainfo} from "./feedextrainfo"; + + +@Entity("quests") +export class quests { + + @Column("int",{ + nullable:false, + primary:true, + name:"QuestId" + }) + QuestId:number; + + + + @OneToOne(type=>feedextrainfo, feedextrainfo=>feedextrainfo.QuestId) + feedextrainfo:feedextrainfo; + +} diff --git a/test/integration/github-issues/58/entity/users.ts b/test/integration/github-issues/58/entity/users.ts new file mode 100644 index 0000000..88da779 --- /dev/null +++ b/test/integration/github-issues/58/entity/users.ts @@ -0,0 +1,25 @@ +import {Index,Entity, PrimaryColumn, Column, OneToOne, OneToMany, ManyToOne, ManyToMany, JoinColumn, JoinTable} from "typeorm"; +import {feedextrainfo} from "./feedextrainfo"; + + +@Entity("users") +export class users { + + @Column("int",{ + nullable:false, + primary:true, + name:"UserId" + }) + UserId:number; + + + + @OneToOne(type=>feedextrainfo, feedextrainfo=>feedextrainfo.FeedOwnerId) + feedextrainfo:feedextrainfo; + + + + @OneToOne(type=>feedextrainfo, feedextrainfo2=>feedextrainfo2.ReaderId) + feedextrainfo2:feedextrainfo; + +}