dialect/sql/sqlgraph: support edgeschema in entgql (#2817)

This commit is contained in:
Ariel Mashraki
2022-08-01 18:18:12 +03:00
committed by GitHub
parent ea3aa8cf5b
commit 26e07c90c0
9 changed files with 2109 additions and 4 deletions

View File

@@ -244,9 +244,22 @@ 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
switch {
case edge.To.ID != nil:
toC = edge.To.ID.Column
// Edge-owner points to its edge schema.
case edge.To.CompositeID != nil && !edge.Spec.Inverse:
toC = edge.To.CompositeID[0].Column
// Edge-backref points to its edge schema.
case edge.To.CompositeID != nil && edge.Spec.Inverse:
toC = edge.To.CompositeID[1].Column
default:
panic(evalError{fmt.Sprintf("expect id definition for edge %q", name)})
}
step := NewStep(
From(e.context.Table, e.context.ID.Column),
To(edge.To.Table, edge.To.ID.Column),
To(edge.To.Table, toC),
Edge(edge.Spec.Rel, edge.Spec.Inverse, edge.Spec.Table, edge.Spec.Columns...),
)
selector := e.selector.Clone().SetP(nil)