public IQueryFactoryResult Process(IQueryContainer container) { var subSelect = DbAccessLayerHelper.MergeQueryFactoryResult(true, 1, true, null, SubSelectionQueryParts.Select(e => e.Process(container)).Where(e => e != null).ToArray()); var modifer = Distinct ? "DISTINCT" : ""; modifer += Limit.HasValue ? " TOP" + Limit.Value : ""; var select = new QueryFactoryResult( $"SELECT {modifer} {Columns.Select(e => e.ColumnAliasStatement()).Aggregate((e, f) => e + "," + f)} " + $"FROM ({subSelect.Query}) AS [{Alias.GetAlias()}]", subSelect.Parameters.ToArray()); return(select); }
/// <inheritdoc /> public IQueryFactoryResult Compile(out IEnumerable <ColumnInfo> columns) { var commands = new List <IQueryFactoryResult>(); columns = new ColumnInfo[0]; foreach (var queryPart in Parts) { commands.Add(queryPart.Process(this)); var isSelectQuery = (queryPart is ISelectableQueryPart && !(queryPart is JoinTableQueryPart)); if (isSelectQuery) { columns = (queryPart as ISelectableQueryPart).Columns; } } return(DbAccessLayerHelper.MergeQueryFactoryResult(true, 1, true, null, commands.Where(e => e != null).ToArray())); }
public IQueryFactoryResult Process(IQueryContainer container) { var commandBuilder = new StringBuilder(); var commands = new List <IQueryFactoryResult>(); var first = true; foreach (var cteInfo in CteInfos) { if (!first) { commandBuilder.Append(", "); } first = false; commandBuilder.Append($"WITH {cteInfo.Name.Value} AS ("); var cteCommand = DbAccessLayerHelper.MergeQueryFactoryResult(true, 1, true, null, cteInfo.CteContentParts.Select(e => e.Process(container)).Where(e => e != null).ToArray()); commandBuilder.Append(cteCommand.Query); commandBuilder.Append(")"); commands.Add(new QueryFactoryResult(commandBuilder.ToString(), cteCommand.Parameters.ToArray())); } return(DbAccessLayerHelper.MergeQueryFactoryResult(true, 1, true, null, commands.ToArray())); }