public VoidProvider(RecordSetHeader header) : base(ProviderType.Void) { ArgumentValidator.EnsureArgumentNotNull(header, "header"); this.header = header; Initialize(); }
// Constructors /// <summary> /// Initializes a new instance of this class. /// </summary> /// <param name="header">The <see cref="Provider.Header"/> property value.</param> /// <param name="source">The <see cref="Source"/> property value.</param> public RawProvider(RecordSetHeader header, Expression <Func <IEnumerable <Tuple> > > source) : base(ProviderType.Raw) { Source = source; this.header = header; Initialize(); }
public ContainsTableProvider(FullTextIndexInfo index, Func <ParameterContext, string> searchCriteria, string rankColumnName, IList <ColumnInfo> targetColumns, Func <ParameterContext, int> topNByRank, bool fullFeatured) : base(ProviderType.ContainsTable) { SearchCriteria = searchCriteria; FullFeatured = fullFeatured; PrimaryIndex = new IndexInfoRef(index.PrimaryIndex); TargetColumns = new ReadOnlyList <FullTextColumnInfo>(targetColumns.Select(tc => index.Columns.First(c => c.Column == tc)).ToList()); TopN = topNByRank; if (FullFeatured) { var primaryIndexRecordsetHeader = index.PrimaryIndex.ReflectedType.Indexes.PrimaryIndex.GetRecordSetHeader(); var rankColumn = new MappedColumn(rankColumnName, primaryIndexRecordsetHeader.Length, WellKnownTypes.Double); indexHeader = primaryIndexRecordsetHeader.Add(rankColumn); } else { var primaryIndexKeyColumns = index.PrimaryIndex.KeyColumns; if (primaryIndexKeyColumns.Count != 1) { throw new InvalidOperationException(Strings.ExOnlySingleColumnKeySupported); } var fieldTypes = primaryIndexKeyColumns .Select(columnInfo => columnInfo.Key.ValueType) .Append(WellKnownTypes.Double) .ToArray(primaryIndexKeyColumns.Count + 1); var tupleDescriptor = TupleDescriptor.Create(fieldTypes); var columns = primaryIndexKeyColumns .Select((c, i) => (Column) new MappedColumn("KEY", i, c.Key.ValueType)) .Append(new MappedColumn("RANK", tupleDescriptor.Count, WellKnownTypes.Double)); indexHeader = new RecordSetHeader(tupleDescriptor, columns); } Initialize(); }
// Constructors public IndexProvider(IndexInfo index) : base(ProviderType.Index) { indexHeader = index.GetRecordSetHeader(); Index = new IndexInfoRef(index); Initialize(); }
public FreeTextProvider(FullTextIndexInfo index, Func <string> searchCriteria, string rankColumnName, Func <int> topN, bool fullFeatured) : base(ProviderType.FreeText) { SearchCriteria = searchCriteria; FullFeatured = fullFeatured; TopN = topN; PrimaryIndex = new IndexInfoRef(index.PrimaryIndex); if (FullFeatured) { var primaryIndexRecordsetHeader = index.PrimaryIndex.ReflectedType.Indexes.PrimaryIndex.GetRecordSetHeader(); var rankColumn = new MappedColumn(rankColumnName, primaryIndexRecordsetHeader.Length, typeof(double)); indexHeader = primaryIndexRecordsetHeader.Add(rankColumn); } else { var primaryIndexKeyColumns = index.PrimaryIndex.KeyColumns; if (primaryIndexKeyColumns.Count != 1) { throw new InvalidOperationException(Strings.ExOnlySingleColumnKeySupported); } var fieldTypes = primaryIndexKeyColumns .Select(columnInfo => columnInfo.Key.ValueType) .AddOne(typeof(double)) .ToArray(primaryIndexKeyColumns.Count + 1); var tupleDescriptor = TupleDescriptor.Create(fieldTypes); var columns = primaryIndexKeyColumns .Select((c, i) => (Column) new MappedColumn("KEY", i, c.Key.ValueType)) .AddOne(new MappedColumn("RANK", tupleDescriptor.Count, typeof(double))); indexHeader = new RecordSetHeader(tupleDescriptor, columns); } Initialize(); }
/// <summary> /// Initializes a new instance of this class. /// </summary> /// <param name="source">The <see cref="Source"/> property value.</param> public StoreProvider(Provider source) : base(ProviderType.Store, source) { ArgumentValidator.EnsureArgumentNotNull(source, "source"); Name = Guid.NewGuid().ToString(); Source = source; header = source.Header; Initialize(); }
// Constructors /// <summary> /// Initializes a new instance of this class. /// </summary> /// <param name="header">The <see cref="Provider.Header"/> property value.</param> /// <param name="name">The <see cref="Name"/> property value.</param> public StoreProvider(RecordSetHeader header, string name) : base(ProviderType.Store) { ArgumentValidator.EnsureArgumentNotNull(header, "header"); ArgumentValidator.EnsureArgumentNotNullOrEmpty(name, "name"); Name = name; this.header = header; Initialize(); }
/// <summary> /// Initializes a new instance of this class. /// </summary> /// <param name="source">The <see cref="Source"/> property value.</param> /// <param name="name">The <see cref="Name"/> property value.</param> public StoreProvider(Provider source, string name) : base(ProviderType.Store, source) { ArgumentValidator.EnsureArgumentNotNull(source, "source"); ArgumentValidator.EnsureArgumentNotNullOrEmpty(name, "name"); Name = name; Source = source; header = source.Header; Initialize(); }
public IEnumerable <Record> Read(IEnumerable <Tuple> source, RecordSetHeader header, Session session) { CacheItem cacheItem; var recordPartCount = header.ColumnGroups.Count; var context = new MaterializationContext(session, recordPartCount); lock (_lock) { if (!cache.TryGetItem(header, false, out cacheItem)) { var typeIdColumnName = Domain.Handlers.NameBuilder.TypeIdColumnName; var model = context.Model; var mappings = new RecordPartMapping[recordPartCount]; for (int i = 0; i < recordPartCount; i++) { var columnGroup = header.ColumnGroups[i]; var approximateType = columnGroup.TypeInfoRef.Resolve(model); var columnMapping = new List <Pair <int> >(); var typeIdColumnIndex = -1; foreach (var columnIndex in columnGroup.Columns) { var column = (MappedColumn)header.Columns[columnIndex]; var columnInfo = column.ColumnInfoRef.Resolve(model); FieldInfo fieldInfo; if (!approximateType.Fields.TryGetValue(columnInfo.Field.Name, out fieldInfo)) { continue; } var targetColumnIndex = fieldInfo.MappingInfo.Offset; if (columnInfo.Name == typeIdColumnName) { typeIdColumnIndex = column.Index; } columnMapping.Add(new Pair <int>(targetColumnIndex, columnIndex)); } mappings[i] = new RecordPartMapping(typeIdColumnIndex, columnMapping.ToArray(), approximateType); } cacheItem = new CacheItem(header, mappings); cache.Add(cacheItem); } } return(source.Select(tuple => ParseRow(tuple, context, cacheItem.Mappings))); }
private IEnumerable <ReferenceInfo> GetReferencesToInternal(AssociationInfo association, Entity target, RecordSetHeader header, QueryTask queryTask) { Session.ExecuteInternalDelayedQueries(true); var referenceToTarget = queryTask.ToEntities(header, Session, 0).Where(e => !e.IsRemoved); var removedReferences = Session.NonPairedReferencesRegistry.GetRemovedReferencesTo(target.State, association).Select(es => es.Entity); var addedReferences = Session.NonPairedReferencesRegistry.GetAddedReferenceTo(target.State, association).Select(es => es.Entity).Where(e => !e.IsRemoved); var exceptRemovedReferences = referenceToTarget.Except(removedReferences); var withNewReferences = exceptRemovedReferences.Concat(addedReferences); foreach (var entity in withNewReferences) { yield return(new ReferenceInfo(entity, target, association)); } }
public CacheItem(RecordSetHeader header, RecordPartMapping[] mappings) { Header = header; Mappings = mappings; }