Package org.eclipse.rdf4j.query.algebra.evaluation.iterator

## Class HashJoinIteration

- java.lang.Object
- - org.eclipse.rdf4j.common.iteration.AbstractCloseableIteration<E,​X>
  - - org.eclipse.rdf4j.common.iteration.LookAheadIteration<BindingSet,​QueryEvaluationException>
    - - org.eclipse.rdf4j.query.algebra.evaluation.iterator.HashJoinIteration

- All Implemented Interfaces:
    `AutoCloseable`, `CloseableIteration<BindingSet,​QueryEvaluationException>`, `Iteration<BindingSet,​QueryEvaluationException>`

      public class HashJoinIteration
      extends LookAheadIteration<BindingSet,​QueryEvaluationException>

  Generic hash join implementation suitable for use by Sail implementations.
  Author:
    MJAHale

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected String[]` | `joinAttributes` |

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `HashJoinIteration​(CloseableIteration<BindingSet,​QueryEvaluationException> leftIter, Set<String> leftBindingNames, CloseableIteration<BindingSet,​QueryEvaluationException> rightIter, Set<String> rightBindingNames, boolean leftJoin)` |
    `HashJoinIteration​(CloseableIteration<BindingSet,​QueryEvaluationException> leftIter, Set<String> leftBindingNames, CloseableIteration<BindingSet,​QueryEvaluationException> rightIter, Set<String> rightBindingNames, boolean leftJoin, IntFunction<Map<BindingSetHashKey,​List<BindingSet>>> mapMaker, IntFunction<List<BindingSet>> mapValueMaker)` | Deprecated, for removal: This API element is subject to removal in a future version.
    `HashJoinIteration​(EvaluationStrategy strategy, Join join, BindingSet bindings)` | Deprecated, for removal: This API element is subject to removal in a future version.
    `HashJoinIteration​(EvaluationStrategy strategy, LeftJoin join, BindingSet bindings)` | Deprecated, for removal: This API element is subject to removal in a future version.
    `HashJoinIteration​(EvaluationStrategy strategy, TupleExpr left, TupleExpr right, BindingSet bindings, boolean leftJoin)` |
    `HashJoinIteration​(QueryEvaluationStep left, QueryEvaluationStep right, BindingSet bindings, boolean leftJoin, String[] joinAttributes, QueryEvaluationContext context)` |

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected <E> void` | `add​(Collection<E> col, E value)` |
    `protected <E> void` | `addAll​(Collection<E> col, List<E> values)` |
    `protected <E> void` | `closeHashValue​(Iterator<E> iter)` | Utility methods to clear-up in case not using in-memory hash table.
    `protected void` | `disposeCache​(Iterator<BindingSet> iter)` | Utility methods to clear-up in case not using in-memory cache.
    `protected void` | `disposeHashTable​(Map<BindingSetHashKey,​List<BindingSet>> map)` | Utility methods to clear-up in case not using in-memory hash table.
    `protected BindingSet` | `getNextElement()` | Gets the next element.
    `protected void` | `handleClose()` | Called by `AbstractCloseableIteration.close()` when it is called for the first time.
    `static String[]` | `hashJoinAttributeNames​(Join join)` |
    `static String[]` | `hashJoinAttributeNames​(LeftJoin join)` |
    `protected Map<BindingSetHashKey,​List<BindingSet>>` | `makeHashTable​(int initialSize)` | Utility methods to make it easier to inserted custom store dependent maps
    `protected List<BindingSet>` | `makeHashValue​(int currentMaxListSize)` | Utility methods to make it easier to inserted custom store dependent list
    `protected Collection<BindingSet>` | `makeIterationCache​(CloseableIteration<BindingSet,​QueryEvaluationException> iter)` | Utility methods to make it easier to inserted custom store dependent list
    `protected <E> E` | `nextFromCache​(Iterator<E> iter)` |
    `protected void` | `putHashTableEntry​(Map<BindingSetHashKey,​List<BindingSet>> nextHashTable, BindingSetHashKey hashKey, List<BindingSet> hashValue, boolean newEntry)` |

    - ### Methods inherited from class org.eclipse.rdf4j.common.iteration.LookAheadIteration

      `hasNext, next, remove`

    - ### Methods inherited from class org.eclipse.rdf4j.common.iteration.AbstractCloseableIteration

      `close, isClosed`

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

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

    - ### Methods inherited from interface org.eclipse.rdf4j.common.iteration.Iteration

      `stream`

