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; }
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"); }
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"); }
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); }
internal bool TryFindProjection(string projectionName, out IProjectionSource source) { source = All.FirstOrDefault(x => x.ProjectionName.EqualsIgnoreCase(projectionName)); return(source != null); }
public AsyncProjectionShard(IProjectionSource source, ISqlFragment[] filters) : this(ShardName.All, source, filters) { }
public AsyncProjectionShard(string shardName, IProjectionSource source, ISqlFragment[] filters) { Name = new ShardName(source.ProjectionName, shardName); EventFilters = filters.Concat(new ISqlFragment[] { IsNotArchivedFilter.Instance }).ToArray(); Source = source; }