예제 #1
0
        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()));
        }
예제 #3
0
        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()));
        }