Fix generation of self many-to-many
- Clean up the generation of to_many relationship types
This commit is contained in:
parent
b0cdc29c61
commit
14c5e5f149
2 changed files with 28 additions and 29 deletions
|
@ -76,7 +76,7 @@ func toManyRelationships(table Table, tables []Table) []ToManyRelationship {
|
||||||
|
|
||||||
for _, t := range tables {
|
for _, t := range tables {
|
||||||
for _, f := range t.FKeys {
|
for _, f := range t.FKeys {
|
||||||
if f.ForeignTable == table.Name && !f.Unique {
|
if f.ForeignTable == table.Name && (t.IsJoinTable || !f.Unique) {
|
||||||
relationships = append(relationships, buildToManyRelationship(table, f, t, tables))
|
relationships = append(relationships, buildToManyRelationship(table, f, t, tables))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -101,12 +101,11 @@ func buildToOneRelationship(localTable Table, foreignKey ForeignKey, foreignTabl
|
||||||
|
|
||||||
func buildToManyRelationship(localTable Table, foreignKey ForeignKey, foreignTable Table, tables []Table) ToManyRelationship {
|
func buildToManyRelationship(localTable Table, foreignKey ForeignKey, foreignTable Table, tables []Table) ToManyRelationship {
|
||||||
if !foreignTable.IsJoinTable {
|
if !foreignTable.IsJoinTable {
|
||||||
col := localTable.GetColumn(foreignKey.ForeignColumn)
|
|
||||||
return ToManyRelationship{
|
return ToManyRelationship{
|
||||||
Table: localTable.Name,
|
Table: localTable.Name,
|
||||||
Column: foreignKey.ForeignColumn,
|
Column: foreignKey.ForeignColumn,
|
||||||
Nullable: col.Nullable,
|
Nullable: foreignKey.ForeignColumnNullable,
|
||||||
Unique: col.Unique,
|
Unique: foreignKey.ForeignColumnUnique,
|
||||||
ForeignTable: foreignTable.Name,
|
ForeignTable: foreignTable.Name,
|
||||||
ForeignColumn: foreignKey.Column,
|
ForeignColumn: foreignKey.Column,
|
||||||
ForeignColumnNullable: foreignKey.Nullable,
|
ForeignColumnNullable: foreignKey.Nullable,
|
||||||
|
@ -115,33 +114,33 @@ func buildToManyRelationship(localTable Table, foreignKey ForeignKey, foreignTab
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
col := foreignTable.GetColumn(foreignKey.Column)
|
|
||||||
relationship := ToManyRelationship{
|
relationship := ToManyRelationship{
|
||||||
Table: localTable.Name,
|
Table: localTable.Name,
|
||||||
Column: foreignKey.ForeignColumn,
|
Column: foreignKey.ForeignColumn,
|
||||||
Nullable: col.Nullable,
|
Nullable: foreignKey.ForeignColumnNullable,
|
||||||
Unique: col.Unique,
|
Unique: foreignKey.ForeignColumnUnique,
|
||||||
|
|
||||||
ToJoinTable: true,
|
ToJoinTable: true,
|
||||||
JoinTable: foreignTable.Name,
|
JoinTable: foreignTable.Name,
|
||||||
|
|
||||||
|
JoinLocalColumn: foreignKey.Column,
|
||||||
|
JoinLocalColumnNullable: foreignKey.Nullable,
|
||||||
|
JoinLocalColumnUnique: foreignKey.Unique,
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, fk := range foreignTable.FKeys {
|
for _, fk := range foreignTable.FKeys {
|
||||||
if fk.ForeignTable != localTable.Name {
|
if fk.Name == foreignKey.Name {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
relationship.JoinForeignColumn = fk.Column
|
relationship.JoinForeignColumn = fk.Column
|
||||||
relationship.JoinForeignColumnNullable = fk.Nullable
|
relationship.JoinForeignColumnNullable = fk.Nullable
|
||||||
relationship.JoinForeignColumnUnique = fk.Unique
|
relationship.JoinForeignColumnUnique = fk.Unique
|
||||||
|
|
||||||
foreignTable := GetTable(tables, fk.ForeignTable)
|
|
||||||
foreignCol := foreignTable.GetColumn(fk.ForeignColumn)
|
|
||||||
relationship.ForeignTable = fk.ForeignTable
|
relationship.ForeignTable = fk.ForeignTable
|
||||||
relationship.ForeignColumn = fk.ForeignColumn
|
relationship.ForeignColumn = fk.ForeignColumn
|
||||||
relationship.ForeignColumnNullable = foreignCol.Nullable
|
relationship.ForeignColumnNullable = fk.ForeignColumnNullable
|
||||||
relationship.ForeignColumnUnique = foreignCol.Unique
|
relationship.ForeignColumnUnique = fk.ForeignColumnUnique
|
||||||
} else {
|
|
||||||
relationship.JoinLocalColumn = fk.Column
|
|
||||||
relationship.JoinLocalColumnNullable = fk.Nullable
|
|
||||||
relationship.JoinLocalColumnUnique = fk.Unique
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return relationship
|
return relationship
|
||||||
|
|
|
@ -213,15 +213,15 @@ func TestToManyRelationshipsNull(t *testing.T) {
|
||||||
Name: "jets",
|
Name: "jets",
|
||||||
Columns: []Column{{Name: "id", Nullable: true}, {Name: "pilot_id", Nullable: true}, {Name: "airport_id", Nullable: true}},
|
Columns: []Column{{Name: "id", Nullable: true}, {Name: "pilot_id", Nullable: true}, {Name: "airport_id", Nullable: true}},
|
||||||
FKeys: []ForeignKey{
|
FKeys: []ForeignKey{
|
||||||
{Name: "jets_pilot_id_fk", Column: "pilot_id", ForeignTable: "pilots", ForeignColumn: "id", Nullable: true},
|
{Name: "jets_pilot_id_fk", Column: "pilot_id", ForeignTable: "pilots", ForeignColumn: "id", Nullable: true, ForeignColumnNullable: true},
|
||||||
{Name: "jets_airport_id_fk", Column: "airport_id", ForeignTable: "airports", ForeignColumn: "id", Nullable: true},
|
{Name: "jets_airport_id_fk", Column: "airport_id", ForeignTable: "airports", ForeignColumn: "id", Nullable: true, ForeignColumnNullable: true},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "licenses",
|
Name: "licenses",
|
||||||
Columns: []Column{{Name: "id", Nullable: true}, {Name: "pilot_id", Nullable: true}},
|
Columns: []Column{{Name: "id", Nullable: true}, {Name: "pilot_id", Nullable: true}},
|
||||||
FKeys: []ForeignKey{
|
FKeys: []ForeignKey{
|
||||||
{Name: "licenses_pilot_id_fk", Column: "pilot_id", ForeignTable: "pilots", ForeignColumn: "id", Nullable: true},
|
{Name: "licenses_pilot_id_fk", Column: "pilot_id", ForeignTable: "pilots", ForeignColumn: "id", Nullable: true, ForeignColumnNullable: true},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -237,8 +237,8 @@ func TestToManyRelationshipsNull(t *testing.T) {
|
||||||
IsJoinTable: true,
|
IsJoinTable: true,
|
||||||
Columns: []Column{{Name: "pilot_id", Nullable: true}, {Name: "language_id", Nullable: true}},
|
Columns: []Column{{Name: "pilot_id", Nullable: true}, {Name: "language_id", Nullable: true}},
|
||||||
FKeys: []ForeignKey{
|
FKeys: []ForeignKey{
|
||||||
{Name: "pilot_id_fk", Column: "pilot_id", ForeignTable: "pilots", ForeignColumn: "id", Nullable: true},
|
{Name: "pilot_id_fk", Column: "pilot_id", ForeignTable: "pilots", ForeignColumn: "id", Nullable: true, ForeignColumnNullable: true},
|
||||||
{Name: "language_id_fk", Column: "language_id", ForeignTable: "languages", ForeignColumn: "id", Nullable: true},
|
{Name: "language_id_fk", Column: "language_id", ForeignTable: "languages", ForeignColumn: "id", Nullable: true, ForeignColumnNullable: true},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue