public when_registering_a_custom_projection_type()
        {
            _store = DocumentStore.For(opts =>
            {
                opts.Connection(ConnectionSource.ConnectionString);
                opts.Projections.Add(new MyProjection(), ProjectionLifecycle.Async,
                                     projectionName: "NewProjection", asyncConfiguration:
                                     o =>
                {
                    o.BatchSize = 111;
                });
            });

            _store.Options.Projections.TryFindProjection("NewProjection", out var projection)
            .ShouldBeTrue();

            theProjection = projection;
        }
コード例 #2
0
        private Expression GetExpression(IProjectionSource source, ParameterExpression itParameter)
        {
            switch (source)
            {
            case StringProjectionSource stringProjectionSource:
                return(MemberExpressionBuilder.GetExpression(itParameter, stringProjectionSource.SourceExpression));

            case ExpressionProjectionSource expressionProjectionSource:
                return(Expressions.ExpressionParameterReplacer.Replace(expressionProjectionSource.SourceExpression, itParameter.Type, itParameter));

            case LambdaExpressionProjectionSource lambdaExpressionProjectionSource:
                return(Expressions.ExpressionParameterReplacer.Replace(lambdaExpressionProjectionSource.SourceExpression, lambdaExpressionProjectionSource.SourceExpression.Parameters.First(), itParameter));

            case ConstantProjectionSource constantProjectionSource:
                return(Expression.Constant(constantProjectionSource.Value));
            }

            throw new InvalidOperationException("Unexpected projection source type");
        }
コード例 #3
0
        private string GetSourceMemberName(IProjectionSource source)
        {
            switch (source)
            {
            case StringProjectionSource stringProjectionSource:
                return(stringProjectionSource.SourceExpression);

            case ExpressionProjectionSource expressionProjectionSource:
                return(expressionProjectionSource.SourceExpression is MemberExpression memberExpression ? memberExpression.Member.Name
                        : throw new InvalidOperationException("Source expression is not a member expression. Cannot infer name."));

            case LambdaExpressionProjectionSource lambdaExpressionProjectionSource:
                return(lambdaExpressionProjectionSource.SourceExpression.Body is MemberExpression lambdaMemberExpression ? lambdaMemberExpression.Member.Name
                        : throw new InvalidOperationException("Source lambda expression is not a member expression. Cannot infer name."));

            case ConstantProjectionSource constantProjectionSource:
                throw new InvalidOperationException("Cannot infer member name from constant source expression.");
            }

            throw new InvalidOperationException("Unexpected projection source type");
        }
コード例 #4
0
ファイル: ShardAgent.cs プロジェクト: cocowalla/marten
        public ShardAgent(DocumentStore store, AsyncProjectionShard projectionShard, ILogger logger, CancellationToken cancellation)
        {
            if (cancellation == CancellationToken.None)
            {
                _cancellationSource = new CancellationTokenSource();
                _cancellation       = _cancellationSource.Token;
            }

            Name = projectionShard.Name;

            ProjectionShardIdentity = projectionShard.Name.Identity;

            _store           = store;
            _projectionShard = projectionShard;
            _logger          = logger;
            _cancellation    = cancellation;

            _source = projectionShard.Source;

            _controller =
                new ProjectionController(projectionShard.Name, this, projectionShard.Source.Options);
        }
コード例 #5
0
 internal bool TryFindProjection(string projectionName, out IProjectionSource source)
 {
     source = All.FirstOrDefault(x => x.ProjectionName.EqualsIgnoreCase(projectionName));
     return(source != null);
 }
コード例 #6
0
 public AsyncProjectionShard(IProjectionSource source, ISqlFragment[] filters) : this(ShardName.All,
                                                                                      source, filters)
 {
 }
コード例 #7
0
 public AsyncProjectionShard(string shardName, IProjectionSource source, ISqlFragment[] filters)
 {
     Name         = new ShardName(source.ProjectionName, shardName);
     EventFilters = filters.Concat(new ISqlFragment[] { IsNotArchivedFilter.Instance }).ToArray();
     Source       = source;
 }