mirror of
https://github.com/ent/ent.git
synced 2026-05-24 09:31:56 +03:00
@@ -200,9 +200,13 @@ func (g *Graph) addIndexes(schema *load.Schema) {
|
|||||||
// addEdges adds the node edges to the graph.
|
// addEdges adds the node edges to the graph.
|
||||||
func (g *Graph) addEdges(schema *load.Schema) {
|
func (g *Graph) addEdges(schema *load.Schema) {
|
||||||
t, _ := g.typ(schema.Name)
|
t, _ := g.typ(schema.Name)
|
||||||
|
seen := make(map[string]struct{}, len(schema.Edges))
|
||||||
for _, e := range schema.Edges {
|
for _, e := range schema.Edges {
|
||||||
typ, ok := g.typ(e.Type)
|
typ, ok := g.typ(e.Type)
|
||||||
expect(ok, "type %q does not exist for edge", e.Type)
|
expect(ok, "type %q does not exist for edge", e.Type)
|
||||||
|
_, ok = seen[e.Name]
|
||||||
|
expect(!ok, "%s schema contains multiple %q edges", schema.Name, e.Name)
|
||||||
|
seen[e.Name] = struct{}{}
|
||||||
switch {
|
switch {
|
||||||
// Assoc only.
|
// Assoc only.
|
||||||
case !e.Inverse:
|
case !e.Inverse:
|
||||||
|
|||||||
@@ -178,6 +178,25 @@ func TestNewGraphBadInverse(t *testing.T) {
|
|||||||
require.Errorf(t, err, "mismatch type for back-reference")
|
require.Errorf(t, err, "mismatch type for back-reference")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNewGraphDuplicateEdges(t *testing.T) {
|
||||||
|
_, err := NewGraph(&Config{Package: "entc/gen", Storage: drivers[0]},
|
||||||
|
&load.Schema{
|
||||||
|
Name: "User",
|
||||||
|
Edges: []*load.Edge{
|
||||||
|
{Name: "groups", Type: "Group"},
|
||||||
|
{Name: "groups", Type: "Group", RefName: "owner", Inverse: true},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
&load.Schema{
|
||||||
|
Name: "Group",
|
||||||
|
Edges: []*load.Edge{
|
||||||
|
{Name: "users", Type: "User", RefName: "groups", Inverse: true},
|
||||||
|
{Name: "owner", Type: "User", Unique: true},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
require.EqualError(t, err, `entc/gen: User schema contains multiple "groups" edges`)
|
||||||
|
}
|
||||||
|
|
||||||
func TestRelation(t *testing.T) {
|
func TestRelation(t *testing.T) {
|
||||||
require := require.New(t)
|
require := require.New(t)
|
||||||
_, err := NewGraph(&Config{Package: "entc/gen", Storage: drivers[0]}, T1)
|
_, err := NewGraph(&Config{Package: "entc/gen", Storage: drivers[0]}, T1)
|
||||||
|
|||||||
@@ -239,11 +239,11 @@ func (t Type) Receiver() string {
|
|||||||
return receiver(t.Name)
|
return receiver(t.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// HasAssoc returns true if this type has an assoc edge with the given name.
|
// HasAssoc returns true if this type has an assoc-edge (non-inverse)
|
||||||
// faster than map access for most cases.
|
// with the given name. faster than map access for most cases.
|
||||||
func (t Type) HasAssoc(name string) (*Edge, bool) {
|
func (t Type) HasAssoc(name string) (*Edge, bool) {
|
||||||
for _, e := range t.Edges {
|
for _, e := range t.Edges {
|
||||||
if name == e.Name {
|
if name == e.Name && !e.IsInverse() {
|
||||||
return e, true
|
return e, true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user