source: trunk/docs/contents/changelog.rst

Last change on this file was 1017, checked in by cito, 3 months ago

Some minor corrections in the changelog

  • Property svn:keywords set to Author Date Id Revision
File size: 30.2 KB
Line 
1ChangeLog
2=========
3
4Version 5.1 (2019-05-17)
5------------------------
6- Changes to the classic PyGreSQL module (pg):
7    - Support for prepared statements (following a suggestion and first
8      implementation by Justin Pryzby on the mailing list).
9    - DB wrapper objects based on existing connections can now be closed and
10      reopened properly (but the underlying connection will not be affected).
11    - The query object can now be used as an iterator similar to
12      query.getresult() and will then yield the rows as tuples.
13      Thanks to Justin Pryzby for the proposal and most of the implementation.
14    - Deprecated query.ntuples() in the classic API, since len(query) can now
15      be used and returns the same number.
16    - The i-th row of the result can now be accessed as `query[i]`.
17    - New method query.scalarresult() that gets only the first field of each
18      row as a list of scalar values.
19    - New methods query.one(), query.onenamed(), query.onedict() and
20      query.onescalar() that fetch only one row from the result or None
21      if there are no more rows, similar to the cursor.fetchone()
22      method in DB-API 2.
23    - New methods query.single(), query.singlenamed(), query.singledict() and
24      query.singlescalar() that fetch only one row from the result, and raise
25      an error if the result does not have exactly one row.
26    - New methods query.dictiter(), query.namediter() and query.scalariter()
27      returning the same values as query.dictresult(), query.namedresult()
28      and query.scalarresult(), but as iterables instead of lists. This avoids
29      creating a Python list of all results and can be slightly more efficient.
30    - Removed pg.get/set_namedresult. You can configure the named tuples
31      factory with the pg.set_row_factory_size() function and change the
32      implementation with pg.set_query_helpers(), but this is not recommended
33      and this function is not part of the official API.
34    - Added new connection attributes `socket`, `backend_pid`, `ssl_in_use`
35      and `ssl_attributes` (the latter need PostgreSQL >= 9.5 on the client).
36
37- Changes to the DB-API 2 module (pgdb):
38    - Connections now have an `autocommit` attribute which is set to `False`
39      by default but can be set to `True` to switch to autocommit mode where
40      no transactions are started and calling commit() is not required. Note
41      that this is not part of the DB-API 2 standard.
42
43Vesion 5.0.7 (2019-05-17)
44-------------------------
45- This version officially supports the new PostgreSQL 11.
46- Fixed a bug in parsing array subscript ranges (reported by Justin Pryzby).
47- Fixed an issue when deleting a DB wrapper object with the underlying
48  connection already closed (bug report by Jacob Champion).
49
50Vesion 5.0.6 (2018-07-29)
51-------------------------
52- This version officially supports the new Python 3.7.
53- Correct trove classifier for the PostgreSQL License.
54
55Version 5.0.5 (2018-04-25)
56--------------------------
57- This version officially supports the new PostgreSQL 10.
58- The memory for the string with the number of rows affected by a classic pg
59  module query() was already freed (bug report and fix by Peifeng Qiu).
60
61Version 5.0.4 (2017-07-23)
62--------------------------
63- This version officially supports the new Python 3.6 and PostgreSQL 9.6.
64- query_formatted() can now be used without parameters.
65- The automatic renaming of columns that are invalid as field names of
66  named tuples now works more accurately in Python 2.6 and 3.0.
67- Fixed error checks for unlink() and export() methods of large objects
68  (bug report by Justin Pryzby).
69- Fixed a compilation issue under OS X (bug report by Josh Johnston).
70
71Version 5.0.3 (2016-12-10)
72--------------------------
73- It is now possible to use a custom array cast function by changing
74  the type caster for the 'anyarray' type. For instance, by calling
75  set_typecast('anyarray', lambda v, c: v) you can have arrays returned
76  as strings instead of lists. Note that in the pg module, you can also
77  call set_array(False) in order to return arrays as strings.
78- The namedtuple classes used for the rows of query results are now cached
79  and reused internally, since creating namedtuples classes in Python is a
80  somewhat expensive operation. By default the cache has a size of 1024
81  entries, but this can be changed with the set_row_factory_size() function.
82  In certain cases this change can notably improve the performance.
83- The namedresult() method in the classic API now also tries to rename
84  columns that would result in invalid field names.
85
86Version 5.0.2 (2016-09-13)
87--------------------------
88- Fixed an infinite recursion problem in the DB wrapper class of the classic
89  module that could occur when the underlying connection could not be properly
90  opened (bug report by Justin Pryzby).
91
92Version 5.0.1 (2016-08-18)
93--------------------------
94- The update() and delete() methods of the DB wrapper now use the OID instead
95  of the primary key if both are provided. This restores backward compatibility
96  with PyGreSQL 4.x and allows updating the primary key itself if an OID exists.
97- The connect() function of the DB API 2.0 module now accepts additional keyword
98  parameters such as "application_name" which will be passed on to PostgreSQL.
99- PyGreSQL now adapts some queries to be able to access older PostgreSQL 8.x
100  databases (as suggested on the mailing list by Andres Mejia). However, these
101  old versions of PostgreSQL are not officially supported and tested any more.
102- Fixed an issue with Postgres types that have an OID >= 0x80000000 (reported
103  on the mailing list by Justin Pryzby).
104- Allow extra values that are not used in the command in the parameter dict
105  passed to the query_formatted() method (as suggested by Justin Pryzby).
106- Improved handling of empty arrays in the classic module.
107- Unused classic connections were not properly garbage collected which could
108  cause memory leaks (reported by Justin Pryzby).
109- Made C extension compatible with MSVC 9 again (this was needed to compile for
110  Python 2 on Windows).
111
112Version 5.0 (2016-03-20)
113------------------------
114- This version now runs on both Python 2 and Python 3.
115- The supported versions are Python 2.6 to 2.7, and 3.3 to 3.5.
116- PostgreSQL is supported in all versions from 9.0 to 9.5.
117- Changes in the classic PyGreSQL module (pg):
118    - The classic interface got two new methods get_as_list() and get_as_dict()
119      returning a database table as a Python list or dict. The amount of data
120      returned can be controlled with various parameters.
121    - A method upsert() has been added to the DB wrapper class that utilizes
122      the "upsert" feature that is new in PostgreSQL 9.5. The new method nicely
123      complements the existing get/insert/update/delete() methods.
124    - When using insert/update/upsert(), you can now pass PostgreSQL arrays as
125      lists and PostgreSQL records as tuples in the classic module.
126    - Conversely, when the query method returns a PostgreSQL array, it is passed
127      to Python as a list. PostgreSQL records are converted to named tuples as
128      well, but only if you use one of the get/insert/update/delete() methods.
129      PyGreSQL uses a new fast built-in parser to achieve this. The automatic
130      conversion of arrays to lists can be disabled with set_array(False).
131    - The pkey() method of the classic interface now returns tuples instead of
132      frozensets, with the same order of columns as the primary key index.
133    - Like the DB-API 2 module, the classic module now also returns bool values
134      from the database as Python bool objects instead of strings. You can
135      still restore the old behavior by calling set_bool(False).
136    - Like the DB-API 2 module, the classic module now also returns bytea
137      data fetched from the database as byte strings, so you don't need to
138      call unescape_bytea() any more. This has been made configurable though,
139      and you can restore the old behavior by calling set_bytea_escaped(True).
140    - A method set_jsondecode() has been added for changing or removing the
141      function that automatically decodes JSON data coming from the database.
142      By default, decoding JSON is now enabled and uses the decoder function
143      in the standard library with its default parameters.
144    - The table name that is affixed to the name of the OID column returned
145      by the get() method of the classic interface will not automatically
146      be fully qualified any more. This reduces overhead from the interface,
147      but it means you must always write the table name in the same way when
148      you are using tables with OIDs and call methods that make use of these.
149      Also, OIDs are now only used when access via primary key is not possible.
150      Note that OIDs are considered deprecated anyway, and they are not created
151      by default any more in PostgreSQL 8.1 and later.
152    - The internal caching and automatic quoting of class names in the classic
153      interface has been simplified and improved, it should now perform better
154      and use less memory. Also, overhead for quoting values in the DB wrapper
155      methods has been reduced and security has been improved by passing the
156      values to libpq separately as parameters instead of inline.
157    - It is now possible to use the registered type names instead of the
158      more coarse-grained type names that are used by default in PyGreSQL,
159      without breaking any of the mechanisms for quoting and typecasting,
160      which rely on the type information. This is achieved while maintaining
161      simplicity and backward compatibility by augmenting the type name string
162      objects with all the necessary information under the cover. To switch
163      registered type names on or off (this is the default), call the DB
164      wrapper method use_regtypes().
165    - A new method query_formatted() has been added to the DB wrapper class
166      that allows using the format specifications from Python. A flag "inline"
167      can be set to specify whether parameters should be sent to the database
168      separately or formatted into the SQL.
169    - A new type helper Bytea() has been added.
170- Changes in the DB-API 2 module (pgdb):
171    - The DB-API 2 module now always returns result rows as named tuples
172      instead of simply lists as before. The documentation explains how
173      you can restore the old behavior or use custom row objects instead.
174    - Various classes used by the classic and DB-API 2 modules have been
175      renamed to become simpler, more intuitive and in line with the names
176      used in the DB-API 2 documentation. Since the API provides objects of
177      these types only through constructor functions, this should not cause
178      any incompatibilities.
179    - The DB-API 2 module now supports the callproc() cursor method. Note
180      that output parameters are currently not replaced in the return value.
181    - The DB-API 2 module now supports copy operations between data streams
182      on the client and database tables via the COPY command of PostgreSQL.
183      The cursor method copy_from() can be used to copy data from the database
184      to the client, and the cursor method copy_to() can be used to copy data
185      from the client to the database.
186    - The 7-tuples returned by the description attribute of a pgdb cursor
187      are now named tuples, i.e. their elements can be also accessed by name.
188      The column names and types can now also be requested through the
189      colnames and coltypes attributes, which are not part of DB-API 2 though.
190      The type_code provided by the description attribute is still equal to
191      the PostgreSQL internal type name, but now carries some more information
192      in additional attributes. The size, precision and scale information that
193      is part of the description is now properly set for numeric types.
194    - If you pass a Python list as one of the parameters to a DB-API 2 cursor,
195      it is now automatically bound using an ARRAY constructor. If you pass a
196      Python tuple, it is bound using a ROW constructor. This is useful for
197      passing records as well as making use of the IN syntax.
198    - Inversely, when a fetch method of a DB-API 2 cursor returns a PostgreSQL
199      array, it is passed to Python as a list, and when it returns a PostgreSQL
200      composite type, it is passed to Python as a named tuple. PyGreSQL uses
201      a new fast built-in parser to achieve this. Anonymous composite types are
202      also supported, but yield only an ordinary tuple containing text strings.
203    - New type helpers Interval() and Uuid() have been added.
204    - The connection has a new attribute "closed" that can be used to check
205      whether the connection is closed or broken.
206    - SQL commands are always handled as if they include parameters, i.e.
207      literal percent signs must always be doubled. This consistent behavior
208      is necessary for using pgdb with wrappers like SQLAlchemy.
209    - PyGreSQL 5.0 will be supported as a database driver by SQLAlchemy 1.1.
210- Changes concerning both modules:
211    - PyGreSQL now tries to raise more specific and appropriate subclasses of
212      DatabaseError than just ProgrammingError. Particularly, when database
213      constraints are violated, it raises an IntegrityError now.
214    - The modules now provide get_typecast() and set_typecast() methods
215      allowing to control the typecasting on the global level. The connection
216      objects have type caches with the same methods which give control over
217      the typecasting on the level of the current connection.
218      See the documentation for details about the type cache and the typecast
219      mechanisms provided by PyGreSQL.
220    - Dates, times, timestamps and time intervals are now returned as the
221      corresponding Python objects from the datetime module of the standard
222      library. In earlier versions of PyGreSQL they had been returned as
223      strings. You can restore the old behavior by deactivating the respective
224      typecast functions, e.g. set_typecast('date', str).
225    - PyGreSQL now supports the "uuid" data type, converting such columns
226      automatically to and from Python uuid.UUID objects.
227    - PyGreSQL now supports the "hstore" data type, converting such columns
228      automatically to and from Python dictionaries. If you want to insert
229      Python objects as JSON data using DB-API 2, you should wrap them in the
230      new HStore() type constructor as a hint to PyGreSQL.
231    - PyGreSQL now supports the "json" and "jsonb" data types, converting such
232      columns automatically to and from Python objects. If you want to insert
233      Python objects as JSON data using DB-API 2, you should wrap them in the
234      new Json() type constructor as a hint to PyGreSQL.
235    - A new type helper Literal() for inserting parameters literally as SQL
236      has been added. This is useful for table names, for instance.
237    - Fast parsers cast_array(), cast_record() and cast_hstore for the input
238      and output syntax for PostgreSQL arrays, composite types and the hstore
239      type have been added to the C extension module. The array parser also
240      allows using multi-dimensional arrays with PyGreSQL.
241    - The tty parameter and attribute of database connections has been
242      removed since it is not supported by PostgreSQL versions newer than 7.4.
243
244Version 4.2.2 (2016-03-18)
245--------------------------
246- The get_relations() and get_tables() methods now also return system views
247  and tables if you set the optional "system" parameter to True.
248- Fixed a regression when using temporary tables with DB wrapper methods
249  (thanks to Patrick TJ McPhee for reporting).
250
251Version 4.2.1 (2016-02-18)
252--------------------------
253- Fixed a small bug when setting the notice receiver.
254- Some more minor fixes and re-packaging with proper permissions.
255
256Version 4.2 (2016-01-21)
257------------------------
258- The supported Python versions are 2.4 to 2.7.
259- PostgreSQL is supported in all versions from 8.3 to 9.5.
260- Set a better default for the user option "escaping-funcs".
261- Force build to compile with no errors.
262- New methods get_parameters() and set_parameters() in the classic interface
263  which can be used to get or set run-time parameters.
264- New method truncate() in the classic interface that can be used to quickly
265  empty a table or a set of tables.
266- Fix decimal point handling.
267- Add option to return boolean values as bool objects.
268- Add option to return money values as string.
269- get_tables() does not list information schema tables any more.
270- Fix notification handler (Thanks Patrick TJ McPhee).
271- Fix a small issue with large objects.
272- Minor improvements of the NotificationHandler.
273- Converted documentation to Sphinx and added many missing parts.
274- The tutorial files have become a chapter in the documentation.
275- Greatly improved unit testing, tests run with Python 2.4 to 2.7 again.
276
277Version 4.1.1 (2013-01-08)
278--------------------------
279- Add NotificationHandler class and method. Replaces need for pgnotify.
280- Sharpen test for inserting current_timestamp.
281- Add more quote tests. False and 0 should evaluate to NULL.
282- More tests - Any number other than 0 is True.
283- Do not use positional parameters internally.
284  This restores backward compatibility with version 4.0.
285- Add methods for changing the decimal point.
286
287Version 4.1 (2013-01-01)
288------------------------
289- Dropped support for Python below 2.5 and PostgreSQL below 8.3.
290- Added support for Python up to 2.7 and PostgreSQL up to 9.2.
291- Particularly, support PQescapeLiteral() and PQescapeIdentifier().
292- The query method of the classic API now supports positional parameters.
293  This an effective way to pass arbitrary or unknown data without worrying
294  about SQL injection or syntax errors (contribution by Patrick TJ McPhee).
295- The classic API now supports a method namedresult() in addition to
296  getresult() and dictresult(), which returns the rows of the result
297  as named tuples if these are supported (Python 2.6 or higher).
298- The classic API has got the new methods begin(), commit(), rollback(),
299  savepoint() and release() for handling transactions.
300- Both classic and DBAPI 2 connections can now be used as context
301  managers for encapsulating transactions.
302- The execute() and executemany() methods now return the cursor object,
303  so you can now write statements like "for row in cursor.execute(...)"
304  (as suggested by Adam Frederick).
305- Binary objects are now automatically escaped and unescaped.
306- Bug in money quoting fixed. Amounts of $0.00 handled correctly.
307- Proper handling of date and time objects as input.
308- Proper handling of floats with 'nan' or 'inf' values as input.
309- Fixed the set_decimal() function.
310- All DatabaseError instances now have a sqlstate attribute.
311- The getnotify() method can now also return payload strings (#15).
312- Better support for notice processing with the new methods
313  set_notice_receiver() and get_notice_receiver()
314  (as suggested by Michael Filonenko, see #37).
315- Open transactions are rolled back when pgdb connections are closed
316  (as suggested by Peter Harris, see #46).
317- Connections and cursors can now be used with the "with" statement
318  (as suggested by Peter Harris, see #46).
319- New method use_regtypes() that can be called to let getattnames()
320  return registered type names instead of the simplified classic types (#44).
321
322Version 4.0 (2009-01-01)
323------------------------
324- Dropped support for Python below 2.3 and PostgreSQL below 7.4.
325- Improved performance of fetchall() for large result sets
326  by speeding up the type casts (as suggested by Peter Schuller).
327- Exposed exceptions as attributes of the connection object.
328- Exposed connection as attribute of the cursor object.
329- Cursors now support the iteration protocol.
330- Added new method to get parameter settings.
331- Added customizable row_factory as suggested by Simon Pamies.
332- Separated between mandatory and additional type objects.
333- Added keyword args to insert, update and delete methods.
334- Added exception handling for direct copy.
335- Start transactions only when necessary, not after every commit().
336- Release the GIL while making a connection
337  (as suggested by Peter Schuller).
338- If available, use decimal.Decimal for numeric types.
339- Allow DB wrapper to be used with DB-API 2 connections
340  (as suggested by Chris Hilton).
341- Made private attributes of DB wrapper accessible.
342- Dropped dependence on mx.DateTime module.
343- Support for PQescapeStringConn() and PQescapeByteaConn();
344  these are now also used by the internal _quote() functions.
345- Added 'int8' to INTEGER types. New SMALLINT type.
346- Added a way to find the number of rows affected by a query()
347  with the classic pg module by returning it as a string.
348  For single inserts, query() still returns the oid as an integer.
349  The pgdb module already provides the "rowcount" cursor attribute
350  for the same purpose.
351- Improved getnotify() by calling PQconsumeInput() instead of
352  submitting an empty command.
353- Removed compatibility code for old OID munging style.
354- The insert() and update() methods now use the "returning" clause
355  if possible to get all changed values, and they also check in advance
356  whether a subsequent select is possible, so that ongoing transactions
357  won't break if there is no select privilege.
358- Added "protocol_version" and "server_version" attributes.
359- Revived the "user" attribute.
360- The pg module now works correctly with composite primary keys;
361  these are represented as frozensets.
362- Removed the undocumented and actually unnecessary "view" parameter
363  from the get() method.
364- get() raises a nicer ProgrammingError instead of a KeyError
365  if no primary key was found.
366- delete() now also works based on the primary key if no oid available
367  and returns whether the row existed or not.
368
369Version 3.8.1 (2006-06-05)
370--------------------------
371- Use string methods instead of deprecated string functions.
372- Only use SQL-standard way of escaping quotes.
373- Added the functions escape_string() and escape/unescape_bytea()
374  (as suggested by Charlie Dyson and Kavous Bojnourdi a long time ago).
375- Reverted code in clear() method that set date to current.
376- Added code for backwards compatibility in OID munging code.
377- Reorder attnames tests so that "interval" is checked for before "int."
378- If caller supplies key dictionary, make sure that all has a namespace.
379
380Version 3.8 (2006-02-17)
381------------------------
382- Installed new favicon.ico from Matthew Sporleder <mspo@mspo.com>
383- Replaced snprintf by PyOS_snprintf.
384- Removed NO_SNPRINTF switch which is not needed any longer
385- Clean up some variable names and namespace
386- Add get_relations() method to get any type of relation
387- Rewrite get_tables() to use get_relations()
388- Use new method in get_attnames method to get attributes of views as well
389- Add Binary type
390- Number of rows is now -1 after executing no-result statements
391- Fix some number handling
392- Non-simple types do not raise an error any more
393- Improvements to documentation framework
394- Take into account that nowadays not every table must have an oid column
395- Simplification and improvement of the inserttable() function
396- Fix up unit tests
397- The usual assortment of minor fixes and enhancements
398
399Version 3.7 (2005-09-07)
400------------------------
401Improvement of pgdb module:
402
403- Use Python standard `datetime` if `mxDateTime` is not available
404
405Major improvements and clean-up in classic pg module:
406
407- All members of the underlying connection directly available in `DB`
408- Fixes to quoting function
409- Add checks for valid database connection to methods
410- Improved namespace support, handle `search_path` correctly
411- Removed old dust and unnecessary imports, added docstrings
412- Internal sql statements as one-liners, smoothed out ugly code
413
414Version 3.6.2 (2005-02-23)
415--------------------------
416- Further fixes to namespace handling
417
418Version 3.6.1 (2005-01-11)
419--------------------------
420- Fixes to namespace handling
421
422Version 3.6 (2004-12-17)
423------------------------
424- Better DB-API 2.0 compliance
425- Exception hierarchy moved into C module and made available to both APIs
426- Fix error in update method that caused false exceptions
427- Moved to standard exception hierarchy in classic API
428- Added new method to get transaction state
429- Use proper Python constants where appropriate
430- Use Python versions of strtol, etc. Allows Win32 build.
431- Bug fixes and cleanups
432
433Version 3.5 (2004-08-29)
434------------------------
435Fixes and enhancements:
436
437- Add interval to list of data types
438- fix up method wrapping especially close()
439- retry pkeys once if table missing in case it was just added
440- wrap query method separately to handle debug better
441- use isinstance instead of type
442- fix free/PQfreemem issue - finally
443- miscellaneous cleanups and formatting
444
445Version 3.4 (2004-06-02)
446------------------------
447Some cleanups and fixes.
448This is the first version where PyGreSQL is moved back out of the
449PostgreSQL tree. A lot of the changes mentioned below were actually
450made while in the PostgreSQL tree since their last release.
451
452- Allow for larger integer returns
453- Return proper strings for true and false
454- Cleanup convenience method creation
455- Enhance debugging method
456- Add reopen method
457- Allow programs to preload field names for speedup
458- Move OID handling so that it returns long instead of int
459- Miscellaneous cleanups and formatting
460
461Version 3.3 (2001-12-03)
462------------------------
463A few cleanups. Mostly there was some confusion about the latest version
464and so I am bumping the number to keep it straight.
465
466- Added NUMERICOID to list of returned types. This fixes a bug when
467  returning aggregates in the latest version of PostgreSQL.
468
469Version 3.2 (2001-06-20)
470------------------------
471Note that there are very few changes to PyGreSQL between 3.1 and 3.2.
472The main reason for the release is the move into the PostgreSQL
473development tree. Even the WIN32 changes are pretty minor.
474
475- Add Win32 support (gerhard@bigfoot.de)
476- Fix some DB-API quoting problems (niall.smart@ebeon.com)
477- Moved development into PostgreSQL development tree.
478
479Version 3.1 (2000-11-06)
480------------------------
481- Fix some quoting functions. In particular handle NULLs better.
482- Use a method to add primary key information rather than direct
483  manipulation of the class structures
484- Break decimal out in `_quote` (in pg.py) and treat it as float
485- Treat timestamp like date for quoting purposes
486- Remove a redundant SELECT from the `get` method speeding it,
487  and `insert` (since it calls `get`) up a little.
488- Add test for BOOL type in typecast method to `pgdbTypeCache` class
489  (tv@beamnet.de)
490- Fix pgdb.py to send port as integer to lower level function
491  (dildog@l0pht.com)
492- Change pg.py to speed up some operations
493- Allow updates on tables with no primary keys
494
495Version 3.0 (2000-05-30)
496------------------------
497- Remove strlen() call from pglarge_write() and get size from object
498  (Richard@Bouska.cz)
499- Add a little more error checking to the quote function in the wrapper
500- Add extra checking in `_quote` function
501- Wrap query in pg.py for debugging
502- Add DB-API 2.0 support to pgmodule.c (andre@via.ecp.fr)
503- Add DB-API 2.0 wrapper pgdb.py (andre@via.ecp.fr)
504- Correct keyword clash (temp) in tutorial
505- Clean up layout of tutorial
506- Return NULL values as None (rlawrence@lastfoot.com)
507  (WARNING: This will cause backwards compatibility issues)
508- Change None to NULL in insert and update
509- Change hash-bang lines to use /usr/bin/env
510- Clearing date should be blank (NULL) not TODAY
511- Quote backslashes in strings in `_quote` (brian@CSUA.Berkeley.EDU)
512- Expanded and clarified build instructions (tbryan@starship.python.net)
513- Make code thread safe (Jerome.Alet@unice.fr)
514- Add README.distutils (mwa@gate.net & jeremy@cnri.reston.va.us)
515- Many fixes and increased DB-API compliance by chifungfan@yahoo.com,
516  tony@printra.net, jeremy@alum.mit.edu and others to get the final
517  version ready to release.
518
519Version 2.4 (1999-06-15)
520------------------------
521- Insert returns None if the user doesn't have select permissions
522  on the table. It can (and does) happen that one has insert but
523  not select permissions on a table.
524- Added ntuples() method to query object (brit@druid.net)
525- Corrected a bug related to getresult() and the money type
526- Corrected a bug related to negative money amounts
527- Allow update based on primary key if munged oid not available and
528  table has a primary key
529- Add many __doc__ strings (andre@via.ecp.fr)
530- Get method works with views if key specified
531
532Version 2.3 (1999-04-17)
533------------------------
534- connect.host returns "localhost" when connected to Unix socket
535  (torppa@tuhnu.cutery.fi)
536- Use `PyArg_ParseTupleAndKeywords` in connect() (torppa@tuhnu.cutery.fi)
537- fixes and cleanups (torppa@tuhnu.cutery.fi)
538- Fixed memory leak in dictresult() (terekhov@emc.com)
539- Deprecated pgext.py - functionality now in pg.py
540- More cleanups to the tutorial
541- Added fileno() method - terekhov@emc.com (Mikhail Terekhov)
542- added money type to quoting function
543- Compiles cleanly with more warnings turned on
544- Returns PostgreSQL error message on error
545- Init accepts keywords (Jarkko Torppa)
546- Convenience functions can be overridden (Jarkko Torppa)
547- added close() method
548
549Version 2.2 (1998-12-21)
550------------------------
551- Added user and password support thanks to Ng Pheng Siong (ngps@post1.com)
552- Insert queries return the inserted oid
553- Add new `pg` wrapper (C module renamed to _pg)
554- Wrapped database connection in a class
555- Cleaned up some of the tutorial. (More work needed.)
556- Added `version` and `__version__`.
557  Thanks to thilo@eevolute.com for the suggestion.
558
559Version 2.1 (1998-03-07)
560------------------------
561- return fields as proper Python objects for field type
562- Cleaned up pgext.py
563- Added dictresult method
564
565Version 2.0 (1997-12-23)
566------------------------
567- Updated code for PostgreSQL 6.2.1 and Python 1.5
568- Reformatted code and converted to use full ANSI style prototypes
569- Changed name to PyGreSQL (from PyGres95)
570- Changed order of arguments to connect function
571- Created new type `pgqueryobject` and moved certain methods to it
572- Added a print function for pgqueryobject
573- Various code changes - mostly stylistic
574
575Version 1.0b (1995-11-04)
576-------------------------
577- Keyword support for connect function moved from library file to C code
578  and taken away from library
579- Rewrote documentation
580- Bug fix in connect function
581- Enhancements in large objects interface methods
582
583Version 1.0a (1995-10-30)
584-------------------------
585A limited release.
586
587- Module adapted to standard Python syntax
588- Keyword support for connect function in library file
589- Rewrote default parameters interface (internal use of strings)
590- Fixed minor bugs in module interface
591- Redefinition of error messages
592
593Version 0.9b (1995-10-10)
594-------------------------
595The first public release.
596
597- Large objects implementation
598- Many bug fixes, enhancements, ...
599
600Version 0.1a (1995-10-07)
601-------------------------
602- Basic libpq functions (SQL access)
Note: See TracBrowser for help on using the repository browser.