com.ziclix.python.sql
Class Fetch

java.lang.Object
  |
  +--com.ziclix.python.sql.Fetch

public abstract class Fetch
extends java.lang.Object

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.

Version:
$Revision: 1.4 $
Author:
brian zimmer

Constructor Summary
Fetch(PyCursor cursor)
          Constructor Fetch
 
Method Summary
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 skipCols)
          Create the results after a successful execution and manages the result set.
abstract  void close()
          Cleanup any resources.
abstract  PyObject fetchall()
          Fetch all (remaining) rows of a query result, returning them as a sequence of sequences (e.g. a list of tuples).
abstract  PyObject fetchmany(int size)
          Fetch the next set of rows of a query result, returning a sequence of sequences (e.g. a list of tuples).
 PyObject fetchone()
          Fetch the next row of a query result set, returning a single sequence, or None when no more data is available.
 PyObject getDescription()
          Return the description of the result.
 int getRowCount()
          Return the total row count.
abstract  PyObject nextset()
          Move the result pointer to the next set if available.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Fetch

public Fetch(PyCursor cursor)
Constructor Fetch

Method Detail

add

public abstract void add(java.sql.ResultSet resultSet)
Create the results after a successful execution and manages the result set.


add

public abstract void add(java.sql.ResultSet resultSet,
                         java.util.Set skipCols)
Create the results after a successful execution and manages the result set. Optionally takes a set of JDBC-indexed columns to automatically set to None primarily to support getTypeInfo() which sets a column type of a number but doesn't use the value so a driver is free to put anything it wants there.


add

public abstract void add(java.sql.CallableStatement callableStatement,
                         Procedure procedure,
                         PyObject params)
Method add


fetchone

public PyObject fetchone()
Fetch the next row of a query result set, returning a single sequence, or None when no more data is available. 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.

Returns:
a single sequence from the result set, or None when no more data is available

fetchall

public abstract PyObject fetchall()
Fetch all (remaining) rows of a query result, returning them as a sequence of sequences (e.g. a list of tuples). Note that the cursor's arraysize attribute can affect the performance of this operation. 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.

Returns:
a sequence of sequences from the result set, or None when no more data is available

fetchmany

public abstract PyObject fetchmany(int size)
Fetch the next set of rows of a query result, returning a sequence of sequences (e.g. a list of tuples). An empty sequence is returned when no more rows are available. 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.

Returns:
a sequence of sequences from the result set, or None when no more data is available

nextset

public abstract PyObject nextset()
Move the result pointer to the next set if available.

Returns:
true if more sets exist, else None

close

public abstract void close()
                    throws java.sql.SQLException
Cleanup any resources.

java.sql.SQLException

getRowCount

public int getRowCount()
Return the total row count. 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.


getDescription

public PyObject getDescription()
Return the description of the result.



Jython homepage