mirror of
https://github.com/ent/ent.git
synced 2026-04-28 13:40:56 +03:00
dialect/sql/sqlgraph: handle edge-schema in M2O/O2Oi calls entql
This commit is contained in:
committed by
Ariel Mashraki
parent
521f9b57bc
commit
35d0d4c3db
@@ -46,7 +46,6 @@ type (
|
||||
//
|
||||
// g.AddE("pets", spec, "user", "pet")
|
||||
// g.AddE("friends", spec, "user", "user")
|
||||
//
|
||||
func (g *Schema) AddE(name string, spec *EdgeSpec, from, to string) error {
|
||||
var fromT, toT *Node
|
||||
for i := range g.Nodes {
|
||||
@@ -244,7 +243,7 @@ func (e *state) evalBinary(expr *entql.BinaryExpr) *sql.Predicate {
|
||||
func (e *state) evalEdge(name string, exprs ...entql.Expr) *sql.Predicate {
|
||||
edge, ok := e.context.Edges[name]
|
||||
expect(ok, "edge %q was not found for node %q", name, e.context.Type)
|
||||
var toC string
|
||||
var fromC, toC string
|
||||
switch {
|
||||
case edge.To.ID != nil:
|
||||
toC = edge.To.ID.Column
|
||||
@@ -257,8 +256,17 @@ func (e *state) evalEdge(name string, exprs ...entql.Expr) *sql.Predicate {
|
||||
default:
|
||||
panic(evalError{fmt.Sprintf("expect id definition for edge %q", name)})
|
||||
}
|
||||
switch {
|
||||
case e.context.ID != nil:
|
||||
fromC = e.context.ID.Column
|
||||
case e.context.CompositeID != nil && (edge.Spec.Rel == M2O || (edge.Spec.Rel == O2O && edge.Spec.Inverse)):
|
||||
// An edge-schema with a composite id can query
|
||||
// only edges that it owns (holds the foreign-key).
|
||||
default:
|
||||
panic(evalError{fmt.Sprintf("unexpected edge-query from an edge-schema %q", e.context.Type)})
|
||||
}
|
||||
step := NewStep(
|
||||
From(e.context.Table, e.context.ID.Column),
|
||||
From(e.context.Table, fromC),
|
||||
To(edge.To.Table, toC),
|
||||
Edge(edge.Spec.Rel, edge.Spec.Inverse, edge.Spec.Table, edge.Spec.Columns...),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user