Exemplo n.º 1
0
        // Constructors

        public IndexProvider(IndexInfo index)
            : base(ProviderType.Index)
        {
            indexHeader = index.GetRecordSetHeader();
            Index       = new IndexInfoRef(index);
            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();
 }
 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();
 }