def evalFilter(ctx, part): # TODO: Deal with dict returned from evalPart! for c in evalPart(ctx, part.p): if _ebv( part.expr, c.forget(ctx, _except=part._vars) if not part.no_isolated_scope else c): yield c
def evalLeftJoin(ctx, join): # import pdb; pdb.set_trace() for a in evalPart(ctx, join.p1): ok = False c = ctx.thaw(a) for b in evalPart(c, join.p2): if _ebv(join.expr, b.forget(ctx)): ok = True yield b if not ok: # we've cheated, the ctx above may contain # vars bound outside our scope # before we yield a solution without the OPTIONAL part # check that we would have had no OPTIONAL matches # even without prior bindings... if not any(_ebv(join.expr, b) for b in evalPart(ctx.thaw(a.remember(join.p1._vars)), join.p2)): yield a
def evalFilter(ctx, part): # TODO: Deal with dict returned from evalPart! for v, f in discriminate_filters(part.expr): if v not in ctx.filters: ctx.filters[v] = set([]) ctx.filters[v].add(f) for c in evalPart(ctx, part.p): if _ebv(part.expr, c.forget(ctx)): yield c
def evalFilter(ctx, part): # TODO: Deal with dict returned from evalPart! for c in evalPart(ctx, part.p): if _ebv(part.expr, c.forget(ctx)): yield c
def evalFilter(ctx, part): # TODO: Deal with dict returned from evalPart! for c in evalPart(ctx, part.p): if _ebv(part.expr, c.forget(ctx, _except=part._vars) if not part.no_isolated_scope else c): yield c