コード例 #1
0
        /// <summary>
        /// Visits the column declarations.
        /// </summary>
        /// <param name="columns">The columns.</param>
        /// <returns></returns>
        protected virtual ReadOnlyCollection <ColumnDeclaration> VisitColumnDeclarations(ReadOnlyCollection <ColumnDeclaration> columns)
        {
            List <ColumnDeclaration> alternate = null;

            for (int i = 0, n = columns.Count; i < n; i++)
            {
                ColumnDeclaration column = columns[i];
                Expression        e      = this.Visit(column.Expression);
                if (alternate == null && e != column.Expression)
                {
                    alternate = columns.Take(i).ToList();
                }

                if (alternate != null)
                {
                    alternate.Add(new ColumnDeclaration(column.Name, e));
                }
            }

            if (alternate != null)
            {
                return(alternate.AsReadOnly());
            }

            return(columns);
        }
コード例 #2
0
        public static SelectExpression RemoveColumn(this SelectExpression select, ColumnDeclaration column)
        {
            List <ColumnDeclaration> columns = new List <ColumnDeclaration>(select.Columns);

            columns.Remove(column);
            return(select.SetColumns(columns));
        }
コード例 #3
0
		protected override Expression VisitSelect(SelectExpression select)
		{
			select = (SelectExpression)base.VisitSelect(select);
			if (lookup.Contains(select.Alias))
			{
				List<ColumnDeclaration> aggColumns = new List<ColumnDeclaration>(select.Columns);
				foreach (AggregateSubqueryExpression ae in lookup[select.Alias])
				{
					string name = "agg" + aggColumns.Count;
					var colType = DbTypeSystem.GetColumnType(ae.Type);
					ColumnDeclaration cd = new ColumnDeclaration(name, ae.AggregateInGroupSelect, colType);
					this.map.Add(ae, new ColumnExpression(ae.Type, colType, ae.GroupByAlias, name));
					aggColumns.Add(cd);
				}
				return new SelectExpression(
					select.Alias,
					aggColumns,
					select.From,
					select.Where,
					select.OrderBy,
					select.GroupBy,
					select.IsDistinct,
					select.Skip,
					select.Take,
					select.IsReverse);
			}
			return select;
		}
コード例 #4
0
 /// <summary>
 /// Writes the columns.
 /// </summary>
 /// <param name="columns">The columns.</param>
 protected virtual void WriteColumns(ReadOnlyCollection <ColumnDeclaration> columns)
 {
     if (columns.Count > 0)
     {
         for (int i = 0, n = columns.Count; i < n; i++)
         {
             ColumnDeclaration column = columns[i];
             if (i > 0)
             {
                 this.Write(", ");
             }
             ColumnExpression c = this.VisitValue(column.Expression) as ColumnExpression;
             if (!string.IsNullOrEmpty(column.Name) && (c == null || c.Name != column.Name))
             {
                 this.Write(" ");
                 this.WriteAsColumnName(column.Name);
             }
         }
     }
     else
     {
         this.Write("NULL ");
         if (this.IsNested)
         {
             this.WriteAsColumnName("tmp");
             this.Write(" ");
         }
     }
 }
コード例 #5
0
        protected override Expression VisitSelect(SelectExpression select)
        {
            // visit column projection first
            ReadOnlyCollection <ColumnDeclaration> columns = select.Columns;

            if (select.Alias != null && _allColumnsUsed.TryGetValue(select.Alias, out HashSet <string> columnsUsed))
            {
                List <ColumnDeclaration> alternate = null;
                for (int i = 0, n = select.Columns.Count; i < n; i++)
                {
                    ColumnDeclaration decl = select.Columns[i];
                    if (select.IsDistinct || columnsUsed.Contains(decl.Name))
                    {
                        if (Visit(decl.Expression) != decl.Expression)
                        {
                            decl = new ColumnDeclaration(decl.Name, decl.Expression);
                        }
                    }
                    else
                    {
                        decl = null;                         // null means it gets omitted
                    }

                    if (decl != select.Columns[i] && alternate == null)
                    {
                        alternate = select.Columns.Take(i).ToList();
                    }
                    if (decl != null)
                    {
                        alternate?.Add(decl);
                    }
                }

                if (alternate != null)
                {
                    columns = alternate.AsReadOnly();
                }
            }

            Expression offset = Visit(select.Offset);
            Expression limit  = Visit(select.Limit);
            Expression having = Visit(select.Having);
            ReadOnlyCollection <Expression>      groupBys = select.GroupBy == null ? null : Visit(select.GroupBy);
            ReadOnlyCollection <OrderExpression> orderbys = VisitOrderBy(select.OrderBy);

            Expression where = Visit(select.Where);
            Expression from = Visit(select.From);

            ClearColumnsUsed(select.Alias);

            if (columns != select.Columns || orderbys != select.OrderBy || groupBys != select.GroupBy ||
                having != select.Having || limit != select.Limit || offset != select.Offset ||
                where != select.Where || from != select.From)
            {
                return(new SelectExpression(select.Alias, columns, from, where,
                                            groupBys, having, orderbys,
                                            offset, limit, select.IsDistinct));
            }
            return(select);
        }
コード例 #6
0
        protected override Expression VisitSelect(SelectExpression select)
        {
            // visit column projection first
            ReadOnlyCollection <ColumnDeclaration> columns = select.Columns;

            HashSet <string> columnsUsed;

            if (_allColumnsUsed.TryGetValue(select.Alias, out columnsUsed))
            {
                List <ColumnDeclaration> alternate = null;
                for (int i = 0, n = select.Columns.Count; i < n; i++)
                {
                    ColumnDeclaration decl = select.Columns[i];
                    if (!columnsUsed.Contains(decl.Name))
                    {
                        decl = null;  // null means it gets omitted
                    }
                    else
                    {
                        Expression expr = Visit(decl.Expression);
                        if (expr != decl.Expression)
                        {
                            decl = new ColumnDeclaration(decl.Name, decl.Expression);
                        }
                    }
                    if (decl != select.Columns[i] && alternate == null)
                    {
                        alternate = new List <ColumnDeclaration>();
                        for (int j = 0; j < i; j++)
                        {
                            alternate.Add(select.Columns[j]);
                        }
                    }
                    if (decl != null && alternate != null)
                    {
                        alternate.Add(decl);
                    }
                }
                if (alternate != null)
                {
                    columns = alternate.AsReadOnly();
                }
            }

            //ReadOnlyCollection<OrderExpression> orderbys = this.VisitOrderBy(select.OrderBy);
            Expression where = Visit(select.Where);
            Expression from = Visit(select.From);

            if (columns != select.Columns || /*orderbys != select.OrderBy ||*/ where != select.Where || from != select.From)
            {
                return(new SelectExpression(select.Type, select.Alias, columns, from, where)); //, orderbys);
            }

            return(select);
        }
