public Func <ArraySelector, XArray> SeekGetter() { Func <ArraySelector, XArray> numeratorGetter = _numerator.SeekGetter(); Func <ArraySelector, XArray> denominatorGetter = _denominator.SeekGetter(); if (numeratorGetter == null || denominatorGetter == null) { return(null); } return((selector) => Transform(numeratorGetter(selector), denominatorGetter(selector))); }
public Func <XArray> CurrentGetter() { // 'Current' will seek to the selected rows instead Func <ArraySelector, XArray> sourceSeeker = _column.SeekGetter(); if (sourceSeeker == null) { return(null); } return(() => sourceSeeker(_currentSelector)); }
public Func <ArraySelector, XArray> SeekGetter() { Func <ArraySelector, XArray> leftGetter = _left.SeekGetter(); Func <ArraySelector, XArray> rightGetter = _right.SeekGetter(); if (leftGetter == null || rightGetter == null) { return(null); } return((selector) => Transform(leftGetter(selector), rightGetter(selector))); }
public Func <ArraySelector, XArray> SeekGetter() { if (_table.NextCalled) { throw new AssertFailedException("Column Getters must all be requested before the first Next() call (so callees know what to retrieve)."); } Func <ArraySelector, XArray> getter = _column.SeekGetter(); return((selector) => { XArray result = getter(selector); Assert.AreEqual(selector.Count, result.Count, "Seek getters must return count matching requested ArraySelector count."); return result; }); }
public Func <ArraySelector, XArray> SeekGetter() { Func <ArraySelector, XArray> sourceGetter = _column.SeekGetter(); if (ValuesGetter() != null) { // Get values mapped and replace values array with the converted array Func <XArray> valuesGetter = ValuesGetter(); return((selector) => sourceGetter(selector).ReplaceValues(valuesGetter())); } else { // Otherwise, convert from the underlying current getter return((selector) => Convert(sourceGetter(selector))); } }
public Join(IXTable source, string joinFromColumn, IXTable joinToSource, string joinToColumn, string joinSidePrefix) { if (source == null) { throw new ArgumentNullException("source"); } _source = source; _joinToSource = joinToSource; // Request the JoinFromColumn Getter IXColumn joinFrom = source.Columns.Find(joinFromColumn); _joinColumnType = joinFrom.ColumnDetails.Type; _joinFromColumnGetter = joinFrom.CurrentGetter(); // Request the JoinToColumn Reader (we'll need it cached) _joinToColumn = _joinToSource.Columns.Find(joinToColumn); Type joinToColumnType = _joinToColumn.ColumnDetails.Type; if (joinToColumnType != _joinColumnType) { throw new ArgumentException($"Join requires columns of matching types; join from {_joinColumnType.Name} to {joinToColumnType.Name} not supported."); } _joinToSeekGetter = _joinToColumn.SeekGetter(); // Build a remapper for left side columns _sourceJoinedRowsFilter = new RowRemapper(); // Build column wrappers _columns = new IXColumn[source.Columns.Count + joinToSource.Columns.Count]; _rightSideColumns = new SeekedColumn[joinToSource.Columns.Count]; // Left Side columns are filtered to rows that joined (inner join) for (int i = 0; i < source.Columns.Count; ++i) { _columns[i] = new RemappedColumn(source.Columns[i], _sourceJoinedRowsFilter); } // Right side columns are seeked to the right side matching rows for (int i = 0; i < joinToSource.Columns.Count; ++i) { SeekedColumn column = new SeekedColumn(RenamedColumn.Build(joinToSource.Columns[i], joinSidePrefix + joinToSource.Columns[i].ColumnDetails.Name)); _rightSideColumns[i] = column; _columns[i + source.Columns.Count] = column; } }
public Func <ArraySelector, XArray> SeekGetter() { Func <ArraySelector, XArray> getter1 = _column1.SeekGetter(); Func <ArraySelector, XArray> getter2 = _column2.SeekGetter(); // If either side doesn't support seek, we can't seek if (getter1 == null || getter2 == null) { return(null); } // Otherwise, convert from the underlying current getter return((selector) => { _beforeBatch?.Invoke(); return Convert(getter1(selector), getter2(selector)); }); }
public Func <ArraySelector, XArray> SeekGetter() { Func <ArraySelector, XArray> sourceGetter = _column.SeekGetter(); if (sourceGetter == null) { return(null); } if (ValuesGetter() != null) { // Get values mapped and replace values array with the converted array return((selector) => sourceGetter(selector).ReplaceValues(_convertedValues)); } else { // Otherwise, convert from the underlying seek getter return((selector) => _converter(sourceGetter(selector))); } }
public Func <ArraySelector, XArray> SeekGetter() { return(_column.SeekGetter()); }