protected override SqlProvider VisitFreeText(FreeTextProvider provider) { SqlFreeTextTable fromTable; QueryParameterBinding[] bindings; var stringTypeMapping = Driver.GetTypeMapping(StringType); var criteriaBinding = new QueryParameterBinding( stringTypeMapping, provider.SearchCriteria.Invoke, QueryParameterBindingType.Regular); var index = provider.PrimaryIndex.Resolve(Handlers.Domain.Model); var table = Mapping[index.ReflectedType]; var columns = provider.Header.Columns.Select(column => column.Name).ToList(); if (provider.TopN == null) { fromTable = SqlDml.FreeTextTable(table, criteriaBinding.ParameterReference, columns); bindings = new[] { criteriaBinding }; } else { var intTypeMapping = Driver.GetTypeMapping(Int32Type); var topNBinding = new QueryParameterBinding(intTypeMapping, context => provider.TopN.Invoke(context), QueryParameterBindingType.Regular); fromTable = SqlDml.FreeTextTable(table, criteriaBinding.ParameterReference, columns, topNBinding.ParameterReference); bindings = new[] { criteriaBinding, topNBinding }; } var fromTableRef = SqlDml.QueryRef(fromTable); var select = SqlDml.Select(fromTableRef); select.Columns.Add(fromTableRef.Columns[0]); select.Columns.Add(SqlDml.Cast(fromTableRef.Columns[1], SqlType.Double), "RANK"); return(CreateProvider(select, bindings, provider)); }
protected override SqlProvider VisitFreeText(FreeTextProvider provider) { var rankColumnName = provider.Header.Columns.Last().Name; var stringTypeMapping = Driver.GetTypeMapping(typeof(string)); var binding = new QueryParameterBinding(stringTypeMapping, provider.SearchCriteria.Invoke, QueryParameterBindingType.Regular); SqlSelect select = SqlDml.Select(); var realPrimaryIndex = provider.PrimaryIndex.Resolve(Handlers.Domain.Model); var index = realPrimaryIndex.ReflectedType.Indexes.PrimaryIndex; var query = BuildProviderQuery(index); var table = Mapping[realPrimaryIndex.ReflectedType]; var fromTable = SqlDml.FreeTextTable(table, binding.ParameterReference, table.Columns.Select(column => column.Name).AddOne(rankColumnName).ToList()); var fromTableRef = SqlDml.QueryRef(fromTable); foreach (var column in query.Columns) { select.Columns.Add(fromTableRef.Columns[column.Name] ?? column); } select.Columns.Add(SqlDml.Cast(fromTableRef.Columns[rankColumnName], SqlType.Double), rankColumnName); select.From = fromTableRef; if (provider.TopN != null) { select.Limit = provider.TopN.Invoke(); select.OrderBy.Add(select.Columns[rankColumnName], false); } return(CreateProvider(select, binding, provider)); }
protected override SqlProvider VisitFreeText(FreeTextProvider provider) { var rankColumnName = provider.Header.Columns[provider.Header.Columns.Count - 1].Name; var stringTypeMapping = Driver.GetTypeMapping(WellKnownTypes.StringType); var binding = new QueryParameterBinding(stringTypeMapping, provider.SearchCriteria.Invoke, QueryParameterBindingType.Regular); var select = SqlDml.Select(); var realPrimaryIndex = provider.PrimaryIndex.Resolve(Handlers.Domain.Model); var index = realPrimaryIndex.ReflectedType.Indexes.PrimaryIndex; var query = BuildProviderQuery(index); var table = Mapping[realPrimaryIndex.ReflectedType]; var fromTable = SqlDml.FreeTextTable(table, binding.ParameterReference, table.Columns.Select(column => column.Name).Append(rankColumnName).ToArray(table.Columns.Count + 1)); var fromTableRef = SqlDml.QueryRef(fromTable); foreach (var column in query.Columns) { select.Columns.Add(fromTableRef.Columns[column.Name] ?? column); } select.Columns.Add(SqlDml.Cast(fromTableRef.Columns[rankColumnName], SqlType.Double), rankColumnName); select.From = fromTableRef; if (provider.TopN == null) { return(CreateProvider(select, binding, provider)); } var intTypeMapping = Driver.GetTypeMapping(typeof(int)); var topNBinding = new QueryParameterBinding( intTypeMapping, context => provider.TopN.Invoke(context), QueryParameterBindingType.Regular); select.Limit = topNBinding.ParameterReference; select.OrderBy.Add(select.Columns[rankColumnName], false); return(CreateProvider(select, new[] { binding, topNBinding }, provider)); }
protected override SqlProvider VisitFreeText(FreeTextProvider provider) { throw new NotSupportedException(); }
/// <inheritdoc/> protected override Provider VisitFreeText(FreeTextProvider provider) { mappings[provider] = Enumerable.Range(0, provider.Header.Length).ToList(); return(provider); }
/// <summary> /// Compiles <see cref="FreeTextProvider"/>. /// </summary> /// <param name="provider">FreeText provider.</param> protected abstract TResult VisitFreeText(FreeTextProvider provider);
/// <inheritdoc/> protected override Provider VisitFreeText(FreeTextProvider provider) { mappings[provider] = CollectionUtils.RangeToList(0, provider.Header.Length); return(provider); }
protected override Provider VisitFreeText(FreeTextProvider provider) { sortOrder = new DirectionCollection <int>(); return(provider); }