コード例 #7
0
    protected internal virtual ColumnDeclaration VisitColumnDeclaration(ColumnDeclaration c)
    {
        var e = Visit(c.Expression);

        if (e == c.Expression)
        {
            return(c);
        }

        return(new ColumnDeclaration(c.Name, e));
    }
コード例 #8
0
 protected override Expression VisitSelect(SelectExpression select)
 {
     sb.Append("Select ");
     for (int i = 0, n = select.Columns.Count; i < n; i++)
     {
         ColumnDeclaration column = select.Columns[i];
         if (i > 0)
         {
             sb.Append(" ,");
         }
         ColumnExpression c = this.Visit(column.Expression) as ColumnExpression;
         if (c == null || c.Name != select.Columns[i].Name)
         {
             sb.Append(" As ");
             sb.Append(column.Name);
         }
     }
     if (select.From != null)
     {
         this.AppendNewLine(Indentation.Same);
         sb.Append(" FROM ");
         this.VisitSource(select.From);
     }
     if (select.Where != null)
     {
         this.AppendNewLine(Indentation.Same);
         sb.Append(" WHERE ");
         this.Visit(select.Where);
     }
     if (select.OrderBy != null && select.OrderBy.Count > 0)
     {
         this.AppendNewLine(Indentation.Same);
         sb.Append(" ORDER BY ");
         //当有多个排序字段时
         for (int i = 0, n = select.OrderBy.Count; i < n; i++)
         {
             OrderExpression expr = select.OrderBy[i];
             if (i > 0)
             {
                 sb.Append(",");
             }
             this.Visit(expr.Expression);
             if (expr.OrderType != OrderType.Ascending)
             {
                 sb.Append(" DESC ");
             }
         }
     }
     return(select);
 }
コード例 #9
0
            public override ProjectionExpression GetQueryExpression(MappingEntity entity)
            {
                CompositiveMappingEntity mme = (CompositiveMappingEntity)entity;

                if (mme.Table == null || string.IsNullOrEmpty(mme.Table.View))
                {
                    var tableAlias  = new TableAlias();
                    var selectAlias = new TableAlias();
                    var columns     = new List <ColumnDeclaration>();
                    var aliases     = new Dictionary <string, TableAlias>();

                    var table = new TableExpression(tableAlias, entity, (this.Mapping as BasicMapping).GetTableName(entity));

                    this.GetColumns(entity, aliases, columns);
                    SelectExpression root = new SelectExpression(new TableAlias(), columns, table, null);

                    Expression projector = this.GetEntityExpression(table, entity);
                    var        pc        = ColumnProjector.ProjectColumns(this.Translator.Linguist.Language, projector, null, selectAlias, tableAlias);

                    var proj = new ProjectionExpression(
                        new SelectExpression(selectAlias, pc.Columns, table, null),
                        pc.Projector
                        );

                    return((ProjectionExpression)this.Translator.Police.ApplyPolicy(proj, entity.ElementType));
                }
                else
                {
                    var tableAlias  = new TableAlias();
                    var selectAlias = new TableAlias();
                    var columns     = new List <ColumnDeclaration>();
                    var aliases     = new Dictionary <string, TableAlias>();

                    var table            = new TableExpression(tableAlias, entity, mme.Table.View);
                    ColumnDeclaration cd = new ColumnDeclaration("*", "", new AllColumnExpression(tableAlias), new DbQueryType(SqlDbType.Variant, false, 0, 0, 0));
                    columns.Add(cd);

                    SelectExpression root      = new SelectExpression(new TableAlias(), columns, table, null);
                    Expression       projector = this.GetEntityExpression(table, entity);
                    //var pc = ColumnProjector.ProjectColumns(this.Translator.Linguist.Language, projector, null, selectAlias, tableAlias);

                    var proj = new ProjectionExpression(
                        new SelectExpression(selectAlias, columns, table, null),
                        projector
                        );

                    return((ProjectionExpression)this.Translator.Police.ApplyPolicy(proj, entity.ElementType));
                }
            }
コード例 #10
0
 protected internal override Expression VisitSelect(SelectExpression select)
 {
     select = (SelectExpression)base.VisitSelect(select);
     if (lookup.Contains(select.Alias))
     {
         List <ColumnDeclaration> aggColumns = new List <ColumnDeclaration>(select.Columns);
         foreach (AggregateRequestsExpression ae in lookup[select.Alias])
         {
             ColumnDeclaration cd = new ColumnDeclaration("agg" + aggColumns.Count, ae.Aggregate);
             this.map.Add(ae, cd.GetReference(ae.GroupByAlias));
             aggColumns.Add(cd);
         }
         return(new SelectExpression(select.Alias, select.IsDistinct, select.Top, aggColumns, select.From, select.Where, select.OrderBy, select.GroupBy, select.SelectOptions));
     }
     return(select);
 }
コード例 #11
0
ファイル: AggregateRewriter.cs プロジェクト: rondoo/framework
 protected internal override Expression VisitSelect(SelectExpression select)
 {
     select = (SelectExpression)base.VisitSelect(select);
     if (lookup.Contains(select.Alias))
     {
         List<ColumnDeclaration> aggColumns = new List<ColumnDeclaration>(select.Columns);
         foreach (AggregateRequestsExpression ae in lookup[select.Alias])
         {
             ColumnDeclaration cd = new ColumnDeclaration("agg" + aggColumns.Count, ae.Aggregate);
             this.map.Add(ae, cd.GetReference(ae.GroupByAlias));
             aggColumns.Add(cd);
         }
         return new SelectExpression(select.Alias, select.IsDistinct, select.Top, aggColumns, select.From, select.Where, select.OrderBy, select.GroupBy, select.SelectOptions);
     }
     return select;
 }
