コード例 #1
0
ファイル: Divide.cs プロジェクト: sharwell/elfie-arriba
        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)));
        }
コード例 #2
0
ファイル: SeekedColumn.cs プロジェクト: sharwell/elfie-arriba
        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));
        }
コード例 #3
0
        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)));
        }
コード例 #4
0
        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;
            });
        }
コード例 #5
0
ファイル: IsNull.cs プロジェクト: sharwell/elfie-arriba
        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)));
            }
        }
コード例 #6
0
ファイル: Join.cs プロジェクト: lulzzz/elfie-arriba
        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;
            }
        }
コード例 #7
0
        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));
            });
        }
コード例 #8
0
        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)));
            }
        }
コード例 #9
0
 public Func <ArraySelector, XArray> SeekGetter()
 {
     return(_column.SeekGetter());
 }