- - ### Field Detail

    - #### joinAttributes

          protected final String[] joinAttributes

  - ### Constructor Detail

    - #### HashJoinIteration

          @Deprecated(forRemoval=true)
          public HashJoinIteration​(EvaluationStrategy strategy,
                                   Join join,
                                   BindingSet bindings)
                            throws QueryEvaluationException

      Deprecated, for removal: This API element is subject to removal in a future version.
      Throws:
        `QueryEvaluationException`

    - #### HashJoinIteration

          @Deprecated(forRemoval=true)
          public HashJoinIteration​(EvaluationStrategy strategy,
                                   LeftJoin join,
                                   BindingSet bindings)
                            throws QueryEvaluationException

      Deprecated, for removal: This API element is subject to removal in a future version.
      Throws:
        `QueryEvaluationException`

    - #### HashJoinIteration

          public HashJoinIteration​(EvaluationStrategy strategy,
                                   TupleExpr left,
                                   TupleExpr right,
                                   BindingSet bindings,
                                   boolean leftJoin)
                            throws QueryEvaluationException

      Throws:
        `QueryEvaluationException`

    - #### HashJoinIteration

          public HashJoinIteration​(QueryEvaluationStep left,
                                   QueryEvaluationStep right,
                                   BindingSet bindings,
                                   boolean leftJoin,
                                   String[] joinAttributes,
                                   QueryEvaluationContext context)
                            throws QueryEvaluationException

      Throws:
        `QueryEvaluationException`

    - #### HashJoinIteration

          public HashJoinIteration​(CloseableIteration<BindingSet,​QueryEvaluationException> leftIter,
                                   Set<String> leftBindingNames,
                                   CloseableIteration<BindingSet,​QueryEvaluationException> rightIter,
                                   Set<String> rightBindingNames,
                                   boolean leftJoin)
                            throws QueryEvaluationException

      Throws:
        `QueryEvaluationException`

    - #### HashJoinIteration

          @Deprecated(forRemoval=true)
          public HashJoinIteration​(CloseableIteration<BindingSet,​QueryEvaluationException> leftIter,
                                   Set<String> leftBindingNames,
                                   CloseableIteration<BindingSet,​QueryEvaluationException> rightIter,
                                   Set<String> rightBindingNames,
                                   boolean leftJoin,
                                   IntFunction<Map<BindingSetHashKey,​List<BindingSet>>> mapMaker,
                                   IntFunction<List<BindingSet>> mapValueMaker)
                            throws QueryEvaluationException

      Deprecated, for removal: This API element is subject to removal in a future version.
      Throws:
        `QueryEvaluationException`

  - ### Method Detail

    - #### getNextElement

          protected BindingSet getNextElement()
                                       throws QueryEvaluationException

      Description copied from class: `LookAheadIteration`
      Gets the next element. Subclasses should implement this method so that it returns the next element.
      Specified by:
        `getNextElement` in class `LookAheadIteration<BindingSet,​QueryEvaluationException>`
      Returns:
        The next element, or null if no more elements are available.
      Throws:
        `QueryEvaluationException`

    - #### handleClose

          protected void handleClose()
                              throws QueryEvaluationException

      Description copied from class: `AbstractCloseableIteration`
      Called by `AbstractCloseableIteration.close()` when it is called for the first time. This method is only called once on each iteration. By default, this method does nothing.
      Overrides:
        `handleClose` in class `LookAheadIteration<BindingSet,​QueryEvaluationException>`
      Throws:
        `QueryEvaluationException`

    - #### putHashTableEntry

          protected void putHashTableEntry​(Map<BindingSetHashKey,​List<BindingSet>> nextHashTable,
                                           BindingSetHashKey hashKey,
                                           List<BindingSet> hashValue,
                                           boolean newEntry)
                                    throws QueryEvaluationException

      Throws:
        `QueryEvaluationException`

    - #### makeIterationCache

          protected Collection<BindingSet> makeIterationCache​(CloseableIteration<BindingSet,​QueryEvaluationException> iter)

      Utility methods to make it easier to inserted custom store dependent list
      Returns:
        list

    - #### makeHashTable

          protected Map<BindingSetHashKey,​List<BindingSet>> makeHashTable​(int initialSize)

      Utility methods to make it easier to inserted custom store dependent maps
      Returns:
        map

    - #### makeHashValue

          protected List<BindingSet> makeHashValue​(int currentMaxListSize)

      Utility methods to make it easier to inserted custom store dependent list
      Returns:
        list

    - #### disposeCache

          protected void disposeCache​(Iterator<BindingSet> iter)

      Utility methods to clear-up in case not using in-memory cache.

    - #### disposeHashTable

          protected void disposeHashTable​(Map<BindingSetHashKey,​List<BindingSet>> map)

      Utility methods to clear-up in case not using in-memory hash table.

    - #### closeHashValue

          protected <E> void closeHashValue​(Iterator<E> iter)

      Utility methods to clear-up in case not using in-memory hash table.

    - #### nextFromCache

          protected <E> E nextFromCache​(Iterator<E> iter)

    - #### add

          protected <E> void add​(Collection<E> col,
                                 E value)
                          throws QueryEvaluationException

      Throws:
        `QueryEvaluationException`

    - #### addAll

          protected <E> void addAll​(Collection<E> col,
                                    List<E> values)
                             throws QueryEvaluationException

      Throws:
        `QueryEvaluationException`

    - #### hashJoinAttributeNames

          public static String[] hashJoinAttributeNames​(Join join)

    - #### hashJoinAttributeNames

          public static String[] hashJoinAttributeNames​(LeftJoin join)