Skip to content

Commit

Permalink
lucy-query-engine: integrate relations and add more multi-target func…
Browse files Browse the repository at this point in the history
…tionality
  • Loading branch information
supercmmetry committed Feb 22, 2020
1 parent 2a39cb0 commit eb4f6b4
Showing 1 changed file with 40 additions and 8 deletions.
48 changes: 40 additions & 8 deletions internal/query_engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -156,20 +156,12 @@ func (q *QueryEngine) Sync() error {

break
case SetTarget:
if _, ok := q.cradle.deps[Where]; !ok {
return Error(UnsatisfiedDependency, "missing: Where()")
}

cradle.Ops.Push(SetTarget)
cradle.Out = qr.Output
cradle.deps[SetTarget] = struct{}{}
cradle.AllowEmptyResult = false

break
case MiscNodeName:
cradle.Ops.Push(MiscNodeName)
cradle.Exps.Push(qr.Params)
cradle.deps[MiscNodeName] = struct{}{}
break
case Creation:
cradle.Ops.Push(cradle.family)
Expand Down Expand Up @@ -241,6 +233,46 @@ func (q *QueryEngine) Sync() error {
}

cradle.Ops.Push(cradle.family)
break
case RelationX:
// nuke existing multi-target.
cradle.Out = nil

cradle.Ops.Push(cradle.family)
cradle.Exps.Push(qr.Params)
cradle.deps[RelationX] = struct{}{}
break
case RelationY:
if _, ok := cradle.deps[RelationX]; !ok {
return Error(UnsatisfiedDependency, "missing: Relate()")
}

cradle.Ops.Push(cradle.family)
cradle.Exps.Push(qr.Params)
cradle.deps[RelationY] = struct{}{}
break
case By:
if _, ok := cradle.deps[RelationY]; !ok {
return Error(UnsatisfiedDependency, "missing: To()")
}

cradle.Ops.Push(cradle.family)
cradle.Exps.Push(qr.Params)
break

case MTRelation:

// Use Relation() only after Find()
if q.cradle.Out == nil {
return Error(UnsatisfiedDependency, "missing: Find()")
}

cradle.Ops.Push(cradle.family)

exp := qr.Params.(Exp)
exp["out"] = cradle.Out
cradle.Exps.Push(exp)

break
}

Expand Down

0 comments on commit eb4f6b4

Please sign in to comment.