Inheritance: SqlFragment
Exemple #1
0
        public override SqlFragment Visit(DbCaseExpression expression)
        {
            CaseFragment c = new CaseFragment();

            Debug.Assert(expression.When.Count == expression.Then.Count);

            for (int i = 0; i < expression.When.Count; ++i)
            {
                c.When.Add(expression.When[i].Accept(this));
                c.Then.Add(expression.Then[i].Accept(this));
            }
            if (expression.Else != null && !(expression.Else is DbNullExpression))
            {
                c.Else = expression.Else.Accept(this);
            }
            return(c);
        }
 public void Visit(CaseFragment f)
 {
 }
 public void Visit(CaseFragment f)
 {
 }
Exemple #4
0
        public override SqlFragment Visit(DbGroupByExpression expression)
        {
            // first process the input
            DbGroupExpressionBinding e           = expression.Input;
            SelectStatement          innerSelect = VisitInputExpressionEnsureSelect(e.Expression, e.VariableName, e.VariableType);

            scope.Add(e.GroupVariableName, innerSelect);

            SelectStatement select = WrapIfNotCompatible(innerSelect, expression.ExpressionKind);

            CollectionType ct = (CollectionType)expression.ResultType.EdmType;
            RowType        rt = (RowType)ct.TypeUsage.EdmType;

            int propIndex = 0;

            foreach (DbExpression key in expression.Keys)
            {
                #region Correção devexpress
                var fragment = key.Accept(this);
                // correção devexpress
                if (fragment is LiteralFragment)
                {
                    if ((fragment as LiteralFragment).Literal != "0")
                    {
                        select.AddGroupBy(fragment);
                    }
                }
                else
                {
                    select.AddGroupBy(fragment);
                }
                propIndex++;

                var colFragment = fragment as ColumnFragment;

                if (colFragment != null)
                {
                    // correção devexpress
                    if (fragment is LiteralFragment)
                    {
                        if ((fragment as LiteralFragment).Literal != "0")
                        {
                            colFragment             = colFragment.Clone();
                            colFragment.ColumnAlias = String.Format("K{0}", propIndex);
                            select.Columns.Add(colFragment);
                        }
                    }
                    else
                    {
                        colFragment             = colFragment.Clone();
                        colFragment.ColumnAlias = String.Format("K{0}", propIndex);
                        select.Columns.Add(colFragment);
                    }
                }
                else
                {
                    if (fragment is FunctionFragment)
                    {
                        FunctionFragment funFrag = fragment as FunctionFragment;
                        colFragment             = new ColumnFragment(null, null);
                        colFragment.ColumnAlias = String.Format("K{0}", propIndex);
                        colFragment.Literal     = funFrag;
                        select.Columns.Add(colFragment);
                    }
                    else if (fragment is CaseFragment)
                    {
                        CaseFragment caseFrag = fragment as CaseFragment;
                        colFragment             = new ColumnFragment(null, null);
                        colFragment.ColumnAlias = String.Format("K{0}", propIndex);
                        colFragment.Literal     = caseFrag;
                        select.Columns.Add(colFragment);
                    }
                }
                #endregion

                #region Original
                //var fragment = key.Accept(this);
                //select.AddGroupBy(fragment);
                //propIndex++;

                //var colFragment = fragment as ColumnFragment;

                //if (colFragment != null)
                //{
                //  colFragment = colFragment.Clone();
                //  colFragment.ColumnAlias = String.Format("K{0}", propIndex);
                //  select.Columns.Add(colFragment);
                //}
                #endregion
            }

            for (int agg = 0; agg < expression.Aggregates.Count; agg++)
            {
                DbAggregate         a  = expression.Aggregates[agg];
                DbFunctionAggregate fa = a as DbFunctionAggregate;
                if (fa == null)
                {
                    throw new NotSupportedException();
                }

                string         alias       = rt.Properties[propIndex++].Name;
                ColumnFragment functionCol = new ColumnFragment(null, null);
                functionCol.Literal     = HandleFunction(fa, a.Arguments[0].Accept(this));
                functionCol.ColumnAlias = alias;
                select.Columns.Add(functionCol);
            }

            return(select);
        }