$Id$

IBPP, A c++ Client API for Firebird (and Interbase)

History of Changes

---------------------------------------------------------------------------

(C) Copyright 2000-2006 T.I.P. Group S.A. and the IBPP Team (www.ibpp.org)

The contents of this file are subject to the IBPP License (the "License");
you may not use this file except in compliance with the License.  You may
obtain a copy of the License at http://www.ibpp.org or in the 'license.txt'
file which must have been distributed along with this file.

This software, distributed under the License, is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the
License for the specific language governing rights and limitations
under the License.

--------------------------------------------------------------------------

The most recent addition to this file is always on top and has the highest
item number.

20. April 12, 200

- Thanks to FlameRobin team and Michael Hieke for detecting a discrepancy
in the events counts when one Add(), Drop(), and re-Add() a same event in
a same database connection. Counts could sometimes be wrong.

19. April 11, 2006

- Had to drop the new 'asynchronous' events support. It is flawed. Simply
can't work that way, because the isc_que_events() *cannot* be called from the
events handler itself. After facts and tracing this back, it is indeed the very
reason why the initial implementation of events in IBPP was done using a
Dispatch() method. This deep internal motivation was lost with time and
implementing an asynchronous delivery in the way it was recently tried was
doomed from the start. An asynchronous delivery can be implemented, though not
without using threads. And for now we want to stay away from spawning threads
from IBPP itself.

18. April 7, 2006

- Changed some public prototypes which were taking references to object. There
were useage cases where this lead to passing temporaries by reference.

17. April 4, 2006

- Fixed an inconvenience when running under debugger. Upon some conditions the
private method StatementImpl::CursorFree() could throw. In those cases where it
could happen, it was caught internally, so the behaviour was correct, but this
occasional flow of exceptions was disturbing. Had to rework some logic and to
work-around a strange behaviour where a phantom cursor is implicitely opened
when a result set is fetched up to and including its last row.

16. April 4, 2006

- IBPP 2.5 has been released today, as of version 2.5.1.62.

15. April 2, 2006

- Some code cleanup in the new Events implementation. Looks great.

14. April 2, 2006

- Complete rewrite of all the events handling system.
There is a new first class citizen IBPP::Events. Events holds a set of events
related to a specific instance of a connected Database. Upon creation of
the Events object, one can request these events to be delivered in an
asynchronous manner (NEW!) or in a synchronous (as before version 2.5).
An application can register multiple sets of events on a same Database
connection. Of course this change is completely source code incompatible
with previous versions. Essentially, the changes only involve obtaining
an Events object through EventsFactory(Database&, bool async).
Then to replace previous methods calls as such:
	Database::DefineEvent --> Events::Add
	Database::DropEvent --> Events::Drop
	Database::ClearEvents --> Events::Clear
	Database::DispatchEvents --> Events::Dispatch
The upgrade path is nearly trivial.

13. March 31, 2006

- Reworked the work-around the input parameters handling. Now IBPP considers
that each input parameter can be made SQL NULL. Why? Following an interesting
discussion with core Firebird developers, it became clear that even though
one can consider that FB forgets to signal the input parameters of a stored
procedure as NULLABLE, the issue extends to even simpler statements as an
UPDATE or INSERT. FB will describe based on the columns definitions, but even
a NOT NULL column might accept a NULL in an INSERT or UPDATE. If there is a
trigger which act upon that and turn the NULL in something else. So in the
first place, it is best if IBPP does not restrict the user on submitting NULLs.

12. March 25, 2006

- Added some comfort methods to Date and Time (Year(), Month(), Day(), Hours(),
Minutes(), Seconds(), SubSeconds())

- All remaining methods which might have helped get a naked pointer (except
Ptr<>::intf()) have been replaced by new prototypes returning managed pointers.
Consequently, any overload taking a naked pointer has been superceded by
versions only taking managed pointers.

- The Factories themselves have been updated to return managed pointers.

- Work around a limitation of FB/IB C-API where stored proc parameters cannot
be made passed NULL.

11. March 17, 2006

- Now, NUMERIC/DECIMAL (scaled columns) can be exchanged with integer data
types. The plain scaled value is returned / expected.

10. March 16, 2006

- Now, revival of MSVC6 compatibility is complete.

9. March 15, 2006

- Code tweaks to bring back MSVC 6 compatibility:
  - Use std::string::erase() instead of std::string::clear()
  - #define for if(true)for  (this is activated only for MSVC6)
  
- Added a sample 'all_at_once.cpp' file including all others to streamline
quick and dirty command line compiles. Had to move out constants from the
unnamed namespace to allow this.

8. March 13, 2006

- Added some code in tests.cpp to better exercise cases where a Database
pointer if recycled (while still connected) for a new connection. This better
exercise the destructors and lifetime management of the interface pointers.

7. March 10, 2006

- Confining exceptions within destructors

6. March 8, 2006

- Decided to rework the Service methods to manage users. ListUsers() becomes
GetUsers() taking a single vector<User>& as parameter : cleaner. And added
GetUser() taking User& as parameter to get a single user infos.

- Fixed a bug in tests.cpp (ParameterType instead of ParameterSubtype). I
thought I fixed this one earlier. Missed commit, I guess.

5. March 7, 2006

- Some warning fixups using -W -Wall -pedantic with gcc.
- Fixup to the derivation of WrongTypeImpl exception.

4. March 5, 2006

- Added std::string& Statement::Sql() to return the last sql statement prepared/executed.

- When Statement Get() and Set() face an incompatible type situation, the exception report has
been enhanced to give the two conflicting types (the SQL column type and the variable data type).

- Added exception class 'WrongType' derived from 'LogicException' to support the above.


3. March 2, 2006

Changed AddUser/GetUser/ModifyUser/ListUsers (not backward compatible but easy to
upgrade) to use the new IBPP::User helper class.


2. March 1, 2006

Switched development to Subversion repository, now available at SourceForge.

IBPP project didn't required the added facilities of Subversion compared to CVS.
But, I, needed them. All my other projects (business projects) are hosted on
Subversion. So as the main contributor to the code, I egoistically opted to
simplify my developer's life. (O. Mascia).


1. November 17, 2005

- Fixed a wrong arithmetic overflow check in row.cpp. The bug surfaces only when
attempting to Get() a 64 bits integer from the DB to a 32 bits integer variable.

- Fixed a bug in SPB::InsertString leading to wrong behaviour on PPC processors.
(Thanks Michael Hieke.)

>>> EOF <<<
