Announce: pyPgSQL - Version 2.0 is released.
===========================================================================

pyPgSQL v2.0 has been released.  It is a bug fix release to version 1.6,
but also include some enhancements.  With this release, pyPgSQL is now a
"real" package.  This was done to facilitate the implementation of pickling
of the supplied PostgreSQL support objects, PgBoolean, PgInt2, PgInt8, and
PgLargeObject.

NOTE: This change will require the used of "from pyPgSQL import PgSQL" and
      "from pyPgSQL import libpq" to import the PgSQL and libpq modules.

It is available at http://pypgsql.sourceforge.net.

pyPgSQL is a package of two (2) modules that provide a Python DB-API 2.0
compliant interface to PostgreSQL databases.  The first module, libpq,
exports the PostgreSQL C API to Python.  This module is written in C and
can be compiled into Python or can be dynamically loaded on demand.  The
second module, PgSQL, provides the DB-API 2.0 compliant interface and
support for various PostgreSQL data types, such as INT8, NUMERIC, MONEY,
BOOL, ARRAYS, etc.  This module is written in Python and works with
PostgreSQL 7.0 or later and Python 2.0 or later.

Note: It is highly recommended that you use PostgreSQL 7.1 or later and
      Python 2.1 or later.

PostgreSQL is a sophisticated Object-Relational DBMS, supporting almost all
SQL constructs, including sub-selects, transactions, and user-defined types
and functions. It is the most advanced open-source database available any-
where More information about PostgreSQL can be found at the PostgreSQL home
page at http://www.postgresql.org.

Python is an interpreted, interactive, object-oriented programming lang-
uage.  It combines remarkable power with very clear syntax.  It has mod-
ules, classes, exceptions, very high level dynamic data types, and dynamic
typing.  There are interfaces to many system calls and libraries, as well
as to various windowing systems (X11, Motif, Tk, Mac, MFC).  New builtin
modules are easily written in C or C++.  Python is also usable as an exten-
sion language for applications that need a programmable interface.  Python
is copyrighted but freely usable and distributable, even for commercial
use.  More information about Python can be found on the Python home page at
http://www.python.org.

---------------------------------------------------------------------------
ChangeLog:
===========================================================================

Changes since pyPgSQL Version 1.6
=================================

pyPgSQL is now a 'real' python package (i.e. there is a directory named
pyPgSQL that contains a file named __init__.py).  PgSQL and libpq are now
modules contained in the pyPgSQL package.

=-=-=-=-=-=-=-=-=-=-=-=-=- ** IMPORTANT NOTE ** =-=-=-=-=-=-=-=-=-=-=-=-=-=
NOTE: This change requires the use of 'from pyPgSQL import PgSQL' to import
      the PgSQL module, and 'from pyPgSQL import libpq' to import the libpq
      module.  
-=-=-=-=-=-=-=-=-=-=-=-=-= ** IMPORTANT NOTE ** -=-=-=-=-=-=-=-=-=-=-=-=-=-

Changes to PgSQL.py
-------------------

 *  It appears that under certain circumstances,  PostgreSQL will not
    return a precision/scale value for a numeric column when no result rows
    are returned [Bug #477792].  The problem is fixed by using a precision
    and scale of (30,6) when this condition occurs.

 *  Change the import of DateTime to avoid conflicts with ZOPE's builtin
    DateTime module.

 *  Added code to ensure that creation of a binary object via the binary()
    method always occurs within the context of a transaction.

 *  Change code so that the escaping/quoting is different if the result is
    to be used to build PostgreSQL arrays.

 *  Modified all the Object._quote methods so that they now accept an
    option argument, forArray, which if set to 1 will cause escaping /
    quoting for PostgreSQL array use.

 *  Re-organized the code use to build PostgreSQL arrays.
 
 *  Added additional PostgreSQL types to BINARY, ROWID, etc.

 *  Fixed problems associated with type casting.

Changes to libpqmodule.c
------------------------
 *  Added support for the pickling of libpq objects.  In particular, for
    PgVersion and PgConnection objects.

 *  Added a cntructor method for PgVersion objects.

 *  Changed all new style comments to original style.

 *  Change PgQuoteString and PgQuoteByta so that unsigned char pointers are
    used instead of signed char pointers.

 *  Added different quoting/escaping if the result is to be used as part of
    a PostgreSQL array.

 *  Change the quoting/escaping helper routines so that they also escape
    the double quote character.

 *  Added a PgLargeObject constructor.

Changes to pgboolean.c
----------------------
 *  Change the constructors so that they return PyObject * instead of
    PgBooleanObject *.

Changes to pgconnection.c
-------------------------
 *  Fixed a possible memory leak.

 *  Added the lo_export() method.  It was overlooked in the original code.

 *  Added support for the pickling of PgConnection objects.  In particular,
    a hidden method was added to return the connection information string
    used to create the connection.

 *  Changed all new style comments to original style.

 *  Added some brakets to clarify ambiguous else clauses.

 *  Fixed numerous bugs found during the development of the regression test
    cases for pgconnection.c.

 *  The PgConnection's attributes are now set to a value of None when
    finish() is called.

Changes to pgint2object.c
-------------------------
 *  Changed all new style comments to original style.

 *  Change the constructors so that they return PyObject * instead of
    PgInt2Object *.

Changes to pgint8object.c
-------------------------
 *  Changed all new style comments to original style.

 *  Change the constructors so that they return PyObject * instead of
    PgInt8Object *.

Changes to pglargeobject.c
--------------------------
 *  Closed some memory leaks.  This leaks had only a small probability of
    occuring.

 *  Added support for the pickling of large objects.  In particular, a
    method was added to retrieve the info needed to recreate the large
    object.  Also, the open() and close() methods were changed to create
    and end transaction in the un-pickled large objects in order to create
    the context in which large object must be used.

 *  Added a _quote() funtion.

 *  Ensure that INV_BIN is not in the mode variable when lo_open is
    called.

 *  Removed static declaration from validmodes[].  It's now used by
    lo_create in pgconnection.c also.

Changes to pgresult.c
---------------------
 *  [Bug #474771] Found and plugged a memory leak in the PgResult_New()
    function.  An object for the value of PGcmdStatus was being created
    twice, leaving an extra copy around to consume memory.

 *  Added support for the pickling of pyPgSQL objects.

 *  Change error message returned by PgResult_ntuple_check if no tuples
    were returned in the result.  The returned error message now makes
    sense.

 *  Added support for the PostgreSQL BYTEA type.

 *  I have removed resultErrorMessage as an attribute.  It doesn't make
    sense to leave it since it will always be None.  Why?  Because any
    query that generates an error will raise an exception, not return a
    PgResult.