コード例 #12
0
        protected override Expression VisitSelect(SelectExpression select)
        {
            select = (SelectExpression)base.VisitSelect(select);

            // look for redundant column declarations
            List <ColumnDeclaration> cols = select.Columns.OrderBy(c => c.Name).ToList();
            BitArray removed    = new BitArray(select.Columns.Count);
            bool     anyRemoved = false;

            for (int i = 0, n = cols.Count; i < n - 1; i++)
            {
                ColumnDeclaration ci  = cols[i];
                ColumnExpression  cix = ci.Expression as ColumnExpression;
                ColumnExpression  cxi = new ColumnExpression(ci.Expression.Type, select.Alias, ci.Name, cix != null ? cix.MapInfo : null);
                for (int j = i + 1; j < n; j++)
                {
                    if (!removed.Get(j))
                    {
                        ColumnDeclaration cj = cols[j];
                        if (SameExpression(ci.Expression, cj.Expression))
                        {
                            // any reference to 'j' should now just be a reference to 'i'
                            ColumnExpression cj1 = cj.Expression as ColumnExpression;
                            ColumnExpression cxj = new ColumnExpression(cj.Expression.Type, select.Alias, cj.Name, cj1 != null ? cj1.MapInfo : null);
                            this.map.Add(cxj, cxi);
                            removed.Set(j, true);
                            anyRemoved = true;
                        }
                    }
                }
            }
            if (anyRemoved)
            {
                List <ColumnDeclaration> newDecls = new List <ColumnDeclaration>();
                for (int i = 0, n = cols.Count; i < n; i++)
                {
                    if (!removed.Get(i))
                    {
                        newDecls.Add(cols[i]);
                    }
                }
                select = select.SetColumns(newDecls);
            }

            return(select);
        }
コード例 #13
0
 internal void GetColumns(IEntityMapping mapping, Dictionary <string, TableAlias> aliases, List <ColumnDeclaration> columns)
 {
     foreach (var mi in mapping.Members)
     {
         if (!mi.IsRelationship && mi.IsColumn)
         {
             string     name      = mi.ColumnName;
             string     aliasName = mi.AliasName;
             TableAlias alias;
             aliases.TryGetValue(aliasName, out alias);
             var colType          = mi.SqlType;
             ColumnExpression  ce = new ColumnExpression(mi.MemberType, colType, alias, name);
             ColumnDeclaration cd = new ColumnDeclaration(name, ce, colType);
             columns.Add(cd);
         }
     }
 }
コード例 #14
0
 protected override Expression VisitSelect(SelectExpression select)
 {
     select = (SelectExpression)base.VisitSelect(select);
     if (lookup.Contains(select.Alias))
     {
         List <ColumnDeclaration> aggColumns = new List <ColumnDeclaration>(select.Columns);
         foreach (AggregateSubqueryExpression ae in lookup[select.Alias])
         {
             string            name = "agg" + aggColumns.Count;
             ColumnDeclaration cd   = new ColumnDeclaration(name, ae.AggregateInGroupSelect);
             this.map.Add(ae, new ColumnExpression(ae.Type, ae.GroupByAlias, name));
             aggColumns.Add(cd);
         }
         return(new SelectExpression(select.Alias, aggColumns, select.From, select.Where, select.OrderBy, select.GroupBy, select.IsDistinct, select.Skip, select.Take));
     }
     return(select);
 }
コード例 #15
0
        protected override void WriteColumns(System.Collections.ObjectModel.ReadOnlyCollection <ColumnDeclaration> columns)
        {
            if (columns.Count == 0)
            {
                this.Write("0");
            }
            else
            {
                for (int i = 0, n = columns.Count; i < n; i++)
                {
                    ColumnDeclaration column = columns[i];
                    if (i > 0)
                    {
                        this.Write(", ");
                    }

                    var dbQueryType    = column.QueryType as DbQueryType;
                    var vfpDbQueryType = dbQueryType as VfpDbQueryType;
                    var isDecimal      = dbQueryType != null && dbQueryType.DbType == System.Data.DbType.Decimal;

                    if (vfpDbQueryType != null && isDecimal)
                    {
                        this.Write(" CAST(");
                        this.VisitValue(column.Expression);
                        this.Write(" AS N(20, ");
                        this.Write(dbQueryType.Scale);
                        this.Write(")) ");

                        if (!string.IsNullOrEmpty(column.Name))
                        {
                            this.WriteAsColumnName(column.Name);
                        }
                    }
                    else
                    {
                        ColumnExpression c = this.VisitValue(column.Expression) as ColumnExpression;
                        if (!string.IsNullOrEmpty(column.Name) && (c == null || c.Name != column.Name))
                        {
                            this.Write(" ");
                            this.WriteAsColumnName(column.Name);
                        }
                    }
                }
            }
        }
コード例 #16
0
        protected override Expression VisitSelect(SelectExpression select)
        {
            select = (SelectExpression)base.VisitSelect(select);
            if (lookup.Contains(select.Alias))
            {
                var aggColumns = new List <ColumnDeclaration>(select.Columns);
                foreach (var ae in lookup[select.Alias])
                {
                    var name = "agg" + aggColumns.Count;
                    var cd   = new ColumnDeclaration(name, ae.AggregateInGroupSelect);
                    map.Add(ae, new ColumnExpression(ae.Type, ae.GroupByAlias, name, null));
                    aggColumns.Add(cd);
                }

                return(new SelectExpression(select.Alias, aggColumns, select.From, select.Where, select.OrderBy, select.GroupBy, select.IsDistinct, select.Skip, select.Take, select.Segment, select.IsReverse));
            }

            return(select);
        }
コード例 #17
0
        private Expression MakeSubquery(Expression expression)
        {
            var newAlias = new TableAlias();
            var aliases = DeclaredAliasGatherer.Gather(expression);

            var decls = new List<ColumnDeclaration>();
            foreach (var ta in aliases) 
            {
                foreach (var col in this.columns[ta])
                {
                    string name = decls.GetAvailableColumnName(col.Name);
                    var decl = new ColumnDeclaration(name, col, col.QueryType);
                    decls.Add(decl);
                    var newCol = new ColumnExpression(col.Type, col.QueryType, newAlias, col.Name);
                    this.map.Add(col, newCol);
                }
            }

            return new SelectExpression(newAlias, decls, expression, null);
        }
コード例 #18
0
        private Expression MakeSubquery(Expression expression)
        {
            var newAlias = new TableAlias();
            var aliases  = DeclaredAliasGatherer.Gather(expression);

            var decls = new List <ColumnDeclaration>();

            foreach (var ta in aliases)
            {
                foreach (var col in columns[ta])
                {
                    var name = decls.GetAvailableColumnName(col.Name);
                    var decl = new ColumnDeclaration(name, col);
                    decls.Add(decl);
                    var newCol = new ColumnExpression(col.Type, newAlias, name, null);
                    map.Add(col, newCol);
                }
            }

            return(new SelectExpression(newAlias, decls, expression, null));
        }
