Package org.postgresql.core

# Class QueryExecutorBase

java.lang.Object
org.postgresql.core.QueryExecutorBase

All Implemented Interfaces:
  `QueryExecutor`, `TypeTransferModeRegistry`

Direct Known Subclasses:
  `QueryExecutorImpl`

public abstract class QueryExecutorBase extends Object implements QueryExecutor

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected final QueryExecutorCloseAction`
  `closeAction`
  `protected final ResourceLock`
  `lock`
  `protected final Condition`
  `lockCondition`
  `protected final boolean`
  `logServerErrorDetail`
  `protected final PGStream`
  `pgStream`
  `protected ProtocolVersion`
  `protocolVersion`

  ### Fields inherited from interface org.postgresql.core.QueryExecutor

  `MAX_SAVE_POINTS, QUERY_BOTH_ROWS_AND_STATUS, QUERY_DESCRIBE_ONLY, QUERY_DISALLOW_BATCHING, QUERY_EXECUTE_AS_SIMPLE, QUERY_FORCE_DESCRIBE_PORTAL, QUERY_FORWARD_CURSOR, QUERY_NO_BINARY_TRANSFER, QUERY_NO_METADATA, QUERY_NO_RESULTS, QUERY_ONESHOT, QUERY_READ_ONLY_HINT, QUERY_SUPPRESS_BEGIN`

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `QueryExecutorBase(PGStream pgStream, int cancelSignalTimeout, Properties info)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `abort()`
  Abort at network level without sending the Terminate message to the backend.
  `void`
  `addNotification(PGNotification notification)`
  `void`
  `addWarning(SQLWarning newWarning)`
  `final CachedQuery`
  `borrowCallableQuery(String sql)`
  `final CachedQuery`
  `borrowQuery(String sql)`
  `CachedQuery`
  `borrowQueryByKey(Object key)`
  `final CachedQuery`
  `borrowReturningQuery(String sql, String @Nullable [] columnNames)`
  `void`
  `close()`
  Close this connection cleanly.
  `protected QueryExecutorCloseAction`
  `createCloseAction()`
  `final CachedQuery`
  `createQuery(String sql, boolean escapeProcessing, boolean isParameterized, String @Nullable ... columnNames)`
  `CachedQuery`
  `createQueryByKey(Object key)`
  `final Object`
  `createQueryKey(String sql, boolean escapeProcessing, boolean isParameterized, String @Nullable ... columnNames)`
  `AutoSave`
  `getAutoSave()`
  `int`
  `getBackendPID()`
  Return the process ID (PID) of the backend server process handling this connection.
  `Closeable`
  `getCloseAction()`
  Returns an action that would close the connection cleanly.
  `String`
  `getDatabase()`
  `Encoding`
  `getEncoding()`
  `EscapeSyntaxCallMode`
  `getEscapeSyntaxCallMode()`
  `HostSpec`
  `getHostSpec()`
  `int`
  `getNetworkTimeout()`
  `PGNotification[]`
  `getNotifications()`
  Retrieve and clear the set of asynchronous notifications pending on this connection.
  `final @Nullable String`
  `getParameterStatus(String parameterName)`
  `final Map<String,String>`
  `getParameterStatuses()`
  `PreferQueryMode`
  `getPreferQueryMode()`
  `boolean`
  `getQuoteReturningIdentifiers()`
  `String`
  `getServerVersion()`
  Return the server version from the server_version GUC.
  `int`
  `getServerVersionNum()`
  Get a machine-readable server version.
  `boolean`
  `getStandardConformingStrings()`
  Returns whether the server treats string-literals according to the SQL standard or if it uses traditional PostgreSQL escaping rules.
  `TransactionState`
  `getTransactionState()`
  Get the current transaction state of this connection.
  `String`
  `getUser()`
  `@Nullable SQLWarning`
  `getWarnings()`
  Retrieve and clear the chain of warnings accumulated on this connection.
  `protected boolean`
  `hasNotifications()`
  `boolean`
  `isClosed()`
  Check if this connection is closed.
  `boolean`
  `isColumnSanitiserDisabled()`
  `boolean`
  `isFlushCacheOnDeallocate()`
  `boolean`
  `isReWriteBatchedInsertsEnabled()`
  `protected void`
  `onParameterStatus(String parameterName, String parameterStatus)`
  Update the parameter status map in response to a new ParameterStatus wire protocol message.
  `void`
  `releaseQuery(CachedQuery cachedQuery)`
  `protected abstract void`
  `sendCloseMessage()`
  Deprecated.
  use `getCloseAction()` instead
  `void`
  `sendQueryCancel()`
  Sends a query cancellation for this connection.
  `void`
  `setAutoSave(AutoSave autoSave)`
  `void`
  `setBackendKeyData(int cancelPid, byte[] cancelKey)`
  `void`
  `setEncoding(Encoding encoding)`
  `void`
  `setFlushCacheOnDeallocate(boolean flushCacheOnDeallocate)`
  By default, the connection resets statement cache in case deallocate all/discard all message is observed.
  `void`
  `setNetworkTimeout(int milliseconds)`
  `void`
  `setPreferQueryMode(PreferQueryMode mode)`
  `void`
  `setServerVersion(String serverVersion)`
  `void`
  `setServerVersionNum(int serverVersionNum)`
  `void`
  `setStandardConformingStrings(boolean value)`
  `void`
  `setTransactionState(TransactionState state)`
  `boolean`
  `willHealOnRetry(SQLException e)`
  `protected boolean`
  `willHealViaReparse(SQLException e)`

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

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

  ### Methods inherited from interface org.postgresql.core.QueryExecutor

  `addBinaryReceiveOid, addBinarySendOid, addQueryToAdaptiveFetchCache, createFastpathParameters, createSimpleQuery, execute, execute, execute, execute, fastpathCall, fetch, getAdaptiveFetch, getAdaptiveFetchSize, getApplicationName, getBinaryReceiveOids, getBinarySendOids, getIntegerDateTimes, getProtocolVersion, getReplicationProtocol, getTimeZone, processNotifies, processNotifies, removeBinaryReceiveOid, removeBinarySendOid, removeQueryFromAdaptiveFetchCache, setAdaptiveFetch, setBinaryReceiveOids, setBinarySendOids, startCopy, wrap`

  ### Methods inherited from interface org.postgresql.core.v3.TypeTransferModeRegistry

  `useBinaryForReceive, useBinaryForSend`

