Inheritance: IAstNode
 /// <exception cref="System.SqlSyntaxErrorException" />
 public DmlSelectStatement(SelectOption option,
                           IList<Pair<IExpression, string>> selectExprList,
                           TableReferences tables,
                           IExpression where,
                           GroupBy group,
                           IExpression having,
                           OrderBy order,
                           Limit limit)
 {
     if (option == null)
     {
         throw new ArgumentException("argument 'option' is null");
     }
     Option = option;
     if (selectExprList == null || selectExprList.IsEmpty())
     {
         this.selectExprList = new List<Pair<IExpression, string>>(0);
     }
     else
     {
         this.selectExprList = EnsureListType(selectExprList);
     }
     Tables = tables;
     Where = where;
     Group = group;
     Having = having;
     Order = order;
     Limit = limit;
 }
 public virtual void Visit(GroupBy node)
 {
     VisitInternal(node.OrderByList);
 }
Esempio n. 3
0
        /// <summary>nothing has been pre-consumed</summary>
        /// <returns>null if there is no order by</returns>
        /// <exception cref="System.SqlSyntaxErrorException" />
        protected internal virtual GroupBy GroupBy()
        {
            if (lexer.Token() != MySqlToken.KwGroup)
            {
                return null;
            }
            lexer.NextToken();
            Match(MySqlToken.KwBy);
            var expr = exprParser.Expression();
            var order = SortOrder.Asc;
            GroupBy groupBy;
            switch (lexer.Token())
            {
                case MySqlToken.KwDesc:
                {
                    order = SortOrder.Desc;
                    goto case MySqlToken.KwAsc;
                }

                case MySqlToken.KwAsc:
                {
                    lexer.NextToken();
                    goto default;
                }

                default:
                {
                    break;
                }
            }
            switch (lexer.Token())
            {
                case MySqlToken.KwWith:
                {
                    lexer.NextToken();
                    MatchIdentifier("ROLLUP");
                    return new GroupBy(expr, order, true);
                }

                case MySqlToken.PuncComma:
                {
                    break;
                }

                default:
                {
                    return new GroupBy(expr, order, false);
                }
            }
            for (groupBy = new GroupBy().AddOrderByItem(expr, order);
                 lexer.Token() == MySqlToken.PuncComma;)
            {
                lexer.NextToken();
                order = SortOrder.Asc;
                expr = exprParser.Expression();
                switch (lexer.Token())
                {
                    case MySqlToken.KwDesc:
                    {
                        order = SortOrder.Desc;
                        goto case MySqlToken.KwAsc;
                    }

                    case MySqlToken.KwAsc:
                    {
                        lexer.NextToken();
                        goto default;
                    }

                    default:
                    {
                        break;
                    }
                }
                groupBy.AddOrderByItem(expr, order);
                if (lexer.Token() == MySqlToken.KwWith)
                {
                    lexer.NextToken();
                    MatchIdentifier("ROLLUP");
                    return groupBy.SetWithRollup();
                }
            }
            return groupBy;
        }