public static IProjectionAttribute ValList(this IProjection projection, Func <IProjectionAttribute, IProjectionAttribute> itemFactory) { if (projection.Data == null) { throw ProjectionException.ValueNotFound(projection.Metadata); } IProjectionMetadata itemMetadata = projection.Metadata?.Item ?? projection.Metadata; using ProjectionReader reader = new ProjectionReader(projection.Data.Source, new[] { itemMetadata }); IProjectionAttribute attribute = new ProjectionAttribute(projection.Identity, projection.Context, itemMetadata, data: null); if (reader.Read()) { IProjectionData data = reader.GetData().First(); attribute = itemFactory(attribute.With(data: data)); } while (reader.Read()) { IProjectionData data = reader.GetData().First(); attribute = attribute.Append(", "); attribute = itemFactory(attribute.With(data: data)); } return(attribute); }
public IProjectionAttribute With(IProjectionMetadata metadata = null, IProjectionData data = null, ISqlContent content = null) { IProjectionMetadata newMetadata = metadata ?? this.Metadata; IProjectionData newData = data ?? (metadata != newMetadata ? ProjectionData.Resolve(this.Data, newMetadata) : this.Data); ISqlContent newContent = content ?? this.Content; return(new ProjectionAttribute(this, newMetadata, newData, newContent)); }
public IProjection With(IProjectionMetadata metadata = null, IProjectionData data = null, IEnumerable <IProjectionAttribute> header = null, IProjectionOptions options = null) { IProjectionMetadata newMetadata = metadata ?? this.Metadata; IProjectionData newData = data ?? this.Data; IEnumerable <IProjectionAttribute> newHeader = header ?? (newMetadata != this.Metadata ? this.CreateDefaultHeader(newMetadata) : this.Header); IProjectionOptions newOptions = options ?? this.Options; return(new Projection(this, newMetadata, newData, newHeader, newOptions)); }
protected Projection(IProjection projection, IProjectionMetadata metadata, IProjectionData data, IEnumerable <IProjectionAttribute> header, IProjectionOptions options) { if (projection == null) { throw ProjectionException.ArgumentNull(nameof(projection), metadata: null); } this.Identity = projection.Identity; this.Context = projection.Context; this.Metadata = metadata ?? throw ProjectionException.ArgumentNull(nameof(metadata), metadata); this.Data = data; this.Header = header ?? throw ProjectionException.ArgumentNull(nameof(header), metadata); this.Options = options ?? throw ProjectionException.ArgumentNull(nameof(options), metadata); }
internal static IProjectionData Resolve(IProjectionData data, IProjectionMetadata metadata) { if (data == null) { return(null); } else if (data.Source.Metadata == metadata.Relation) { return(data); } else { return(ProjectionReader.Lookup(data.Source, new[] { metadata }).FirstOrDefault()); } }
public static IProjection Val(this IProjection projection) { if (projection.Data == null) { throw ProjectionException.ValueNotFound(projection.Metadata); } IProjectionData newData = ProjectionData.Resolve(projection.Data, projection.Metadata); if (newData.Source.Snapshot == null) { throw ProjectionException.ValueNotFound(newData.Source); } return(projection.With(data: newData)); }
protected ProjectionAttribute(IProjectionAttribute attribute, IProjectionMetadata metadata, IProjectionData data, ISqlContent content) { if (attribute == null) { throw ProjectionException.ArgumentNull(nameof(attribute), metadata); } this.Context = attribute.Context; this.Identity = attribute.Identity; this.Metadata = metadata ?? throw ProjectionException.ArgumentNull(nameof(metadata), metadata); this.Data = data; this.Content = content ?? throw ProjectionException.ArgumentNull(nameof(content), metadata); }
public ProjectionAttribute(ProjectionIdentity identity, IProcContext context, IProjectionMetadata metadata, IProjectionData data) { this.Identity = identity ?? throw ProjectionException.ArgumentNull(nameof(identity), metadata); this.Context = context ?? throw ProjectionException.ArgumentNull(nameof(context), metadata); this.Metadata = metadata ?? throw ProjectionException.ArgumentNull(nameof(metadata), metadata); this.Data = data; this.Content = SqlContent.Empty; }
public new IProjection <TModel> With(IProjectionMetadata metadata = null, IProjectionData data = null, IEnumerable <IProjectionAttribute> header = null, IProjectionOptions options = null) => new Projection <TModel>(base.With(metadata, data, header, options));