/// <inheritdoc/>
        protected override SqlProvider VisitSeek(SeekProvider provider)
        {
            var compiledSource = Compile(provider.Source);

            SqlSelect source            = compiledSource.Request.Statement;
            var       query             = source.ShallowClone();
            var       parameterBindings = new List <QueryParameterBinding>();
            var       typeIdColumnName  = Handlers.NameBuilder.TypeIdColumnName;
            Func <KeyValuePair <int, Direction>, bool> filterNonTypeId =
                pair => ((MappedColumn)provider.Header.Columns[pair.Key]).ColumnInfoRef.ColumnName != typeIdColumnName;
            var keyColumns = provider.Header.Order
                             .Where(filterNonTypeId)
                             .ToList();

            for (int i = 0; i < keyColumns.Count; i++)
            {
                int         columnIndex = keyColumns[i].Key;
                var         sqlColumn   = query.Columns[columnIndex];
                var         column      = provider.Header.Columns[columnIndex];
                TypeMapping typeMapping = Driver.GetTypeMapping(column.Type);
                var         binding     = new QueryParameterBinding(typeMapping, GetSeekKeyElementAccessor(provider.Key, i));
                parameterBindings.Add(binding);
                query.Where &= sqlColumn == binding.ParameterReference;
            }

            return(CreateProvider(query, parameterBindings, provider, compiledSource));
        }
 protected override Provider VisitSeek(SeekProvider provider)
 {
     mappings[provider] = Enumerable.Range(0, provider.Header.Length).ToList();
     return(provider);
 }
Beispiel #3
0
 /// <summary>
 /// Compiles <see cref="SeekProvider"/>.
 /// </summary>
 /// <param name="provider">Seek provider.</param>
 protected abstract TResult VisitSeek(SeekProvider provider);
Beispiel #4
0
 protected override Provider VisitSeek(SeekProvider provider)
 {
     mappings[provider] = CollectionUtils.RangeToList(0, provider.Header.Length);
     return(provider);
 }