Exemple #1
0
        private QlExpression PushOrderByIn(Expression result, EJournalExpressionType expr, QlExpression column,
                                           QlToken toQlToken)
        {
            var take = result as SliceExpression;

            if (take == null)
            {
                return(new OrderExpression(result, expr, column, toQlToken));
            }
            return(new SliceExpression(PushOrderByIn(take.Body, expr, column, toQlToken), take.Operation, take.Count));
        }
Exemple #2
0
 public SliceExpression(Expression body, EJournalExpressionType operation, Expression count, QlToken token)
     : base(body, operation, token)
 {
     Count = count;
 }
Exemple #3
0
 protected QlExpression(QlToken parseToken)
 {
     ParseToken = parseToken;
 }
 public JournalNameExpression(string name, QlToken token)
     : base(token)
 {
     Name = name;
 }
Exemple #5
0
 public MapExpression(QlExpression result, List <ColumnNameExpression> columns, QlToken qlToken)
     : base(result, EJournalExpressionType.Map, qlToken)
 {
     Columns = columns;
 }
 public LiteralExpression(ConstantExpression constant, QlToken token) : base(token)
 {
     Constant = constant;
 }
Exemple #7
0
 public PostResultExpression(Expression body, EJournalExpressionType operation, QlToken token)
     : base(token)
 {
     _body      = body;
     _operation = operation;
 }
Exemple #8
0
 public ColumnNameExpression(string name, QlToken token) : base(token)
 {
     Name = name;
 }
 public ValueListExpression(IList <Expression> expressions, QlToken token)
     : base(token)
 {
     Values = expressions;
 }
Exemple #10
0
        public override QlExpression VisitSelect_core(QlParser.Select_coreContext context)
        {
            QlExpression take      = null;
            QlToken      takeToken = null;
            QlExpression skip      = null;
            QlToken      skipToken = null;
            List <ColumnNameExpression> columns = null;

            for (int i = 0; i < context.ChildCount; i++)
            {
                var child    = context.GetChild(i);
                var terminal = child as TerminalNodeImpl;
                if (terminal != null)
                {
                    if (string.Equals(terminal.GetText(), KEYWORD_TOP, StringComparison.OrdinalIgnoreCase))
                    {
                        if (i < context.ChildCount - 1)
                        {
                            takeToken = context.ToQlToken();
                            take      = Visit(context.GetChild(++i));
                        }
                    }
                    if (string.Equals(terminal.GetText(), KEYWORD_SKIP, StringComparison.OrdinalIgnoreCase))
                    {
                        if (i < context.ChildCount - 1)
                        {
                            skipToken = context.ToQlToken();
                            skip      = Visit(context.GetChild(++i));
                        }
                    }
                }
                var col = child as QlParser.Result_columnContext;
                if (col != null)
                {
                    var column = (ColumnNameExpression)Visit(col);
                    if (column != null)
                    {
                        if (columns == null)
                        {
                            columns = new List <ColumnNameExpression>();
                        }
                        columns.Add(column);
                    }
                }
            }

            var result = Visit(context.GetRuleContext <QlParser.Table_or_subqueryContext>(0));

            var expWhere = context.GetRuleContext <QlParser.Where_exprContext>(0);

            if (expWhere != null)
            {
                result = new FilterExpression(Visit(expWhere), result, context.ToQlToken());
            }
            if (columns != null)
            {
                result = new MapExpression(result, columns,
                                           new QlToken(string.Join(",", columns.Select(c => c.ParseToken.Text)),
                                                       columns.Min(c => c.ParseToken.Line), columns.Min(c => c.ParseToken.Position)));
            }
            if (skip != null)
            {
                result = new SliceExpression(result, EJournalExpressionType.Skip, skip, skipToken);
            }
            if (take != null)
            {
                result = new SliceExpression(result, EJournalExpressionType.Take, take, takeToken);
            }
            return(result);
        }
 public SymbolContainsExpression(Expression match, Expression values, QlToken token)
     : base(token)
 {
     _match  = match;
     _values = values;
 }
 public OrderExpression(Expression body, EJournalExpressionType operation, Expression predicate, QlToken token)
     : base(body, operation, token)
 {
     _predicate = predicate;
 }
 public LatestBySymbolExpression(string latestBy, Expression body, QlToken token)
     : base(token)
 {
     LatestBy = latestBy;
     _body    = body;
 }
 public ParameterNameExpression(string name, QlToken token)
     : base(token)
 {
     Name = name;
 }
 public ComparisonExpression(Expression left, ExpressionType operation, Expression right, QlToken token)
     : base(token)
 {
     Left      = left;
     Operation = operation;
     Right     = right;
 }
 public FilterExpression(Expression filter, Expression source, QlToken token)
     : base(token)
 {
     _filter = filter;
     _source = source;
 }