コード例 #19
0
ファイル: QueryFormatter.cs プロジェクト: ebuzyuma/LinqToSoql
        protected override Expression VisitSelect(SelectExpression select)
        {
            _stringBuilder.Append("SELECT ");
            for (int i = 0, n = select.Columns.Count; i < n; i++)
            {
                ColumnDeclaration column = select.Columns[i];
                if (i > 0)
                {
                    _stringBuilder.Append(", ");
                }

                Visit(column.Expression);
                //ColumnExpression cex = Visit(column.Expression) as ColumnExpression;
                //if (cex == null || cex.Name != select.Columns[i].Name)
                //{
                //_stringBuilder.Append(" AS ");
                //_stringBuilder.Append(column.Name);
                //}
            }
            if (select.From != null)
            {
                AppendNewLine(Identation.Same);
                _stringBuilder.Append("FROM ");
                VisitSource(select.From);
                //TODO update DbExpressionTypes for handing column as table
                if (select.From is ColumnExpression)
                {
                    _stringBuilder.Append(" AS ");
                    _stringBuilder.Append(((ColumnExpression)select.Columns.First().Expression).Alias);
                }
            }
            if (select.Where != null)
            {
                AppendNewLine(Identation.Same);
                _stringBuilder.Append("WHERE ");
                Visit(select.Where);
            }
            return(select);
        }
コード例 #20
0
            private void GetColumns(MappingEntity entity, Dictionary <string, TableAlias> aliases, List <ColumnDeclaration> columns)
            {
                CompositiveMapping mapping = Mapping as CompositiveMapping;

                foreach (MemberInfo mi in mapping.GetMappedMembers(entity))
                {
                    if (!mapping.IsAssociationRelationship(entity, mi))
                    {
                        if (mapping.IsColumn(entity, mi))
                        {
                            string     name      = mapping.GetColumnName(entity, mi);
                            string     aliasName = mapping.GetAlias(entity, mi);
                            TableAlias alias;
                            aliases.TryGetValue(aliasName, out alias);
                            var               colType  = this.GetColumnType(entity, mi);
                            string            colAlias = mapping.GetColumnAlias(entity, mi);
                            ColumnExpression  ce       = new ColumnExpression(TypeHelper.GetMemberType(mi), colType, alias, name, new ColumnAlias(colAlias));
                            ColumnDeclaration cd       = new ColumnDeclaration(name, colAlias, ce, colType);
                            columns.Add(cd);
                        }
                    }
                }
            }
コード例 #21
0
 private void GetColumns(MappingEntity entity, Dictionary <string, TableAlias> aliases, List <ColumnDeclaration> columns)
 {
     foreach (MemberInfo mi in this.mapping.GetMappedMembers(entity))
     {
         if (!this.mapping.IsAssociationRelationship(entity, mi))
         {
             if (this.mapping.IsNestedEntity(entity, mi))
             {
                 this.GetColumns(this.mapping.GetRelatedEntity(entity, mi), aliases, columns);
             }
             else if (this.mapping.IsColumn(entity, mi))
             {
                 string     name      = this.mapping.GetColumnName(entity, mi);
                 string     aliasName = this.mapping.GetAlias(entity, mi);
                 TableAlias alias;
                 aliases.TryGetValue(aliasName, out alias);
                 var colType          = this.GetColumnType(entity, mi);
                 ColumnExpression  ce = new ColumnExpression(TypeHelper.GetMemberType(mi), colType, alias, name);
                 ColumnDeclaration cd = new ColumnDeclaration(name, ce, colType);
                 columns.Add(cd);
             }
         }
     }
 }
コード例 #22
0
    protected internal override Expression VisitSelect(SelectExpression select)
    {
        bool isFirst = sb.Length == 0;

        if (!isFirst)
        {
            AppendNewLine(Indentation.Inner);
            sb.Append('(');
        }

        sb.Append("SELECT ");
        if (select.IsDistinct)
        {
            sb.Append("DISTINCT ");
        }

        if (select.Top != null && !this.isPostgres)
        {
            sb.Append("TOP (");
            Visit(select.Top);
            sb.Append(") ");
        }

        if (select.Columns.Count == 0)
        {
            sb.Append("0 as Dummy");
        }
        else
        {
            this.AppendNewLine(Indentation.Inner);
            for (int i = 0, n = select.Columns.Count; i < n; i++)
            {
                ColumnDeclaration column = select.Columns[i];
                AppendColumn(column);
                if (i < (n - 1))
                {
                    sb.Append(", ");
                    this.AppendNewLine(Indentation.Same);
                }
                else
                {
                    this.Indent(Indentation.Outer);
                }
            }
        }

        if (select.From != null)
        {
            this.AppendNewLine(Indentation.Same);
            sb.Append("FROM ");
            this.VisitSource(select.From);
        }
        if (select.Where != null)
        {
            this.AppendNewLine(Indentation.Same);
            sb.Append("WHERE ");
            this.Visit(select.Where);
        }
        if (select.GroupBy.Count > 0)
        {
            this.AppendNewLine(Indentation.Same);
            sb.Append("GROUP BY ");
            for (int i = 0, n = select.GroupBy.Count; i < n; i++)
            {
                Expression exp = select.GroupBy[i];
                if (i > 0)
                {
                    sb.Append(", ");
                }
                this.Visit(exp);
            }
        }
        if (select.OrderBy.Count > 0)
        {
            this.AppendNewLine(Indentation.Same);
            sb.Append("ORDER BY ");
            for (int i = 0, n = select.OrderBy.Count; i < n; i++)
            {
                OrderExpression exp = select.OrderBy[i];
                if (i > 0)
                {
                    sb.Append(", ");
                }
                this.Visit(exp.Expression);
                if (exp.OrderType != OrderType.Ascending)
                {
                    sb.Append(" DESC");
                }
            }
        }

        if (select.Top != null && this.isPostgres)
        {
            this.AppendNewLine(Indentation.Same);
            sb.Append("LIMIT ");
            Visit(select.Top);
        }

        if (select.IsForXmlPathEmpty)
        {
            this.AppendNewLine(Indentation.Same);
            sb.Append("FOR XML PATH('')");
        }

        if (!isFirst)
        {
            sb.Append(')');
            AppendNewLine(Indentation.Outer);
        }

        return(select);
    }
