bool pushdownFilter(LogicNode plan, Expr filter, bool pushJoinFilter) { // don't push down special expressions if (filter.VisitEachExists(x => x is MarkerExpr)) { return(false); } switch (filter.TableRefCount()) { case 0: // say ?b.b1 = ?a.a1 return(plan.VisitEachExists(n => { if (n is LogicScanTable nodeGet) { return nodeGet.AddFilter(filter); } return false; })); case 1: return(plan.VisitEachExists(n => { if (n is LogicScanTable nodeGet && filter.EqualTableRef(nodeGet.tabref_)) { return nodeGet.AddFilter(filter); } return false; })); default: if (pushJoinFilter) { return(plan.PushJoinFilter(filter)); } return(false); } }