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 Details

    • pgStream

      protected final PGStream pgStream
    • closeAction

      protected final QueryExecutorCloseAction closeAction
    • logServerErrorDetail

      protected final boolean logServerErrorDetail
    • lock

      protected final ResourceLock lock
    • lockCondition

      protected final Condition lockCondition
  • Constructor Details

  • 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, int 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

      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
    • 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: