org.d2rq.algebra
Class NodeRelationOrderer
java.lang.Object
org.d2rq.db.op.util.OpMutator
org.d2rq.algebra.NodeRelationOrderer
public class NodeRelationOrderer
- extends OpMutator
Orders a NodeRelation
by one of its variables. This implies
re-ordering of the underyling DatabaseOp
, which may require
wrapping into a sub-SELECT
in some cases, for example
if the DatabaseOp
has a LIMIT
.
- Author:
- Richard Cyganiak (richard@cyganiak.de)
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
NodeRelationOrderer
public NodeRelationOrderer(NodeRelation nodeRelation,
List<OrderOp.OrderSpec> orderSpecs)
getNodeRelation
public NodeRelation getNodeRelation()
visitEnter
public boolean visitEnter(InnerJoinOp original)
- Overrides:
visitEnter
in class OpMutator
visitLeave
public DatabaseOp visitLeave(InnerJoinOp original,
Collection<NamedOp> newChildren)
- Overrides:
visitLeave
in class OpMutator
visitEnter
public boolean visitEnter(SelectOp original)
- Overrides:
visitEnter
in class OpMutator
visitLeave
public DatabaseOp visitLeave(SelectOp original,
DatabaseOp child)
- Overrides:
visitLeave
in class OpMutator
visitEnter
public boolean visitEnter(AliasOp original)
- Overrides:
visitEnter
in class OpMutator
visitLeave
public DatabaseOp visitLeave(AliasOp original,
DatabaseOp child)
- Overrides:
visitLeave
in class OpMutator
visitEnter
public boolean visitEnter(OrderOp original)
- Overrides:
visitEnter
in class OpMutator
visitLeave
public DatabaseOp visitLeave(OrderOp original,
DatabaseOp child)
- We can merge with an existing ORDER BY clause.
- Overrides:
visitLeave
in class OpMutator
visitEnter
public boolean visitEnter(LimitOp original)
- Overrides:
visitEnter
in class OpMutator
visitLeave
public DatabaseOp visitLeave(LimitOp original,
DatabaseOp child)
- We have a LIMIT clause; adding ORDER BY would change the result as
ordering is done before LIMIT in SQL. So we have to wrap the entire
thing into a sub-SELECT, order the results of that sub-SELECT, and
rename everything in the node makers to use the new table name.
- Overrides:
visitLeave
in class OpMutator
visitEnter
public boolean visitEnter(EmptyOp original)
- Overrides:
visitEnter
in class OpMutator
visitLeave
public DatabaseOp visitLeave(EmptyOp original,
DatabaseOp child)
- Sorting an empty table is a no-op, so just return the original
- Overrides:
visitLeave
in class OpMutator
visit
public DatabaseOp visit(TableOp original)
- Overrides:
visit
in class OpMutator
visit
public DatabaseOp visit(SQLOp original)
- Overrides:
visit
in class OpMutator
visitOpTrue
public DatabaseOp visitOpTrue()
- Overrides:
visitOpTrue
in class OpMutator