public FilterContext(DataFilter owner, Resultset source, Object filterPredicate, QueryContext queryContext, Object[] parameters) : base(owner, source, queryContext, parameters) { _source = source; _compiledBody = new FunctionLink(); List<ColumnBinding> bindings = new List<ColumnBinding>(); ExpressionTransformer transformer = new ExpressionTransformer(bindings); foreach (RowType.TypeInfo ti in source.RowType.Fields) foreach (RowType.TypeInfo nested_ti in ti.NestedType.Fields) if (!nested_ti.IsHidden) { ColumnBinding b = new ColumnBinding(); b.typecode = Type.GetTypeCode(nested_ti.DataType); b.rnum = ti.Ordinal; b.TableName = ti.Name; b.Name = nested_ti.Name; b.fieldType = nested_ti; b.natural = nested_ti.IsNatural; b.container = nested_ti.IsContainer; b.caseSensitive = nested_ti.IsCaseSensitive; b.data = new SymbolLink(nested_ti.DataType); bindings.Add(b); if (nested_ti.IsContainer) transformer.NeedTransform = true; } LispExecutive.Enter(_resolver = new DataResolver(new Binder(bindings))); if (transformer.NeedTransform) _filterPredicate = transformer.Process(filterPredicate); else _filterPredicate = filterPredicate; }
public SelectorContext(DataSelector owner, bool distinct, Column[] columns, DataResolver resolver, Resultset source, QueryContext queryContext, object[] parameters, FunctionLink[] compiledBody) : base(owner, source, queryContext, parameters) { _columns = columns; _source = source; _resolver = resolver; _topRows = owner.TopRows; _compiledBody = compiledBody; RowNum = 1; if (distinct) _distinctSet = new HashSet<Row>(new RowEqualityComparer()); LispExecutive.Enter(resolver); }