// 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(); }
// 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(); }
/// <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(); }
// 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(); }
/// <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(); }
// 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; }
// 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(); }
// 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(); }
// 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(); }
/// <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(); }
// 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(); }
/// <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(); }
// 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(); }
/// <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); }
// 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) { }
// 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) { }
// 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); }
// 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(); }
// 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(); }