@Override public void computeDeliveredProperties(ILogicalOperator op, IOptimizationContext context) { IDataSource<?> ds = idx.getDataSource(); IDataSourcePropertiesProvider dspp = ds.getPropertiesProvider(); AbstractScanOperator as = (AbstractScanOperator) op; deliveredProperties = dspp.computePropertiesVector(as.getVariables()); }
@Override public PhysicalRequirements getRequiredPropertiesForChildren( ILogicalOperator op, IPhysicalPropertiesVector reqdByParent) { List<LogicalVariable> scanVariables = new ArrayList<>(); scanVariables.addAll(primaryKeys); scanVariables.add(new LogicalVariable(-1)); IPhysicalPropertiesVector physicalProps = dataSourceIndex .getDataSource() .getPropertiesProvider() .computePropertiesVector(scanVariables); List<ILocalStructuralProperty> localProperties = new ArrayList<>(); List<OrderColumn> orderColumns = new ArrayList<OrderColumn>(); // Data needs to be sorted based on the [token, number of token, PK] // OR [token, PK] if the index is not partitioned for (LogicalVariable skVar : secondaryKeys) { orderColumns.add(new OrderColumn(skVar, OrderKind.ASC)); } for (LogicalVariable pkVar : primaryKeys) { orderColumns.add(new OrderColumn(pkVar, OrderKind.ASC)); } localProperties.add(new LocalOrderProperty(orderColumns)); StructuralPropertiesVector spv = new StructuralPropertiesVector(physicalProps.getPartitioningProperty(), localProperties); return new PhysicalRequirements( new IPhysicalPropertiesVector[] {spv}, IPartitioningRequirementsCoordinator.NO_COORDINATION); }