コード例 #23
0
ファイル: AdvancedMapping.cs プロジェクト: rdrawsky/iqtoolkit
 private void GetColumns(MappingEntity entity, Dictionary<string, TableAlias> aliases, List<ColumnDeclaration> columns)
 {
     foreach (MemberInfo mi in this.mapping.GetMappedMembers(entity))
     {
         if (!this.mapping.IsAssociationRelationship(entity, mi))
         {
             if (this.mapping.IsNestedEntity(entity, mi))
             {
                 this.GetColumns(this.mapping.GetRelatedEntity(entity, mi), aliases, columns);
             }
             else if (this.mapping.IsColumn(entity, mi))
             {
                 string name = this.mapping.GetColumnName(entity, mi);
                 string aliasName = this.mapping.GetAlias(entity, mi);
                 TableAlias alias;
                 aliases.TryGetValue(aliasName, out alias);
                 var colType = this.GetColumnType(entity, mi);
                 ColumnExpression ce = new ColumnExpression(TypeHelper.GetMemberType(mi), colType, alias, name);
                 ColumnDeclaration cd = new ColumnDeclaration(name, ce, colType);
                 columns.Add(cd);
             }
         }
     }
 }
コード例 #24
0
 protected virtual bool CompareColumnDeclaration(ColumnDeclaration a, ColumnDeclaration b)
 {
     return(a.Name.Equals(b.Name, StringComparison.InvariantCultureIgnoreCase) && this.Compare(a.Expression, b.Expression));
 }
コード例 #25
0
        private SelectExpression GetCountSelectExpression(SelectExpression select)
        {
            BinaryExpression binaryExpression = select.Where as BinaryExpression;

            if (binaryExpression != null)
            {
                ScalarExpression scalarExpression = binaryExpression.Left as ScalarExpression;

                if (scalarExpression != null)
                {
                    SelectExpression selectCount = scalarExpression.Select as SelectExpression;

                    if (selectCount != null && selectCount.Columns.Count == 1)
                    {
                        AggregateExpression aggregateExpression = (AggregateExpression)selectCount.Columns[0].Expression;

                        if (aggregateExpression != null && aggregateExpression.AggregateName == "Count")
                        {
                            BinaryExpression where = selectCount.Where as BinaryExpression;

                            if (where != null)
                            {
                                ColumnExpression columnExpression = where.Left as ColumnExpression;

                                if (columnExpression != null)
                                {
                                    TableAlias      tableAlias      = new TableAlias();
                                    TableExpression tableExpression = (TableExpression)select.From;
                                    tableExpression = new TableExpression(tableAlias, tableExpression.Entity, tableExpression.Name);

                                    columnExpression = new ColumnExpression(columnExpression.Type, columnExpression.QueryType, tableAlias, columnExpression.Name);
                                    ColumnDeclaration columnDeclaration = new ColumnDeclaration(string.Empty, columnExpression, columnExpression.QueryType);

                                    BinaryExpression where2 = Expression.MakeBinary(where.NodeType, where.Left, columnExpression);
                                    selectCount = new SelectExpression(selectCount.Alias, selectCount.Columns, selectCount.From, where2);

                                    List <ColumnDeclaration> columns = new List <ColumnDeclaration> {
                                        new ColumnDeclaration("CountValue", new ScalarExpression(selectCount.Columns[0].Expression.Type, selectCount), selectCount.Columns[0].QueryType),
                                        columnDeclaration
                                    };

                                    selectCount = new SelectExpression(tableAlias,
                                                                       columns.ToReadOnly(),
                                                                       tableExpression,
                                                                       null,
                                                                       selectCount.OrderBy,
                                                                       null,
                                                                       selectCount.IsDistinct,
                                                                       selectCount.Skip,
                                                                       selectCount.Take,
                                                                       selectCount.IsReverse);

                                    ColumnExpression countValueColumnExpression = new ColumnExpression(selectCount.Columns[0].Expression.Type,
                                                                                                       selectCount.Columns[0].QueryType,
                                                                                                       tableAlias,
                                                                                                       "CountValue");

                                    SelectExpression newSelect = new SelectExpression(select.Alias,
                                                                                      select.Columns,
                                                                                      select.From,
                                                                                      null,
                                                                                      select.OrderBy,
                                                                                      select.GroupBy,
                                                                                      select.IsDistinct,
                                                                                      select.Skip,
                                                                                      select.Take,
                                                                                      select.IsReverse);

                                    JoinExpression joinExpression = new JoinExpression(JoinType.InnerJoin,
                                                                                       newSelect, selectCount,
                                                                                       Expression.MakeBinary(ExpressionType.Equal, columnExpression, where.Right));

                                    select = new SelectExpression(newSelect.Alias,
                                                                  newSelect.Columns,
                                                                  joinExpression,
                                                                  Expression.MakeBinary(binaryExpression.NodeType, countValueColumnExpression, binaryExpression.Right),
                                                                  newSelect.OrderBy,
                                                                  newSelect.GroupBy,
                                                                  newSelect.IsDistinct,
                                                                  newSelect.Skip,
                                                                  newSelect.Take,
                                                                  newSelect.IsReverse);

                                    return(select);
                                }
                            }
                        }
                    }
                }
            }

            return(null);
        }
コード例 #26
0
 protected virtual bool CompareColumnDeclaration(ColumnDeclaration a, ColumnDeclaration b)
 {
     return a.Name == b.Name && this.Compare(a.Expression, b.Expression);
 }
コード例 #27
0
 static internal ColumnExpression SingleProjection(ColumnDeclaration declaration, Alias newAlias, Type columnType)
 {
     return(new ColumnExpression(columnType, newAlias, declaration.Name));
 }
コード例 #28
0
        protected override ColumnDeclaration VisitColumnDeclaration(ColumnDeclaration c)
        {
            var e = MakeSqlValue(Visit(c.Expression));
            if (e == c.Expression)
                return c;

            return new ColumnDeclaration(c.Name, e);
        }
