public override Table VisitOrder_item(QueryParser.Order_itemContext context) { int Comparer(TableRow row1, TableRow row2) { var env1 = new Environment(row1, _table.Columns); var expr1 = new CondExprVisitor(_zmi, env1).Visit(context.cond_expr()); var env2 = new Environment(row2, _table.Columns); var expr2 = new CondExprVisitor(_zmi, env2).Visit(context.cond_expr()); var result = expr1.Zip(expr2).Bind(p => { var res = new NullsVisitor(p).VisitNulls(context.nulls()); if (res == 0) return new OrderVisitor(p).VisitOrder(context.order()).Just(); return res.Just(); }); return result.Match(i => i, () => 0); } _table.Sort(Compare.By<TableRow>(Comparer)); return _table; }
/// <summary> /// Visit a parse tree produced by <see cref="QueryParser.order_item"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitOrder_item([NotNull] QueryParser.Order_itemContext context) { return(VisitChildren(context)); }