Пример #1
0
        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;
        }
Пример #2
0
 /// <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));
 }