コード例 #29
0
        protected override Expression VisitSelect(SelectExpression select)
        {
            sb.Append("SELECT ");
            if (select.IsDistinct)
            {
                sb.Append("DISTINCT ");
            }

            if (select.Columns.Count > 0)
            {
                for (int i = 0, n = select.Columns.Count; i < n; i++)
                {
                    ColumnDeclaration column = select.Columns[i];
                    if (i > 0)
                    {
                        sb.Append(", ");
                    }
                    ColumnExpression c = VisitValue(column.Expression) as ColumnExpression;
                    if (!string.IsNullOrEmpty(column.Name) && (c == null || c.Name != column.Name))
                    {
                        sb.Append(" ");
                        sb.Append(column.Name);
                    }
                }
            }
            else
            {
                sb.Append("NULL ");
                if (isNested)
                {
                    sb.Append(" tmp ");
                }
            }
            if (select.From != null)
            {
                AppendNewLine(Indentation.Same);
                sb.Append("FROM ");
                VisitSource(select.From);
            }
            if (select.Where != null)
            {
                AppendNewLine(Indentation.Same);
                sb.Append("WHERE ");
                VisitPredicate(select.Where);
            }
            if (select.GroupBy != null && select.GroupBy.Count > 0)
            {
                AppendNewLine(Indentation.Same);
                sb.Append("GROUP BY ");
                for (int i = 0, n = select.GroupBy.Count; i < n; i++)
                {
                    if (i > 0)
                    {
                        sb.Append(", ");
                    }
                    VisitValue(select.GroupBy[i]);
                }
            }
            if (select.OrderBy != null && select.OrderBy.Count > 0)
            {
                AppendNewLine(Indentation.Same);
                sb.Append("ORDER BY ");
                for (int i = 0, n = select.OrderBy.Count; i < n; i++)
                {
                    OrderExpression exp = select.OrderBy[i];
                    if (i > 0)
                    {
                        sb.Append(", ");
                    }
                    VisitValue(exp.Expression);
                    if (exp.OrderType != OrderType.Ascending)
                    {
                        sb.Append(" DESC");
                    }
                }
            }

            int skip = select.Skip == null ? 0 : (int)select.Skip.GetConstantValue();
            int take = select.Take == null ? 0 : (int)select.Take.GetConstantValue();

            if (take > 0)
            {
                if (skip == 0)
                {
                    AppendNewLine(Indentation.Same);
                    sb.AppendFormat("FETCH FIRST {0} ROWS ONLY", take);
                }
                else
                {
                    AppendNewLine(Indentation.Same);
                    sb.Insert(0, "SELECT * FROM ( ");
                    sb.AppendFormat(") WHERE ROW_NUMBER() OVER() BETWEEN {0} AND {1}", skip + 1, take + skip);                     // "BETWEEN" is inclusive, so add 1 to Skip (BETWEEN 1 AND 3 returns 3 rows, 1, 2, and 3, and row numbers out of the DB start at 1.)
                }
            }
            return(select);
        }
コード例 #30
0
 protected virtual bool CompareColumnDeclaration(ColumnDeclaration a, ColumnDeclaration b)
 {
     return(a.Name == b.Name && Compare(a.Expression, b.Expression));
 }
コード例 #31
0
        protected virtual ColumnDeclaration VisitColumnDeclaration(ColumnDeclaration c)
        {
            var e = Visit(c.Expression);
            if (e == c.Expression)
                return c;

            return new ColumnDeclaration(c.Name, e);
        }
コード例 #32
0
		private bool CompareColumnDeclaration(ColumnDeclaration a, ColumnDeclaration b)
		{
			return a.Name == b.Name && this.Compare(a.Expression, b.Expression);
		}
コード例 #33
0
 internal void GetColumns(IEntityMapping mapping, Dictionary<string, TableAlias> aliases, List<ColumnDeclaration> columns)
 {
     foreach (var mi in mapping.Members)
     {
         if (!mi.IsRelationship && mi.IsColumn)
         {
             string name = mi.ColumnName;
             string aliasName = mi.AliasName;
             TableAlias alias;
             aliases.TryGetValue(aliasName, out alias);
             var colType = mi.SqlType;
             ColumnExpression ce = new ColumnExpression(mi.MemberType, colType, alias, name);
             ColumnDeclaration cd = new ColumnDeclaration(name, ce, colType);
             columns.Add(cd);
         }
     }
 }
コード例 #34
0
        private SelectExpression GetCountSelectExpression(SelectExpression select)
        {
            BinaryExpression binaryExpression = select.Where as BinaryExpression;

            if (binaryExpression != null) {
                ScalarExpression scalarExpression = binaryExpression.Left as ScalarExpression;

                if (scalarExpression != null) {
                    SelectExpression selectCount = scalarExpression.Select as SelectExpression;

                    if (selectCount != null && selectCount.Columns.Count == 1) {
                        AggregateExpression aggregateExpression = (AggregateExpression)selectCount.Columns[0].Expression;

                        if (aggregateExpression != null && aggregateExpression.AggregateName == "Count") {
                            BinaryExpression where = selectCount.Where as BinaryExpression;

                            if (where != null) {
                                ColumnExpression columnExpression = where.Left as ColumnExpression;

                                if (columnExpression != null) {
                                    TableAlias tableAlias = new TableAlias();
                                    TableExpression tableExpression = (TableExpression)select.From;
                                    tableExpression = new TableExpression(tableAlias, tableExpression.Entity, tableExpression.Name);

                                    columnExpression = new ColumnExpression(columnExpression.Type, columnExpression.QueryType, tableAlias, columnExpression.Name);
                                    ColumnDeclaration columnDeclaration = new ColumnDeclaration(string.Empty, columnExpression, columnExpression.QueryType);

                                    BinaryExpression where2 = Expression.MakeBinary(where.NodeType, where.Left, columnExpression);
                                    selectCount = new SelectExpression(selectCount.Alias, selectCount.Columns, selectCount.From, where2);

                                    List<ColumnDeclaration> columns = new List<ColumnDeclaration> {
                                        new ColumnDeclaration("CountValue", new ScalarExpression(selectCount.Columns[0].Expression.Type, selectCount), selectCount.Columns[0].QueryType),
                                        columnDeclaration
                                    };

                                    selectCount = new SelectExpression(tableAlias,
                                                                        columns.ToReadOnly(),
                                                                        tableExpression,
                                                                        null,
                                                                        selectCount.OrderBy,
                                                                        null,
                                                                        selectCount.IsDistinct,
                                                                        selectCount.Skip,
                                                                        selectCount.Take,
                                                                        selectCount.IsReverse);

                                    ColumnExpression countValueColumnExpression = new ColumnExpression(selectCount.Columns[0].Expression.Type,
                                                                                                        selectCount.Columns[0].QueryType,
                                                                                                        tableAlias,
                                                                                                        "CountValue");

                                    SelectExpression newSelect = new SelectExpression(select.Alias,
                                                                                        select.Columns,
                                                                                        select.From,
                                                                                        null,
                                                                                        select.OrderBy,
                                                                                        select.GroupBy,
                                                                                        select.IsDistinct,
                                                                                        select.Skip,
                                                                                        select.Take,
                                                                                        select.IsReverse);

                                    JoinExpression joinExpression = new JoinExpression(JoinType.InnerJoin,
                                                                                        newSelect, selectCount,
                                                                                        Expression.MakeBinary(ExpressionType.Equal, columnExpression, where.Right));

                                    select = new SelectExpression(newSelect.Alias,
                                                                    newSelect.Columns,
                                                                    joinExpression,
                                                                    Expression.MakeBinary(binaryExpression.NodeType, countValueColumnExpression, binaryExpression.Right),
                                                                    newSelect.OrderBy,
                                                                    newSelect.GroupBy,
                                                                    newSelect.IsDistinct,
                                                                    newSelect.Skip,
                                                                    newSelect.Take,
                                                                    newSelect.IsReverse);

                                    return select;
                                }
                            }
                        }
                    }
                }
            }

            return null;
        }
