org.apache.solr.client.solrj.io.stream

## Class JoinStream

- java.lang.Object
- - org.apache.solr.client.solrj.io.stream.TupleStream
  - - org.apache.solr.client.solrj.io.stream.JoinStream

All Implemented Interfaces:
  Closeable, Serializable, AutoCloseable, Expressible, MapSerializable, MapWriter, NavigableObject

Direct Known Subclasses:
  BiJoinStream

    public abstract class JoinStream
    extends TupleStream
    implements Expressible

Defines a JoinStream which can hold N streams, all joined with the same equalitor

Since:
  6.0.0
See Also:
  Serialized Form

### Nested Class Summary

### Nested classes/interfaces inherited from class org.apache.solr.client.solrj.io.stream.TupleStream

`TupleStream.IgnoreException`

### Nested classes/interfaces inherited from interface org.apache.solr.common.MapWriter

`MapWriter.EntryWriter`

### Field Summary

Fields
`protected StreamEqualitor` `eq`

### Constructor Summary

Constructors
Constructor and Description
`JoinStream(StreamEqualitor eq, TupleStream first, TupleStream second, TupleStream... others)`
`JoinStream(StreamExpression expression, StreamFactory factory)`

### Method Summary

All Methods Instance Methods Abstract Methods Concrete Methods
`List<TupleStream>` `children()`
`void` `close()`
`int` `getCost()`
`PushBackStream` `getStream(int idx)`
`protected boolean` `isValidTupleOrder()`
`protected Tuple` `loadEqualTupleGroup(PushBackStream stream, LinkedList<Tuple> group, StreamComparator groupComparator)` Given the stream, start from beginning and load group with all tuples that are equal to the first in stream (including the first one in the stream).
`void` `open()`
`void` `setStreamContext(StreamContext context)`
`Explanation` `toExplanation(StreamFactory factory)` Returns an explanation about the stream object
`StreamExpression` `toExpression(StreamFactory factory)`
`protected abstract void` `validateTupleOrder()`

### Methods inherited from class org.apache.solr.client.solrj.io.stream.TupleStream

`getShards, getShards, getStreamNodeId, getStreamSort, read, writeMap`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface org.apache.solr.common.MapWriter

`jsonStr, toMap`

### Methods inherited from interface org.apache.solr.common.NavigableObject

`_forEachEntry, _forEachEntry, _forEachEntry, _get, _get, _getStr, _getStr`

### Field Detail

#### eq

    protected StreamEqualitor eq

### Constructor Detail

#### JoinStream

    public JoinStream(StreamEqualitor eq,
                      TupleStream first,
                      TupleStream second,
                      TupleStream... others)

#### JoinStream

    public JoinStream(StreamExpression expression,
                      StreamFactory factory)
               throws IOException

Throws:
  `IOException`

### Method Detail

#### validateTupleOrder

    protected abstract void validateTupleOrder()
                                        throws IOException

Throws:
  `IOException`

#### toExpression

    public StreamExpression toExpression(StreamFactory factory)
                                  throws IOException

Specified by:
  `toExpression` in interface `Expressible`
Throws:
  `IOException`

#### toExplanation

    public Explanation toExplanation(StreamFactory factory)
                              throws IOException

Description copied from interface: `Expressible`
Returns an explanation about the stream object

Specified by:
  `toExplanation` in interface `Expressible`
Specified by:
  `toExplanation` in class `TupleStream`
Parameters:
  `factory` - Stream factory for this, contains information about the function name
Returns:
  Explanation about this stream object containing explanations of any child stream objects
Throws:
  `IOException` - throw on any error

#### setStreamContext

    public void setStreamContext(StreamContext context)

Specified by:
  `setStreamContext` in class `TupleStream`

#### open

    public void open()
              throws IOException

Specified by:
  `open` in class `TupleStream`
Throws:
  `IOException`

#### close

    public void close()
               throws IOException

Specified by:
  `close` in interface `Closeable`
Specified by:
  `close` in interface `AutoCloseable`
Specified by:
  `close` in class `TupleStream`
Throws:
  `IOException`

#### children

    public List<TupleStream> children()

Specified by:
  `children` in class `TupleStream`

#### getStream

    public PushBackStream getStream(int idx)

#### isValidTupleOrder

    protected boolean isValidTupleOrder()

#### loadEqualTupleGroup

    protected Tuple loadEqualTupleGroup(PushBackStream stream,
                                        LinkedList<Tuple> group,
                                        StreamComparator groupComparator)
                                 throws IOException

Given the stream, start from beginning and load group with all tuples that are equal to the first in stream (including the first one in the stream). All matched tuples are removed from the stream. Result is at least one tuple will be read from the stream and 0 or more tuples will exist in the group. If the first tuple is EOF then the group will have 0 items. Else it will have at least one item. The first group member is returned.

Parameters:
  `group` - - should be empty
Throws:
  `IOException`

#### getCost

    public int getCost()

Overrides:
  `getCost` in class `TupleStream`