- ## Field Details

  - ### pgStream

    protected final PGStream pgStream

  - ### protocolVersion

    protected ProtocolVersion protocolVersion

  - ### closeAction

    protected final QueryExecutorCloseAction closeAction

  - ### logServerErrorDetail

    protected final boolean logServerErrorDetail

  - ### lock

    protected final ResourceLock lock

  - ### lockCondition

    protected final Condition lockCondition

- ## Constructor Details

  - ### QueryExecutorBase

    protected QueryExecutorBase(PGStream pgStream, int cancelSignalTimeout, Properties info) throws SQLException
    Throws:
      `SQLException`

- ## Method Details

  - ### createCloseAction

    protected QueryExecutorCloseAction createCloseAction()

  - ### sendCloseMessage

    @Deprecated protected abstract void sendCloseMessage() throws IOException
    Deprecated.
    use `getCloseAction()` instead
    Sends "terminate connection" message to the backend.
    Throws:
      `IOException` - in case connection termination fails

  - ### setNetworkTimeout

    public void setNetworkTimeout(int milliseconds) throws IOException
    Specified by:
      `setNetworkTimeout` in interface `QueryExecutor`
    Throws:
      `IOException`

  - ### getNetworkTimeout

    public int getNetworkTimeout() throws IOException
    Specified by:
      `getNetworkTimeout` in interface `QueryExecutor`
    Throws:
      `IOException`

  - ### getHostSpec

    public HostSpec getHostSpec()
    Specified by:
      `getHostSpec` in interface `QueryExecutor`
    Returns:
      the host and port this connection is connected to.

  - ### getUser

    public String getUser()
    Specified by:
      `getUser` in interface `QueryExecutor`
    Returns:
      the user this connection authenticated as.

  - ### getDatabase

    public String getDatabase()
    Specified by:
      `getDatabase` in interface `QueryExecutor`
    Returns:
      the database this connection is connected to.

  - ### setBackendKeyData

    public void setBackendKeyData(int cancelPid, byte[] cancelKey)

  - ### getBackendPID

    public int getBackendPID()
    Description copied from interface: `QueryExecutor`
    Return the process ID (PID) of the backend server process handling this connection.
    Specified by:
      `getBackendPID` in interface `QueryExecutor`
    Returns:
      process ID (PID) of the backend server process handling this connection

  - ### abort

    public void abort()
    Description copied from interface: `QueryExecutor`
    Abort at network level without sending the Terminate message to the backend.
    Specified by:
      `abort` in interface `QueryExecutor`

  - ### getCloseAction

    public Closeable getCloseAction()
    Description copied from interface: `QueryExecutor`
    Returns an action that would close the connection cleanly. The returned object should refer only the minimum subset of objects required for proper resource cleanup. For instance, it should better not hold a strong reference to `QueryExecutor`.
    Specified by:
      `getCloseAction` in interface `QueryExecutor`
    Returns:
      action that would close the connection cleanly.

  - ### close

    public void close()
    Description copied from interface: `QueryExecutor`
    Close this connection cleanly.
    Specified by:
      `close` in interface `QueryExecutor`

  - ### isClosed

    public boolean isClosed()
    Description copied from interface: `QueryExecutor`
    Check if this connection is closed.
    Specified by:
      `isClosed` in interface `QueryExecutor`
    Returns:
      true iff the connection is closed.

  - ### sendQueryCancel

    public void sendQueryCancel() throws SQLException
    Description copied from interface: `QueryExecutor`
    Sends a query cancellation for this connection.
    Specified by:
      `sendQueryCancel` in interface `QueryExecutor`
    Throws:
      `SQLException` - if something goes wrong.

  - ### addWarning

    public void addWarning(SQLWarning newWarning)

  - ### addNotification

    public void addNotification(PGNotification notification)

  - ### getNotifications

    public PGNotification[] getNotifications() throws SQLException
    Description copied from interface: `QueryExecutor`
    Retrieve and clear the set of asynchronous notifications pending on this connection.
    Specified by:
      `getNotifications` in interface `QueryExecutor`
    Returns:
      an array of notifications; if there are no notifications, an empty array is returned.
    Throws:
      `SQLException` - if and error occurs while fetching notifications

  - ### getWarnings

    public @Nullable SQLWarning getWarnings()
    Description copied from interface: `QueryExecutor`
    Retrieve and clear the chain of warnings accumulated on this connection.
    Specified by:
      `getWarnings` in interface `QueryExecutor`
    Returns:
      the first SQLWarning in the chain; subsequent warnings can be found via SQLWarning.getNextWarning().

  - ### getServerVersion

    public String getServerVersion()
    Description copied from interface: `QueryExecutor`
    Return the server version from the server_version GUC.

    Note that there's no requirement for this to be numeric or of the form x.y.z. PostgreSQL development releases usually have the format x.ydevel e.g. 9.4devel; betas usually x.ybetan e.g. 9.4beta1. The --with-extra-version configure option may add an arbitrary string to this.

    Don't use this string for logic, only use it when displaying the server version to the user. Prefer getServerVersionNum() for all logic purposes.

    Specified by:
      `getServerVersion` in interface `QueryExecutor`
    Returns:
      the server version string from the server_version GUC

  - ### getServerVersionNum

    public int getServerVersionNum()
    Description copied from interface: `QueryExecutor`
    Get a machine-readable server version.

    This returns the value of the server_version_num GUC. If no such GUC exists, it falls back on attempting to parse the text server version for the major version. If there's no minor version (e.g. a devel or beta release) then the minor version is set to zero. If the version could not be parsed, zero is returned.

    Specified by:
      `getServerVersionNum` in interface `QueryExecutor`
    Returns:
      the server version in numeric XXYYZZ form, eg 090401, from server_version_num

  - ### setServerVersion

    public void setServerVersion(String serverVersion)

  - ### setServerVersionNum

    public void setServerVersionNum(int serverVersionNum)

  - ### setTransactionState

    @Holding("lock") public void setTransactionState(TransactionState state)

  - ### setStandardConformingStrings

    public void setStandardConformingStrings(boolean value)

  - ### getStandardConformingStrings

    public boolean getStandardConformingStrings()
    Description copied from interface: `QueryExecutor`
    Returns whether the server treats string-literals according to the SQL standard or if it uses traditional PostgreSQL escaping rules. Versions up to 8.1 always treated backslashes as escape characters in string-literals. Since 8.2, this depends on the value of the `standard_conforming_strings` server variable.
    Specified by:
      `getStandardConformingStrings` in interface `QueryExecutor`
    Returns:
      true if the server treats string literals according to the SQL standard

  - ### getQuoteReturningIdentifiers

    public boolean getQuoteReturningIdentifiers()
    Specified by:
      `getQuoteReturningIdentifiers` in interface `QueryExecutor`
    Returns:
      true if we are going to quote identifier provided in the returning array default is true

  - ### getTransactionState

    public TransactionState getTransactionState()
    Description copied from interface: `QueryExecutor`
    Get the current transaction state of this connection.
    Specified by:
      `getTransactionState` in interface `QueryExecutor`
    Returns:
      a ProtocolConnection.TRANSACTION_* constant.

  - ### setEncoding

    public void setEncoding(Encoding encoding) throws IOException
    Throws:
      `IOException`

  - ### getEncoding

    public Encoding getEncoding()
    Specified by:
      `getEncoding` in interface `QueryExecutor`
    Returns:
      the current encoding in use by this connection

  - ### isReWriteBatchedInsertsEnabled

    public boolean isReWriteBatchedInsertsEnabled()
    Specified by:
      `isReWriteBatchedInsertsEnabled` in interface `QueryExecutor`

  - ### borrowQuery

    public final CachedQuery borrowQuery(String sql) throws SQLException
    Specified by:
      `borrowQuery` in interface `QueryExecutor`
    Throws:
      `SQLException`

  - ### borrowCallableQuery

    public final CachedQuery borrowCallableQuery(String sql) throws SQLException
    Specified by:
      `borrowCallableQuery` in interface `QueryExecutor`
    Throws:
      `SQLException`

  - ### borrowReturningQuery

    public final CachedQuery borrowReturningQuery(String sql, String @Nullable [] columnNames) throws SQLException
    Specified by:
      `borrowReturningQuery` in interface `QueryExecutor`
    Throws:
      `SQLException`

  - ### borrowQueryByKey

    public CachedQuery borrowQueryByKey(Object key) throws SQLException
    Specified by:
      `borrowQueryByKey` in interface `QueryExecutor`
    Throws:
      `SQLException`

  - ### releaseQuery

    public void releaseQuery(CachedQuery cachedQuery)
    Specified by:
      `releaseQuery` in interface `QueryExecutor`

  - ### createQueryKey

    public final Object createQueryKey(String sql, boolean escapeProcessing, boolean isParameterized, String @Nullable ... columnNames)
    Specified by:
      `createQueryKey` in interface `QueryExecutor`

  - ### createQueryByKey

    public CachedQuery createQueryByKey(Object key) throws SQLException
    Specified by:
      `createQueryByKey` in interface `QueryExecutor`
    Throws:
      `SQLException`

  - ### createQuery

    public final CachedQuery createQuery(String sql, boolean escapeProcessing, boolean isParameterized, String @Nullable ... columnNames) throws SQLException
    Specified by:
      `createQuery` in interface `QueryExecutor`
    Throws:
      `SQLException`

  - ### isColumnSanitiserDisabled

    public boolean isColumnSanitiserDisabled()
    Specified by:
      `isColumnSanitiserDisabled` in interface `QueryExecutor`

  - ### getEscapeSyntaxCallMode

    public EscapeSyntaxCallMode getEscapeSyntaxCallMode()
    Specified by:
      `getEscapeSyntaxCallMode` in interface `QueryExecutor`

  - ### getPreferQueryMode

    public PreferQueryMode getPreferQueryMode()
    Specified by:
      `getPreferQueryMode` in interface `QueryExecutor`

  - ### setPreferQueryMode

    public void setPreferQueryMode(PreferQueryMode mode)
    Specified by:
      `setPreferQueryMode` in interface `QueryExecutor`

  - ### getAutoSave

    public AutoSave getAutoSave()
    Specified by:
      `getAutoSave` in interface `QueryExecutor`

  - ### setAutoSave

    public void setAutoSave(AutoSave autoSave)
    Specified by:
      `setAutoSave` in interface `QueryExecutor`

  - ### willHealViaReparse

    protected boolean willHealViaReparse(SQLException e)

  - ### willHealOnRetry

    public boolean willHealOnRetry(SQLException e)
    Specified by:
      `willHealOnRetry` in interface `QueryExecutor`

  - ### isFlushCacheOnDeallocate

    public boolean isFlushCacheOnDeallocate()

  - ### setFlushCacheOnDeallocate

    public void setFlushCacheOnDeallocate(boolean flushCacheOnDeallocate)
    Description copied from interface: `QueryExecutor`
    By default, the connection resets statement cache in case deallocate all/discard all message is observed. This API allows to disable that feature for testing purposes.
    Specified by:
      `setFlushCacheOnDeallocate` in interface `QueryExecutor`
    Parameters:
      `flushCacheOnDeallocate` - true if statement cache should be reset when "deallocate/discard" message observed

  - ### hasNotifications

    protected boolean hasNotifications()

  - ### getParameterStatuses

    public final Map<String,String> getParameterStatuses()
    Specified by:
      `getParameterStatuses` in interface `QueryExecutor`

  - ### getParameterStatus

    public final @Nullable String getParameterStatus(String parameterName)
    Specified by:
      `getParameterStatus` in interface `QueryExecutor`

  - ### onParameterStatus

    protected void onParameterStatus(String parameterName, String parameterStatus)
    Update the parameter status map in response to a new ParameterStatus wire protocol message.

    The server sends ParameterStatus messages when GUC_REPORT settings are initially assigned and whenever they change.

    A future version may invoke a client-defined listener class at this point, so this should be the only access path.

    Keys are case-insensitive and case-preserving.

    The server doesn't provide a way to report deletion of a reportable parameter so we don't expose one here.

    Parameters:
      `parameterName` - case-insensitive case-preserving name of parameter to create or update
      `parameterStatus` - new value of parameter
    See Also:
      - `PGConnection.getParameterStatuses()`
      - `PGConnection.getParameterStatus(java.lang.String)`