/// <inheritdoc/> protected override SqlProvider VisitDistinct(DistinctProvider provider) { var source = Compile(provider.Source); var sourceSelect = source.Request.Statement; SqlSelect query; if (!sourceSelect.Limit.IsNullReference() || !sourceSelect.Offset.IsNullReference()) { var queryRef = SqlDml.QueryRef(sourceSelect); query = SqlDml.Select(queryRef); query.Columns.AddRange(queryRef.Columns.Cast <SqlColumn>()); } else { query = sourceSelect.ShallowClone(); } query.Distinct = true; return(CreateProvider(query, provider, source)); }
/// <summary> /// Compiles <see cref="DistinctProvider"/>. /// </summary> /// <param name="provider">Distinct provider.</param> protected abstract TResult VisitDistinct(DistinctProvider provider);