Example #1
0
 public VoidProvider(RecordSetHeader header)
     : base(ProviderType.Void)
 {
     ArgumentValidator.EnsureArgumentNotNull(header, "header");
     this.header = header;
     Initialize();
 }
Example #2
0
        // 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;
 }