예제 #1
0
        // Constructors

        /// <summary>
        /// Initializes a new instance of this class.
        /// </summary>
        /// <param name="source">A value for <see cref="UnaryProvider.Source"/>.</param>
        /// <param name="algorithm">A value for <see cref="Algorithm"/>.</param>
        /// <param name="isInlined">A value for <see cref="IsInlined"/>.</param>
        /// <param name="filterDataSource">A value for <see cref="FilterDataSource"/>.</param>
        /// <param name="resultColumnName">A value for <see cref="ResultColumnName"/>.</param>
        /// <param name="filteredColumns">A value for <see cref="FilteredColumns"/>.</param>
        public IncludeProvider(CompilableProvider source, IncludeAlgorithm algorithm, bool isInlined,
                               Expression <Func <IEnumerable <Tuple> > > filterDataSource, string resultColumnName, IReadOnlyList <int> filteredColumns)
            : base(ProviderType.Include, source)
        {
            ArgumentValidator.EnsureArgumentNotNull(filterDataSource, "filterDataSource");
            ArgumentValidator.EnsureArgumentNotNullOrEmpty(resultColumnName, "resultColumnName");
            ArgumentValidator.EnsureArgumentNotNull(filteredColumns, "filteredColumns");
            Algorithm        = algorithm;
            IsInlined        = isInlined;
            FilterDataSource = filterDataSource;
            ResultColumnName = resultColumnName;

            switch (filteredColumns)
            {
            case int[] columnArray:
                FilteredColumns = Array.AsReadOnly(columnArray);
                break;

            case List <int> columnList:
                FilteredColumns = columnList.AsReadOnly();
                break;

            default:
                FilteredColumns = filteredColumns;
                break;
            }

            Initialize();
        }
예제 #2
0
        // Constructors

        /// <summary>
        /// Initializes a new instance of this class.
        /// </summary>
        /// <param name="source">The <see cref="UnaryProvider.Source"/> property value.</param>
        /// <param name="lockMode">The mode of the lock to be acquired.</param>
        /// <param name="lockBehavior">The behavior of the lock.</param>
        public LockProvider(CompilableProvider source, LockMode lockMode, LockBehavior lockBehavior) :
            base(ProviderType.Lock, source)
        {
            LockMode     = () => lockMode;
            LockBehavior = () => lockBehavior;
            Initialize();
        }
예제 #3
0
 /// <summary>
 /// Initializes a new instance of this class.
 /// </summary>
 /// <param name="source">The <see cref="UnaryProvider.Source"/> property value.</param>
 /// <param name="lockMode">The delegate returning the mode of the lock to be acquired.</param>
 /// <param name="lockBehavior">The delegate returning the behavior of the lock.</param>
 public LockProvider(CompilableProvider source, Func <LockMode> lockMode, Func <LockBehavior> lockBehavior) :
     base(ProviderType.Lock, source)
 {
     LockMode     = lockMode;
     LockBehavior = lockBehavior;
     Initialize();
 }
예제 #4
0
        // Constructors

        /// <summary>
        ///   Initializes a new instance of this class.
        /// </summary>
        /// <param name="type">The type of provider.</param>
        /// <param name="left">The <see cref="Left"/> provider.</param>
        /// <param name="right">The <see cref="Left"/> provider.</param>
        protected BinaryProvider(ProviderType type, CompilableProvider left, CompilableProvider right)
            : base(type, left, right)
        {
            ArgumentValidator.EnsureArgumentNotNull(left, "left");
            ArgumentValidator.EnsureArgumentNotNull(right, "right");
            Left  = left;
            Right = right;
        }
        // Constructors

        /// <summary>
        /// Initializes a new instance of this class.
        /// </summary>
        public PredicateJoinProvider(CompilableProvider left, CompilableProvider right,
                                     Expression <Func <Tuple, Tuple, bool> > predicate, JoinType joinType)
            : base(ProviderType.PredicateJoin, left, right)
        {
            Predicate = predicate;
            JoinType  = joinType;
            Initialize();
        }