コード例 #35
0
        protected override Expression VisitSelect(SelectExpression select)
        {
            _sb.Append("SELECT ");
            if (select.IsDistinct)
            {
                _sb.Append("DISTINCT ");
            }
            for (int i = 0; i < select.Columns.Count; i++)
            {
                ColumnDeclaration column = select.Columns[i];
                if (i > 0)
                {
                    _sb.Append(", ");
                }

                ColumnExpression c = Visit(column.Expression) as ColumnExpression;

                if (!(string.IsNullOrWhiteSpace(column.Name) || string.Equals(c?.Name, column.Name)))
                {
                    _sb.Append(" AS ").Append(column.Name);
                }
            }

            if (select.From != null)
            {
                AppendNewLine(Indentation.Same);
                _sb.Append("FROM ");
                VisitSource(select.From);
            }
            if (select.Where != null)
            {
                AppendNewLine(Indentation.Same);
                _sb.Append("WHERE ");
                Visit(select.Where);
            }
            if (select.GroupBy != null && select.GroupBy.Count > 0)
            {
                AppendNewLine(Indentation.Same);
                _sb.Append("GROUP BY ");
                for (int i = 0, n = select.GroupBy.Count; i < n; i++)
                {
                    if (i > 0)
                    {
                        _sb.Append(", ");
                    }
                    Visit(select.GroupBy[i]);
                }
            }
            if (select.Having != null)
            {
                AppendNewLine(Indentation.Same);
                _sb.Append("HAVING ");
                Visit(select.Having);
            }
            if (select.OrderBy != null && select.OrderBy.Count > 0)
            {
                AppendNewLine(Indentation.Same);
                _sb.Append("ORDER BY ");
                for (int i = 0, n = select.OrderBy.Count; i < n; i++)
                {
                    if (i > 0)
                    {
                        _sb.Append(", ");
                    }
                    OrderExpression exp = select.OrderBy[i];
                    Visit(exp.Expression);
                    _sb.Append(exp.OrderType != OrderType.Ascending ? " DESC" : " ASC");
                }
            }
            if (select.Limit != null)
            {
                AppendNewLine(Indentation.Same);
                _sb.Append("LIMIT ");
                Visit(select.Limit);
            }
            if (select.Offset != null)
            {
                if (select.Limit == null)
                {
                    AppendNewLine(Indentation.Same);
                    _sb.Append("LIMIT -1");
                }
                _sb.Append(" OFFSET ");
                Visit(select.Offset);
            }
            return(select);
        }
コード例 #36
0
 public static SelectExpression RemoveColumn(this SelectExpression select, ColumnDeclaration column)
 {
     List<ColumnDeclaration> columns = new List<ColumnDeclaration>(select.Columns);
     columns.Remove(column);
     return select.SetColumns(columns);
 }
コード例 #37
0
        protected override Expression VisitSelect(SelectExpression select)
        {
            // visit column projection first
            ReadOnlyCollection<ColumnDeclaration> columns = select.Columns;

            List<ColumnDeclaration> alternate = null;
            for (int i = 0, n = select.Columns.Count; i < n; i++)
            {
                ColumnDeclaration decl = select.Columns[i];
                if (select.IsDistinct || IsColumnUsed(select.Alias, decl.Name))
                {
                    Expression expr = this.Visit(decl.Expression);
                    if (expr != decl.Expression)
                    {
                        decl = new ColumnDeclaration(decl.Name, expr);
                    }
                }
                else
                {
                    decl = null;  // null means it gets omitted
                }
                if (decl != select.Columns[i] && alternate == null)
                {
                    alternate = new List<ColumnDeclaration>();
                    for (int j = 0; j < i; j++)
                    {
                        alternate.Add(select.Columns[j]);
                    }
                }
                if (decl != null && alternate != null)
                {
                    alternate.Add(decl);
                }
            }
            if (alternate != null)
            {
                columns = alternate.AsReadOnly();
            }

            Expression take = this.Visit(select.Take);
            Expression skip = this.Visit(select.Skip);
            ReadOnlyCollection<Expression> groupbys = this.VisitExpressionList(select.GroupBy);
            ReadOnlyCollection<OrderExpression> orderbys = this.VisitOrderBy(select.OrderBy);
            Expression where = this.Visit(select.Where);
            Expression from = this.Visit(select.From);

            ClearColumnsUsed(select.Alias);

            if (columns != select.Columns 
                || take != select.Take 
                || skip != select.Skip
                || orderbys != select.OrderBy 
                || groupbys != select.GroupBy
                || where != select.Where 
                || from != select.From)
            {
                select = new SelectExpression(select.Alias, columns, from, where, orderbys, groupbys, select.IsDistinct, skip, take);
            }

            return select;
        }
コード例 #38
0
ファイル: ColumnProjector.cs プロジェクト: rondoo/framework
 public ColumnDeclaration MapColumn(ColumnExpression ce)
 {
     string columnName = GetUniqueColumnName(ce.Name);
     var result = new ColumnDeclaration(columnName, ce);
     columns.Add(result.Name, result);
     return result; 
 }
