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:
java.lang.AutoCloseable
,FbStatement
,ExceptionListenable
,FbWireStatement
- Direct Known Subclasses:
V11Statement
public class V10Statement extends AbstractFbWireStatement implements FbWireStatement
FbWireStatement
implementation for the version 10 wire protocol.- Since:
- 3.0
- Author:
- Mark Rotteveel
-
-
Field Summary
-
Fields inherited from class org.firebirdsql.gds.ng.AbstractFbStatement
exceptionListenerDispatcher, statementListenerDispatcher
-
-
Constructor Summary
Constructors Constructor Description V10Statement(FbWireDatabase database)
Creates a new instance of V10Statement for the specified database.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
doFreePacket(int option)
Handles sending the free statement packet and associated state changes on this statementvoid
execute(RowValue parameters)
Execute the statement.void
fetchRows(int fetchSize)
Requests this statement to fetch the nextfetchSize
rows.protected void
free(int option)
Frees the currently allocated statement.int
getDefaultSqlInfoSize()
int
getMaxSqlInfoSize()
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(FetchDirection direction)
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 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 (forop_execute
orop_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 databaseprotected 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, FieldDescriptor fieldDescriptor)
protected void
writeSqlData(RowDescriptor rowDescriptor, RowValue fieldValues, boolean useActualLength)
Write a set of SQL data from aRowValue
.-
Methods inherited from class org.firebirdsql.gds.ng.wire.AbstractFbWireStatement
calculateBlr, calculateBlr, close, emptyRowDescriptor, getBlrCalculator, getDatabase, getHandle, getInfo, getSqlInfo, getXdrIn, getXdrOut, isValidTransactionClass, setHandle, withLock, wrapDeferredResponse
-
Methods inherited from class org.firebirdsql.gds.ng.AbstractFbStatement
addExceptionListener, addStatementListener, checkStatementValid, checkStatementValid, closeCursor, closeCursor, createExecutionPlanProcessor, createSqlCountProcessor, ensureClosedCursor, fetchScroll, fetchScrollImpl, finalize, forceState, getAllowedTimeout, getCursorInfo, getCursorInfo, getCursorInfoImpl, getExecutionPlan, getExplainedExecutionPlan, getParameterDescriptionInfoRequestItems, getParameterDescriptor, getRowDescriptor, getSqlCounts, getSqlInfo, getState, getStatementInfoRequestItems, getStatementWarningCallback, getTimeout, getTransaction, getTransactionListener, getType, hasFetched, hasFields, hasSingletonResult, isAfterLast, isBeforeFirst, isPrepareAllowed, parseStatementInfo, queueRowData, removeExceptionListener, removeStatementListener, reset, reset, resetAll, setAfterLast, setBeforeFirst, setParameterDescriptor, setRowDescriptor, setTimeout, setTransaction, setType, signalExecute, signalFetch, switchState, unprepare, 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.listeners.ExceptionListenable
addExceptionListener, removeExceptionListener
-
Methods inherited from interface org.firebirdsql.gds.ng.FbStatement
addStatementListener, batchCancel, batchExecute, clearCursorFlag, close, closeCursor, closeCursor, createBatchParameterBuffer, deferredBatchCreate, deferredBatchRelease, deferredBatchSend, emptyRowDescriptor, ensureClosedCursor, fetchScroll, getCursorInfo, getCursorInfo, getDatabase, getExecutionPlan, getExplainedExecutionPlan, getHandle, getParameterDescriptor, getRowDescriptor, getSqlCounts, getSqlInfo, getSqlInfo, getState, getTimeout, getTransaction, getType, hasFetched, isCursorFlagSet, removeStatementListener, setCursorFlag, setTimeout, setTransaction, supportBatchUpdates, supportsCursorInfo, supportsFetchScroll, unprepare, validateParameters, withLock
-
-
-
-
Constructor Detail
-
V10Statement
public V10Statement(FbWireDatabase database)
Creates a new instance of V10Statement for the specified database.- Parameters:
database
- FbWireDatabase implementation
-
-
Method Detail
-
free
protected void free(int option) throws java.sql.SQLException
Description copied from class:AbstractFbStatement
Frees the currently allocated statement. Either close the cursor withISCConstants.DSQL_close
or drop the statement handle usingISCConstants.DSQL_drop
.- Specified by:
free
in classAbstractFbStatement
- 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 interfaceFbStatement
- 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 interfaceFbStatement
- 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 interfaceFbStatement
- 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 byFbStatement.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 (forop_execute
orop_execute2
) to the database.- Parameters:
operation
- Operation (op_execute
orop_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 nextfetchSize
rows.Fetched rows are not returned from this method, but sent to the registered
StatementListener
instances.- Specified by:
fetchRows
in interfaceFbStatement
- Parameters:
fetchSize
- Number of rows to fetch (must be greater than0
)- 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 greater than0
.
-
processFetchResponse
protected void processFetchResponse(FetchDirection direction) throws java.io.IOException, java.sql.SQLException
Process the fetch response by reading the returned rows and queuing them.- Parameters:
direction
- fetch direction- 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, boolean useActualLength) throws java.io.IOException, java.sql.SQLException
Write a set of SQL data from aRowValue
.- Parameters:
rowDescriptor
- The row descriptorfieldValues
- The List containing the SQL data to be writtenuseActualLength
- Should actual field length be used (applies to CHAR)- Throws:
java.io.IOException
- if an error occurs while writing to the underlying output streamjava.sql.SQLException
-
writeColumnData
protected void writeColumnData(XdrOutputStream xdrOut, int len, byte[] buffer, FieldDescriptor fieldDescriptor) 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 interfaceFbStatement
- Returns:
- The default size to use for the sql info buffer
-
getMaxSqlInfoSize
public int getMaxSqlInfoSize()
- Specified by:
getMaxSqlInfoSize
in interfaceFbStatement
- Returns:
- The maximum size to use for the sql info buffer
-
-