public abstract class Fetch extends java.lang.Object implements Traverseproc
The responsibility of a Fetch instance is to manage the iteration of a ResultSet. Two different alogorithms are available: static or dynamic.
Static The static variety iterates the entire set immediately, creating the necessary Jython objects and storing them. It is able to immediately close the ResultSet so a call to close() is essentially a no-op from a database resource perspective (it does clear the results list however). This approach also allows for the correct rowcount to be determined since the entire result set has been iterated.
Dynamic The dynamic variety iterates the result set only as requested. This holds a bit truer to the intent of the API as the fetch*() methods actually fetch when instructed. This is especially useful for managing exeedingly large results, but is unable to determine the rowcount without having worked through the entire result set. The other disadvantage is the ResultSet remains open throughout the entire iteration. So the tradeoff is in open database resources versus JVM resources since the application can keep constant space if it doesn't require the entire result set be presented as one.
Modifier and Type | Field and Description |
---|---|
protected PyObject |
description
Field description
|
protected int |
rowcount
The total number of rows in the result set.
|
protected int |
rownumber
The current row of the cursor (-1 if off either end).
|
Modifier | Constructor and Description |
---|---|
protected |
Fetch(DataHandler datahandler)
Constructor Fetch
|
Modifier and Type | Method and Description |
---|---|
abstract void |
add(java.sql.CallableStatement callableStatement,
Procedure procedure,
PyObject params)
Method add
|
abstract void |
add(java.sql.ResultSet resultSet)
Create the results after a successful execution and manages the result set.
|
abstract void |
add(java.sql.ResultSet resultSet,
java.util.Set<java.lang.Integer> skipCols)
Create the results after a successful execution and manages the result set.
|
void |
addWarningListener(WarningListener listener) |
void |
close()
Cleanup any resources.
|
protected PyObject |
createDescription(Procedure procedure)
Builds a tuple containing the meta-information about each column.
|
protected PyObject |
createDescription(java.sql.ResultSetMetaData meta)
Builds a tuple containing the meta-information about each column.
|
protected PyTuple |
createResult(java.sql.ResultSet set,
java.util.Set<java.lang.Integer> skipCols,
PyObject metaData)
Creates the individual result row from the current ResultSet row.
|
protected PyObject |
createResults(java.sql.CallableStatement callableStatement,
Procedure procedure,
PyObject params)
Method createResults
|
protected PyList |
createResults(java.sql.ResultSet set,
java.util.Set<java.lang.Integer> skipCols,
PyObject metaData)
Creates the results of a query.
|
abstract PyObject |
fetchall()
Fetch all (remaining) rows of a query result, returning them as a sequence
of sequences (e.g.
|
abstract PyObject |
fetchmany(int size)
Fetch the next set of rows of a query result, returning a sequence of
sequences (e.g.
|
PyObject |
fetchone()
Fetch the next row of a query result set, returning a single sequence,
or None when no more data is available.
|
protected void |
fireWarning(java.sql.SQLWarning warning) |
PyObject |
getDescription()
The description of each column, in order, for the data in the result
set.
|
int |
getRowCount()
The number of rows in the current result set.
|
static Fetch |
newFetch(DataHandler datahandler,
boolean dynamic)
Method newFetch
|
abstract PyObject |
nextset()
Move the result pointer to the next set if available.
|
boolean |
refersDirectlyTo(PyObject ob)
Optional operation.
|
boolean |
removeWarningListener(WarningListener listener) |
abstract void |
scroll(int value,
java.lang.String mode)
Scroll the cursor in the result set to a new position according
to mode.
|
int |
traverse(Visitproc visit,
java.lang.Object arg)
Traverses all directly contained
PyObject s. |
protected int rowcount
Note: since JDBC provides no means to get this information without iterating the entire result set, only those fetches which build the result statically will have an accurate row count.
protected int rownumber
protected PyObject description
protected Fetch(DataHandler datahandler)
datahandler
- public static Fetch newFetch(DataHandler datahandler, boolean dynamic)
datahandler
- dynamic
- public int getRowCount()
public PyObject getDescription()
public abstract void add(java.sql.ResultSet resultSet)
resultSet
- public abstract void add(java.sql.ResultSet resultSet, java.util.Set<java.lang.Integer> skipCols)
resultSet
- skipCols
- JDBC-indexed set of columns to be skippedpublic abstract void add(java.sql.CallableStatement callableStatement, Procedure procedure, PyObject params)
callableStatement
- procedure
- params
- public PyObject fetchone()
An Error (or subclass) exception is raised if the previous call to executeXXX() did not produce any result set or no call was issued yet.
public abstract PyObject fetchall()
An Error (or subclass) exception is raised if the previous call to executeXXX() did not produce any result set or no call was issued yet.
public abstract PyObject fetchmany(int size)
The number of rows to fetch per call is specified by the parameter. If it is not given, the cursor's arraysize determines the number of rows to be fetched. The method should try to fetch as many rows as indicated by the size parameter. If this is not possible due to the specified number of rows not being available, fewer rows may be returned.
An Error (or subclass) exception is raised if the previous call to executeXXX() did not produce any result set or no call was issued yet.
Note there are performance considerations involved with the size parameter. For optimal performance, it is usually best to use the arraysize attribute. If the size parameter is used, then it is best for it to retain the same value from one fetchmany() call to the next.
public abstract PyObject nextset()
public abstract void scroll(int value, java.lang.String mode)
If mode is 'relative' (default), value is taken as offset to the current position in the result set, if set to 'absolute', value states an absolute target position.
An IndexError should be raised in case a scroll operation would leave the result set. In this case, the cursor position is left undefined (ideal would be to not move the cursor at all).
Note: This method should use native scrollable cursors, if available, or revert to an emulation for forward-only scrollable cursors. The method may raise NotSupportedErrors to signal that a specific operation is not supported by the database (e.g. backward scrolling).
value
- mode
- public void close() throws java.sql.SQLException
java.sql.SQLException
protected PyObject createDescription(java.sql.ResultSetMetaData meta) throws java.sql.SQLException
(name, type_code, display_size, internal_size, precision, scale, null_ok)
precision and scale are only available for numeric types
java.sql.SQLException
protected PyObject createDescription(Procedure procedure) throws java.sql.SQLException
(name, type_code, display_size, internal_size, precision, scale, null_ok)
precision and scale are only available for numeric types
java.sql.SQLException
protected PyObject createResults(java.sql.CallableStatement callableStatement, Procedure procedure, PyObject params) throws java.sql.SQLException
callableStatement
- procedure
- params
- java.sql.SQLException
protected PyList createResults(java.sql.ResultSet set, java.util.Set<java.lang.Integer> skipCols, PyObject metaData) throws java.sql.SQLException
set
- result setskipCols
- set of JDBC-indexed columns to automatically set to Nonejava.sql.SQLException
protected PyTuple createResult(java.sql.ResultSet set, java.util.Set<java.lang.Integer> skipCols, PyObject metaData) throws java.sql.SQLException
set
- result setskipCols
- set of JDBC-indexed columns to automatically set to Nonejava.sql.SQLException
protected void fireWarning(java.sql.SQLWarning warning)
public void addWarningListener(WarningListener listener)
public boolean removeWarningListener(WarningListener listener)
public int traverse(Visitproc visit, java.lang.Object arg)
Traverseproc
PyObject
s.
Like in CPython, arg
must be passed
unmodified to visit
as its second parameter.
If Visitproc.visit(PyObject, Object)
returns
nonzero, this return value
must be returned immediately by traverse.
Visitproc.visit(PyObject, Object)
must not be
called with a null
PyObject-argument.traverse
in interface Traverseproc
public boolean refersDirectlyTo(PyObject ob) throws java.lang.UnsupportedOperationException
Traverseproc
Traverseproc.traverse(Visitproc, Object)
with
a visitproc that just watches out for ob
.
Must return false
if ob
is null
.refersDirectlyTo
in interface Traverseproc
java.lang.UnsupportedOperationException