Changes from 2.5 to 2.5a
 1) Fix problem with Oracle 9i and retrieving strings; it seems that Oracle 9i
    uses the correct method for dynamic callback but Oracle 8i will not work
    with that method so an #ifdef was added to check for the existence of an
    Oracle 9i feature; thanks to Paul Denize for discovering this problem

Changes from 2.4 to 2.5
 1) Added flag OPT_NoOracle7 which, if set, assumes that connections are being
    made to Oracle8 or higher databases; this allows for eliminating the
    overhead in performing this check at connect time
 2) Added flag OPT_NumbersAsStrings which, if set, returns all numbers as
    strings rather than integers or floats; this flag is used when defined
    variables are created (during select statements only)
 3) Added flag OPT_Threading which, if set, uses OCI threading mode; there is a
    significant performance degradation in this mode (about 15-20%) but it does
    allow threads to share connections (threadsafety level 2 according to the
    Python Database API 2.0); note that in order to support this, Oracle 8i or
    higher is now required
 4) Added Py_BEGIN_ALLOW_THREADS and Py_END_ALLOW_THREADS pairs where
    applicable to support threading during blocking OCI calls
 5) Added global method attach() to cx_Oracle to support attaching to an
    existing database handle (as provided by PowerBuilder, for example)
 6) Eliminated the cursor method fetchbinds() which was used for returning the
    list of bind variables after execution to get the values of out variables;
    the cursor method setinputsizes() was modified to return the list of bind
    variables and the cursor method execute() was modified to return the list
    of defined variables in the case of a select statement being executed;
    these variables have three methods available to them: getvalue([<pos>]) to
    get the value of a variable, setvalue(<pos>, <value>) to set its value and
    copy(<var>, <src_pos>, <targ_pos>) to copy the value from a variable in a
    more efficient manner than setvalue(getvalue())
 7) Implemented cursor method executemany() which expects a list of
    dictionaries for the arguments
 8) Implemented cursor method callproc()
 9) Added cursr method prepare() which parses (prepares) the statement for
    execution; subsequent execute() or executemany() calls can pass None as the
    statement which will imply use of the previously prepared statement; used
    for high performance only
10) Added cursor method fetchraw() which will perform a raw fetch of the cursor
    returning the number of rows thus fetched; this is used to avoid the
    overhead of generating result sets; used for high performance only
11) Added cursor method executemanyprepared() which is identical to the method
    executemany() except that it takes a single argument which is the number of
    times to execute a previously prepared statement and it assumes that the
    bind variables already have their values set; used for high performance
    only
12) Added support for rowid being returned in a select statement
13) Added support for comparing dates returned by cx_Oracle
14) Integrated patch from Andre Reitz to set the null ok flag in the
    description attribute of the cursor
15) Integrated patch from Andre Reitz to setup.py to support compilation with
    Python 1.5
16) Integrated patch from Benjamin Kearns to setup.py to support compilation
    on Cygwin

Changes from 2.3 to 2.4

1) String variables can now be made any length (previously restricted to the
   64K limit imposed by Oracle for default binding); use the type
   cx_Oracle.LONG_STRING as the argument to setinputsizes() for binding in
   string values larger than 4000 bytes.
2) Raw and long raw columns are now supported; use the types cx_Oracle.BINARY
   and cx_Oracle.LONG_BINARY as the argument to setinputsizes() for binding in
   values of these types.
3) Functions DateFromTicks(), TimeFromTicks() and TimestampFromTicks()
   are now implemented.
4) Function cursor.setoutputsize() implemented
5) Added the ability to bind arrays as out parameters to procedures; use the
   format [cx_Oracle.<DataType>, <NumElems>] as the input to the function
   setinputsizes() for binding arrays
6) Discovered from the Oracle 8.1.6 version of the documentation of the OCI
   libraries, that the size of the memory location required for the precision
   variable is larger than the printed documentation says; this was causing a
   problem with the code on the Sun platform.
7) Now support building RPMs for Linux.

Changes from 2.2 to 2.3

 1) Incremental performance enhancements (dealing with reusing cursors and
    bind handles)
 2) Ensured that arrays of integers with a single float in them are all
    treated as floats, as suggested by Martin Koch.
 3) Fixed code dealing with scale and precision for both defining a numeric
    variable and for providing the cursor description; this eliminates the
    problem of an underflow error (OCI-22054) when retrieving data with
    non-zero scale.

Changes from 2.1 to 2.2

 1) Upgraded thread safety to level 1 (according to the Python DB API 2.0) as
    an internal project required the ability to share the module between
    threads.
 2) Added ability to bind ref cursors to PL/SQL blocks as requested by
    Brad Powell.
 3) Added function write(Value, [Offset]) to LOB variables as requested by
    Matthias Kirst.
 4) Procedure execute() on Cursor objects now permits a value None for the
    statement which means that the previously prepared statement will be
    executed and any input sizes set earlier will be retained. This was done to
    improve the performance of scripts that execute one statement many times.
 5) Modified module global constants BINARY and DATETIME to point to the
    external representations of those types so that the expression
    type(var) == cx_Oracle.DATETIME will work as expected.
 6) Added global constant version to provide means of determining the current
    version of the module.
 7) Modified error checking routine to distinguish between an Oracle error and
    invalid handles.
 8) Added error checking to avoid setting the value of a bind variable to a
    value that it cannot support and raised an exception to indicate this fact.
 9) Added extra compile arguments for the AIX platform as suggested by Jehwan
    Ryu.
10) Added section to the README to indicate the method for a binary
    installation as suggested by Steve Holden.
11) Added simple usage example as requested by many people.
12) Added HISTORY file to the distribution.

