public HashMatchIterator(BoundHashMatchOperator logicalOperator, Iterator build, Iterator probe, int buildIndex, int probeIndex, IteratorPredicate remainder, HashMatchRowBuffer rowBuffer) { _logicalOperator = logicalOperator; _build = build; _probe = probe; _buildIndex = buildIndex; _probeIndex = probeIndex; _remainder = remainder; _rowBuffer = rowBuffer; }
private Iterator BuildHashMatch(BoundHashMatchRelation relation) { var build = BuildRelation(relation.Build); var buildAllocation = BuildRowBufferAllocation(relation.Build, build.RowBuffer); var buildEntry = buildAllocation[relation.BuildKey]; var probe = BuildRelation(relation.Probe); var probeAllocation = BuildRowBufferAllocation(relation.Probe, probe.RowBuffer); var probeEntry = probeAllocation[relation.ProbeKey]; var outputRowBuffer = new HashMatchRowBuffer(build.RowBuffer.Count, probe.RowBuffer.Count); var outputAllocation = BuildRowBufferAllocation(relation, outputRowBuffer); var predicate = BuildPredicate(relation.Remainder, true, outputAllocation); Debug.Assert(buildEntry.RowBuffer == build.RowBuffer); Debug.Assert(probeEntry.RowBuffer == probe.RowBuffer); return(new HashMatchIterator(relation.LogicalOperator, build, probe, buildEntry.Index, probeEntry.Index, predicate, outputRowBuffer)); }