Class QueryExecutorImpl

    • Constructor Detail

      • QueryExecutorImpl

        public QueryExecutorImpl​(PGStream pgStream,
                                 java.lang.String user,
                                 java.lang.String database,
                                 int cancelSignalTimeout,
                                 java.util.Properties info)
                          throws java.sql.SQLException,
                                 java.io.IOException
        Throws:
        java.sql.SQLException
        java.io.IOException
    • Method Detail

      • getProtocolVersion

        public int getProtocolVersion()
        Returns:
        the version of the implementation
      • createSimpleQuery

        public Query createSimpleQuery​(java.lang.String sql)
                                throws java.sql.SQLException
        Description copied from interface: QueryExecutor
        Create an unparameterized Query object suitable for execution by this QueryExecutor. The provided query string is not parsed for parameter placeholders ('?' characters), and the Query.createParameterList() of the returned object will always return an empty ParameterList.
        Parameters:
        sql - the SQL for the query to create
        Returns:
        a new Query object
        Throws:
        java.sql.SQLException - if something goes wrong
      • wrap

        public Query wrap​(java.util.List<NativeQuery> queries)
        Description copied from interface: QueryExecutor
        Wrap given native query into a ready for execution format.
        Parameters:
        queries - list of queries in native to database syntax
        Returns:
        query object ready for execution by this query executor
      • execute

        public void execute​(Query query,
                            ParameterList parameters,
                            ResultHandler handler,
                            int maxRows,
                            int fetchSize,
                            int flags)
                     throws java.sql.SQLException
        Description copied from interface: QueryExecutor
        Execute a Query, passing results to a provided ResultHandler.
        Parameters:
        query - the query to execute; must be a query returned from calling QueryExecutor.wrap(List) on this QueryExecutor object.
        parameters - the parameters for the query. Must be non-null if the query takes parameters. Must be a parameter object returned by Query.createParameterList().
        handler - a ResultHandler responsible for handling results generated by this query
        maxRows - the maximum number of rows to retrieve
        fetchSize - if QUERY_FORWARD_CURSOR is set, the preferred number of rows to retrieve before suspending
        flags - a combination of QUERY_* flags indicating how to handle the query.
        Throws:
        java.sql.SQLException - if query execution fails
      • execute

        public void execute​(Query[] queries,
                            ParameterList[] parameterLists,
                            BatchResultHandler batchHandler,
                            int maxRows,
                            int fetchSize,
                            int flags)
                     throws java.sql.SQLException
        Description copied from interface: QueryExecutor
        Execute several Query, passing results to a provided ResultHandler.
        Parameters:
        queries - the queries to execute; each must be a query returned from calling QueryExecutor.wrap(List) on this QueryExecutor object.
        parameterLists - the parameter lists for the queries. The parameter lists correspond 1:1 to the queries passed in the queries array. Each must be non- null if the corresponding query takes parameters, and must be a parameter object returned by Query.createParameterList() created by the corresponding query.
        batchHandler - a ResultHandler responsible for handling results generated by this query
        maxRows - the maximum number of rows to retrieve
        fetchSize - if QUERY_FORWARD_CURSOR is set, the preferred number of rows to retrieve before suspending
        flags - a combination of QUERY_* flags indicating how to handle the query.
        Throws:
        java.sql.SQLException - if query execution fails
      • fastpathCall

        public byte[] fastpathCall​(int fnid,
                                   ParameterList parameters,
                                   boolean suppressBegin)
                            throws java.sql.SQLException
        Description copied from interface: QueryExecutor
        Invoke a backend function via the fastpath interface.
        Parameters:
        fnid - the OID of the backend function to invoke
        parameters - a ParameterList returned from QueryExecutor.createFastpathParameters(int) containing the parameters to pass to the backend function
        suppressBegin - if begin should be suppressed
        Returns:
        the binary-format result of the fastpath call, or null if a void result was returned
        Throws:
        java.sql.SQLException - if an error occurs while executing the fastpath call
      • doSubprotocolBegin

        public void doSubprotocolBegin()
                                throws java.sql.SQLException
        Throws:
        java.sql.SQLException
      • processNotifies

        public void processNotifies()
                             throws java.sql.SQLException
        Description copied from interface: QueryExecutor
        Prior to attempting to retrieve notifications, we need to pull any recently received notifications off of the network buffers. The notification retrieval in ProtocolConnection cannot do this as it is prone to deadlock, so the higher level caller must be responsible which requires exposing this method.
        Throws:
        java.sql.SQLException - if and error occurs while fetching notifications
      • processNotifies

        public void processNotifies​(int timeoutMillis)
                             throws java.sql.SQLException
        Description copied from interface: QueryExecutor
        Prior to attempting to retrieve notifications, we need to pull any recently received notifications off of the network buffers. The notification retrieval in ProtocolConnection cannot do this as it is prone to deadlock, so the higher level caller must be responsible which requires exposing this method. This variant supports blocking for the given time in millis.
        Parameters:
        timeoutMillis - when > 0, block for this time when =0, block forever when < 0, don't block
        Throws:
        java.sql.SQLException - if and error occurs while fetching notifications
      • startCopy

        public CopyOperation startCopy​(java.lang.String sql,
                                       boolean suppressBegin)
                                throws java.sql.SQLException
        Sends given query to BE to start, initialize and lock connection for a CopyOperation.
        Parameters:
        sql - COPY FROM STDIN / COPY TO STDOUT statement
        suppressBegin - if begin should be suppressed
        Returns:
        CopyIn or CopyOut operation object
        Throws:
        java.sql.SQLException - on failure
      • cancelCopy

        public void cancelCopy​(CopyOperationImpl op)
                        throws java.sql.SQLException
        Finishes a copy operation and unlocks connection discarding any exchanged data.
        Parameters:
        op - the copy operation presumably currently holding lock on this connection
        Throws:
        java.sql.SQLException - on any additional failure
      • endCopy

        public long endCopy​(CopyOperationImpl op)
                     throws java.sql.SQLException
        Finishes writing to copy and unlocks connection.
        Parameters:
        op - the copy operation presumably currently holding lock on this connection
        Returns:
        number of rows updated for server versions 8.2 or newer
        Throws:
        java.sql.SQLException - on failure
      • writeToCopy

        public void writeToCopy​(CopyOperationImpl op,
                                byte[] data,
                                int off,
                                int siz)
                         throws java.sql.SQLException
        Sends data during a live COPY IN operation. Only unlocks the connection if server suddenly returns CommandComplete, which should not happen
        Parameters:
        op - the CopyIn operation presumably currently holding lock on this connection
        data - bytes to send
        off - index of first byte to send (usually 0)
        siz - number of bytes to send (usually data.length)
        Throws:
        java.sql.SQLException - on failure
      • writeToCopy

        public void writeToCopy​(CopyOperationImpl op,
                                ByteStreamWriter from)
                         throws java.sql.SQLException
        Sends data during a live COPY IN operation. Only unlocks the connection if server suddenly returns CommandComplete, which should not happen
        Parameters:
        op - the CopyIn operation presumably currently holding lock on this connection
        from - the source of bytes, e.g. a ByteBufferByteStreamWriter
        Throws:
        java.sql.SQLException - on failure
      • flushCopy

        public void flushCopy​(CopyOperationImpl op)
                       throws java.sql.SQLException
        Throws:
        java.sql.SQLException
      • processResults

        protected void processResults​(ResultHandler handler,
                                      int flags)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • fetch

        public void fetch​(ResultCursor cursor,
                          ResultHandler handler,
                          int fetchSize)
                   throws java.sql.SQLException
        Description copied from interface: QueryExecutor
        Fetch additional rows from a cursor.
        Parameters:
        cursor - the cursor to fetch from
        handler - the handler to feed results to
        fetchSize - the preferred number of rows to retrieve before suspending
        Throws:
        java.sql.SQLException - if query execution fails
      • sendCloseMessage

        protected void sendCloseMessage()
                                 throws java.io.IOException
        Specified by:
        sendCloseMessage in class QueryExecutorBase
        Throws:
        java.io.IOException
      • readStartupMessages

        public void readStartupMessages()
                                 throws java.io.IOException,
                                        java.sql.SQLException
        Throws:
        java.io.IOException
        java.sql.SQLException
      • receiveParameterStatus

        public void receiveParameterStatus()
                                    throws java.io.IOException,
                                           java.sql.SQLException
        Throws:
        java.io.IOException
        java.sql.SQLException
      • setTimeZone

        public void setTimeZone​(java.util.TimeZone timeZone)
      • getTimeZone

        public java.util.TimeZone getTimeZone()
        Description copied from interface: QueryExecutor
        Returns backend timezone in java format.
        Returns:
        backend timezone in java format.
      • setApplicationName

        public void setApplicationName​(java.lang.String applicationName)
      • getApplicationName

        public java.lang.String getApplicationName()
        Description copied from interface: QueryExecutor
        Returns application_name connection property.
        Returns:
        application_name connection property
      • getReplicationProtocol

        public ReplicationProtocol getReplicationProtocol()
        Returns:
        the ReplicationProtocol instance for this connection.
      • useBinaryForReceive

        public boolean useBinaryForReceive​(int oid)
        Description copied from interface: TypeTransferModeRegistry
        Returns if given oid should be received in binary format.
        Parameters:
        oid - type oid
        Returns:
        true if given oid should be received in binary format
      • setBinaryReceiveOids

        public void setBinaryReceiveOids​(java.util.Set<java.lang.Integer> oids)
        Description copied from interface: QueryExecutor
        Sets the oids that should be received using binary encoding.
        Parameters:
        oids - The oids to request with binary encoding.
      • useBinaryForSend

        public boolean useBinaryForSend​(int oid)
        Description copied from interface: TypeTransferModeRegistry
        Returns if given oid should be sent in binary format.
        Parameters:
        oid - type oid
        Returns:
        true if given oid should be sent in binary format
      • setBinarySendOids

        public void setBinarySendOids​(java.util.Set<java.lang.Integer> oids)
        Description copied from interface: QueryExecutor
        Sets the oids that should be sent using binary encoding.
        Parameters:
        oids - The oids to send with binary encoding.
      • getIntegerDateTimes

        public boolean getIntegerDateTimes()
        Description copied from interface: QueryExecutor
        Returns true if server uses integer instead of double for binary date and time encodings.
        Returns:
        the server integer_datetime setting.