// 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(); }