This file contains the history of changes in the SOCI library.

---
Version 4.0.0 differs from 3.2.x in the following ways:

- Provide context of the failure in soci_error::what() which now returns a
  longer and more useful message. Use the new get_error_message() method to get
  just the brief error message which used to be returned by what().
- Add helpers for generating portable DDL and DML statements.

- Firebird
-- Add SOCI_FIREBIRD_EMBEDDED option to allow building with embedded library.
-- Throw an exception instead of truncating too long VARCHAR columns values.

- ODBC/MS SQL
-- Fix inserting strings of length greater than 8000 bytes into database.

- Oracle
-- Use SQLT_BDOUBLE for floating point values instead of SQLT_FLT.

---
Version 3.2.3 differs from 3.2.2 in the following ways:

- Improved Boost Tuple & Fusion integration by using boost::fusion::foreach
  to reference each member of a sequence. Breaks compatibility with Boost 1.35 (2008).
- Fixed linker error when building 64-bit target with Visual Studio.
- Fixed several issues with building using Cygwin and MinGW.
- Clarified documentation and examples on bulk operations.

- MySQL
-- Fixed building against MySQL 3.23.

- ODBC
- Improve readability of ODBC error messages.
- Fixed CMake configuration of ODBC backend for Visual Studio 64-bit targets.

- Oracle
-- We've had to disable Oracle target in the Travis CI configuration until we
   figure out how to setup Oracle on Travis CI directly.
   Therefore, this release hasn't been extensively tested against Oracle.

- PostgreSQL
-- Added support for UUID column type (tests and docs updated).

- SQLite3
-- Added sqlite3_soci_error exception as subclass of soci_error to provide useful
   exposure of specific SQLite3 error codes (tests and docs updated).

---
Version 3.2.2 differs from 3.2.1 in the following ways:

- Fixed once_temp_type destructor with noexcept(false) specifier for C++11
- Fix uninitialized indicators in conversion_into_type and conversion_use_type specialisations
- Fixed placeholder matching for PostgreSQL-style casts with ORM
- Fixed memory leaking in use binding in case of bind/unbind sequence
- Fixed sscanf formatter for MinGW/MSVC in backends
- Fixed partial placeholder name matching for ORM cases
- Added test for use of indicators with rowset<row>
- Added test for get_affected_rows after bulk operations

- DB2
-- Enable build and testing on Travis CI
-- Fixed use type size calculation during bind/pre_use

- Firebird
-- Enable memory cleanup to avoid leaks after binding
-- Added missing C++ library headers
-- Added get_affected_rows() support for bulk operations
-- Fixed compilation with VS2008
-- Fixed building tests with the backend built as DLL.

- MySQL
-- Added get_affected_rows() support for bulk operations

- ODBC
-- Always call ASCII version of ODBC function SQLGetDiagRec
-- Fixed invalid condition test in assertions
-- Added get_affected_rows() support for bulk operations
-- Added support for (unsigned) long long vectors
-- Changed mapping of SQL_BIGINT to dt_long_long in ODBC backend
-- Added some trivial optimizations in statement preparation code

- Oracle
-- Fixed missing noData_ reported in particular case when OCIStmtExecute returns success
-- Improved Oracle testing setup on Travis CI

- PostgreSQL
-- Added session::get_next_sequence_value() for PostgreSQL backend
-- Added get_affected_rows() support for bulk operations
-- Applied RAII and simplified error handling logic
-- Fixed issue with exceptions escaping postgresql_statement_backend destructor

- SQLite3
-- Replaced sqlite3_prepare with sqlite3_prepare_v2
-- Added missing <cstdarg> header
-- Fixed wrong size used in memcpy() during bulk processing
-- Added get_affected_rows() support for bulk operations
-- Added shared_cache=true propery to control SQLITE_OPEN_SHAREDCACHE flag

- Documentation
-- Corrected usage examples

- Building
-- Updated CMake for Oracle 12g
-- Restructured and improved Travis CI setup to do single build per backend
-- Fixed wrong GCC_VERSION used in CMake config for commandline-overriden GCC
-- Allows CMake to find 32-bit DB2 on Windows x64
-- Removed redundant Oracle libclntsh library lookup
-- Fixed SQLITE3_LIBRARIES handling by find_package_handle_standard_args

---
Version 3.2.1 differs from 3.2.0 in the following ways:

- Fixed binding of Oracle type NUMBER(9,0) to C++ int, by Tomasz Olszewski
- Fixed Oracle client library detection on Windows, by Tomasz Olszewski
- Fixed PostgreSQL issue with deallocate_prepared_statement called for non-existing statement
- Fixed prepared insert statements with custom data types support, by Tomasz Olszewski
- Fixed recent improvements in x:=y name binding, by Poul Bondo
- Fixed query transformation assignment in pooled sessions, by Stefan Chrobot
- Cleaned up SOCI_POSTGRESQL_NOPARAMS and related options in code and documentation
- Dropped patch (micro) version number from documentation URLs on the website

