Exemplo n.º 1
0
        private IStreamObserver <Empty, TInput> GetPipe(IStreamObserver <Empty, TResult> observer)
        {
            var lookupKey = CacheKey.Create(this.KeySelector.ExpressionToCSharp(), this.ResultSelector.ExpressionToCSharp());

            var generatedPipeType = cachedPipes.GetOrAdd(lookupKey, key => GroupedWindowTemplate.Generate(this));
            Func <PlanNode, IQueryObject, PlanNode> planNode = ((PlanNode p, IQueryObject o) => new GroupedWindowPlanNode <TInput, TState, TOutput>(
                                                                    p, o, typeof(TKey), typeof(TInput), typeof(TOutput), this.Aggregate, this.KeySelector, this.ResultSelector,
                                                                    true, generatedPipeType.Item2, false));

            var instance    = Activator.CreateInstance(generatedPipeType.Item1, this, observer, this.Aggregate, planNode);
            var returnValue = (IStreamObserver <Empty, TInput>)instance;

            return(returnValue);
        }
Exemplo n.º 2
0
        protected override bool CanGenerateColumnar()
        {
            var typeOfTKey   = typeof(TKey);
            var typeOfTInput = typeof(TInput);

            if (!typeOfTInput.CanRepresentAsColumnar())
            {
                return(false);
            }
            if (typeOfTKey.GetPartitionType() != null)
            {
                return(false);
            }

            var lookupKey = CacheKey.Create(this.KeySelector.ExpressionToCSharp(), this.ResultSelector.ExpressionToCSharp());

            var generatedPipeType = cachedPipes.GetOrAdd(lookupKey, key => GroupedWindowTemplate.Generate(this));

            this.errorMessages = generatedPipeType.Item2;
            return(generatedPipeType.Item1 != null);
        }