[DB-SIG] Optional DB API Extensions

M.-A. Lemburg mal@lemburg.com
Tue, 23 Oct 2001 17:04:36 +0200


Here's some food for thought...

PEP: ???
Title: Optional Database API Extensions
Version: $Revision: 1.0 $
Author: mal@lemburg.com (Marc-Andre=82 Lemburg)
Status: Draft
Type: Standards Track
Python-Version: 2.3
Created: 23-Oct-2001
Post-History:=20

Abstract

    This pre-PEP should provide a discussion basis for an "Optional
    Extensions" section in the DB API 2.0 standard PEP 249.

    Feel free to add/change text as required.

Problem

    Even though the DB API 2.0 standard already provides a multitude
    of APIs, there are some common situations where a database package
    writer will want to add features which are specific to the
    database, but which could also be implemented for other databases
    as well.

    This pre-PEP will collect these common extensions for subsequent
    inclusion in the DB API 2.0 standard. Note that all extensions
    will be marked "optional", meaning that database writers are free
    to implement them, but are not required to do so in order to have
    a DB API 2.0 compatible package.

Proposed Common Extensions

    Cursor Attribute .rownumber

       This read-only attribute should provide the current 0-based
       index of the cursor in the result set or -1 if the index cannot
       be determined.

       The index can be seen as index of the cursor in a sequence (the
       result set). The next fetch operation will fetch the row
       indexed by .rownumber.

    Connection Attributes .Error, .ProgrammingError, etc.

       All exception classes defined by the DB API standard should be
       exposed on the Connection objects are attributes (in addition
       to being available at module scope).

       These attributes simplify error handling in multi-connection
       environments.

    Cursor Attributes .connection

       This read-only attribute return a reference to the Connection
       object on which the cursor was created.

       The attribute simplifies writing polymorph code in
       multi-connection environments.

    Cursor Method .scroll(value[,mode=3D'relative'])

       Scroll the cursor in the result set to a new position according
       to mode.
      =20
       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).

   Cursor Attribute .messages

       This is a Python list object to which the interface appends
       tuples (exception class, exception value) for all messages
       which the interfaces receives from the underlying database for
       this cursor.

       The list is cleared by all standard cursor methods calls (prior
       to executing the call) except for the .fetchXXX() calls
       automatically to avoid excessive memory usage and can also be
       cleared by executing "del cursor.messages[:]".

       All error and warning messages generated by the database are
       placed into this list, so checking the list allows the user to
       verify correct operation of the method calls.

       The aim of this attribute is to eliminate the need for a
       Warning exception which often causes problems (some warnings
       really only have informational character).

   Connection Attribute .messages

       Same as cursor.messages except that the messages in the list
       are connection oriented.

       The list is cleared automatically by all standard connection
       methods calls (prior to executing the call) to avoid excessive
       memory usage and can also be cleared by executing "del
       connection.messages[:]".

Scope

    This PEP only affects database modules/packages which adhere to
    the Python DB API 2.0 standard. Some of these extensions may
    become manditory features in future DB API standard versions.

Copyright

    This document has been placed in the public domain.

=0C
Local Variables:
mode: indented-text
indent-tabs-mode: nil
End:

--=20
Marc-Andre Lemburg
CEO eGenix.com Software GmbH
______________________________________________________________________
Consulting & Company:                           http://www.egenix.com/
Python Software:                        http://www.lemburg.com/python/