use of org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator.IOrder in project asterixdb by apache.
the class InlineAllNtsInSubplanVisitor method visitOrderOperator.
@Override
public ILogicalOperator visitOrderOperator(OrderOperator op, Void arg) throws AlgebricksException {
visitSingleInputOperator(op);
if (correlatedKeyVars.isEmpty()) {
return op;
}
orderingExprs.clear();
orderingExprs.addAll(cloneOrderingExpression(op.getOrderExpressions()));
List<Pair<IOrder, Mutable<ILogicalExpression>>> orderExprList = new ArrayList<>();
// Adds keyVars to the prefix of sorting columns.
for (LogicalVariable keyVar : correlatedKeyVars) {
orderExprList.add(new Pair<IOrder, Mutable<ILogicalExpression>>(OrderOperator.ASC_ORDER, new MutableObject<ILogicalExpression>(new VariableReferenceExpression(keyVar))));
}
orderExprList.addAll(op.getOrderExpressions());
// Creates an order operator with the new expression list.
OrderOperator orderOp = new OrderOperator(orderExprList);
orderOp.getInputs().addAll(op.getInputs());
context.computeAndSetTypeEnvironmentForOperator(orderOp);
return orderOp;
}
use of org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator.IOrder in project asterixdb by apache.
the class EnforceStructuralPropertiesRule method enforceOrderProperties.
private Mutable<ILogicalOperator> enforceOrderProperties(List<LocalOrderProperty> oList, Mutable<ILogicalOperator> topOp, boolean isMicroOp, IOptimizationContext context) throws AlgebricksException {
List<Pair<IOrder, Mutable<ILogicalExpression>>> oe = new LinkedList<>();
for (LocalOrderProperty orderProperty : oList) {
for (OrderColumn oc : orderProperty.getOrderColumns()) {
IOrder ordType = (oc.getOrder() == OrderKind.ASC) ? OrderOperator.ASC_ORDER : OrderOperator.DESC_ORDER;
Pair<IOrder, Mutable<ILogicalExpression>> pair = new Pair<>(ordType, new MutableObject<ILogicalExpression>(new VariableReferenceExpression(oc.getColumn())));
oe.add(pair);
}
}
OrderOperator oo = new OrderOperator(oe);
oo.setExecutionMode(AbstractLogicalOperator.ExecutionMode.LOCAL);
if (isMicroOp) {
oo.setPhysicalOperator(new InMemoryStableSortPOperator());
} else {
oo.setPhysicalOperator(new StableSortPOperator(physicalOptimizationConfig.getMaxFramesExternalSort()));
}
oo.getInputs().add(topOp);
context.computeAndSetTypeEnvironmentForOperator(oo);
if (AlgebricksConfig.DEBUG) {
AlgebricksConfig.ALGEBRICKS_LOGGER.fine(">>>> Added sort enforcer " + oo.getPhysicalOperator() + ".\n");
}
return new MutableObject<ILogicalOperator>(oo);
}
use of org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator.IOrder in project asterixdb by apache.
the class ExtractOrderExpressionsRule method rewritePost.
@Override
public boolean rewritePost(Mutable<ILogicalOperator> opRef, IOptimizationContext context) throws AlgebricksException {
AbstractLogicalOperator op1 = (AbstractLogicalOperator) opRef.getValue();
if (op1.getOperatorTag() != LogicalOperatorTag.ORDER) {
return false;
}
if (context.checkIfInDontApplySet(this, op1)) {
return false;
}
context.addToDontApplySet(this, op1);
OrderOperator oo = (OrderOperator) op1;
if (!orderHasComplexExpr(oo)) {
return false;
}
Mutable<ILogicalOperator> opRef2 = oo.getInputs().get(0);
for (Pair<IOrder, Mutable<ILogicalExpression>> orderPair : oo.getOrderExpressions()) {
ILogicalExpression expr = orderPair.second.getValue();
if (expr.getExpressionTag() != LogicalExpressionTag.VARIABLE && !AnalysisUtil.isAccessToFieldRecord(expr)) {
LogicalVariable v = extractExprIntoAssignOpRef(expr, opRef2, context);
orderPair.second.setValue(new VariableReferenceExpression(v));
}
}
context.computeAndSetTypeEnvironmentForOperator(oo);
return true;
}
use of org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator.IOrder in project asterixdb by apache.
the class AbstractStableSortPOperator method computeLocalProperties.
public void computeLocalProperties(ILogicalOperator op) {
OrderOperator ord = (OrderOperator) op;
List<OrderColumn> orderColumns = new ArrayList<OrderColumn>();
for (Pair<IOrder, Mutable<ILogicalExpression>> p : ord.getOrderExpressions()) {
ILogicalExpression expr = p.second.getValue();
if (expr.getExpressionTag() == LogicalExpressionTag.VARIABLE) {
VariableReferenceExpression varRef = (VariableReferenceExpression) expr;
LogicalVariable var = varRef.getVariableReference();
orderColumns.add(new OrderColumn(var, p.first.getKind()));
} else {
throw new IllegalStateException();
}
}
sortColumns = orderColumns.toArray(new OrderColumn[orderColumns.size()]);
orderProp = new LocalOrderProperty(orderColumns);
}
Aggregations