use of org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator in project asterixdb by apache.
the class PreSortedDistinctByPOperator method getRequiredPropertiesForChildren.
@Override
public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) {
StructuralPropertiesVector[] pv = new StructuralPropertiesVector[1];
List<ILocalStructuralProperty> localProps = new ArrayList<ILocalStructuralProperty>();
List<OrderColumn> orderColumns = new ArrayList<OrderColumn>();
for (LogicalVariable column : columnList) {
orderColumns.add(new OrderColumn(column, OrderKind.ASC));
}
localProps.add(new LocalOrderProperty(orderColumns));
IPartitioningProperty pp = null;
AbstractLogicalOperator aop = (AbstractLogicalOperator) op;
if (aop.getExecutionMode() == ExecutionMode.PARTITIONED) {
pp = new UnorderedPartitionedProperty(new ListSet<LogicalVariable>(columnList), context.getComputationNodeDomain());
}
pv[0] = new StructuralPropertiesVector(pp, localProps);
return new PhysicalRequirements(pv, IPartitioningRequirementsCoordinator.NO_COORDINATION);
}
use of org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator in project asterixdb by apache.
the class PreSortedDistinctByPOperator method computeDeliveredProperties.
@Override
public void computeDeliveredProperties(ILogicalOperator op, IOptimizationContext context) {
AbstractLogicalOperator op2 = (AbstractLogicalOperator) op.getInputs().get(0).getValue();
IPartitioningProperty pp = op2.getDeliveredPhysicalProperties().getPartitioningProperty();
List<ILocalStructuralProperty> propsLocal = op2.getDeliveredPhysicalProperties().getLocalProperties();
deliveredProperties = new StructuralPropertiesVector(pp, propsLocal);
}
use of org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator in project asterixdb by apache.
the class SinkPOperator method computeDeliveredProperties.
@Override
public void computeDeliveredProperties(ILogicalOperator op, IOptimizationContext context) {
AbstractLogicalOperator op2;
List<ILocalStructuralProperty> propsLocal = new ArrayList<ILocalStructuralProperty>();
IPhysicalPropertiesVector childsProperties = null;
for (int i = 0; i < op.getInputs().size(); i++) {
op2 = (AbstractLogicalOperator) op.getInputs().get(i).getValue();
childsProperties = op2.getPhysicalOperator().getDeliveredProperties();
if (childsProperties.getLocalProperties() != null) {
propsLocal.addAll(childsProperties.getLocalProperties());
}
}
deliveredProperties = new StructuralPropertiesVector(childsProperties.getPartitioningProperty(), propsLocal);
}
use of org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator in project asterixdb by apache.
the class StreamLimitPOperator method getRequiredPropertiesForChildren.
@Override
public PhysicalRequirements getRequiredPropertiesForChildren(ILogicalOperator op, IPhysicalPropertiesVector reqdByParent, IOptimizationContext context) {
AbstractLogicalOperator limitOp = (AbstractLogicalOperator) op;
if (limitOp.getExecutionMode() == AbstractLogicalOperator.ExecutionMode.UNPARTITIONED) {
StructuralPropertiesVector[] pv = new StructuralPropertiesVector[1];
pv[0] = new StructuralPropertiesVector(IPartitioningProperty.UNPARTITIONED, null);
return new PhysicalRequirements(pv, IPartitioningRequirementsCoordinator.NO_COORDINATION);
} else {
return emptyUnaryRequirements();
}
}
use of org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator in project asterixdb by apache.
the class OptimizableOperatorSubTree method initFromSubTree.
public boolean initFromSubTree(Mutable<ILogicalOperator> subTreeOpRef) throws AlgebricksException {
reset();
rootRef = subTreeOpRef;
root = subTreeOpRef.getValue();
boolean passedSource = false;
boolean result = false;
Mutable<ILogicalOperator> searchOpRef = subTreeOpRef;
// Examine the op's children to match the expected patterns.
AbstractLogicalOperator subTreeOp = (AbstractLogicalOperator) searchOpRef.getValue();
do {
// Skip select operator.
if (subTreeOp.getOperatorTag() == LogicalOperatorTag.SELECT) {
searchOpRef = subTreeOp.getInputs().get(0);
subTreeOp = (AbstractLogicalOperator) searchOpRef.getValue();
}
// Match datasource information if there are no (assign | unnest)*
if (subTreeOp.getOperatorTag() != LogicalOperatorTag.ASSIGN && subTreeOp.getOperatorTag() != LogicalOperatorTag.UNNEST) {
// Pattern may still match if we are looking for primary index matches as well.
result = initializeDataSource(searchOpRef);
passedSource = true;
if (!subTreeOp.getInputs().isEmpty()) {
searchOpRef = subTreeOp.getInputs().get(0);
subTreeOp = (AbstractLogicalOperator) searchOpRef.getValue();
}
}
// Match (assign | unnest)+.
while (subTreeOp.getOperatorTag() == LogicalOperatorTag.ASSIGN || subTreeOp.getOperatorTag() == LogicalOperatorTag.UNNEST) {
if (!passedSource && !OperatorPropertiesUtil.isMovable(subTreeOp)) {
return false;
}
if (subTreeOp.getExecutionMode() != ExecutionMode.UNPARTITIONED) {
//The unpartitioned ops should stay below the search
assignsAndUnnestsRefs.add(searchOpRef);
}
assignsAndUnnests.add(subTreeOp);
searchOpRef = subTreeOp.getInputs().get(0);
subTreeOp = (AbstractLogicalOperator) searchOpRef.getValue();
}
if (passedSource) {
return result;
}
} while (subTreeOp.getOperatorTag() == LogicalOperatorTag.SELECT);
// Match data source (datasource scan or primary index search).
return initializeDataSource(searchOpRef);
}
Aggregations