$Id: changelog.txt 75 2006-05-12 08:40:41Z epocman $ 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. 21. May 12, 2006 - Back ported a small addition from HEAD branch. When IBPP attempts to load the FBCLIENT.DLL (Win32) from specific directories (either as reported by the FB 1.5/2.0 registry keys or through the indirect use of ClientLibSearchPaths), IBPP now alters the host process private PATH environment variable to add the directory from where the load is attempted. This helps windows find local copies of Microsoft runtime libraries when those are installed locally along with the Firebird binaries but not generally available in the system paths. - Fixed a bug introduced with 2.5 code base regarding Commit and Rollback of transaction which called CursorExecute() but didn't Fetch() anything. There was a logic error in this whole scheme. 20. April 12, 2006 - 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& 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 <<<