Package org.eclipse.rdf4j.sail.lucene

## Class LuceneSailConnection

- java.lang.Object
- - org.eclipse.rdf4j.sail.helpers.SailConnectionWrapper
  - - org.eclipse.rdf4j.sail.helpers.NotifyingSailConnectionWrapper
    - - org.eclipse.rdf4j.sail.lucene.LuceneSailConnection

- All Implemented Interfaces:
    `AutoCloseable`, `FederatedServiceResolverClient`, `ThreadSafetyAware`, `NotifyingSailConnection`, `SailConnection`

      public class LuceneSailConnection
      extends NotifyingSailConnectionWrapper

  ## Sail Connection Listener instead of implementing add/remove

  Using SailConnectionListener, see above The LuceneIndex is adapted based on events coming from the wrapped Sail, rather than by overriding the addStatement and removeStatements methods. This approach has two benefits: (1) when the wrapped Sail only reports statements that were not stored before, the LuceneIndex does not have to do the check on the skipped statemements and (2) the method for removing Statements from the Lucene index does not have to take wildcards into account, making its implementation simpler.

  ## Synchronized Methods

  LuceneSailConnection uses a listener to collect removed statements. The listener should not be active during the removal of contexts, as this is not needed (context removal is implemented differently). To realize this, all methods that can do changes are synchronized and during context removal, the listener is disabled. Thus, all methods of this connection that can change data are synchronized.

  ## Evaluating Queries - possible optimizations

  Arjohn has answered this question in the sesame-dev mailinglist on 13.8.2007: Is there a QueryModelNode that can contain a fixed (perhaps very long) list of Query result bindings? There is currently no such node, but there are two options to get similar behaviour: 1) Include the result bindings as OR-ed constraints in the query model. E.g. if you have a result binding like {{x=1,y=1},{x=2,y=2}}, this translates to the constraints (x=1 and y=1) or (x=2 and y=2). 2) The LuceneSail could iterate over the LuceneQueryResult and supply the various results as query input parameters to the underlying Sail. This is similar to using PreparedStatement's in JDBC.
  Author:
    sauermann, christian.huetter

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected SailConnectionListener` | `connectionListener` | The listener that listens to the underlying connection.

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `LuceneSailConnection​(NotifyingSailConnection wrappedConnection, SearchIndex luceneIndex, LuceneSail sail)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addStatement​(Resource subj, IRI pred, Value obj, Resource... contexts)` | Adds a statement to the store.
    `void` | `begin()` | Begins a transaction requiring `SailConnection.commit()` or `SailConnection.rollback()` to be called to close the transaction.
    `void` | `clear​(Resource... contexts)` | Removes all statements from the specified/all contexts.
    `void` | `close()` | Closes the connection.
    `void` | `commit()` | Commits any updates that have been performed since the last time `SailConnection.commit()` or `SailConnection.rollback()` was called.
    `CloseableIteration<? extends BindingSet,​QueryEvaluationException>` | `evaluate​(TupleExpr tupleExpr, Dataset dataset, BindingSet bindings, boolean includeInferred)` | Evaluates the supplied TupleExpr on the data contained in this Sail object, using the (optional) dataset and supplied bindings as input parameters.
    `void` | `removeStatements​(Resource subj, IRI pred, Value obj, Resource... contexts)` | Removes all statements matching the specified subject, predicate and object from the repository.
    `void` | `rollback()` | Rolls back the transaction, discarding any uncommitted changes that have been made in this SailConnection.

    - ### Methods inherited from class org.eclipse.rdf4j.sail.helpers.NotifyingSailConnectionWrapper

      `addConnectionListener, getWrappedConnection, removeConnectionListener`

    - ### Methods inherited from class org.eclipse.rdf4j.sail.helpers.SailConnectionWrapper

      `addStatement, begin, clearNamespaces, endUpdate, explain, flush, getContextIDs, getNamespace, getNamespaces, getStatements, hasStatement, isActive, isOpen, pendingRemovals, prepare, prepareQuery, removeNamespace, removeStatement, setFederatedServiceResolver, setNamespace, setTransactionSettings, size, size, startUpdate, supportsConcurrentReads`

    - ### 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.sail.SailConnection

      `addStatement, begin, clearNamespaces, endUpdate, explain, flush, getContextIDs, getNamespace, getNamespaces, getStatements, hasStatement, isActive, isOpen, pendingRemovals, prepare, prepareQuery, removeNamespace, removeStatement, setNamespace, setTransactionSettings, size, startUpdate`

- - ### Field Detail

    - #### connectionListener

          protected final SailConnectionListener connectionListener

      The listener that listens to the underlying connection. It is disabled during clearContext operations.

  - ### Constructor Detail

    - #### LuceneSailConnection

          public LuceneSailConnection​(NotifyingSailConnection wrappedConnection,
                                      SearchIndex luceneIndex,
                                      LuceneSail sail)

  - ### Method Detail

    - #### addStatement

          public void addStatement​(Resource subj,
                                   IRI pred,
                                   Value obj,
                                   Resource... contexts)
                            throws SailException

      Description copied from interface: `SailConnection`
      Adds a statement to the store.
      Specified by:
        `addStatement` in interface `SailConnection`
      Overrides:
        `addStatement` in class `SailConnectionWrapper`
      Parameters:
        `subj` - The subject of the statement to add.
        `pred` - The predicate of the statement to add.
        `obj` - The object of the statement to add.
        `contexts` - The context(s) to add the statement to. Note that this parameter is a vararg and as such is optional. If no contexts are specified, a context-less statement will be added.
      Throws:
        `SailException` - If the statement could not be added, for example because no transaction is active.

    - #### close

          public void close()
                     throws SailException

      Description copied from interface: `SailConnection`
      Closes the connection. Any updates that haven't been committed yet will be rolled back. The connection can no longer be used once it is closed.
      Specified by:
        `close` in interface `AutoCloseable`
      Specified by:
        `close` in interface `SailConnection`
      Overrides:
        `close` in class `SailConnectionWrapper`
      Throws:
        `SailException`

    - #### clear

          public void clear​(Resource... contexts)
                     throws SailException

      Description copied from interface: `SailConnection`
      Removes all statements from the specified/all contexts. If no contexts are specified the method operates on the entire repository.
      Specified by:
        `clear` in interface `SailConnection`
      Overrides:
        `clear` in class `SailConnectionWrapper`
      Parameters:
        `contexts` - The context(s) from which to remove the statements. Note that this parameter is a vararg and as such is optional. If no contexts are specified the method operates on the entire repository. A null value can be used to match context-less statements.
      Throws:
        `SailException` - If the statements could not be removed.

    - #### begin

          public void begin()
                     throws SailException

      Description copied from interface: `SailConnection`
      Begins a transaction requiring `SailConnection.commit()` or `SailConnection.rollback()` to be called to close the transaction. The transaction will use the default `IsolationLevel` level for the SAIL, as returned by `Sail.getDefaultIsolationLevel()`.
      Specified by:
        `begin` in interface `SailConnection`
      Overrides:
        `begin` in class `SailConnectionWrapper`
      Throws:
        `SailException` - If the connection could not start a transaction or if a transaction is already active on this connection.

    - #### commit

          public void commit()
                      throws SailException

      Description copied from interface: `SailConnection`
      Commits any updates that have been performed since the last time `SailConnection.commit()` or `SailConnection.rollback()` was called.
      Specified by:
        `commit` in interface `SailConnection`
      Overrides:
        `commit` in class `SailConnectionWrapper`
      Throws:
        `UnknownSailTransactionStateException` - If the transaction state can not be determined (this can happen for instance when communication between client and server fails or times-out). It does not indicate a problem with the integrity of the store.
        `SailException` - If the SailConnection could not be committed.

    - #### evaluate

          public CloseableIteration<? extends BindingSet,​QueryEvaluationException> evaluate​(TupleExpr tupleExpr,
                                                                                                  Dataset dataset,
                                                                                                  BindingSet bindings,
                                                                                                  boolean includeInferred)
                                                                                           throws SailException

      Description copied from interface: `SailConnection`
      Evaluates the supplied TupleExpr on the data contained in this Sail object, using the (optional) dataset and supplied bindings as input parameters.
      Specified by:
        `evaluate` in interface `SailConnection`
      Overrides:
        `evaluate` in class `SailConnectionWrapper`
      Parameters:
        `tupleExpr` - The tuple expression to evaluate.
        `dataset` - The dataset to use for evaluating the query, null to use the Sail's default dataset.
        `bindings` - A set of input parameters for the query evaluation. The keys reference variable names that should be bound to the value they map to.
        `includeInferred` - Indicates whether inferred triples are to be considered in the query result. If false, no inferred statements are returned; if true, inferred statements are returned if available
      Returns:
        The TupleQueryResult.
      Throws:
        `SailException` - If the Sail object encountered an error or unexpected situation internally.

    - #### removeStatements

          public void removeStatements​(Resource subj,
                                       IRI pred,
                                       Value obj,
                                       Resource... contexts)
                                throws SailException

      Description copied from interface: `SailConnection`
      Removes all statements matching the specified subject, predicate and object from the repository. All three parameters may be null to indicate wildcards.
      Specified by:
        `removeStatements` in interface `SailConnection`
      Overrides:
        `removeStatements` in class `SailConnectionWrapper`
      Parameters:
        `subj` - The subject of the statement that should be removed, or null to indicate a wildcard.
        `pred` - The predicate of the statement that should be removed, or null to indicate a wildcard.
        `obj` - The object of the statement that should be removed , or null to indicate a wildcard. *
        `contexts` - The context(s) from which to remove the statement. Note that this parameter is a vararg and as such is optional. If no contexts are specified the method operates on the entire repository. A null value can be used to match context-less statements.
      Throws:
        `SailException` - If the statement could not be removed, for example because no transaction is active.

    - #### rollback

          public void rollback()
                        throws SailException

      Description copied from interface: `SailConnection`
      Rolls back the transaction, discarding any uncommitted changes that have been made in this SailConnection.
      Specified by:
        `rollback` in interface `SailConnection`
      Overrides:
        `rollback` in class `SailConnectionWrapper`
      Throws:
        `UnknownSailTransactionStateException` - If the transaction state can not be determined (this can happen for instance when communication between client and server fails or times-out). It does not indicate a problem with the integrity of the store.
        `SailException` - If the SailConnection could not be rolled back.