コード例 #39
0
        protected override Expression VisitSelect(SelectExpression select)
        {
            sb.Append("SELECT ");
            if (select.IsDistinct)
            {
                sb.Append("DISTINCT ");
            }

            if (select.Columns.Count > 0)
            {
                for (int i = 0, n = select.Columns.Count; i < n; i++)
                {
                    ColumnDeclaration column = select.Columns[i];
                    if (i > 0)
                    {
                        sb.Append(", ");
                    }
                    ColumnExpression c = VisitValue(column.Expression) as ColumnExpression;
                    if (!string.IsNullOrEmpty(column.Name) && (c == null || c.Name != column.Name))
                    {
                        sb.Append(" AS ");
                        sb.Append(column.Name);
                    }
                }
            }
            else
            {
                sb.Append("NULL ");
                if (isNested)
                {
                    sb.Append("AS tmp ");
                }
            }
            if (select.From != null)
            {
                AppendNewLine(Indentation.Same);
                sb.Append("FROM ");
                VisitSource(select.From);
            }
            if (select.Where != null)
            {
                AppendNewLine(Indentation.Same);
                sb.Append("WHERE ");
                VisitPredicate(select.Where);
            }
            if (select.GroupBy != null && select.GroupBy.Count > 0)
            {
                AppendNewLine(Indentation.Same);
                sb.Append("GROUP BY ");
                for (int i = 0, n = select.GroupBy.Count; i < n; i++)
                {
                    if (i > 0)
                    {
                        sb.Append(", ");
                    }
                    VisitValue(select.GroupBy[i]);
                }
            }
            if (select.OrderBy != null && select.OrderBy.Count > 0)
            {
                AppendNewLine(Indentation.Same);
                sb.Append("ORDER BY ");
                for (int i = 0, n = select.OrderBy.Count; i < n; i++)
                {
                    OrderExpression exp = select.OrderBy[i];
                    if (i > 0)
                    {
                        sb.Append(", ");
                    }
                    VisitValue(exp.Expression);
                    if (exp.OrderType != OrderType.Ascending)
                    {
                        sb.Append(" DESC");
                    }
                }
            }

            int skip = select.Skip == null ? 0 : (int)select.Skip.GetConstantValue();
            int take = select.Take == null ? 0 : (int)select.Take.GetConstantValue();

            if (take > 0)
            {
                AppendNewLine(Indentation.Same);
                sb.AppendFormat(" LIMIT {0},{1}", skip, take);
            }
            return(select);
        }
コード例 #40
0
ファイル: ColumnProjector.cs プロジェクト: rondoo/framework
 public ColumnDeclaration NewColumn(Expression exp)
 {
     string columnName = GetNextColumnName();
     var result = new ColumnDeclaration(columnName, exp);
     columns.Add(result.Name, result);
     return result; 
 }
コード例 #41
0
        protected override Expression VisitSelect(SelectExpression select)
        {
            // visit column projection first
            var columns = select.Columns;

            var wasRetained = retainAllColumns;

            retainAllColumns = false;

            List <ColumnDeclaration> alternate = null;

            for (int i = 0, n = select.Columns.Count; i < n; i++)
            {
                var decl = select.Columns[i];
                if (wasRetained || select.IsDistinct || IsColumnUsed(select.Alias, decl.Name))
                {
                    var expr = Visit(decl.Expression);
                    if (expr != decl.Expression)
                    {
                        decl = new ColumnDeclaration(decl.Name, expr);
                    }
                }
                else
                {
                    decl = null;  // null means it gets omitted
                }

                if (decl != select.Columns[i] && alternate == null)
                {
                    alternate = new List <ColumnDeclaration>();
                    for (int j = 0; j < i; j++)
                    {
                        alternate.Add(select.Columns[j]);
                    }
                }

                if (decl != null && alternate != null)
                {
                    alternate.Add(decl);
                }
            }

            if (alternate != null)
            {
                columns = alternate.AsReadOnly();
            }

            var take     = Visit(select.Take);
            var skip     = Visit(select.Skip);
            var groupbys = VisitMemberAndExpressionList(select.GroupBy);
            var orderbys = VisitOrderBy(select.OrderBy);

            var where = Visit(select.Where);

            var from = Visit(select.From);

            ClearColumnsUsed(select.Alias);

            //构成新的查询表达式
            select = select.Update(from, where, orderbys, groupbys, skip, take, select.Segment, select.IsDistinct, columns, select.IsReverse);

            retainAllColumns = wasRetained;

            return(select);
        }
コード例 #42
0
ファイル: ColumnProjector.cs プロジェクト: rondoo/framework
 static internal ColumnExpression SingleProjection(ColumnDeclaration declaration, Alias newAlias, Type columnType)
 {
     return new ColumnExpression(columnType, newAlias, declaration.Name);
 }
コード例 #43
0
        protected override Expression VisitSelect(SelectExpression select)
        {
            // visit column projection first
            ReadOnlyCollection <ColumnDeclaration> columns = select.Columns;

            List <ColumnDeclaration> alternate = null;

            for (int i = 0, n = select.Columns.Count; i < n; i++)
            {
                ColumnDeclaration decl = select.Columns[i];
                if (select.IsDistinct || IsColumnUsed(select.Alias, decl.Name))
                {
                    Expression expr = this.Visit(decl.Expression);
                    if (expr != decl.Expression)
                    {
                        decl = new ColumnDeclaration(decl.Name, expr);
                    }
                }
                else
                {
                    decl = null;  // null means it gets omitted
                }
                if (decl != select.Columns[i] && alternate == null)
                {
                    alternate = new List <ColumnDeclaration>();
                    for (int j = 0; j < i; j++)
                    {
                        alternate.Add(select.Columns[j]);
                    }
                }
                if (decl != null && alternate != null)
                {
                    alternate.Add(decl);
                }
            }
            if (alternate != null)
            {
                columns = alternate.AsReadOnly();
            }

            Expression take = this.Visit(select.Take);
            Expression skip = this.Visit(select.Skip);
            ReadOnlyCollection <Expression>      groupbys = this.VisitExpressionList(select.GroupBy);
            ReadOnlyCollection <OrderExpression> orderbys = this.VisitOrderBy(select.OrderBy);

            Expression where = this.Visit(select.Where);
            Expression from = this.Visit(select.From);

            ClearColumnsUsed(select.Alias);

            if (columns != select.Columns ||
                take != select.Take ||
                skip != select.Skip ||
                orderbys != select.OrderBy ||
                groupbys != select.GroupBy ||
                where != select.Where ||
                from != select.From)
            {
                select = new SelectExpression(select.Alias, columns, from, where, orderbys, groupbys, select.IsDistinct, skip, take);
            }

            return(select);
        }
コード例 #44
0
ファイル: QueryFormatter.cs プロジェクト: nuub666/framework
        private void AppendColumn(ColumnDeclaration column)
        {
            ColumnExpression c = this.Visit(column.Expression) as ColumnExpression;

            if (column.Name.HasText() && (c == null || c.Name != column.Name))
            {
                sb.Append(" AS ");
                sb.Append(column.Name.SqlEscape());
            }
        }