static RowSet Source(STransaction tr, SQuery top, SSearch sc, SDict <long, SFunction> ags, Context cx) { RowSet?s = null; var matches = SDict <long, Serialisable> .Empty; if (sc.sce is STable tb) { for (var wb = sc.where.First(); wb != null; wb = wb.Next()) { if (wb.Value.Lookup(cx) is SExpression x && x.op == SExpression.Op.Eql) { if (x.left is SColumn c && tb.names.Contains(c.name) && x.right != null && x.right.isValue) { matches = matches + (c.uid, x.right); } else if (x.right is SColumn cr && tb.names.Contains(cr.name) && x.left != null && x.left.isValue) { matches = matches + (cr.uid, x.left); } }
SearchRowSet(RowSet sce, SSearch sc, SDict <long, SFunction> ags) : base(sce._tr, sc, ags, null) { _sch = sc; _sce = sce; }
public SearchRowSet(STransaction tr, SQuery top, SSearch sc, SDict <long, SFunction> ags, Context cx) : this(Source(tr, top, sc, ags, cx), sc, ags) { }