---
Version 3.2.0 differs from 3.1.0 in the following ways:

- SOCI is now organization at GitHub
-- Git repository moved to https://github.com/SOCI/soci
-- Opened new bug tracker (SF.net tracker is read-only)
-- Opened Wiki for FAQ and development articles
-- Website, mailing lists and downloads remain on SourceForge.net
-- Applied GitFlow branching model
-- Added package maintenance repository https://github.com/SOCI/soci-pkg

- Core
-- Added connection_parameters to enable support for session options used by core, backends or low-level API.
-- Added user-defined query transformation support based on function, functor and lambda
-- Fixed missing connection check and backend setup ensured for session
-- Fixed backend initialization when used with connection pool (Core)
-- Fixed memory leaks on exception thrown during statement preparation stage

- DB2
-- Added new backend for IBM DB2

- Firebird
-- Fixed bug in repeated statement execution
-- Fixed issues with input parameter binding
-- Fixed connection string parsing to handle possible white-spaces
-- Fixed issues with C++ type unsigned long
-- Fixed reading negative values into C++ type double
-- Added option to fetch numeric/decimal data into string of characters
-- Added CMake configuration
-- Updated tests
-- Continued regular testing on Windows and Unix platforms

- MySQL
-- Replaced use of type=InnoDB with engine=InnoDB
-- Improved CMake configuration

- ODBC
-- Added connection_parameters option ODBC_OPTION_DRIVER_COMPLETE
-- Fixed issues in handling C++ types int and long on 64-bit architectures
-- Added missing CMake configuration for tests
-- Continued regular testing on Windows and Unix platforms

- Oracle
-- Implemented statement::get_affected_rows() operation
-- Use OCI_THREADED and OCI_ENV_NO_MUTEX with OCIEnvCreate
-- Added numerous fixes and improvements in tests
-- Added option to fetch numeric/decimal data into string of characters
-- Fixed issues in binding procedure IN/OUT parameters

- PostgreSQL
-- Add reading of BYTEA data into std::string (not fully-featured binary data support yet)
-- Add JSON data type support available in PostgreSQL 9.2+
-- Fixed incorrect assertion in postgresql::get_error_details
-- Fixed premature deallocation of prepared statements
-- Fixed servers-side memory leak in prepared statements
-- Fixed memory leak of PGresult on exception thrown
-- Fixed isues in parsing complex PL/PSQL functions

- SQLite3
-- Implemented statement::get_affected_rows() operation
-- Fixed handling of database file path with spaces

- Building, testing and installation
-- Marked Makefile.basic as deprecated (maintainer wanted)
-- Cleaned numerous compilation warnings reported by various compilers
-- Improved compilation using latest version of clang
-- Added numerous improvements in CMake configuration
-- Added SOCI_STATIC option to enable/disable static libraries build
-- Fixed issues with ignored -DWITH_<dependency> options
-- Fixed FindMySQL.cmake to allow use of mysqlclient from custom location
-- Added support of SQLITE_ROOT_DIR variable to FindSQLite3.cmake module
-- Fixed and tested CMake configuration on OSX
-- Fixed and tested CMake configuration on FreeBSD
-- Fixed and tested CMake configuration to use with Ninja
-- Fixed building using Visual Studio 2010
-- Added support for building using Visual Studio 2012
-- Set up SOCI continuous integration at travis-ci.org
-- Added Debian packaging support to soci-pkg repository
-- Added Fedora/CentOS/RedHat packaging support to soci-pkg repository

- Documentation
-- Review and update to catch up with current status quo
-- Updated code examples
-- Start maintenance and hosting of SOCI documentation per released version

---
Version 3.1.0 differs from 3.0.0 in the following ways:

- Added Ada language binding

- Migraded build system from GNU Autotools and Visual Studio projects to CMake

- CMake build tested with Visual Studio, GCC and clang

- Incorporated a compromise for naming versioned shared libraries

- Enhanced and improved integration with Boost libraries:
-- Boost.DateTime
-- Boost.Fusion
-- Boost.Optional
-- Boost.Tuple

