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)
 {
 }