예제 #6
0
 /// <summary>
 /// Initializes a new instance of this class.
 /// </summary>
 public ApplyProvider(ApplyParameter applyParameter, CompilableProvider left, CompilableProvider right, bool isInlined, ApplySequenceType applySequenceType, JoinType applyType)
     : base(ProviderType.Apply, left, right)
 {
     ApplyParameter = applyParameter;
     IsInlined      = isInlined;
     SequenceType   = applySequenceType;
     ApplyType      = applyType;
     Initialize();
 }
        // Constructors

        /// <summary>
        ///   Initializes a new instance of this class.
        /// </summary>
        /// <param name="provider">The <see cref="UnaryProvider.Source"/> property value.</param>
        /// <param name="take">The <see cref="Take"/> property value.</param>
        /// <param name="skip">The <see cref="Skip"/> property value.</param>
        public PagingProvider(CompilableProvider provider, Func <ParameterContext, int> skip, Func <ParameterContext, int> take)
            : base(ProviderType.Paging, provider)
        {
            Skip = skip;
            Take = take;
            From = context => skip(context) + 1;
            To   = context => take(context) + skip(context);
            Initialize();
        }
 /// <summary>
 ///     Initializes a new instance of this class.
 /// </summary>
 /// <param name="provider">The <see cref="UnaryProvider.Source"/> property value.</param>
 /// <param name="skip">The value for <see cref="Skip"/> function property.</param>
 /// <param name="take">The value for <see cref="Take"/> function property.</param>
 public PagingProvider(CompilableProvider provider, int skip, int take)
     : base(ProviderType.Paging, provider)
 {
     Skip = context => skip;
     Take = context => take;
     From = context => skip + 1;
     To   = context => take + skip;
     Initialize();
 }
 /// <summary>
 ///   Initializes a new instance of this class.
 /// </summary>
 /// <param name="provider">The provider.</param>
 /// <param name="pagingProvider">The paging provider.</param>
 public PagingProvider(CompilableProvider provider, PagingProvider pagingProvider)
     : base(ProviderType.Paging, provider)
 {
     Skip = pagingProvider.Skip;
     Take = pagingProvider.Take;
     From = pagingProvider.From;
     To   = pagingProvider.To;
     Initialize();
 }
예제 #10
0
        // Constructors

        /// <summary>
        ///   Initializes a new instance of this class.
        /// </summary>
        /// <param name="origin">The <see cref="Origin"/> property value.</param>
        /// <param name="sources">The <see cref="Provider.Sources"/> property value.</param>
        protected ExecutableProvider(CompilableProvider origin, params ExecutableProvider[] sources)
            : base(origin.Type, sources)
        {
            if (origin == null)
            {
                throw new ArgumentNullException("origin");
            }
            Origin = origin;
        }
예제 #11
0
        // Constructors

        /// <summary>
        ///   Initializes a new instance of this class.
        /// </summary>
        /// <param name="provider">The <see cref="UnaryProvider.Source"/> property value.</param>
        /// <param name="take">The <see cref="Take"/> property value.</param>
        /// <param name="skip">The <see cref="Skip"/> property value.</param>
        public PagingProvider(CompilableProvider provider, Func <int> skip, Func <int> take)
            : base(ProviderType.Paging, provider)
        {
            Skip = skip;
            Take = take;
            From = () => skip() + 1;
            To   = () => take() + skip();
            Initialize();
        }