- Bug fixes and improvements in core and backends:
-- Added soci::values::get_properties accessor useful for composing soci::type_conversion
-- Export advanced API of backend loader from DLL.
-- Added static factory registration functions for backends
-- Added get_affected_rows operation
-- Fixed thread-safety of connection pool under Windows
-- Fixed bug with droping const qualifiers when binding to std::vector<soci::indicator>
-- Fixed bug in default initialization of an object of const backend_factory wihch requires user-provided default constructor (see C++03/C++0x)
-- Fixes for 64-bit builds
-- Removed redundant exchange_traits breaking ODR on LP64
-- Better ODBC support
-- Type conversion support for unsigned integer types
-- Bug ID:1971436 - incorrect rowset copy operations
-- Bug ID:2010367 - memory leak (ODBC)
-- Bug ID:2010409 - invalid memory allocaton in define by position (ODBC)
-- Bug ID:2021243 - long long type support in Visual C++
-- Patch ID:2483066 - 64bit Linux and 64bit integer submitted
-- Patch ID:2809809 - Fix build with GCC 4.4
-- Patch ID:2809810 - Fix SQLite3 build with GCC 4.3
-- Patch ID:2581206 - Windows unicode application
-- Patch ID:3058275 - install target for cmake build submitted
-- Patch ID:3069375 - use $(prefix)/lib64 on AMD64 platforms.
-- Improved performance while accessing query results (MySQL)
-- Bug fixes for PROCEDURE support (MySQL)
-- Removed throw statements from mysql_rowid_backend and mysql_blob_backend destructors (MySQL)
-- Verify that prepared statements survive session::reconnect() operatoin (MySQL)
-- Improved support for time and date (MySQL, PostgreSQL)
-- Fixed bug with strings of length exceeding 255 characters (ODBC)
-- Improved interpretation of the connect string (Oracle)
-- Added handling of unsigned long long (Oracle, SQLite3, PostgreSQL)
-- Fixes in integral types support (PostgreSQL)
-- Support for colon-casts (PostgreSQL)
-- Added possibility for use BLOB (PostgreSQL)
-- Added support for connection property "synchronous=on|off" (SQLite3)
-- Improved BLOB data handling (SQLite3)
-- Improved boolean type suppport (SQLite3)
-- Session timeout support (SQLite3)
-- Improved tests clean-up (SQLite3)
-- Added missing typedef of sqlite3_destructor_type which has been defined in sqlite3.h but since 3.3.10 (see comment for reference to SQLite ticket)

- Updated tests for various backends and SQL data types

- Migrated from CVS to Git repository

- Changed naming convensions and style across all the source code

- Firebird backend removed from official release as not actively maintained. Available in the Git repository.

---
Version 3.0.0 differs from 2.2.0 in the following ways:

- Exposed the session's locale object.

- Moved the "no data" flag from indicators to statement.

- Allowed const objects as "use" elements.

- Added connection mode for Oracle.

- Added RAII support for transactions.

- Added the open/close/reconnect functionality.

- Added support for long long as a fundamental data type.

- Unified column names for dynamic rowset description, to overcome
  differences between database servers.

- Added the "simple" interface for interfacing from other languages.

- Added thread-safe connection pool.

- Added integrated support for Boost data types: gregorian_date,
  fusion and tuple.

- Added dynamic backend loading.

- Changed the naming convention to comply with Boost recommendations.

---
Version 2.2.0 differs from 2.1.0 in the following ways:

- Added true support for statement preparation with PostgreSQL.

- Added support for the stream-like extraction from Row.

- Added STL-compatible iterator interface for select statements.

- Refactored the set of common tests to validate core library functionality
  independently on the target database server.

- Introduced new backends for MS SQL Server (via ODBC) and Firebird.

- Provided complete build system for both Unix (autotools) and
  Windows (solution and project files for MSVC++).

---
Version 2.1.0 differs from 2.0.1 in the following ways:

- Added two additional backends: MySQL and SQLite3

- Restructured the source code layout so that the whole library was broken
  into the "core" part and independent "backends", each in its own
  directory together with appropriate tests.

- Provided basic Makefiles for static and shared libraries on
  Linux-compatible systems.

- Added the general class and function reference to the documentation.

---
Version 2.0.1 differs from 2.0.0 in the following ways:

- Corrected some typos in documentation.

- Corrected handling of dynamic rowset description for those backends
  which do not have dedicated description functionality.

- A bug fix to correctly handle std::tm in the Oracle backend.

- A bug fix to correctly handle object relational mapping when
  Values::set<T>() and Values::get<T>() are called where T is a
  TypeConversion-based type.

---
Version 2.0.0 differs from 1.2.1 in the following ways:

- The whole library was internally re-architectured to allow operation
  with many different backends. The top-level part of the library
  (the syntax layer) provides essentially the same interface as in previous
  versions of the library, but it can work with independent (and dynamically
  selected) backends, possibly targeting different database engines.
  As a prove of concept (and to encourage developments of new backends),
  the PostgreSQL backend was provided in addition to the Oracle one.
  During this re-architecturing, some minor bugs were fixed as well.

- The old Boost-style license was changed to the new (v. 1.0) Boost license.

---
The version 1.2.1 differs from 1.2.0 in the following ways:

- A bug was fixed that caused compile errors on MS VC++ compiler.

---
The version 1.2.0 differs from 1.1.0 in the following ways:

- A memory leak when reading into Row objects was fixed.

- Bulk (array) operations were introduced for high-performance
  applications, where the number of network round-trips can be
  significantly reduced by operating on whole arrays (vectors).

---
The version 1.1.0 differs from 1.0.1 in the following ways:

- Explicit support for calling stored procedures was added.

- Dynamic row recognition (type discovery) was added.

- Support for user-defined data types was added.
