org.firebirdsql.gds.ng.wire.version10

## Class V10Statement

- java.lang.Object
- - org.firebirdsql.gds.ng.AbstractFbStatement
  - - org.firebirdsql.gds.ng.wire.AbstractFbWireStatement
    - - org.firebirdsql.gds.ng.wire.version10.V10Statement

All Implemented Interfaces:
  FbStatement, ExceptionListenable, FbWireStatement

Direct Known Subclasses:
  V11Statement

    public class V10Statement
    extends AbstractFbWireStatement
    implements FbWireStatement

Since:
  3.0
Author:
  Mark Rotteveel

### Field Summary

### Fields inherited from class org.firebirdsql.gds.ng.AbstractFbStatement

`exceptionListenerDispatcher, statementListenerDispatcher`

### Constructor Summary

Constructors
Constructor and Description
`V10Statement(FbWireDatabase database)` Creates a new instance of V10Statement for the specified database.

### Method Summary

Methods
`protected void` `doFreePacket(int option)` Handles sending the free statement packet and associated state changes on this statement
`void` `execute(RowValue parameters)` Execute the statement.
`void` `fetchRows(int fetchSize)` Requests this statement to fetch the next `fetchSize` rows.
`protected void` `free(int option)` Frees the currently allocated statement (either close the cursor with `ISCConstants.DSQL_close` or drop the statement handle using `ISCConstants.DSQL_drop`.
`int` `getDefaultSqlInfoSize()`
`int` `getMaxSqlInfoSize()`
`byte[]` `getSqlInfo(byte[] requestItems, int bufferLength)` Request statement info.
`void` `prepare(java.lang.String statementText)` Prepare the statement text.
`protected void` `processAllocateResponse(GenericResponse response)` Processes the allocate response from the server.
`protected void` `processExecuteResponse(GenericResponse genericResponse)` Process the execute response.
`protected void` `processExecuteSingletonResponse(SqlResponse sqlResponse)` Process the execute response for statements with a singleton response (`op_execute2`; stored procedures).
`protected void` `processFetchResponse()` Process the fetch response by reading the returned rows and queuing them.
`protected void` `processFreeResponse(Response response)` Processes the response to the free statement.
`protected byte[]` `processInfoSqlResponse(GenericResponse response)` Processes the info sql response.
`protected void` `processPrepareResponse(GenericResponse genericResponse)` Processes the prepare response from the server.
`protected byte[]` `readColumnData(XdrInputStream xdrIn, int len)`
`protected RowValue` `readSqlData()` Reads a single row from the database.
`protected void` `sendAllocate()` Sends the allocate request to the server.
`protected void` `sendExecute(int operation, RowValue parameters)` Sends the execute (for `op_execute` or `op_execute2`) to the database.
`protected void` `sendFetch(int fetchSize)` Sends the fetch request to the database.
`protected void` `sendFree(int option)` Sends the free statement to the database
`protected void` `sendInfoSql(byte[] requestItems, int bufferLength)` Sends the info sql request to the database
`protected void` `sendPrepare(java.lang.String statementText)` Sends the statement prepare to the connection.
`void` `setCursorName(java.lang.String cursorName)` Sets the named cursor name for this statement.
`protected void` `writeColumnData(XdrOutputStream xdrOut, int len, byte[] buffer, int fieldType)`
`protected void` `writeSqlData(RowDescriptor rowDescriptor, RowValue fieldValues)` Write a set of SQL data from a `RowValue`.

### Methods inherited from class org.firebirdsql.gds.ng.wire.AbstractFbWireStatement

`calculateBlr, calculateBlr, close, emptyRowDescriptor, getDatabase, getHandle, getXdrIn, getXdrOut, isValidTransactionClass, setHandle`

### Methods inherited from class org.firebirdsql.gds.ng.AbstractFbStatement

`addExceptionListener, addStatementListener, checkStatementValid, checkStatementValid, closeCursor, closeCursor, createExecutionPlanProcessor, createSqlCountProcessor, ensureClosedCursor, finalize, getAllowedTimeout, getExecutionPlan, getExplainedExecutionPlan, getFieldDescriptor, getParameterDescriptionInfoRequestItems, getParameterDescriptor, getRowDescriptor, getSqlCounts, getSqlInfo, getState, getStatementInfoRequestItems, getStatementWarningCallback, getSynchronizationObject, getTimeout, getTransaction, getTransactionListener, getType, hasFields, hasSingletonResult, isAllRowsFetched, isPrepareAllowed, parseStatementInfo, queueRowData, removeExceptionListener, removeStatementListener, reset, reset, resetAll, setAllRowsFetched, setFieldDescriptor, setParameterDescriptor, setRowDescriptor, setTimeout, setTransaction, setType, signalExecute, signalFetch, switchState, validateParameters`

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

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

### Methods inherited from interface org.firebirdsql.gds.ng.FbStatement

`addStatementListener, close, closeCursor, closeCursor, emptyRowDescriptor, ensureClosedCursor, getDatabase, getExecutionPlan, getExplainedExecutionPlan, getFieldDescriptor, getHandle, getParameterDescriptor, getRowDescriptor, getSqlCounts, getSqlInfo, getState, getTimeout, getTransaction, getType, removeStatementListener, setTimeout, setTransaction, validateParameters`

### Methods inherited from interface org.firebirdsql.gds.ng.listeners.ExceptionListenable

`addExceptionListener, removeExceptionListener`

### Constructor Detail

#### V10Statement

    public V10Statement(FbWireDatabase database)

Creates a new instance of V10Statement for the specified database.

Parameters:
  `database` - FbWireDatabase implementation

### Method Detail

#### getSqlInfo

    public byte[] getSqlInfo(byte[] requestItems,
                    int bufferLength)
                      throws java.sql.SQLException

Description copied from interface: `FbStatement`
Request statement info.

Specified by:
  `getSqlInfo` in interface `FbStatement`
Parameters:
  `requestItems` - Array of info items to request
  `bufferLength` - Response buffer length to use
Returns:
  Response buffer
Throws:
  `java.sql.SQLException`

#### sendInfoSql

    protected void sendInfoSql(byte[] requestItems,
                   int bufferLength)
                        throws java.io.IOException,
                               java.sql.SQLException

Sends the info sql request to the database

Parameters:
  `requestItems` - Info request items
  `bufferLength` - Requested response buffer length
Throws:
  `java.io.IOException`
  `java.sql.SQLException`

#### processInfoSqlResponse

    protected byte[] processInfoSqlResponse(GenericResponse response)

Processes the info sql response.

Parameters:
  `response` - GenericResponse
Returns:
  info sql response buffer

#### free

    protected void free(int option)
                 throws java.sql.SQLException

Description copied from class: `AbstractFbStatement`
Frees the currently allocated statement (either close the cursor with `ISCConstants.DSQL_close` or drop the statement handle using `ISCConstants.DSQL_drop`.

Specified by:
  `free` in class `AbstractFbStatement`
Parameters:
  `option` - Free option
Throws:
  `java.sql.SQLException`

#### doFreePacket

    protected void doFreePacket(int option)
                         throws java.sql.SQLException,
                                java.io.IOException

Handles sending the free statement packet and associated state changes on this statement

Parameters:
  `option` - Free statement option
Throws:
  `java.sql.SQLException`
  `java.io.IOException`

#### sendFree

    protected void sendFree(int option)
                     throws java.io.IOException,
                            java.sql.SQLException

Sends the free statement to the database

Parameters:
  `option` - Free statement option
Throws:
  `java.io.IOException`
  `java.sql.SQLException`

#### processFreeResponse

    protected void processFreeResponse(Response response)

Processes the response to the free statement.

Parameters:
  `response` - Response object

#### prepare

    public void prepare(java.lang.String statementText)
                 throws java.sql.SQLException

Description copied from interface: `FbStatement`
Prepare the statement text.

If this handle is in state `StatementState.NEW` then it will first allocate the statement.

Specified by:
  `prepare` in interface `FbStatement`
Parameters:
  `statementText` - Statement text
Throws:
  `java.sql.SQLException` - If a database access error occurs, or this statement is currently executing a query.

#### sendPrepare

    protected void sendPrepare(java.lang.String statementText)
                        throws java.sql.SQLException,
                               java.io.IOException

Sends the statement prepare to the connection.

Parameters:
  `statementText` - Statement
Throws:
  `java.sql.SQLException`
  `java.io.IOException`

#### processPrepareResponse

    protected void processPrepareResponse(GenericResponse genericResponse)
                                   throws java.sql.SQLException

Processes the prepare response from the server.

Parameters:
  `genericResponse` - GenericResponse
Throws:
  `java.sql.SQLException`

#### setCursorName

    public void setCursorName(java.lang.String cursorName)
                       throws java.sql.SQLException

Description copied from interface: `FbStatement`
Sets the named cursor name for this statement.

Specified by:
  `setCursorName` in interface `FbStatement`
Parameters:
  `cursorName` - Name of the cursor
Throws:
  `java.sql.SQLException` - If this statement is closed, TODO: Other reasons (eg cursor open)?

#### execute

    public void execute(RowValue parameters)
                 throws java.sql.SQLException

Description copied from interface: `FbStatement`
Execute the statement.

Specified by:
  `execute` in interface `FbStatement`
Parameters:
  `parameters` - The list of parameter values to use for execution.
Throws:
  `java.sql.SQLException` - When the number of type of parameters does not match the types returned by `FbStatement.getParameterDescriptor()`, a parameter value was not set, or when an error occurred executing this statement.

#### sendExecute

    protected void sendExecute(int operation,
                   RowValue parameters)
                        throws java.io.IOException,
                               java.sql.SQLException

Sends the execute (for `op_execute` or `op_execute2`) to the database.

Parameters:
  `operation` - Operation (`op_execute` or `op_execute2`)
  `parameters` - Parameters
Throws:
  `java.io.IOException`
  `java.sql.SQLException`

#### processExecuteSingletonResponse

    protected void processExecuteSingletonResponse(SqlResponse sqlResponse)
                                            throws java.sql.SQLException,
                                                   java.io.IOException

Process the execute response for statements with a singleton response (`op_execute2`; stored procedures).

Parameters:
  `sqlResponse` - SQL response object
Throws:
  `java.sql.SQLException`
  `java.io.IOException`

#### processExecuteResponse

    protected void processExecuteResponse(GenericResponse genericResponse)

Process the execute response.

Parameters:
  `genericResponse` - Generic response object

#### fetchRows

    public void fetchRows(int fetchSize)
                   throws java.sql.SQLException

Description copied from interface: `FbStatement`
Requests this statement to fetch the next `fetchSize` rows.

Fetched rows are not returned from this method, but sent to the registered `StatementListener` instances.

Specified by:
  `fetchRows` in interface `FbStatement`
Parameters:
  `fetchSize` - Number of rows to fetch (must be `> 0`)
Throws:
  `java.sql.SQLException` - For database access errors, when called on a closed statement, when no cursor is open or when the fetch size is not `> 0`.

#### processFetchResponse

    protected void processFetchResponse()
                                 throws java.io.IOException,
                                        java.sql.SQLException

Process the fetch response by reading the returned rows and queuing them.

Throws:
  `java.io.IOException`
  `java.sql.SQLException`

#### sendFetch

    protected void sendFetch(int fetchSize)
                      throws java.sql.SQLException,
                             java.io.IOException

Sends the fetch request to the database.

Parameters:
  `fetchSize` - Number of rows to fetch.
Throws:
  `java.sql.SQLException`
  `java.io.IOException`

#### readSqlData

    protected RowValue readSqlData()
                            throws java.sql.SQLException,
                                   java.io.IOException

Reads a single row from the database.

Returns:
  Row as a `RowValue`
Throws:
  `java.sql.SQLException`
  `java.io.IOException`

#### readColumnData

    protected byte[] readColumnData(XdrInputStream xdrIn,
                        int len)
                             throws java.io.IOException

Throws:
  `java.io.IOException`

#### writeSqlData

    protected void writeSqlData(RowDescriptor rowDescriptor,
                    RowValue fieldValues)
                         throws java.io.IOException,
                                java.sql.SQLException

Write a set of SQL data from a `RowValue`.

Parameters:
  `rowDescriptor` - The row descriptor
  `fieldValues` - The List containing the SQL data to be written
Throws:
  `java.io.IOException` - if an error occurs while writing to the underlying output stream
  `java.sql.SQLException`

#### writeColumnData

    protected void writeColumnData(XdrOutputStream xdrOut,
                       int len,
                       byte[] buffer,
                       int fieldType)
                            throws java.io.IOException

Throws:
  `java.io.IOException`

#### sendAllocate

    protected void sendAllocate()
                         throws java.sql.SQLException,
                                java.io.IOException

Sends the allocate request to the server.

Throws:
  `java.sql.SQLException`
  `java.io.IOException`

#### processAllocateResponse

    protected void processAllocateResponse(GenericResponse response)
                                    throws java.sql.SQLException

Processes the allocate response from the server.

Parameters:
  `response` - GenericResponse
Throws:
  `java.sql.SQLException`

#### getDefaultSqlInfoSize

    public int getDefaultSqlInfoSize()

Specified by:
  `getDefaultSqlInfoSize` in interface `FbStatement`
Returns:
  The default size to use for the sql info buffer

#### getMaxSqlInfoSize

    public int getMaxSqlInfoSize()

Specified by:
  `getMaxSqlInfoSize` in interface `FbStatement`
Returns:
  The maximum size to use for the sql info buffer