예제 #12
0
        // Constructors

        /// <summary>
        /// Initializes a new instance of this class.
        /// </summary>
        /// <param name="left">The left provider to join.</param>
        /// <param name="right">The right provider to join.</param>
        /// <param name="joinType">The join operation type.</param>
        /// <param name="equalIndexes">The <see cref="EqualIndexes"/> property value.</param>
        /// <exception cref="ArgumentException">Wrong arguments.</exception>
        public JoinProvider(CompilableProvider left, CompilableProvider right, JoinType joinType, params Pair <int>[] equalIndexes)
            : base(ProviderType.Join, left, right)
        {
            if (equalIndexes == null || equalIndexes.Length == 0)
            {
                throw new ArgumentException(
                          Strings.ExAtLeastOneColumnIndexPairMustBeSpecified, "equalIndexes");
            }
            JoinType     = joinType;
            EqualIndexes = equalIndexes;
            Initialize();
        }
        /// <summary>
        ///     Initializes a new instance of this class.
        /// </summary>
        /// <param name="source">The <see cref="UnaryProvider.Source"/> property value.</param>
        /// <param name="isInlined">The <see cref="IsInlined"/> property value.</param>
        /// <param name="columnDescriptors">The descriptors of <see cref="CalculatedColumns"/>.</param>
        public CalculateProvider(CompilableProvider source, bool isInlined, params CalculatedColumnDescriptor[] columnDescriptors)
            : base(ProviderType.Calculate, source)
        {
            IsInlined = isInlined;
            var columns = new CalculatedColumn[columnDescriptors.Length];

            for (int i = 0; i < columnDescriptors.Length; i++)
            {
                var col = new CalculatedColumn(columnDescriptors[i], Source.Header.Length + i);
                columns.SetValue(col, i);
            }
            CalculatedColumns = columns;
            Initialize();
        }
        // Constructors

        /// <summary>
        /// Initializes a new instance of this class.
        /// </summary>
        /// <param name="source">A value for <see cref="UnaryProvider.Source"/>.</param>
        /// <param name="algorithm">A value for <see cref="Algorithm"/>.</param>
        /// <param name="isInlined">A value for <see cref="IsInlined"/>.</param>
        /// <param name="filterDataSource">A value for <see cref="FilterDataSource"/>.</param>
        /// <param name="resultColumnName">A value for <see cref="ResultColumnName"/>.</param>
        /// <param name="filteredColumns">A value for <see cref="FilteredColumns"/>.</param>
        public IncludeProvider(CompilableProvider source, IncludeAlgorithm algorithm, bool isInlined,
                               Expression <Func <IEnumerable <Tuple> > > filterDataSource, string resultColumnName, int[] filteredColumns)
            : base(ProviderType.Include, source)
        {
            ArgumentValidator.EnsureArgumentNotNull(filterDataSource, "filterDataSource");
            ArgumentValidator.EnsureArgumentNotNullOrEmpty(resultColumnName, "resultColumnName");
            ArgumentValidator.EnsureArgumentNotNull(filteredColumns, "filteredColumns");
            Algorithm            = algorithm;
            IsInlined            = isInlined;
            FilterDataSource     = filterDataSource;
            ResultColumnName     = resultColumnName;
            this.filteredColumns = filteredColumns.Copy();
            Initialize();
        }
예제 #15
0
        // Constructors

        /// <summary>
        /// Initializes a new instance of this class.
        /// </summary>
        /// <param name="source">The <see cref="UnaryProvider.Source"/> property value.</param>
        /// <param name="columnDescriptors">The descriptors of <see cref="AggregateColumns"/>.</param>
        /// <param name="groupIndexes">The column indexes to group by.</param>
        public AggregateProvider(CompilableProvider source, int[] groupIndexes, params AggregateColumnDescriptor[] columnDescriptors)
            : base(ProviderType.Aggregate, source)
        {
            groupIndexes = groupIndexes ?? ArrayUtils <int> .EmptyArray;
            var columns = new AggregateColumn[columnDescriptors.Length];

            for (int i = 0; i < columnDescriptors.Length; i++)
            {
                AggregateColumnDescriptor descriptor = columnDescriptors[i];
                var type = GetAggregateColumnType(Source.Header.Columns[descriptor.SourceIndex].Type, descriptor.AggregateType);
                columns[i] = new AggregateColumn(descriptor, groupIndexes.Length + i, type);
            }
            AggregateColumns   = columns;
            GroupColumnIndexes = groupIndexes;
            Initialize();
        }
예제 #16
0
        /// <summary>
        /// Initializes a new instance of this class.
        /// </summary>
        /// <param name="left">The left provider to join.</param>
        /// <param name="right">The right provider to join.</param>
        /// <param name="joinType">The join operation type.</param>
        /// <param name="equalIndexes">Transformed to the <see cref="EqualIndexes"/> property value.</param>
        /// <exception cref="ArgumentException">Wrong arguments.</exception>
        public JoinProvider(CompilableProvider left, CompilableProvider right, JoinType joinType, params int[] equalIndexes)
            : base(ProviderType.Join, left, right)
        {
            if (equalIndexes == null || equalIndexes.Length < 2)
            {
                throw new ArgumentException(
                          Strings.ExAtLeastOneColumnIndexPairMustBeSpecified, "equalIndexes");
            }
            var ei = new Pair <int> [equalIndexes.Length / 2];

            for (int i = 0, j = 0; i < ei.Length; i++)
            {
                ei[i] = new Pair <int>(equalIndexes[j++], equalIndexes[j++]);
            }
            JoinType     = joinType;
            EqualIndexes = ei;
            Initialize();
        }
        // Constructors

        /// <summary>
        ///   Initializes a new instance of this class.
        /// </summary>
        public SelectProvider(CompilableProvider provider, IReadOnlyList <int> columnIndexes)
            : base(ProviderType.Select, provider)
        {
            switch (columnIndexes)
            {
            case int[] indexArray:
                ColumnIndexes = Array.AsReadOnly(indexArray);
                break;

            case List <int> indexList:
                ColumnIndexes = indexList.AsReadOnly();
                break;

            default:
                ColumnIndexes = columnIndexes;
                break;
            }

            Initialize();
        }
        // Constructors

        /// <summary>
        /// Initializes a new instance of this class.
        /// </summary>
        public ExistenceProvider(CompilableProvider source, string existenceColumnName)
            : base(ProviderType.Existence, source)
        {
            ExistenceColumnName = existenceColumnName;
            Initialize();
        }
