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)); }
public SliceExpression(Expression body, EJournalExpressionType operation, Expression count, QlToken token) : base(body, operation, token) { Count = count; }
protected QlExpression(QlToken parseToken) { ParseToken = parseToken; }
public JournalNameExpression(string name, QlToken token) : base(token) { Name = name; }
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; }
public PostResultExpression(Expression body, EJournalExpressionType operation, QlToken token) : base(token) { _body = body; _operation = operation; }
public ColumnNameExpression(string name, QlToken token) : base(token) { Name = name; }
public ValueListExpression(IList <Expression> expressions, QlToken token) : base(token) { Values = expressions; }
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; }