protected AbstractIterHashJoin( JoinKey joinKey, QueryIterator probeIter, QueryIterator streamIter, ExecutionContext execCxt) { super(probeIter, streamIter, execCxt); if (joinKey == null) { QueryIterPeek pProbe = QueryIterPeek.create(probeIter, execCxt); QueryIterPeek pStream = QueryIterPeek.create(streamIter, execCxt); Binding bLeft = pProbe.peek(); Binding bRight = pStream.peek(); List<Var> varsLeft = Iter.toList(bLeft.vars()); List<Var> varsRight = Iter.toList(bRight.vars()); joinKey = JoinKey.createVarKey(varsLeft, varsRight); probeIter = pProbe; streamIter = pStream; } this.joinKey = joinKey; this.iterStream = streamIter; this.hashTable = new HashProbeTable(joinKey); this.iterCurrent = null; buildHashTable(probeIter); }