예제 #19
0
        // Constructors

        /// <summary>
        ///  Initializes a new instance of this class.
        /// </summary>
        /// <param name="left">The left provider for union.</param>
        /// <param name="right">The right provider for union.</param>
        public UnionProvider(CompilableProvider left, CompilableProvider right)
            : base(ProviderType.Union, left, right)
        {
            Initialize();
        }
예제 #20
0
 /// <summary>
 ///   Initializes a new instance of this class.
 /// </summary>
 /// <param name="source">The <see cref="UnaryProvider.Source"/> property value.</param>
 /// <param name="key">Wrapped to <see cref="Key"/> property value.</param>
 public SeekProvider(CompilableProvider source, Tuple key)
     : base(ProviderType.Seek, source)
 {
     Key = context => key;
     Initialize();
 }
예제 #21
0
        // Constructors

        /// <summary>
        ///   Initializes a new instance of this class.
        /// </summary>
        /// <param name="source">The <see cref="UnaryProvider.Source"/> property value.</param>
        /// <param name="key">The <see cref="Key"/> property value.</param>
        public SeekProvider(CompilableProvider source, Func <ParameterContext, Tuple> key)
            : base(ProviderType.Seek, source)
        {
            Key = key;
            Initialize();
        }
예제 #22
0
 /// <summary>
 ///   Initializes a new instance of this class.
 /// </summary>
 /// <param name="provider">The <see cref="UnaryProvider.Source"/> property value.</param>
 /// <param name="count">The value for <see cref="Count"/> function property.</param>
 public SkipProvider(CompilableProvider provider, int count)
     : base(ProviderType.Skip, provider)
 {
     Count = context => count;
     Initialize();
 }
        /// <summary>
        /// Visits the specified <paramref name="cp"/>.
        /// </summary>
        /// <param name="cp">The <see cref="CompilableProvider"/> to visit.</param>
        /// <returns>Visit result.</returns>
        protected virtual Provider Visit(CompilableProvider cp)
        {
            if (cp == null)
            {
                return(null);
            }
            Provider     result;
            ProviderType providerType = cp.Type;

            switch (providerType)
            {
            case ProviderType.Index:
                result = VisitIndex((IndexProvider)cp);
                break;

            case ProviderType.Store:
                result = VisitStore((StoreProvider)cp);
                break;

            case ProviderType.Aggregate:
                result = VisitAggregate((AggregateProvider)cp);
                break;

            case ProviderType.Alias:
                result = VisitAlias((AliasProvider)cp);
                break;

            case ProviderType.Calculate:
                result = VisitCalculate((CalculateProvider)cp);
                break;

            case ProviderType.Distinct:
                result = VisitDistinct((DistinctProvider)cp);
                break;

            case ProviderType.Filter:
                result = VisitFilter((FilterProvider)cp);
                break;

            case ProviderType.Join:
                result = VisitJoin((JoinProvider)cp);
                break;

            case ProviderType.Sort:
                result = VisitSort((SortProvider)cp);
                break;

            case ProviderType.Raw:
                result = VisitRaw((RawProvider)cp);
                break;

            case ProviderType.Seek:
                result = VisitSeek((SeekProvider)cp);
                break;

            case ProviderType.Select:
                result = VisitSelect((SelectProvider)cp);
                break;

            case ProviderType.Skip:
                result = VisitSkip((SkipProvider)cp);
                break;

            case ProviderType.Take:
                result = VisitTake((TakeProvider)cp);
                break;

            case ProviderType.Paging:
                result = VisitPaging((PagingProvider)cp);
                break;

            case ProviderType.RowNumber:
                result = VisitRowNumber((RowNumberProvider)cp);
                break;

            case ProviderType.Apply:
                result = VisitApply((ApplyProvider)cp);
                break;

            case ProviderType.Existence:
                result = VisitExistence((ExistenceProvider)cp);
                break;

            case ProviderType.PredicateJoin:
                result = VisitPredicateJoin((PredicateJoinProvider)cp);
                break;

            case ProviderType.Intersect:
                result = VisitIntersect((IntersectProvider)cp);
                break;

            case ProviderType.Except:
                result = VisitExcept((ExceptProvider)cp);
                break;

            case ProviderType.Concat:
                result = VisitConcat((ConcatProvider)cp);
                break;

            case ProviderType.Union:
                result = VisitUnion((UnionProvider)cp);
                break;

            case ProviderType.Lock:
                result = VisitLock((LockProvider)cp);
                break;

            case ProviderType.Include:
                result = VisitInclude((IncludeProvider)cp);
                break;

            case ProviderType.FreeText:
                result = VisitFreeText((FreeTextProvider)cp);
                break;

            case ProviderType.ContainsTable:
                result = VisitContainsTable((ContainsTableProvider)cp);
                break;

            case ProviderType.Void:
                throw new NotSupportedException(Strings.ExProcessingOfVoidProviderIsNotSupported);

            default:
                throw new ArgumentOutOfRangeException();
            }
            return(result);
        }
