snapshot for range state transition
Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/2061a388 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/2061a388 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/2061a388 Branch: refs/heads/ecarm002/interval_join_merge Commit: 2061a388632246cb0bc1d9ac056440d14a15db03 Parents: 5d02948 Author: Preston Carman <prest...@apache.org> Authored: Wed Aug 10 17:56:43 2016 -0700 Committer: Preston Carman <prest...@apache.org> Committed: Wed Aug 10 17:56:43 2016 -0700 ---------------------------------------------------------------------- .../physical/AbstractIntervalJoinPOperator.java | 29 +++--- .../physical/IntervalIndexJoinPOperator.java | 14 ++- .../physical/IntervalJoinPOperator.java | 63 ----------- .../IntervalLocalRangeOperatorDescriptor.java | 23 ++-- .../IntervalLocalRangeSplitterPOperator.java | 10 +- .../IntervalPartitionJoinPOperator.java | 17 +-- .../rules/IntervalSplitPartitioningRule.java | 28 ++--- .../SweepIllegalNonfunctionalFunctions.java | 6 ++ .../subplan/InlineAllNtsInSubplanVisitor.java | 6 ++ ...neLeftNtsInSubplanJoinFlatteningVisitor.java | 6 ++ .../SubplanSpecialFlatteningCheckVisitor.java | 6 ++ .../asterix/optimizer/rules/util/JoinUtils.java | 37 ++++--- .../IntervalJoinExpressionAnnotation.java | 22 ++-- .../asterix/lang/aql/util/RangeMapBuilder.java | 2 +- .../lang/common/clause/OrderbyClause.java | 2 +- .../AqlBinaryComparatorFactoryProvider.java | 2 +- ...tervalRangePartitionComputerFactoryTest.java | 8 +- .../functions/temporal/IntervalLogic.java | 12 ++- ...tIntervalInverseMergeJoinCheckerFactory.java | 2 +- ...AbstractIntervalMergeJoinCheckerFactory.java | 2 +- .../AfterIntervalMergeJoinCheckerFactory.java | 5 +- .../BeforeIntervalMergeJoinCheckerFactory.java | 5 +- ...overedByIntervalMergeJoinCheckerFactory.java | 4 +- .../CoversIntervalMergeJoinCheckerFactory.java | 4 +- .../EndedByIntervalMergeJoinCheckerFactory.java | 5 +- .../EndsIntervalMergeJoinCheckerFactory.java | 5 +- .../joins/IIntervalMergeJoinCheckerFactory.java | 3 +- .../MeetsIntervalMergeJoinCheckerFactory.java | 5 +- .../MetByIntervalMergeJoinCheckerFactory.java | 5 +- ...lappedByIntervalMergeJoinCheckerFactory.java | 4 +- ...rlappingIntervalMergeJoinCheckerFactory.java | 11 +- ...OverlapsIntervalMergeJoinCheckerFactory.java | 4 +- ...tartedByIntervalMergeJoinCheckerFactory.java | 5 +- .../StartsIntervalMergeJoinCheckerFactory.java | 5 +- .../intervalindex/IntervalIndexJoiner.java | 2 +- ...IntervalPartitionJoinOperatorDescriptor.java | 17 +-- .../IntervalPartitionUtil.java | 2 +- .../core/algebra/base/IOptimizationContext.java | 2 +- .../core/algebra/base/IRangeContext.java | 27 +++++ .../operators/logical/RangeForwardOperator.java | 11 +- ...OperatorDeepCopyWithNewVariablesVisitor.java | 2 +- .../visitors/OperatorDeepCopyVisitor.java | 2 +- .../HashPartitionExchangePOperator.java | 2 +- .../operators/physical/MergeJoinPOperator.java | 31 ++++-- .../physical/RangeForwardPOperator.java | 25 ++++- .../RangePartitionExchangePOperator.java | 22 ++-- .../RangePartitionMergeExchangePOperator.java | 22 ++-- .../properties/OrderedPartitionedProperty.java | 26 +++-- .../core/algebra/properties/PropertiesUtil.java | 4 +- .../base/AlgebricksOptimizationContext.java | 40 ++++--- .../data/IBinaryComparatorFactoryProvider.java | 2 +- .../rules/EnforceStructuralPropertiesRule.java | 81 ++++++++++----- .../rewriter/rules/InlineVariablesRule.java | 104 ++++++++++--------- ...placeNtsWithSubplanInputOperatorVisitor.java | 6 ++ .../hyracks/api/dataflow/value/IRangeMap.java | 50 +++++++++ .../api/dataflow/value/IRangePartitionType.java | 41 ++++++++ .../ITupleRangePartitionComputerFactory.java | 2 +- .../FieldRangePartitionComputerFactory.java | 18 ++-- .../common/data/partition/range/IRangeMap.java | 50 --------- .../partition/range/IRangePartitionType.java | 41 -------- .../common/data/partition/range/RangeMap.java | 2 + .../hyracks/dataflow/std/base/RangeId.java | 56 ++++++++++ ...angePartitionMergingConnectorDescriptor.java | 12 ++- ...ToNRangePartitioningConnectorDescriptor.java | 11 +- .../connectors/PartitionRangeDataWriter.java | 21 +++- .../std/join/IMergeJoinCheckerFactory.java | 5 +- .../std/join/MergeJoinOperatorDescriptor.java | 2 +- .../join/NaturalMergeJoinCheckerFactory.java | 5 +- .../misc/RangeForwardOperatorDescriptor.java | 24 ++--- .../sort/AbstractSorterOperatorDescriptor.java | 3 - .../FieldRangePartitionComputerFactoryTest.java | 8 +- 71 files changed, 664 insertions(+), 484 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/AbstractIntervalJoinPOperator.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/AbstractIntervalJoinPOperator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/AbstractIntervalJoinPOperator.java index ca50f1b..c400cdf 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/AbstractIntervalJoinPOperator.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/AbstractIntervalJoinPOperator.java @@ -45,26 +45,31 @@ import org.apache.hyracks.algebricks.core.algebra.properties.StructuralPropertie import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenContext; import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenHelper; import org.apache.hyracks.api.dataflow.IOperatorDescriptor; +import org.apache.hyracks.api.dataflow.value.IRangeMap; import org.apache.hyracks.api.dataflow.value.RecordDescriptor; +import org.apache.hyracks.api.dataflow.value.IRangePartitionType.RangePartitioningType; import org.apache.hyracks.api.job.IOperatorDescriptorRegistry; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangeMap; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangePartitionType.RangePartitioningType; +import org.apache.hyracks.dataflow.std.base.RangeId; public abstract class AbstractIntervalJoinPOperator extends AbstractJoinPOperator { private final List<LogicalVariable> keysLeftBranch; private final List<LogicalVariable> keysRightBranch; private final IIntervalMergeJoinCheckerFactory mjcf; - private final IRangeMap rangeMap; + private final RangeId leftRangeId; + private final RangeId rightRangeId; + private final IRangeMap rangeMapHint; public AbstractIntervalJoinPOperator(JoinKind kind, JoinPartitioningType partitioningType, List<LogicalVariable> sideLeftOfEqualities, List<LogicalVariable> sideRightOfEqualities, - IIntervalMergeJoinCheckerFactory mjcf, IRangeMap rangeMap) { + IIntervalMergeJoinCheckerFactory mjcf, RangeId leftRangeId, RangeId rightRangeId, IRangeMap rangeMapHint) { super(kind, partitioningType); this.keysLeftBranch = sideLeftOfEqualities; this.keysRightBranch = sideRightOfEqualities; this.mjcf = mjcf; - this.rangeMap = rangeMap; + this.leftRangeId = leftRangeId; + this.rightRangeId = rightRangeId; + this.rangeMapHint = rangeMapHint; } public List<LogicalVariable> getKeysLeftBranch() { @@ -79,8 +84,8 @@ public abstract class AbstractIntervalJoinPOperator extends AbstractJoinPOperato return mjcf; } - public IRangeMap getRangeMap() { - return rangeMap; + public RangeId getRangeId() { + return leftRangeId; } @Override @@ -106,7 +111,7 @@ public abstract class AbstractIntervalJoinPOperator extends AbstractJoinPOperato for (LogicalVariable v : keysLeftBranch) { order.add(new OrderColumn(v, mjcf.isOrderAsc() ? OrderKind.ASC : OrderKind.DESC)); } - IPartitioningProperty pp = new OrderedPartitionedProperty(order, null, rangeMap, RangePartitioningType.PROJECT); + IPartitioningProperty pp = new OrderedPartitionedProperty(order, null, leftRangeId, RangePartitioningType.PROJECT, rangeMapHint); List<ILocalStructuralProperty> propsLocal = new ArrayList<>(); propsLocal.add(new LocalOrderProperty(order)); deliveredProperties = new StructuralPropertiesVector(pp, propsLocal); @@ -136,8 +141,8 @@ public abstract class AbstractIntervalJoinPOperator extends AbstractJoinPOperato ispRight.add(new LocalOrderProperty(orderRight)); if (op.getExecutionMode() == AbstractLogicalOperator.ExecutionMode.PARTITIONED) { - ppLeft = new OrderedPartitionedProperty(orderLeft, null, rangeMap, mjcf.getLeftPartitioningType()); - ppRight = new OrderedPartitionedProperty(orderRight, null, rangeMap, mjcf.getRightPartitioningType()); + ppLeft = new OrderedPartitionedProperty(orderLeft, null, leftRangeId, mjcf.getLeftPartitioningType(), rangeMapHint); + ppRight = new OrderedPartitionedProperty(orderRight, null, rightRangeId, mjcf.getRightPartitioningType(), rangeMapHint); } pv[0] = new StructuralPropertiesVector(ppLeft, ispLeft); @@ -158,7 +163,7 @@ public abstract class AbstractIntervalJoinPOperator extends AbstractJoinPOperato context); IOperatorDescriptor opDesc = getIntervalOperatorDescriptor(keysLeft, keysRight, spec, recordDescriptor, mjcf, - rangeMap); + leftRangeId); contributeOpDesc(builder, (AbstractLogicalOperator) op, opDesc); ILogicalOperator src1 = op.getInputs().get(0).getValue(); @@ -169,6 +174,6 @@ public abstract class AbstractIntervalJoinPOperator extends AbstractJoinPOperato abstract IOperatorDescriptor getIntervalOperatorDescriptor(int[] keysLeft, int[] keysRight, IOperatorDescriptorRegistry spec, RecordDescriptor recordDescriptor, IIntervalMergeJoinCheckerFactory mjcf, - IRangeMap rangeMap); + RangeId rangeId); } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalIndexJoinPOperator.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalIndexJoinPOperator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalIndexJoinPOperator.java index 32a0f56..731b39e 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalIndexJoinPOperator.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalIndexJoinPOperator.java @@ -26,9 +26,10 @@ import org.apache.asterix.runtime.operators.joins.intervalindex.IntervalIndexJoi import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable; import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractBinaryJoinOperator.JoinKind; import org.apache.hyracks.api.dataflow.IOperatorDescriptor; +import org.apache.hyracks.api.dataflow.value.IRangeMap; import org.apache.hyracks.api.dataflow.value.RecordDescriptor; import org.apache.hyracks.api.job.IOperatorDescriptorRegistry; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangeMap; +import org.apache.hyracks.dataflow.std.base.RangeId; public class IntervalIndexJoinPOperator extends AbstractIntervalJoinPOperator { @@ -38,14 +39,17 @@ public class IntervalIndexJoinPOperator extends AbstractIntervalJoinPOperator { public IntervalIndexJoinPOperator(JoinKind kind, JoinPartitioningType partitioningType, List<LogicalVariable> sideLeftOfEqualities, List<LogicalVariable> sideRightOfEqualities, - int memSizeInFrames, IIntervalMergeJoinCheckerFactory mjcf, IRangeMap rangeMap) { - super(kind, partitioningType, sideLeftOfEqualities, sideRightOfEqualities, mjcf, rangeMap); + int memSizeInFrames, IIntervalMergeJoinCheckerFactory mjcf, RangeId leftRangeId, RangeId rightRangeId, + IRangeMap rangeMapHint) { + super(kind, partitioningType, sideLeftOfEqualities, sideRightOfEqualities, mjcf, leftRangeId, rightRangeId, + rangeMapHint); this.memSizeInFrames = memSizeInFrames; LOGGER.fine("IntervalIndexJoinPOperator constructed with: JoinKind=" + kind + ", JoinPartitioningType=" + partitioningType + ", List<LogicalVariable>=" + sideLeftOfEqualities + ", List<LogicalVariable>=" + sideRightOfEqualities + ", int memSizeInFrames=" + memSizeInFrames - + ", IMergeJoinCheckerFactory mjcf=" + mjcf + ", IRangeMap rangeMap=" + rangeMap + "."); + + ", IMergeJoinCheckerFactory mjcf=" + mjcf + ", RangeId leftRangeId=" + leftRangeId + + ", RangeId rightRangeId=" + rightRangeId + "."); } @Override @@ -55,7 +59,7 @@ public class IntervalIndexJoinPOperator extends AbstractIntervalJoinPOperator { @Override IOperatorDescriptor getIntervalOperatorDescriptor(int[] keysLeft, int[] keysRight, IOperatorDescriptorRegistry spec, - RecordDescriptor recordDescriptor, IIntervalMergeJoinCheckerFactory mjcf, IRangeMap rangeMap) { + RecordDescriptor recordDescriptor, IIntervalMergeJoinCheckerFactory mjcf, RangeId rangeId) { return new IntervalIndexJoinOperatorDescriptor(spec, memSizeInFrames, keysLeft, keysRight, recordDescriptor, mjcf); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalJoinPOperator.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalJoinPOperator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalJoinPOperator.java deleted file mode 100644 index 528822d..0000000 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalJoinPOperator.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.asterix.algebra.operators.physical; - -import java.util.List; -import java.util.logging.Logger; - -import org.apache.asterix.runtime.operators.joins.IIntervalMergeJoinCheckerFactory; -import org.apache.asterix.runtime.operators.joins.intervalindex.IntervalIndexJoinOperatorDescriptor; -import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable; -import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractBinaryJoinOperator.JoinKind; -import org.apache.hyracks.api.dataflow.IOperatorDescriptor; -import org.apache.hyracks.api.dataflow.value.RecordDescriptor; -import org.apache.hyracks.api.job.IOperatorDescriptorRegistry; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangeMap; - -public class IntervalJoinPOperator extends AbstractIntervalJoinPOperator { - - private final int memSizeInFrames; - - private static final Logger LOGGER = Logger.getLogger(IntervalJoinPOperator.class.getName()); - - public IntervalJoinPOperator(JoinKind kind, JoinPartitioningType partitioningType, - List<LogicalVariable> sideLeftOfEqualities, List<LogicalVariable> sideRightOfEqualities, - int memSizeInFrames, IIntervalMergeJoinCheckerFactory mjcf, IRangeMap rangeMap) { - super(kind, partitioningType, sideLeftOfEqualities, sideRightOfEqualities, mjcf, rangeMap); - this.memSizeInFrames = memSizeInFrames; - - LOGGER.fine("IntervalJoinPOperator constructed with: JoinKind=" + kind + ", JoinPartitioningType=" - + partitioningType + ", List<LogicalVariable>=" + sideLeftOfEqualities + ", List<LogicalVariable>=" - + sideRightOfEqualities + ", int memSizeInFrames=" + memSizeInFrames - + ", IMergeJoinCheckerFactory mjcf=" + mjcf + ", IRangeMap rangeMap=" + rangeMap + "."); - } - - @Override - public String getIntervalJoin() { - return "INTERVAL_JOIN"; - } - - @Override - IOperatorDescriptor getIntervalOperatorDescriptor(int[] keysLeft, int[] keysRight, IOperatorDescriptorRegistry spec, - RecordDescriptor recordDescriptor, IIntervalMergeJoinCheckerFactory mjcf, IRangeMap rangeMap) { - return new IntervalIndexJoinOperatorDescriptor(spec, memSizeInFrames, keysLeft, keysRight, recordDescriptor, - mjcf); - } - -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalLocalRangeOperatorDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalLocalRangeOperatorDescriptor.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalLocalRangeOperatorDescriptor.java index ca44f78..584e30f 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalLocalRangeOperatorDescriptor.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalLocalRangeOperatorDescriptor.java @@ -28,6 +28,7 @@ import org.apache.hyracks.api.dataflow.ActivityId; import org.apache.hyracks.api.dataflow.IActivity; import org.apache.hyracks.api.dataflow.IActivityGraphBuilder; import org.apache.hyracks.api.dataflow.IOperatorNodePushable; +import org.apache.hyracks.api.dataflow.value.IRangeMap; import org.apache.hyracks.api.dataflow.value.IRecordDescriptorProvider; import org.apache.hyracks.api.dataflow.value.RecordDescriptor; import org.apache.hyracks.api.exceptions.HyracksDataException; @@ -36,10 +37,11 @@ import org.apache.hyracks.data.std.primitive.LongPointable; import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAccessor; import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAppender; import org.apache.hyracks.dataflow.common.comm.util.FrameUtils; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangeMap; import org.apache.hyracks.dataflow.std.base.AbstractActivityNode; import org.apache.hyracks.dataflow.std.base.AbstractOperatorDescriptor; import org.apache.hyracks.dataflow.std.base.AbstractUnaryInputOperatorNodePushable; +import org.apache.hyracks.dataflow.std.base.RangeId; +import org.apache.hyracks.dataflow.std.misc.RangeForwardOperatorDescriptor.RangeForwardTaskState; public class IntervalLocalRangeOperatorDescriptor extends AbstractOperatorDescriptor { private static final long serialVersionUID = 1L; @@ -52,16 +54,16 @@ public class IntervalLocalRangeOperatorDescriptor extends AbstractOperatorDescri private static final int INPUT_ENDS = 1; private final int key; - private final IRangeMap rangeMap; + private final RangeId rangeId; public IntervalLocalRangeOperatorDescriptor(IOperatorDescriptorRegistry spec, int[] keys, - RecordDescriptor recordDescriptor, IRangeMap rangeMap) { + RecordDescriptor recordDescriptor, RangeId rangeId) { super(spec, 1, OUTPUT_ARITY); for (int i = 0; i < outputArity; i++) { recordDescriptors[i] = recordDescriptor; } key = keys[0]; - this.rangeMap = rangeMap; + this.rangeId = rangeId; } @Override @@ -92,8 +94,8 @@ public class IntervalLocalRangeOperatorDescriptor extends AbstractOperatorDescri private final FrameTupleAppender[] resultAppender = new FrameTupleAppender[getOutputArity()]; private final RecordDescriptor rd = recordDescProvider.getInputRecordDescriptor(getActivityId(), 0); private final FrameTupleAccessor accessor = new FrameTupleAccessor(rd); - private final long nodeRangeStart = getPartitionBoundryStart(); - private final long nodeRangeEnd = getPartitionBoundryEnd(); + private long nodeRangeStart; + private long nodeRangeEnd; @Override public void close() throws HyracksDataException { @@ -152,6 +154,11 @@ public class IntervalLocalRangeOperatorDescriptor extends AbstractOperatorDescri writers[i].open(); resultAppender[i] = new FrameTupleAppender(new VSizeFrame(ctx), true); } + RangeForwardTaskState rangeState = (RangeForwardTaskState) ctx.getStateObject(rangeId); + IRangeMap rangeMap = rangeState.getRangeMap(); + nodeRangeStart = getPartitionBoundryStart(rangeMap); + nodeRangeEnd = getPartitionBoundryEnd(rangeMap); + } @Override @@ -159,7 +166,7 @@ public class IntervalLocalRangeOperatorDescriptor extends AbstractOperatorDescri writers[index] = writer; } - long getPartitionBoundryStart() { + long getPartitionBoundryStart(IRangeMap rangeMap) { int fieldIndex = 0; int slot = partition - 1; long boundary = Long.MIN_VALUE; @@ -177,7 +184,7 @@ public class IntervalLocalRangeOperatorDescriptor extends AbstractOperatorDescri return boundary; } - long getPartitionBoundryEnd() { + long getPartitionBoundryEnd(IRangeMap rangeMap) { int fieldIndex = 0; int slot = partition; long boundary = Long.MAX_VALUE; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalLocalRangeSplitterPOperator.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalLocalRangeSplitterPOperator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalLocalRangeSplitterPOperator.java index ced06aa..fe5c28b 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalLocalRangeSplitterPOperator.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalLocalRangeSplitterPOperator.java @@ -39,16 +39,16 @@ import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenHelper; import org.apache.hyracks.api.dataflow.IOperatorDescriptor; import org.apache.hyracks.api.dataflow.value.RecordDescriptor; import org.apache.hyracks.api.job.IOperatorDescriptorRegistry; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangeMap; +import org.apache.hyracks.dataflow.std.base.RangeId; public class IntervalLocalRangeSplitterPOperator extends AbstractPhysicalOperator { private List<LogicalVariable> intervalFields; - private IRangeMap rangeMap; + private RangeId rangeId; - public IntervalLocalRangeSplitterPOperator(List<LogicalVariable> intervalFields, IRangeMap rangeMap) { + public IntervalLocalRangeSplitterPOperator(List<LogicalVariable> intervalFields, RangeId rangeId) { this.intervalFields = intervalFields; - this.rangeMap = rangeMap; + this.rangeId = rangeId; } @Override @@ -88,7 +88,7 @@ public class IntervalLocalRangeSplitterPOperator extends AbstractPhysicalOperato int[] keys = JobGenHelper.variablesToFieldIndexes(intervalFields, inputSchemas[0]); - IOperatorDescriptor opDesc = new IntervalLocalRangeOperatorDescriptor(spec, keys, recDescriptor, rangeMap); + IOperatorDescriptor opDesc = new IntervalLocalRangeOperatorDescriptor(spec, keys, recDescriptor, rangeId); contributeOpDesc(builder, (AbstractLogicalOperator) op, opDesc); ILogicalOperator src = op.getInputs().get(0).getValue(); builder.contributeGraphEdge(src, 0, op, 0); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalPartitionJoinPOperator.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalPartitionJoinPOperator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalPartitionJoinPOperator.java index 1eff2aa..ca9dd69 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalPartitionJoinPOperator.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/IntervalPartitionJoinPOperator.java @@ -26,9 +26,10 @@ import org.apache.asterix.runtime.operators.joins.intervalpartition.IntervalPart import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable; import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractBinaryJoinOperator.JoinKind; import org.apache.hyracks.api.dataflow.IOperatorDescriptor; +import org.apache.hyracks.api.dataflow.value.IRangeMap; import org.apache.hyracks.api.dataflow.value.RecordDescriptor; import org.apache.hyracks.api.job.IOperatorDescriptorRegistry; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangeMap; +import org.apache.hyracks.dataflow.std.base.RangeId; public class IntervalPartitionJoinPOperator extends AbstractIntervalJoinPOperator { @@ -44,8 +45,10 @@ public class IntervalPartitionJoinPOperator extends AbstractIntervalJoinPOperato public IntervalPartitionJoinPOperator(JoinKind kind, JoinPartitioningType partitioningType, List<LogicalVariable> sideLeftOfEqualities, List<LogicalVariable> sideRightOfEqualities, int memSizeInFrames, long buildTupleCount, long probeTupleCount, long buildMaxDuration, - long probeMaxDuration, int avgTuplesInFrame, IIntervalMergeJoinCheckerFactory mjcf, IRangeMap rangeMap) { - super(kind, partitioningType, sideLeftOfEqualities, sideRightOfEqualities, mjcf, rangeMap); + long probeMaxDuration, int avgTuplesInFrame, IIntervalMergeJoinCheckerFactory mjcf, RangeId leftRangeId, + RangeId rightRangeId, IRangeMap rangeMapHint) { + super(kind, partitioningType, sideLeftOfEqualities, sideRightOfEqualities, mjcf, leftRangeId, rightRangeId, + rangeMapHint); this.memSizeInFrames = memSizeInFrames; this.buildTupleCount = buildTupleCount; this.probeTupleCount = probeTupleCount; @@ -58,8 +61,8 @@ public class IntervalPartitionJoinPOperator extends AbstractIntervalJoinPOperato + sideRightOfEqualities + ", int memSizeInFrames=" + memSizeInFrames + ", int buildTupleCount=" + buildTupleCount + ", int probeTupleCount=" + probeTupleCount + ", int buildMaxDuration=" + buildMaxDuration + ", int probeMaxDuration=" + probeMaxDuration + ", int avgTuplesInFrame=" - + avgTuplesInFrame + ", IMergeJoinCheckerFactory mjcf=" + mjcf + ", IRangeMap rangeMap=" + rangeMap - + "."); + + avgTuplesInFrame + ", IMergeJoinCheckerFactory mjcf=" + mjcf + ", RangeId leftRangeId=" + leftRangeId + + ", RangeId rightRangeId=" + rightRangeId + "."); } public long getProbeTupleCount() { @@ -89,10 +92,10 @@ public class IntervalPartitionJoinPOperator extends AbstractIntervalJoinPOperato @Override IOperatorDescriptor getIntervalOperatorDescriptor(int[] keysLeft, int[] keysRight, IOperatorDescriptorRegistry spec, - RecordDescriptor recordDescriptor, IIntervalMergeJoinCheckerFactory mjcf, IRangeMap rangeMap) { + RecordDescriptor recordDescriptor, IIntervalMergeJoinCheckerFactory mjcf, RangeId rangeId) { return new IntervalPartitionJoinOperatorDescriptor(spec, memSizeInFrames, buildTupleCount, probeTupleCount, buildMaxDuration, probeMaxDuration, avgTuplesInFrame, keysLeft, keysRight, recordDescriptor, mjcf, - rangeMap); + rangeId); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntervalSplitPartitioningRule.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntervalSplitPartitioningRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntervalSplitPartitioningRule.java index 9df5a50..eafc2bb 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntervalSplitPartitioningRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntervalSplitPartitioningRule.java @@ -63,8 +63,8 @@ import org.apache.hyracks.algebricks.core.algebra.operators.physical.RangePartit import org.apache.hyracks.algebricks.core.algebra.operators.physical.ReplicatePOperator; import org.apache.hyracks.algebricks.core.algebra.operators.physical.UnionAllPOperator; import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangeMap; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangePartitionType.RangePartitioningType; +import org.apache.hyracks.api.dataflow.value.IRangePartitionType.RangePartitioningType; +import org.apache.hyracks.dataflow.std.base.RangeId; /** * Before: @@ -153,9 +153,9 @@ public class IntervalSplitPartitioningRule implements IAlgebraicRewriteRule { Mutable<ILogicalOperator> leftRangeInput = leftSorter.getValue().getInputs().get(0); Mutable<ILogicalOperator> rightRangeInput = rightSorter.getValue().getInputs().get(0); - IRangeMap leftRangeMap = getRangeMapForBranch(leftRangeInput.getValue()); - IRangeMap rightRangeMap = getRangeMapForBranch(rightRangeInput.getValue()); - if (leftRangeMap == null || rightRangeMap == null) { + RangeId leftRangeId = getRangeMapForBranch(leftRangeInput.getValue()); + RangeId rightRangeId = getRangeMapForBranch(rightRangeInput.getValue()); + if (leftRangeId == null || rightRangeId == null) { return false; } // TODO check physical join @@ -166,9 +166,9 @@ public class IntervalSplitPartitioningRule implements IAlgebraicRewriteRule { if (leftJoinKey == null || rightJoinKey == null) { return false; } - ReplicateOperator leftIntervalSplit = getIntervalSplitOperator(leftSortKey, leftRangeMap, mode); + ReplicateOperator leftIntervalSplit = getIntervalSplitOperator(leftSortKey, leftRangeId, mode); Mutable<ILogicalOperator> leftIntervalSplitRef = new MutableObject<>(leftIntervalSplit); - ReplicateOperator rightIntervalSplit = getIntervalSplitOperator(rightSortKey, rightRangeMap, mode); + ReplicateOperator rightIntervalSplit = getIntervalSplitOperator(rightSortKey, rightRangeId, mode); Mutable<ILogicalOperator> rightIntervalSplitRef = new MutableObject<>(rightIntervalSplit); // Replicate operators @@ -358,7 +358,7 @@ public class IntervalSplitPartitioningRule implements IAlgebraicRewriteRule { return eo; } - private ReplicateOperator getIntervalSplitOperator(LogicalVariable key, IRangeMap rangeMap, ExecutionMode mode) { + private ReplicateOperator getIntervalSplitOperator(LogicalVariable key, RangeId rangeId, ExecutionMode mode) { List<LogicalVariable> joinKeyLogicalVars = new ArrayList<>(); joinKeyLogicalVars.add(key); //create the logical and physical operator @@ -368,7 +368,7 @@ public class IntervalSplitPartitioningRule implements IAlgebraicRewriteRule { } ReplicateOperator splitOperator = new ReplicateOperator(flags.length, flags); IntervalLocalRangeSplitterPOperator splitPOperator = new IntervalLocalRangeSplitterPOperator(joinKeyLogicalVars, - rangeMap); + rangeId); splitOperator.setPhysicalOperator(splitPOperator); splitOperator.setExecutionMode(mode); return splitOperator; @@ -418,14 +418,14 @@ public class IntervalSplitPartitioningRule implements IAlgebraicRewriteRule { MergeJoinPOperator mjpo = (MergeJoinPOperator) joinPo; MergeJoinPOperator mjpoClone = new MergeJoinPOperator(mjpo.getKind(), mjpo.getPartitioningType(), mjpo.getKeysLeftBranch(), mjpo.getKeysRightBranch(), memoryJoinSize, - mjpo.getMergeJoinCheckerFactory(), mjpo.getRangeMap()); + mjpo.getMergeJoinCheckerFactory(), mjpo.getRangeId(), null); ijoClone.setPhysicalOperator(mjpoClone); } else if (joinPo.getOperatorTag() == PhysicalOperatorTag.EXTENSION_OPERATOR) { if (joinPo instanceof IntervalIndexJoinPOperator) { IntervalIndexJoinPOperator iijpo = (IntervalIndexJoinPOperator) joinPo; IntervalIndexJoinPOperator iijpoClone = new IntervalIndexJoinPOperator(iijpo.getKind(), iijpo.getPartitioningType(), iijpo.getKeysLeftBranch(), iijpo.getKeysRightBranch(), - memoryJoinSize, iijpo.getIntervalMergeJoinCheckerFactory(), iijpo.getRangeMap()); + memoryJoinSize, iijpo.getIntervalMergeJoinCheckerFactory(), iijpo.getRangeId(), null); ijoClone.setPhysicalOperator(iijpoClone); } else if (joinPo instanceof IntervalPartitionJoinPOperator) { IntervalPartitionJoinPOperator ipjpo = (IntervalPartitionJoinPOperator) joinPo; @@ -433,7 +433,7 @@ public class IntervalSplitPartitioningRule implements IAlgebraicRewriteRule { ipjpo.getPartitioningType(), ipjpo.getKeysLeftBranch(), ipjpo.getKeysRightBranch(), memoryJoinSize, ipjpo.getBuildTupleCount(), ipjpo.getProbeTupleCount(), ipjpo.getBuildMaxDuration(), ipjpo.getProbeMaxDuration(), ipjpo.getAvgTuplesInFrame(), - ipjpo.getIntervalMergeJoinCheckerFactory(), ipjpo.getRangeMap()); + ipjpo.getIntervalMergeJoinCheckerFactory(), ipjpo.getRangeId(), null); ijoClone.setPhysicalOperator(iijpoClone); } else { return null; @@ -471,7 +471,7 @@ public class IntervalSplitPartitioningRule implements IAlgebraicRewriteRule { return false; } - private IRangeMap getRangeMapForBranch(ILogicalOperator op) { + private RangeId getRangeMapForBranch(ILogicalOperator op) { if (op.getOperatorTag() != LogicalOperatorTag.EXCHANGE) { return null; } @@ -484,7 +484,7 @@ public class IntervalSplitPartitioningRule implements IAlgebraicRewriteRule { if (exchangeLeftPO.getRangeType() != RangePartitioningType.SPLIT) { return null; } - return exchangeLeftPO.getRangeMap(); + return exchangeLeftPO.getRangeId(); } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java index e04be6f..c7d21f8 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java @@ -52,6 +52,7 @@ import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperato import org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterUnnestOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.PartitioningSplitOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator; +import org.apache.hyracks.algebricks.core.algebra.operators.logical.RangeForwardOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ReplicateOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.RunningAggregateOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ScriptOperator; @@ -215,6 +216,11 @@ public class SweepIllegalNonfunctionalFunctions extends AbstractExtractExprRule } @Override + public Void visitRangeForwardOperator(RangeForwardOperator op, Void arg) throws AlgebricksException { + return null; + } + + @Override public Void visitScriptOperator(ScriptOperator op, Void arg) throws AlgebricksException { return null; } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java index b061066..8f54972 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java @@ -69,6 +69,7 @@ import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperato import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator.IOrder; import org.apache.hyracks.algebricks.core.algebra.operators.logical.PartitioningSplitOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator; +import org.apache.hyracks.algebricks.core.algebra.operators.logical.RangeForwardOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ReplicateOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.RunningAggregateOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ScriptOperator; @@ -522,6 +523,11 @@ class InlineAllNtsInSubplanVisitor implements IQueryOperatorVisitor<ILogicalOper } @Override + public ILogicalOperator visitRangeForwardOperator(RangeForwardOperator op, Void arg) throws AlgebricksException { + return visitSingleInputOperator(op); + } + + @Override public ILogicalOperator visitScriptOperator(ScriptOperator op, Void arg) throws AlgebricksException { throw new UnsupportedOperationException("Script operators in a subplan are not supported!"); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineLeftNtsInSubplanJoinFlatteningVisitor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineLeftNtsInSubplanJoinFlatteningVisitor.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineLeftNtsInSubplanJoinFlatteningVisitor.java index c7b927e..d5f8fe9 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineLeftNtsInSubplanJoinFlatteningVisitor.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineLeftNtsInSubplanJoinFlatteningVisitor.java @@ -55,6 +55,7 @@ import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperato import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator.IOrder; import org.apache.hyracks.algebricks.core.algebra.operators.logical.PartitioningSplitOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator; +import org.apache.hyracks.algebricks.core.algebra.operators.logical.RangeForwardOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ReplicateOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.RunningAggregateOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ScriptOperator; @@ -292,6 +293,11 @@ class InlineLeftNtsInSubplanJoinFlatteningVisitor implements IQueryOperatorVisit } @Override + public ILogicalOperator visitRangeForwardOperator(RangeForwardOperator op, Void arg) throws AlgebricksException { + return visitSingleInputOperator(op); + } + + @Override public ILogicalOperator visitScriptOperator(ScriptOperator op, Void arg) throws AlgebricksException { throw new UnsupportedOperationException("Script operators in a subplan are not supported!"); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/SubplanSpecialFlatteningCheckVisitor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/SubplanSpecialFlatteningCheckVisitor.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/SubplanSpecialFlatteningCheckVisitor.java index ef0f9da..e5c67cc 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/SubplanSpecialFlatteningCheckVisitor.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/SubplanSpecialFlatteningCheckVisitor.java @@ -40,6 +40,7 @@ import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperato import org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterUnnestOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.PartitioningSplitOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator; +import org.apache.hyracks.algebricks.core.algebra.operators.logical.RangeForwardOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ReplicateOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.RunningAggregateOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ScriptOperator; @@ -168,6 +169,11 @@ class SubplanSpecialFlatteningCheckVisitor implements IQueryOperatorVisitor<Bool } @Override + public Boolean visitRangeForwardOperator(RangeForwardOperator op, Void arg) throws AlgebricksException { + return visitInputs(op); + } + + @Override public Boolean visitScriptOperator(ScriptOperator op, Void arg) throws AlgebricksException { return false; } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/JoinUtils.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/JoinUtils.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/JoinUtils.java index b991531..2707403 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/JoinUtils.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/JoinUtils.java @@ -55,8 +55,9 @@ import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceE import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractBinaryJoinOperator; import org.apache.hyracks.algebricks.core.algebra.operators.physical.AbstractJoinPOperator.JoinPartitioningType; +import org.apache.hyracks.api.dataflow.value.IRangeMap; import org.apache.hyracks.algebricks.core.algebra.operators.physical.MergeJoinPOperator; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangeMap; +import org.apache.hyracks.dataflow.std.base.RangeId; import org.apache.hyracks.dataflow.std.join.IMergeJoinCheckerFactory; public class JoinUtils { @@ -111,18 +112,18 @@ public class JoinUtils { if (ijea.isMergeJoin()) { // Sort Merge. LOGGER.fine("Interval Join - Merge"); - setSortMergeIntervalJoinOp(op, fi, sideLeft, sideRight, ijea.getRangeMap(), context); + setSortMergeIntervalJoinOp(op, fi, sideLeft, sideRight, ijea, context); } else if (ijea.isPartitionJoin()) { // Overlapping Interval Partition. LOGGER.fine("Interval Join - Cluster Parititioning"); - setIntervalPartitionJoinOp(op, fi, sideLeft, sideRight, ijea.getRangeMap(), ijea, context); + setIntervalPartitionJoinOp(op, fi, sideLeft, sideRight, ijea, context); } else if (ijea.isSpatialJoin()) { // Spatial Partition. LOGGER.fine("Interval Join - Spatial Partitioning"); } else if (ijea.isIndexJoin()) { // Endpoint Index. LOGGER.fine("Interval Join - Endpoint Index"); - setIntervalIndexJoinOp(op, fi, sideLeft, sideRight, ijea.getRangeMap(), context); + setIntervalIndexJoinOp(op, fi, sideLeft, sideRight, ijea, context); } } } @@ -139,16 +140,17 @@ public class JoinUtils { } private static void setSortMergeIntervalJoinOp(AbstractBinaryJoinOperator op, FunctionIdentifier fi, - List<LogicalVariable> sideLeft, List<LogicalVariable> sideRight, IRangeMap rangeMap, + List<LogicalVariable> sideLeft, List<LogicalVariable> sideRight, IntervalJoinExpressionAnnotation ijea, IOptimizationContext context) { - IMergeJoinCheckerFactory mjcf = getIntervalMergeJoinCheckerFactory(fi, rangeMap); + IMergeJoinCheckerFactory mjcf = getIntervalMergeJoinCheckerFactory(fi); op.setPhysicalOperator(new MergeJoinPOperator(op.getJoinKind(), JoinPartitioningType.BROADCAST, sideLeft, - sideRight, context.getPhysicalOptimizationConfig().getMaxFramesForJoin(), mjcf, rangeMap)); + sideRight, context.getPhysicalOptimizationConfig().getMaxFramesForJoin(), mjcf, context.newRangeId(), + context.newRangeId(), ijea.getRangeMap())); } private static void setIntervalPartitionJoinOp(AbstractBinaryJoinOperator op, FunctionIdentifier fi, - List<LogicalVariable> sideLeft, List<LogicalVariable> sideRight, IRangeMap rangeMap, - IntervalJoinExpressionAnnotation ijea, IOptimizationContext context) { + List<LogicalVariable> sideLeft, List<LogicalVariable> sideRight, IntervalJoinExpressionAnnotation ijea, + IOptimizationContext context) { long leftCount = ijea.getLeftRecordCount() > 0 ? ijea.getLeftRecordCount() : getCardinality(sideLeft, context); long rightCount = ijea.getRightRecordCount() > 0 ? ijea.getRightRecordCount() : getCardinality(sideRight, context); @@ -159,18 +161,20 @@ public class JoinUtils { int tuplesPerFrame = ijea.getTuplesPerFrame() > 0 ? ijea.getTuplesPerFrame() : context.getPhysicalOptimizationConfig().getMaxRecordsPerFrame(); - IIntervalMergeJoinCheckerFactory mjcf = getIntervalMergeJoinCheckerFactory(fi, rangeMap); + IIntervalMergeJoinCheckerFactory mjcf = getIntervalMergeJoinCheckerFactory(fi); op.setPhysicalOperator(new IntervalPartitionJoinPOperator(op.getJoinKind(), JoinPartitioningType.BROADCAST, sideLeft, sideRight, context.getPhysicalOptimizationConfig().getMaxFramesForJoin(), leftCount, - rightCount, leftMaxDuration, rightMaxDuration, tuplesPerFrame, mjcf, rangeMap)); + rightCount, leftMaxDuration, rightMaxDuration, tuplesPerFrame, mjcf, context.newRangeId(), + context.newRangeId(), ijea.getRangeMap())); } private static void setIntervalIndexJoinOp(AbstractBinaryJoinOperator op, FunctionIdentifier fi, - List<LogicalVariable> sideLeft, List<LogicalVariable> sideRight, IRangeMap rangeMap, + List<LogicalVariable> sideLeft, List<LogicalVariable> sideRight, IntervalJoinExpressionAnnotation ijea, IOptimizationContext context) { - IIntervalMergeJoinCheckerFactory mjcf = getIntervalMergeJoinCheckerFactory(fi, rangeMap); + IIntervalMergeJoinCheckerFactory mjcf = getIntervalMergeJoinCheckerFactory(fi); op.setPhysicalOperator(new IntervalIndexJoinPOperator(op.getJoinKind(), JoinPartitioningType.BROADCAST, - sideLeft, sideRight, context.getPhysicalOptimizationConfig().getMaxFramesForJoin(), mjcf, rangeMap)); + sideLeft, sideRight, context.getPhysicalOptimizationConfig().getMaxFramesForJoin(), mjcf, + context.newRangeId(), context.newRangeId(), ijea.getRangeMap())); } private static int getMaxDuration(List<LogicalVariable> lv, IOptimizationContext context) { @@ -226,9 +230,8 @@ public class JoinUtils { } } - private static IIntervalMergeJoinCheckerFactory getIntervalMergeJoinCheckerFactory(FunctionIdentifier fi, - IRangeMap rangeMap) { - IIntervalMergeJoinCheckerFactory mjcf = new OverlappingIntervalMergeJoinCheckerFactory(rangeMap); + private static IIntervalMergeJoinCheckerFactory getIntervalMergeJoinCheckerFactory(FunctionIdentifier fi) { + IIntervalMergeJoinCheckerFactory mjcf = new OverlappingIntervalMergeJoinCheckerFactory(); if (fi.equals(AsterixBuiltinFunctions.INTERVAL_OVERLAPPED_BY)) { mjcf = new OverlappedByIntervalMergeJoinCheckerFactory(); } else if (fi.equals(AsterixBuiltinFunctions.INTERVAL_OVERLAPS)) { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/annotations/IntervalJoinExpressionAnnotation.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/annotations/IntervalJoinExpressionAnnotation.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/annotations/IntervalJoinExpressionAnnotation.java index 93f5990..e638de9 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/annotations/IntervalJoinExpressionAnnotation.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/annotations/IntervalJoinExpressionAnnotation.java @@ -20,7 +20,7 @@ package org.apache.asterix.common.annotations; import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractExpressionAnnotation; import org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionAnnotation; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangeMap; +import org.apache.hyracks.api.dataflow.value.IRangeMap; public class IntervalJoinExpressionAnnotation extends AbstractExpressionAnnotation { @@ -39,7 +39,6 @@ public class IntervalJoinExpressionAnnotation extends AbstractExpressionAnnotati private long rightRecordCount = -1; private int tuplesPerFrame = -1; - @Override public IExpressionAnnotation copy() { IntervalJoinExpressionAnnotation clone = new IntervalJoinExpressionAnnotation(); @@ -57,15 +56,16 @@ public class IntervalJoinExpressionAnnotation extends AbstractExpressionAnnotati String hint = (String) object; setJoinType(hint); - hint = hint.substring(hint.indexOf(']', 0) + 2); - String[] args = hint.split(" "); - - if (joinType.equals(PARTITION_HINT_STRING) && args.length == 5) { - leftRecordCount = Long.valueOf(args[0]); - rightRecordCount = Long.valueOf(args[1]); - leftMaxDuration = Long.valueOf(args[2]); - rightMaxDuration = Long.valueOf(args[3]); - tuplesPerFrame = Integer.valueOf(args[4]); + if (joinType.equals(PARTITION_HINT_STRING)) { + hint = hint.substring(hint.indexOf(']', 0) + 1).trim(); + String[] args = hint.split(" "); + if (args.length == 5) { + leftRecordCount = Long.valueOf(args[0]); + rightRecordCount = Long.valueOf(args[1]); + leftMaxDuration = Long.valueOf(args[2]); + rightMaxDuration = Long.valueOf(args[3]); + tuplesPerFrame = Integer.valueOf(args[4]); + } } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/util/RangeMapBuilder.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/util/RangeMapBuilder.java b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/util/RangeMapBuilder.java index 689546a..07fab74 100644 --- a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/util/RangeMapBuilder.java +++ b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/util/RangeMapBuilder.java @@ -49,10 +49,10 @@ import org.apache.asterix.om.types.BuiltinType; import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException; import org.apache.hyracks.api.dataflow.value.IBinaryComparator; import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory; +import org.apache.hyracks.api.dataflow.value.IRangeMap; import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer; import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangeMap; import org.apache.hyracks.dataflow.common.data.partition.range.RangeMap; public abstract class RangeMapBuilder { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/OrderbyClause.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/OrderbyClause.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/OrderbyClause.java index 8574c76..4c66441 100644 --- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/OrderbyClause.java +++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/OrderbyClause.java @@ -25,7 +25,7 @@ import org.apache.asterix.lang.common.base.Clause; import org.apache.asterix.lang.common.base.Expression; import org.apache.asterix.lang.common.visitor.base.ILangVisitor; import org.apache.commons.lang3.ObjectUtils; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangeMap; +import org.apache.hyracks.api.dataflow.value.IRangeMap; public class OrderbyClause implements Clause { private List<Expression> orderbyList; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlBinaryComparatorFactoryProvider.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlBinaryComparatorFactoryProvider.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlBinaryComparatorFactoryProvider.java index 65990ae..7a8aac7 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlBinaryComparatorFactoryProvider.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlBinaryComparatorFactoryProvider.java @@ -45,6 +45,7 @@ import org.apache.hyracks.algebricks.data.IBinaryComparatorFactoryProvider; import org.apache.hyracks.api.dataflow.value.IBinaryComparator; import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory; import org.apache.hyracks.api.dataflow.value.IBinaryRangeComparatorFactory; +import org.apache.hyracks.api.dataflow.value.IRangePartitionType.RangePartitioningType; import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory; import org.apache.hyracks.data.std.primitive.ByteArrayPointable; @@ -56,7 +57,6 @@ import org.apache.hyracks.data.std.primitive.LongPointable; import org.apache.hyracks.data.std.primitive.RawUTF8StringPointable; import org.apache.hyracks.data.std.primitive.ShortPointable; import org.apache.hyracks.data.std.primitive.UTF8StringLowercasePointable; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangePartitionType.RangePartitioningType; public class AqlBinaryComparatorFactoryProvider implements IBinaryComparatorFactoryProvider, Serializable { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-om/src/test/java/org/apache/asterix/dataflow/data/nontagged/comparators/rangeinterval/IntervalRangePartitionComputerFactoryTest.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/test/java/org/apache/asterix/dataflow/data/nontagged/comparators/rangeinterval/IntervalRangePartitionComputerFactoryTest.java b/asterixdb/asterix-om/src/test/java/org/apache/asterix/dataflow/data/nontagged/comparators/rangeinterval/IntervalRangePartitionComputerFactoryTest.java index 6476015..2179634 100644 --- a/asterixdb/asterix-om/src/test/java/org/apache/asterix/dataflow/data/nontagged/comparators/rangeinterval/IntervalRangePartitionComputerFactoryTest.java +++ b/asterixdb/asterix-om/src/test/java/org/apache/asterix/dataflow/data/nontagged/comparators/rangeinterval/IntervalRangePartitionComputerFactoryTest.java @@ -33,18 +33,18 @@ import org.apache.hyracks.api.comm.IFrameTupleAccessor; import org.apache.hyracks.api.comm.VSizeFrame; import org.apache.hyracks.api.context.IHyracksTaskContext; import org.apache.hyracks.api.dataflow.value.IBinaryRangeComparatorFactory; +import org.apache.hyracks.api.dataflow.value.IRangeMap; import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer; import org.apache.hyracks.api.dataflow.value.ITupleRangePartitionComputer; import org.apache.hyracks.api.dataflow.value.ITupleRangePartitionComputerFactory; import org.apache.hyracks.api.dataflow.value.RecordDescriptor; +import org.apache.hyracks.api.dataflow.value.IRangePartitionType.RangePartitioningType; import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.api.storage.IGrowableIntArray; import org.apache.hyracks.dataflow.common.comm.io.FrameFixedFieldTupleAppender; import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAccessor; import org.apache.hyracks.dataflow.common.data.marshalling.Integer64SerializerDeserializer; import org.apache.hyracks.dataflow.common.data.partition.range.FieldRangePartitionComputerFactory; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangeMap; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangePartitionType.RangePartitioningType; import org.apache.hyracks.dataflow.common.data.partition.range.RangeMap; import org.apache.hyracks.storage.common.arraylist.IntArrayList; import org.apache.hyracks.test.support.TestUtils; @@ -145,8 +145,8 @@ public class IntervalRangePartitionComputerFactoryTest extends TestCase { IHyracksTaskContext ctx = TestUtils.create(FRAME_SIZE); int[] rangeFields = new int[] { 0 }; ITupleRangePartitionComputerFactory frpcf = new FieldRangePartitionComputerFactory(rangeFields, - comparatorFactories, rangeMap, rangeType); - ITupleRangePartitionComputer partitioner = frpcf.createPartitioner(); + comparatorFactories, rangeType); + ITupleRangePartitionComputer partitioner = frpcf.createPartitioner(rangeMap); IFrameTupleAccessor accessor = new FrameTupleAccessor(RecordDesc); ByteBuffer buffer = prepareData(ctx, intervals); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java index 23f0da3..43d4521 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java @@ -20,8 +20,12 @@ package org.apache.asterix.runtime.evaluators.functions.temporal; import java.io.Serializable; +import org.apache.asterix.dataflow.data.nontagged.printers.adm.AIntervalPrinterFactory; +import org.apache.asterix.dataflow.data.nontagged.printers.adm.AObjectPrinterFactory; import org.apache.asterix.om.pointables.nonvisitor.AIntervalPointable; import org.apache.asterix.runtime.evaluators.comparisons.ComparisonHelper; +import org.apache.asterix.runtime.operators.joins.intervalindex.TuplePrinterUtil; +import org.apache.hyracks.algebricks.data.IPrinter; import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.data.std.api.IPointable; import org.apache.hyracks.data.std.primitive.VoidPointable; @@ -115,10 +119,10 @@ public class IntervalLogic implements Serializable { ip1.getEnd(e1); ip2.getStart(s2); ip2.getEnd(e2); - return (ch.compare(ip1.getTypeTag(), ip2.getTypeTag(), s1, s2) <= 0 - && ch.compare(ip1.getTypeTag(), ip2.getTypeTag(), e1, s2) > 0) - || (ch.compare(ip1.getTypeTag(), ip2.getTypeTag(), e1, e2) >= 0 - && ch.compare(ip1.getTypeTag(), ip2.getTypeTag(), s1, e2) < 0); + return ch.compare(ip1.getTypeTag(), ip2.getTypeTag(), s1, e2) <= 0 + && ch.compare(ip1.getTypeTag(), ip2.getTypeTag(), e1, s2) >= 0 + && ch.compare(ip1.getTypeTag(), ip2.getTypeTag(), e1, s2) != 0 + && ch.compare(ip1.getTypeTag(), ip2.getTypeTag(), s1, e2) != 0; } /** http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/AbstractIntervalInverseMergeJoinCheckerFactory.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/AbstractIntervalInverseMergeJoinCheckerFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/AbstractIntervalInverseMergeJoinCheckerFactory.java index d1e6f0c..f8f94a1 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/AbstractIntervalInverseMergeJoinCheckerFactory.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/AbstractIntervalInverseMergeJoinCheckerFactory.java @@ -18,7 +18,7 @@ */ package org.apache.asterix.runtime.operators.joins; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangePartitionType.RangePartitioningType; +import org.apache.hyracks.api.dataflow.value.IRangePartitionType.RangePartitioningType; public abstract class AbstractIntervalInverseMergeJoinCheckerFactory extends AbstractIntervalMergeJoinCheckerFactory { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/AbstractIntervalMergeJoinCheckerFactory.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/AbstractIntervalMergeJoinCheckerFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/AbstractIntervalMergeJoinCheckerFactory.java index c0a0f10..95fc499 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/AbstractIntervalMergeJoinCheckerFactory.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/AbstractIntervalMergeJoinCheckerFactory.java @@ -18,7 +18,7 @@ */ package org.apache.asterix.runtime.operators.joins; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangePartitionType.RangePartitioningType; +import org.apache.hyracks.api.dataflow.value.IRangePartitionType.RangePartitioningType; public abstract class AbstractIntervalMergeJoinCheckerFactory implements IIntervalMergeJoinCheckerFactory { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/AfterIntervalMergeJoinCheckerFactory.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/AfterIntervalMergeJoinCheckerFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/AfterIntervalMergeJoinCheckerFactory.java index 33386ce..572241c 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/AfterIntervalMergeJoinCheckerFactory.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/AfterIntervalMergeJoinCheckerFactory.java @@ -18,13 +18,14 @@ */ package org.apache.asterix.runtime.operators.joins; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangePartitionType.RangePartitioningType; +import org.apache.hyracks.api.dataflow.value.IRangeMap; +import org.apache.hyracks.api.dataflow.value.IRangePartitionType.RangePartitioningType; public class AfterIntervalMergeJoinCheckerFactory extends AbstractIntervalMergeJoinCheckerFactory { private static final long serialVersionUID = 1L; @Override - public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition) { + public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition, IRangeMap rangeMap) { return new AfterIntervalMergeJoinChecker(keys0, keys1); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/BeforeIntervalMergeJoinCheckerFactory.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/BeforeIntervalMergeJoinCheckerFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/BeforeIntervalMergeJoinCheckerFactory.java index 36d9885..ff5acf2 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/BeforeIntervalMergeJoinCheckerFactory.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/BeforeIntervalMergeJoinCheckerFactory.java @@ -18,13 +18,14 @@ */ package org.apache.asterix.runtime.operators.joins; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangePartitionType.RangePartitioningType; +import org.apache.hyracks.api.dataflow.value.IRangeMap; +import org.apache.hyracks.api.dataflow.value.IRangePartitionType.RangePartitioningType; public class BeforeIntervalMergeJoinCheckerFactory extends AbstractIntervalMergeJoinCheckerFactory { private static final long serialVersionUID = 1L; @Override - public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition) { + public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition, IRangeMap rangeMap) { return new BeforeIntervalMergeJoinChecker(keys0, keys1); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/CoveredByIntervalMergeJoinCheckerFactory.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/CoveredByIntervalMergeJoinCheckerFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/CoveredByIntervalMergeJoinCheckerFactory.java index 4f20629..64b0c2a 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/CoveredByIntervalMergeJoinCheckerFactory.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/CoveredByIntervalMergeJoinCheckerFactory.java @@ -18,11 +18,13 @@ */ package org.apache.asterix.runtime.operators.joins; +import org.apache.hyracks.api.dataflow.value.IRangeMap; + public class CoveredByIntervalMergeJoinCheckerFactory extends AbstractIntervalInverseMergeJoinCheckerFactory { private static final long serialVersionUID = 1L; @Override - public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition) { + public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition, IRangeMap rangeMap) { return new CoveredByIntervalMergeJoinChecker(keys0, keys1); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/CoversIntervalMergeJoinCheckerFactory.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/CoversIntervalMergeJoinCheckerFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/CoversIntervalMergeJoinCheckerFactory.java index a5125ee..dc50451 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/CoversIntervalMergeJoinCheckerFactory.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/CoversIntervalMergeJoinCheckerFactory.java @@ -18,11 +18,13 @@ */ package org.apache.asterix.runtime.operators.joins; +import org.apache.hyracks.api.dataflow.value.IRangeMap; + public class CoversIntervalMergeJoinCheckerFactory extends AbstractIntervalMergeJoinCheckerFactory { private static final long serialVersionUID = 1L; @Override - public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition) { + public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition, IRangeMap rangeMap) { return new CoversIntervalMergeJoinChecker(keys0, keys1); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/EndedByIntervalMergeJoinCheckerFactory.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/EndedByIntervalMergeJoinCheckerFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/EndedByIntervalMergeJoinCheckerFactory.java index c18a670..68e2922 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/EndedByIntervalMergeJoinCheckerFactory.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/EndedByIntervalMergeJoinCheckerFactory.java @@ -18,13 +18,14 @@ */ package org.apache.asterix.runtime.operators.joins; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangePartitionType.RangePartitioningType; +import org.apache.hyracks.api.dataflow.value.IRangeMap; +import org.apache.hyracks.api.dataflow.value.IRangePartitionType.RangePartitioningType; public class EndedByIntervalMergeJoinCheckerFactory extends AbstractIntervalInverseMergeJoinCheckerFactory { private static final long serialVersionUID = 1L; @Override - public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition) { + public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition, IRangeMap rangeMap) { return new EndedByIntervalMergeJoinChecker(keys0, keys1); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/EndsIntervalMergeJoinCheckerFactory.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/EndsIntervalMergeJoinCheckerFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/EndsIntervalMergeJoinCheckerFactory.java index ed5db30..e5b7be0 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/EndsIntervalMergeJoinCheckerFactory.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/EndsIntervalMergeJoinCheckerFactory.java @@ -18,13 +18,14 @@ */ package org.apache.asterix.runtime.operators.joins; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangePartitionType.RangePartitioningType; +import org.apache.hyracks.api.dataflow.value.IRangeMap; +import org.apache.hyracks.api.dataflow.value.IRangePartitionType.RangePartitioningType; public class EndsIntervalMergeJoinCheckerFactory extends AbstractIntervalMergeJoinCheckerFactory { private static final long serialVersionUID = 1L; @Override - public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition) { + public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition, IRangeMap rangeMap) { return new EndsIntervalMergeJoinChecker(keys0, keys1); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/IIntervalMergeJoinCheckerFactory.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/IIntervalMergeJoinCheckerFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/IIntervalMergeJoinCheckerFactory.java index 3251571..e4ceeb1 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/IIntervalMergeJoinCheckerFactory.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/IIntervalMergeJoinCheckerFactory.java @@ -20,13 +20,14 @@ package org.apache.asterix.runtime.operators.joins; import java.io.Serializable; +import org.apache.hyracks.api.dataflow.value.IRangeMap; import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.dataflow.std.join.IMergeJoinCheckerFactory; public interface IIntervalMergeJoinCheckerFactory extends IMergeJoinCheckerFactory, Serializable { @Override - public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition) + public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition, IRangeMap rangeMap) throws HyracksDataException; } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/MeetsIntervalMergeJoinCheckerFactory.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/MeetsIntervalMergeJoinCheckerFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/MeetsIntervalMergeJoinCheckerFactory.java index 88bb39e..038f9ef 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/MeetsIntervalMergeJoinCheckerFactory.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/MeetsIntervalMergeJoinCheckerFactory.java @@ -18,13 +18,14 @@ */ package org.apache.asterix.runtime.operators.joins; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangePartitionType.RangePartitioningType; +import org.apache.hyracks.api.dataflow.value.IRangeMap; +import org.apache.hyracks.api.dataflow.value.IRangePartitionType.RangePartitioningType; public class MeetsIntervalMergeJoinCheckerFactory extends AbstractIntervalMergeJoinCheckerFactory { private static final long serialVersionUID = 1L; @Override - public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition) { + public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition, IRangeMap rangeMap) { return new MeetsIntervalMergeJoinChecker(keys0, keys1); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/MetByIntervalMergeJoinCheckerFactory.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/MetByIntervalMergeJoinCheckerFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/MetByIntervalMergeJoinCheckerFactory.java index 122b62d..6c3fe32 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/MetByIntervalMergeJoinCheckerFactory.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/MetByIntervalMergeJoinCheckerFactory.java @@ -18,13 +18,14 @@ */ package org.apache.asterix.runtime.operators.joins; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangePartitionType.RangePartitioningType; +import org.apache.hyracks.api.dataflow.value.IRangeMap; +import org.apache.hyracks.api.dataflow.value.IRangePartitionType.RangePartitioningType; public class MetByIntervalMergeJoinCheckerFactory extends AbstractIntervalInverseMergeJoinCheckerFactory { private static final long serialVersionUID = 1L; @Override - public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition) { + public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition, IRangeMap rangeMap) { return new MetByIntervalMergeJoinChecker(keys0, keys1); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/OverlappedByIntervalMergeJoinCheckerFactory.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/OverlappedByIntervalMergeJoinCheckerFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/OverlappedByIntervalMergeJoinCheckerFactory.java index a58d8f3..8031181 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/OverlappedByIntervalMergeJoinCheckerFactory.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/OverlappedByIntervalMergeJoinCheckerFactory.java @@ -18,11 +18,13 @@ */ package org.apache.asterix.runtime.operators.joins; +import org.apache.hyracks.api.dataflow.value.IRangeMap; + public class OverlappedByIntervalMergeJoinCheckerFactory extends AbstractIntervalInverseMergeJoinCheckerFactory { private static final long serialVersionUID = 1L; @Override - public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition) { + public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition, IRangeMap rangeMap) { return new OverlappedByIntervalMergeJoinChecker(keys0, keys1); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/OverlappingIntervalMergeJoinCheckerFactory.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/OverlappingIntervalMergeJoinCheckerFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/OverlappingIntervalMergeJoinCheckerFactory.java index 9adcc90..195a85f 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/OverlappingIntervalMergeJoinCheckerFactory.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/OverlappingIntervalMergeJoinCheckerFactory.java @@ -19,21 +19,16 @@ package org.apache.asterix.runtime.operators.joins; import org.apache.asterix.om.types.ATypeTag; +import org.apache.hyracks.api.dataflow.value.IRangeMap; +import org.apache.hyracks.api.dataflow.value.IRangePartitionType.RangePartitioningType; import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.data.std.primitive.LongPointable; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangeMap; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangePartitionType.RangePartitioningType; public class OverlappingIntervalMergeJoinCheckerFactory extends AbstractIntervalMergeJoinCheckerFactory { private static final long serialVersionUID = 1L; - private IRangeMap rangeMap; - - public OverlappingIntervalMergeJoinCheckerFactory(IRangeMap rangeMap) { - this.rangeMap = rangeMap; - } @Override - public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition) + public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition, IRangeMap rangeMap) throws HyracksDataException { int fieldIndex = 0; if (ATypeTag.INT64.serialize() != rangeMap.getTag(0, 0)) { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/OverlapsIntervalMergeJoinCheckerFactory.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/OverlapsIntervalMergeJoinCheckerFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/OverlapsIntervalMergeJoinCheckerFactory.java index a290033..e3ecf2e 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/OverlapsIntervalMergeJoinCheckerFactory.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/OverlapsIntervalMergeJoinCheckerFactory.java @@ -18,11 +18,13 @@ */ package org.apache.asterix.runtime.operators.joins; +import org.apache.hyracks.api.dataflow.value.IRangeMap; + public class OverlapsIntervalMergeJoinCheckerFactory extends AbstractIntervalMergeJoinCheckerFactory { private static final long serialVersionUID = 1L; @Override - public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition) { + public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition, IRangeMap rangeMap) { return new OverlapsIntervalMergeJoinChecker(keys0, keys1); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/StartedByIntervalMergeJoinCheckerFactory.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/StartedByIntervalMergeJoinCheckerFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/StartedByIntervalMergeJoinCheckerFactory.java index 63b717f..431aa8e 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/StartedByIntervalMergeJoinCheckerFactory.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/StartedByIntervalMergeJoinCheckerFactory.java @@ -18,13 +18,14 @@ */ package org.apache.asterix.runtime.operators.joins; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangePartitionType.RangePartitioningType; +import org.apache.hyracks.api.dataflow.value.IRangeMap; +import org.apache.hyracks.api.dataflow.value.IRangePartitionType.RangePartitioningType; public class StartedByIntervalMergeJoinCheckerFactory extends AbstractIntervalInverseMergeJoinCheckerFactory { private static final long serialVersionUID = 1L; @Override - public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition) { + public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition, IRangeMap rangeMap) { return new StartedByIntervalMergeJoinChecker(keys0, keys1); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/2061a388/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/StartsIntervalMergeJoinCheckerFactory.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/StartsIntervalMergeJoinCheckerFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/StartsIntervalMergeJoinCheckerFactory.java index bceaa32..a05615c 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/StartsIntervalMergeJoinCheckerFactory.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/joins/StartsIntervalMergeJoinCheckerFactory.java @@ -18,13 +18,14 @@ */ package org.apache.asterix.runtime.operators.joins; -import org.apache.hyracks.dataflow.common.data.partition.range.IRangePartitionType.RangePartitioningType; +import org.apache.hyracks.api.dataflow.value.IRangeMap; +import org.apache.hyracks.api.dataflow.value.IRangePartitionType.RangePartitioningType; public class StartsIntervalMergeJoinCheckerFactory extends AbstractIntervalMergeJoinCheckerFactory { private static final long serialVersionUID = 1L; @Override - public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition) { + public IIntervalMergeJoinChecker createMergeJoinChecker(int[] keys0, int[] keys1, int partition, IRangeMap rangeMap) { return new StartsIntervalMergeJoinChecker(keys0, keys1); }