예제 #24
0
        // Constructors

        /// <summary>
        /// Initializes a new instance of this class.
        /// </summary>
        public ApplyProvider(ApplyParameter applyParameter, CompilableProvider left, CompilableProvider right)
            : this(applyParameter, left, right, false, ApplySequenceType.All, JoinType.Inner)
        {
        }
예제 #25
0
        // Constructors

        /// <summary>
        ///  Initializes a new instance of this class.
        /// </summary>
        /// <param name="left">The left provider to intersect.</param>
        /// <param name="right">The right provider to intersect.</param>
        public ConcatProvider(CompilableProvider left, CompilableProvider right)
            : base(ProviderType.Concat, left, right)
        {
            Initialize();
        }
        // Constructors

        /// <summary>
        /// Initializes a new instance of this class.
        /// </summary>
        /// <param name="source">The <see cref="UnaryProvider.Source"/> property value.</param>
        /// <param name="columnDescriptors">The descriptors of <see cref="CalculatedColumns"/>.</param>
        public CalculateProvider(CompilableProvider source, params CalculatedColumnDescriptor[] columnDescriptors)
            : this(source, false, columnDescriptors)
        {
        }
예제 #27
0
        // Constructors

        /// <summary>
        ///   Initializes a new instance of this class.
        /// </summary>
        /// <param name="source">The <see cref="UnaryProvider.Source"/> property value.</param>
        /// <param name="alias">The <see cref="Alias"/> property value.</param>
        public AliasProvider(CompilableProvider source, string alias)
            : base(ProviderType.Alias, source)
        {
            Alias = alias;
            Initialize();
        }
        /// <summary>
        /// Visits the compilable provider.
        /// </summary>
        /// <param name="cp">The compilable provider.</param>
        public CompilableProvider VisitCompilable(CompilableProvider cp)
        {
            var result = (CompilableProvider)Visit(cp);

            return(result);
        }
예제 #29
0
        // Constructors

        /// <summary>
        /// Initializes a new instance of this class.
        /// </summary>
        /// <param name="source">The <see cref="UnaryProvider.Source"/> property value.</param>
        /// <param name="order">The <see cref="OrderProviderBase.Order"/> property value.</param>
        public SortProvider(CompilableProvider source, DirectionCollection <int> order)
            : base(ProviderType.Sort, source, order)
        {
            Initialize();
        }
예제 #30
0
        // Constructors

        /// <summary>
        ///   Initializes a new instance of this class.
        /// </summary>
        /// <param name="provider">The <see cref="UnaryProvider.Source"/> property value.</param>
        /// <param name="count">The <see cref="Count"/> property value.</param>
        public SkipProvider(CompilableProvider provider, Func <ParameterContext, int> count)
            : base(ProviderType.Skip, provider)
        {
            Count = count;
            Initialize();
        }