8.0.2
 - Simple benchmark tool for query performance.
 - Fix an apparent `memcpy()` overlap.
 - Rename `config-compiler.h` to just `internal/config.h`. (#1211)
 - Fix detection of supported compiler flags.
 - Fix `bool` conversion to string. (#1229)
 - Fix under-budgeting for arrays. (#1235)
 - Fix check for passing `conversion_context` to `params` constructor. (#1237)
 - Binary data with null pointer is now an empty blob, not a null. (#1242)
 - Redesign retry conditions for transactor `perform()`. (#1248)
8.0.1
 - A lot more constructors are now `explicit`.
 - Update GNU attributes to use standard `[[attribute]]` syntax. (#1199)
 - Fix mistake in check for GNU "pure" attribute.
 - Fix potential 1-byte buffer overrun in `stream_to`. (#1203)
8.0.0
 - C++20 is now the oldest C++ version that libpqxx supports.
 - Requires PostgreSQL 11 or better.
 - **Exception class hierarchy has changed.**  See `UPGRADING.md`.
 - **Result/row iterators have changed.**  Instead of `i[n]` do `(*i)[n]`.
 - **Result equality now only compares identity, not the data inside.**
 - **Row/field equality now only compares identity, not the data inside.**
 - **Row/field lifetimes have changed: see `row_ref` and `field_ref`.**
 - **`pqxx::bytes` is now a vector of bytes, not a string of bytes.** (#924)
 - All libpqxx exceptions are now derived from `pqxx::failure`.
 - Libpqxx exceptions now have a C++26 `std::stacktrace`, if available.
 - Use `pqxx::bytes::data()` instead of `pqxx::bytes::c_str()`.
 - The string conversion API has changed! (Old API should still work). (#948)
 - "String conversion" to `std::string_view` etc. is now supported. (#694)
 - Simpler to use: `pqxx::from_string()`, `pqxx::to_buf()`, `pqxx::into_buf()`.
 - `to_buf()` and `into_buf()` functions will no longer zero-terminate.
 - **Beware lifetime** when "converting" a string to `std::string_view`!
 - Binary data can be any `std::contiguous_range` of `std::byte`. (#925)
 - Generic `quote()` takes `always_null` into account.
 - You can now convert strings to `pqxx::array` types.
 - You can now parse SQL arrays straight into `std::vector` and such.
 - There are fewer raw pointers in the API, for safety & verifiability.
 - The libpqxx exceptions now have a `std::source_location`. (#923)
 - Result & row iterators are now proper random access iterators.
 - More getters are now `noexcept`.
 - Retired `binarystring` and its headers.  Use `blob` instead.
 - Retired `connection_base` type alias.  Use `connection`.
 - Retired `pqxx::encrypt_password()`.  Use the ones in `pqxx::connection`.
 - Retired `pqxx::prepare::dynamic_params`.  Use `pqxx::params`.
 - Retired deprecated `stream_to` constructors.  Use factory functions.
 - Retired `transaction_base::unesc_raw()`.  Use `unesc_bin()`.
 - Retired `transaction_base::quote_raw()`.  Use `quote()` with `bytes_view`.
 - Deprecated `field` constructors are no longer publicly accessible.
 - Assume compiler supports concepts.
 - Assume compiler supports integral conversions in `charconv`.
 - Assume compiler supports spans, ranges, and `cmp_less` etc.
 - Retired result row slicing.
 - Assume compiler supports `std::remove_cvref_t` etc.
 - Assume compiler supports `[[likely]]` & `[[unlikely]]`.
 - Assume compiler supports `ssize()`.
 - Assume compiler supports `std::source_location`.
 - Assume compiler supports ISO-646 without needing `<ciso646>` header.
 - Feel free to use `pqxx::encoding_group`.  It's no longer "internal."
 - There's now an `unknown` encoding group.  It's the only fully safe default.
 - Dropping JOHAB encoding.  Never fully worked on the server anyway.
 - Array parsing will refuse to work if the encoding group is `UNKNOWN`.
 - You can now combine connection string & option pairs on connections! (#1133)
 - Encodings support code got smaller, simpler, more efficient.
 - Tests are now in a single directory (#934)
 - Added an "examples" directory: tested, maintained sample code.
 - `check_cast()` supports infinities and NaNs.
 - Now supporting CMake "unity builds."
 - Stop trying to figure out link options for filesystem library.
 - You can now set `PQXX_LINT=skip` to skip lint checks during test build.
 - Header/binary version compatibility check now tolerates patch upgrades.
 - New helper functions to query a type's nullness properties.
 - More SQL statements can now be `std::string_view` instead of `pqxx::zview`.
 - Work around broken multidim `operator[]` support in MSVC 2022.
 - Build fix for MSVC 2026. (#1160)
 - Nicer replacement for `pqxx::connection::port()`: `port_number()`.
 - `pqxx::out_of_memory` is now `pqxx::server_out_of_memory` for clarity.
 - `pqxx::protocol_violation` is now an `sql_error`, not a `broken_connection`.
 - Use C++26 reflection, if available, for finding types' names.
 - Export `source_loc()` function: render a `std::source_location` into text.
 - Allow tests to run even on ASCII-only databases.
 - `composite_into_buf()` now returns a `zview`.
 - Optionally pass `encoding_group` (or connection/transaction) into `params`.
 - `pqxx::zview` no longer accepts null pointer.
 - `pqxx::zview` is now `final`.
 - Replace all generated config headers with just `config-compiler.h`. (#1152)
 - CMake build now filters `config-compiler.h`, like the autotools build does.
 - For `stream()`, a type must be convertible and move-constructible. (#1168)
 - Build defaults to C++20 minimum.
 - Deprecated `extract_version.sh`; use `extract_version.py`.
 - Retired tools: `rmlo`, `pqxxthreadsafety`, `test_all.py`.
 - Shell scripts now have "`.sh`" suffix.  Saves hand-coding names.
7.10.5
 - Fix missing types in Doxygen docs (by downgrading Doxygen :-/ ).
 - Tweak `README.md`. (#1111)
 - Skip YAML lint checks; it's all fixed up in the 8.0 release branch.
7.10.4
 - Logic for controlling non-blocking mode was inverted (non-Windows). (#1057)
 - Pass SQL error code when throwing `pqxx::insufficient_privilege`. (#1077)
 - Deprecated the unnamed prepared statement.
7.10.3
 - Fix Microsoft Visual Studio C++17 build. (#1036, #1037)
 - Run Appveyor & CircleCI tests against multiple C++ versions at once.
7.10.2
 - CMake: Drop unneeded, broken `PostgreSQL_INCLUDE_DIRS` definition. (#981)
 - Handle spaces and single quotes in `connection::connection_string()` (#992)
 - _I said,_ can't pass parameters to streaming query.  Remove support. (#997)
 - Fix pkgconfig for static linkage; use config module `libpq`. (#999)
 - Made `row::as_tuple()` public. (#1003)
 - Avoid garbage at end of demangled names. (#1007)
 - Fix build when `std::free` is not `noexcept`, such as Mac. (#1010)
 - Document: generally `pqxx::type_name` should be a `std::string_view`. (#1009)
 - Fix float-to-text conversion workaround when `charconv` is missing.
 - Fix `result::affected_rows()` for empty results. (#1018)
 - Fix error message in `result::expect_columns()`. (#1020)
 - Fix for compilers that support concepts but not ranges. (#1017)
 - Avoid deprecation warning for `<ciso646>`. (#1023)
7.10.1
 - Fix string conversion buffer budget for arrays containing nulls. (#921)
 - Remove `-fanalyzer` option again; gcc is still broken.
 - Oops, no, minimum CMake version is not 3.28, but 3.12!
 - Fix warnings on compilers that accept `[[assume]]` with a warning. (#928)
 - Can't pass parameters to streaming query.
 - CMake build: take libpq path from build target, not absolute path. (#964)
 - Added explanation to `listen()` of when notifications come in. (#963)
7.10.0
 - Deprecate `errorhandler`; replace with lambda-friendly "notice handlers."
 - Deprecate `notification_receiver`; replace with "notification handlers"
 - Bump minimum CMake version to 3.12. (#851, #874)
 - Fixed error message on clashing transaction focuses. (#879)
 - Don't call`/bin/true`; macOS doesn't have it.  Just call `true`. (#885)
 - Deprecate `exec_prepared()`; just use `exec()` with a `pqxx::prepped`.
 - Deprecate `exec1()` etc.  Use `result::expect_rows()` etc.
 - Fix error-reporting crash in non-blocking connection constructor. (#894)
 - Fix buffer overrun when converting array containing nulls to string. (#906)
 - Fix nullness check for `std::optional` containing a nullable value. (#907)
 - `connection::process_notice()` no longer appends newline if missing.
7.9.2
 - Fix CMake documentation install. (#848)
 - More CMake build fix. (#869)
 - Bump gcc/clang/postgres minimum version requirements.
 - Another fix to the readthedocs documentation build. (#845)
 - Remove obsolete CMake workaround kludges. (#851, #866, #867)
 - Remove obscure deprecated `stream_to` constructor that never worked. (#853)
 - Support reading a field as an SQL array using `as_sql_array()`. (#841)
 - Make row iterator a _proper_ `random_access_iterator`. (#846)
 - Downgrade result iterator to "bidirectional"; was never really RA. (#846)
7.9.1
 - Fix bad conversion of array of empty strings to string. (#816)
 - Move `[[likely]]` feature check back to compile time, to speed up configure.
 - Support `[[assume(...)]]`.
 - Fix `throw_null_conversion` compile error when converting enums. (#807)
 - Fix memory leak when failing to connect.
 - Improve introductory docs for connections and transactions.
 - Re-do entire documentation build.  No more Sphinx in readthedocs. (#802)
 - No more autodetection of doxygen etc.  Run it, or don't.
 - Docs build now disabled by default; use `--enable-documentation` to change.
7.9.0
 - Support standard libraries without `std::basic_string<std::byte>` etc.
 - `std::basic_string<std::byte` becomes `pqxx::bytes`. (#726)
 - `std::basic_string_view<std::byte>` becomes `bytes_view`. (#726)
 - Fix assertion failure when streaming row ending in empty string. (#774)
 - CMake users can `shared_link_libraries(... libpqxx::pqxx)`. (#784)
 - Support parameterised versions of `query()` etc. (#646)
 - Put all feature tests back in config header. (#732)
 - Automate integration of feature tests into both CMake & autoconf. (#747)
 - Streaming query result implements `std::input_iterator`. (#771)
 - Fix broken `to_buf()` on `zview`. (#728)
 - Support `PQfsize()` and `PQfmod()`. (#727)
 - Implement conversion from `string_view` to string. (#728)
 - Rename `splitconfig` to `splitconfig.py`. (#763)
 - Document need for conversions more clearly, link to docs. (#757)
 - Experimental support for converting `std::span` to SQL arrays. (#769)
7.8.1
 - Regenerate build files. Should fix ARM Mac build. (#715)
 - Reinstate `<ciso646>` that MSVC can't live with or without. (#713)
7.8.0
 - Streaming large data sets now benchmarks faster than similar C/libpq code!
 - New `array` class for easier parsing of SQL arrays.
 - Deprecating `stream_from`.  Use `transaction_base::stream()`.
 - Use `array_parser` only on comma-separated types, i.e. most of them. (#590)
 - Bumping requirements versions: need postgres 10.
 - Fix `array_parser` bug when parsing semicolon in an unquoted string.
 - Make some `zview` constructors `noexcept` if `string_view` does it.
 - Handle result status code for starting streaming replication.  (#631)
 - Faster text decoding and escaping in data streaming.  (#601)
 - Deprecate `basic_fieldstream` and `fieldstream`.
 - Deprecate `<<` operator inserting a field into an `ostream`.
 - New string conversion fields: `converts_to_string` & `converts_from_string`.
 - Ran `autoupdate` (because the autotools told me to).
 - Documentation tweak. (#584)
 - Typo in README.md. (#586)
 - Support `std::optional<std::string_view>` etc. in `stream_to`. (#596)
 - Remove support for single-quoted array/composite elements.  No such thing!
 - Optimise out a kink in composite field parser.
 - Work around build warning in MinGW: include `winsock2.h` before `windows.h`.
 - Drop some redundant encoding groups.
 - If CMake can't find libpq, fall back to pkg-config. (#664)
 - Work around spurious compile error on g++ pre-gcc-10. (#665)
 - Include `<pqxx/range>` and `<pqxx/time>` headers in `<pqxx/pqxx>`. (#667)
 - Don't use `std::function` as deleter for smart pointers.
 - Work around gcc compile error with regex + address sanitizer + analyzers.
 - Fix "double free" on exit when built as shared library on Debian. (#681)
 - Stop including `<ciso646>`; should be built into compilers. (#680)
 - New `broken_connection` exception subclass: `protocol_violation`. (#686)
 - Retired unused `blob_already_exists` exception class. (#686)
 - Support for `PQinitOpenSSL()`. (#678)
 - Slightly more helpful error for unsupported conversions. (#695)
 - Replace some C++ feature tests with C++20 feature macros.
 - Support moving of `stream_to`. (#706)
 - Incorporate `source_location` in exceptions.
7.7.4
 - `transaction_base::for_each()` is now called `for_stream()`. (#580)
 - New `transaction_base::for_query()` is similar, but non-streaming. (#580)
 - Query data and iterate directly as client-side types: `query()`. (#580)
 - New ways to query a single row!  `query01()` and `query1()`. (#580)
 - We now have 3 kinds of execution: "exec", "query", and "stream" functions.
 - Use C++23 `std::unreachable()` where available.
 - `result::iter()` return value now keeps its `result` alive.
7.7.3
 - Fix up more damage done by auto-formatting.
 - New `result::for_each()`: simple iteration and conversion of rows.  (#528)
 - Add some missing headers in `<pqxx/pqxx>`.  (#551)
 - More strictness in `header-pre.hxx`/`header-post.hxx` checking.
 - Disallow nesting of `ignore-deprecated` blocks.
 - Deprecate `exec` functions' `desc` parameter.
 - Fix `placeholders` documentation.  (#557)
 - Strip `const` and references from `value_type`. (#558)
 - Get tests running on appveyor. (#560)
 - Fix broken nonblocking connection on Windows. (#560)
7.7.2
 - Fix up damage done by auto-formatting.
7.7.1
 - When you build libpqxx, configure the compiler's C++ version yourself!
 - Finally fix a long-standing silly warning in autogen.
 - Fix `digit_to_number` not being found on some comilers.  (#518, #519)
 - In audit mode, define `_FORTIFY_SOURCE` to enable some extra checks.
 - Make more functions `constexpr`.  Nothing particularly useful though.
 - Make more functions `noexcept`.
 - Move constructor & assignment for `result`.
 - Support LGTM.com and Facebook "infer" static analysis.
 - Deprecated `set_variable`/`get_variable` on `transaction_base`.
 - (Design unearthed warts in SQL variables, which were then fixed.)
 - Set/get session variables on `connection`: `set_session_var`/`get_var`.
 - Set/get local variables: execute SQL statements.
 - When using `select()`, include `<winsock2.h>` if available.
7.7.0
 - Fix `stream_to` for differing table/client encodings.  (#473)
 - Use `[[likely]]` & `[[unlikely]]` only in C++20, to silence warnings.
 - Fix clang "not a const expression" error in Windows.  (#472)
 - Fix warnings about `[[likely]]` in `if constexpr`.  (#475)
 - Clearer error for ambiguous string conversion of `char` type.  (#481)
 - Pseudo-statement in `prepare()` error was for the wrong statement.  (#488)
 - New class, `connecting` for nonblocking connection to the database.  (#487)
 - New class, `range` for SQL range types.  (#490)
 - Replace `std::isdigit` with a safer alternative.
 - Support string conversions for `std::chrono::year_month_day`. (#492)
 - Helper for implementing string traits: `generic_to_buf`.
 - Support `result::at(row_num, col_num)`.
 - Support `result[row_num, col_num]` if the compiler allows it.
 - Work around broken `std::filesystem::path` in MinGW.  (#498)
 - Fix leak when getting client encoding fails.  (#500)
 - Use `std::cmp_greater` etc. when available.  Saves some ugly casts.
 - Move `result_iterator.hxx` into `pqxx/include/internal/`.
 - Move `compiler-public.hxx` into `pqxx/include/internal/`.
 - Add script for updating copyright strings.
 - Make `tools/lint` figure out source directory by itself.
 - Pass the actual C++ version to `tools/lint`, not the baseline one.
 - Re-enable pyflakes testing in `tools/lint`.
 - Make more functions `[[nodiscard]]`.
 - Qualified some member functions as lvalue or rvalue.
 - Don't run clang-tidy by default.  Compatibility issues with gcc options.
 - Describe version requirements in a JSON file, `requirements.json`.
 - Doxygen documentation now uses the (Doxygen-extended) Markdown format.
 - Build docs in `doc/html/`, no longer in `doc/html/Reference/`.
 - Disable some `std::filesystem` features on Windows.
 - Shut up stupid Visual Studio warnings.
 - On gcc, mark rarely-used functions as "cold," to be optimised for size.
 - Glyph scanning for GB18030 encoding was utterly broken. (#517)
7.6.0
 - Removed bad string conversion to `std::basic_string_view<std::byte>`. (#463)
 - Add C++20 concepts: `binary`, `char_string`, `char_strings`.
 - Generalise binary strings to any contiguous range of `std::byte`.
 - Mark `zview` as a view and as a borrowed range.
 - Save a copy step on string fields in `stream_to`.
 - New helper: `pqxx::value_type<CONTAINER>`.
 - New helper: `pqxx::binary_cast`. (#450)
 - Some escaping functions now have "into my buffer" variants.
 - More generic escaping functions, supporting more types of binary.
 - In C++20, accept generic columns list for `stream_to`.  (#447)
 - Renamed `<pqxx/prepared_statement>` to `<pqxx/params>`.
 - Deprecated `dynamic_params` in favour of `params`.
 - `pqxx::params::append_multi()` now calls `reserve()` if possible.
 - `pqxx::params::size()` is now `noexcept` (but sadly, `ssize()` is not).
 - Helper for generating parameter placeholders `$1`, `$2`, etc.  (#443)
 - Now requires support for C++14 `[[deprecated]]` attribute.
 - Deprecated `unesc_raw()` with `unesc_bin()` variants.
 - Once `unesc_raw()` is gone, we'll support only the hex escape format.
 - Work around broken `thread_local` in MinGW gcc < 11.1.
 - `pqxx::blob` now supports `std::filesystem::path`.
 - Fixed check against header/lib version mismatch: `check_pqxx_version_7_6`
 - Deprecated result slicing.  Expect `row::slice()` to disappear.
 - More complete documentation, of cursors in particular.
7.5.2
 - **Actual serious bug.**  `blob::read(std::vector<...>)` was broken.
7.5.1
 - Fixed some Visual Studio warnings.
 - Missed a bit in working around MinGW's broken `<thread>`.
 - Deprecated more obsolete representations of binary data.  Use `std::byte`.
 - New script `tools/deprecations` lists files that use deprecated code.
 - Added automake-generated `config/compile` to revision control.
7.5.0
 - Now requires `std::variant` support!  No longer works with gcc7.
 - When implementing a string conversion, consider specialising `param_format`.
 - Stop "aborting" nontransaction on closing.  (#419)
 - Silence an overzealous Visual C++ warning.  (#418)
 - Starting support for C++20 `std::span`.
 - New `blob::read()` using `std::span`.  (#429)
 - New `params` class lets you build parameter lists incrementally.  (#387)
 - Pass `std::vector<std::byte>` params in binary format.
 - Dropped legacy tests 31 and 49 to work around clang C++20 bug.
 - Fixed `stream_to` test failure in non-English locales.  (#440)
 - Clarify `transaction_base::stream` documentation.  (#423)
 - Avoid `<thread>` on MinGW; it's broken there.  (#336, #398, #424, #441)
7.4.1
 - Missing includes; broke macOS clang build.  (#416)
7.4.0
 - Work around Visual Studio 2017 bug with `[[deprecated]]`.  (#405, #406)
 - Work around eternal Windows bug with `max` macro yet again.  (#101)
 - Prepare for C++20 `std::ssize()`.
 - Dropped test12, which didn't add much and tried to read null strings.
 - Support string conversion for `std::monostate`.  (#409)
 - Consistent "named constructors" for `stream_to` and `stream_from`.
 - New `table_path` type.
 - New `connection` methods `quote_table` and `quote_columns`.
 - Lots of deprecated stream constructors.
 - `pqxx::row::swap()` now finally has the `deprecated` attribute.
 - Finally deprecated a bunch of `field`, `row`, and `result` constructors.
 - Exposed `transaction_focus` marker class.
7.3.1
 - New, simpler API for large objects: `blob` ("binary large object").
 - `largeobject` and friends are now deprecated.
 - Fix visibility issue on gcc/clang, especially on macOS.  (#395)
 - Use "pure" & "visibility" attributes if they work, regardless of compiler.
 - More deprecated items now have the `[[deprecated]]` attribute.
 - Document the concept of transaction focus.
 - Error messages more often report query description, if given.
 - Suppress spurious deprecation messages on Visual Studio. (#402)
 - Correct error when prepared/param statement clashes with tx focus. (#401)
 - `from_stream` with `from_query` now has a convenient factory function.
 - Removed some obsolete scripts from the `tools/` directory.
7.3.0
 - `stream_to` now quotes and escapes its table name.
 - Removed `transaction_base::classname()`.  Did anyone ever use it?
 - Internal reorg of the `transaction` and `transactionfocus` hierarchies.
 - Removed the only case of virtual inheritance, related to `namedclass`.
 - Internal `concat()` for faster, simpler string concatentation.
 - Fix compile omission in string conversions for `nullptr_t`.
 - `pqxx::size_buffer()` can now size multiple values at once.
 - `multi_to_string()` to convert multiple values into one `std::string`.
 - Implicit `zview` constructor from `char const *`. (#389)
 - Many `std::string&` parameters are now `zview` or `std::string_view`.
 - Now checking statement parameter lengths for overflow.
 - `#include <array>` in connection.cxx.  (#394)
7.2.1
 - Fix infinite loop in converting `char *` to string. (#377)
 - Deprecated `namedclass`.
 - Convert an entire row using `row::as<type...>()`.
 - Internal rework of `field::to()` and `field::as()` functions.
 - Some more warning options in maintainer mode.
 - Removed the old, DocBook-based tutorial.
 - Fixed wrong `query` and SQLSTATE params to some exceptions. (#378)
7.2.0
 - You can now implicitly convert a `const std::string &` to `zview`.
 - Replaced some overloads for C strings and C++ strings with `zview`.
 - Deprecating `binarystring`.  Use `std::basic_string<std::byte>` instead!
 - Array parser did not recognise escaping in unquoted values.
 - gcc10 test build fix: a result iterator is not the same thing as a `row`.
 - Doc fix: field size does _not_ include terminating zero.  (#356)
 - Fix error message in `demangle_type_name`: printed result, not raw name.
 - Fix compile warning in `demangle_type_name` on GNU systems.
 - Document that string conversions assume non-null values.
 - Start playing with C++20 _concepts._
 - Sketch out concepts-based `PQconnectdbParams` support.  (#343)
 - Add missing link to "datatypes" documentation.  (#346)
 - Supports `to_string`, `stream_to`, etc. for `binarystring`.  (#312)
 - Fixed infinite recursion when using `std::optional` in `stream_to`.  (#364)
 - Home-rolled hex-escaping.  Saves an allocation.
 - Catch floating-point negative overflow in `check_cast`, not underflow.
 - Bit more work on CMake build doc. (#318)
 - Typo in `datatypes.md`: `nullness`, not `nullness_traits`. (#353)
 - Fixed test names map in `tests/runner.cxx`. (#354)
 - Integral `from_string` now accept leading whitespace, as in composite types.
 - Experimental support basics for composite types.  (#355)
 - Use `stream_from` without knowing the number of fields.  (#357)
 - Global `size_buffer` function.
 - `quote()` now works for always-null types without conversions defined.
 - `std::nullopt` now converts to an SQL null.
 - Skip quoting and escaping array/composite fields of "safe" types.
 - New type trait: `is_unquoted_safe`.
 - Forbid invalid specialisations of `query_value`.
 - Fixed `mktemp` invocation that broke on FreeBSD.
 - Avoid unneeded encode/decode step on more binary data.
 - If `__cxa_demangle` fails, fall back on raw type name.  (#361)
7.1.2
 - Document build in `BUILDING-configure.md` / `BUILDING-cmake.md`.
 - Work around silly clang warning in `test_errorhandler.cxx`.
 - Fix install error with some internal headers. (#322)
 - Fix "No object selected" error message in large objects.  (#324)
 - If error has no SQLSTATE, throw `broken_connection`. (#280)
 - Fix argument order in `encrypt_password`. (#333, #334)
 - Fix underestimate of buffer size for `to_string` for floats. (#328)
7.1.1
 - Compile fix for Visual Studio.
 - Warning fix for clang.
 - Also install `transaction_focus.hxx`. (#320)
7.1.0
 - Query tuples straight into `std::tuple` using `transaction::stream()`!
 - And, `stream_from` now supports more or less arbitrary queries.
 - Instead of a tuple of fields, you can pass `stream_to` a container as well.
 - `string_traits::size_buffer()` must now be `noexcept`.
 - New `nullness` member: `always_null`.
 - There is now `to_buf` support for string literals.
 - Streaming data is now more efficient.
 - The table name in `stream_from` is now escaped.
 - You can now "convert" strings to `std::string_view`.  Mind your lifetimes!
 - A `std::variant` will now convert to string, if its member types do.
 - If a `stream_from` row fails to convert, you can no longer retry it.
 - `from_string(field const &)` now handles null values properly.
 - Obsolete Windows build docs are gone.
 - Added `row::to(std::tuple<...>)`.
 - Unified the test suites.  We no longer need `test/unit/unit_runner`.
 - New helper: `strip_t<...>` to remove a type's constness and reference.
 - Replace custom templating with CMake glob in `src/CMakeLists.txt`.
 - Replace custom templating with CMake glob in `doc/CMakeLists.txt`.
 - Replace custom templating with CMake glob in `test/unit/CMakeLists.txt`.
7.0.8
 - Inline `type_name` in `PQXX_DECLARE_ENUM_CONVERSION`.
7.0.7
 - Fix broken `--with-postgres-lib` option in `configure` script (#311)
 - Should now build even if neither `pkg-config` nor `pg_config` is available.
 - CMake accepts `PostgreSQL_ROOT`, if it's a sufficiently recent version.
7.0.6
 - Prefer `pg_config` over `pkg-config` for include path (#291).
 - Try to plod on if we don't know the PostgreSQL include path.
 - Fix error message when starting overlapping transactions and such (#303).
 - Fix potential crashes when converting invalid strings to floats (#307, #308).
7.0.5
 - Compile fix for g++ 10: include `<limits>` (#292).
 - Cleaned up error-checking of PG results.  (#280).
 - The `esc()` methods now also take `std::string_view` (#295).
7.0.4
 - Fix possible crash in `connection::connection_string` (#290).
 - Fix filtering of default values in `connection::connection_string` (#288).
 - Deprecate `row::swap` and public inheritance of iterators from `row`.
 - More copy/move/default constructors/assignments on result iterators.
 - More copy/move/default constructors/assignments on row iterators.
7.0.3
 - Fixed misreporting of broken connection as `sql_error` (#280).
 - Replaced non-ASCII test texts with escape codes (#282, #283).
 - `ilostream` could truncate at `0xff` byte at buffer boundary (#284, #286).
7.0.2
 - New query function: `query_value`, queries and converts a single value.
 - A `stream_from` stream can now be iterated.
 - More callable types qualify as transactors, thanks to `std::invoke`.
7.0.1
 - Windows build fixes.
 - Documentation for writing your own string conversions.
 - `transaction_rollback` and children are now `sql_error`, not just `failure`.
7.0.0
 - Bumped minimum required C++ version to C++17.
 - Everything has changed.  If you're porting from older versions, be careful!
 - There is now only one connection class: `connection`.
 - Removed tablereader/tablewriter, replaced by stream_from/stream_to.
 - Removed obsolete transactor framework, replaced by post-C++11 one.
 - Removed old ways of invoking parameterised and prepared statements.
 - Session variables are no longer cached.
 - If you do weird stuff with setting/getting variables, it may break.
 - Reading a variable written from raw SQL, procedures, etc, will now work.
 - Prepared statements are now registered immediately.
 - If you do weird stuff with preparing/unpreparing statements, it may break.
 - Changed exceptions and errors for many error situations.
 - Mishandling prepared statements will now break the connection.
 - Many string references and const char pointers are now `std::string_view`.
 - New `zview` class wraps `string_view` for string with terminating zero.
 - The `stream_base` abstract base class is gone.
 - Transactions no longer have an `isolation_tag` nested type.
 - The `isolation_traits` type is gone.
 - There's no more `pqxx_exception`.  Complicated things too much.
 - `pqxx::string_traits<>::name()` has been replaced with `pqxx::type_name`.
 - `to_string()` can now handle `std::vector` (to produce an SQL array).
 - All `from_string()` that took a C string now take a `std::string_view`.
 - There are now separate `string_traits` and `null_traits` templates.
 - Enums outside classes are now scoped enums.
 - `error_verbosity` is no longer nested in connection.
 - `connection::get_verbosity` is gone.
 - Some enums have changed names: `accesspolicy` to `access_policy`, and so on.
 - `dynamic_params` now accepts an accessor.
 - Fixed "const" support in arguments to parameterised/prepared statements.
 - Connection objects can now be moved.
 - `connections::options()` has been replaced by `connection_string()`.
 - Replaced pqxx-fulltest with `test_all.py`.
 - Some `size_type` have changed to different types, to match current libpq.
 - Internal overflows are more consistently caught and reported.
 - Deprecated items have been removed.
 - Large objects now require backend version 9.3 or better.
 - Seeking inside large objects now supports 64-bit sizes.
 - Visual Studio project files and sample headers are gone.  Use CMake.
 - MinGW Makefiles are gone.  Use `configure` or CMake.
 - Need PostgreSQL 10 to use robusttransaction.
 - `robusttransaction` no longer uses a log table.  Feel free to drop it.
6.4.4
 - Use pkg-config if pg-config is not available.
 - In CMake build, prefer CMake's config headers over any found in source tree.
6.4.3
 - Updated copyright strings.
 - Added missing "stream" headers to autotools-based install.
 - Added stream headers to pqxx/pqxx header.
6.4.2
 - Fix mistake for Windows in 6.4.1: use PQfreemem, not std::free.
 - Easily enable runtime checks in configure: "--enable-audit".
 - Enable optimisation in CircleCI build.
6.4.1
 - Fixed more memory leaks.
6.4.0
 - Half fix, half work around nasty notice processor life time bug.
 - Fix selective running of tests: "test/unit/runner test_infinities".
 - Added some missing `std::` qualifications.
6.3.3
 - Throw more appropriate error when unable to read client encoding.
 - CMake build fixes.
6.3.2
 - Conversion errors no longer throw pqxx::failure; always conversion_error!
 - Use C++17's built-in numeric string conversions, if available.
 - Query numeric precision in a more sensible, standard way.
 - Avoid "dead code" warning.
 - Replace obsolete autoconf macros.
 - Remove all "using namespace std".
 - CMake build fixes.
6.3.1
 - Windows compile fix (CALLBACK is a macro there).
 - Work around Visual Studio 2017 not supporting ISO 646.
6.3.0
 - New "table stream" classes by Joseph Durel: stream_from/stream_to.
 - Support weird characters in more identifiers: cursors, notifcations, etc.
 - Connection policies are deprecated.  It'll all be one class in 7.0!
 - Connection deactivation/reactivation is deprecated.
 - Some items that were documented as deprecated are now also declared as such.
 - Fix Windows bug where WSAPoll was never used.  Thanks dpolunin.
 - Fix Windows CMake build to link to socket libraries.  Thanks dpolunin.
 - Various other changes to the CMake build.
 - Fix failure when doing multiple string conversions with Visual C++.
 - Fix nested project builds in CMake.  Thanks Andrew Brownsword.
 - In Visual Studio, build for host architecture, not "x64".
 - Fix string conversion link error in Visual Studio.  Thanks Ivan Poiakov.
 - Fix string conversion to bool for "1".  Thanks Amaracs.
 - Fix in escaping of strings in arrays.  Thanks smirql.
 - Faster copying of results of large queries.  Thanks Vsevolod Strukchinsky.
 - Starting to handle encodings properly!  Thanks to Joseph Durel.
 - No longer using std::iterator (deprecated in C++17).
6.2.5
 - Removed deprecated pqxx-config.
 - Build fix on Visual C++ when not defining NOMINMAX.
 - Reduce setup code for string conversions, hopefully improving speed.
 - Allow nul bytes in tablereader.
 - Support defining string conversions for enum types.
 - Fixed const/pure attributes warning in gcc 8.
 - Updated build documentation to mention CMake option.
 - Fixed a floating-point string conversion failure with Visual Studio 2017.
6.2.4
 - Fix builds in paths containing non-ASCII characters.
 - New macro: PQXX_HIDE_EXP_OPTIONAL (to work around a client build error).
6.2.3
 - Build fixes.
6.2.2
 - Variable number of arguments to prepared or parameterised statement (#75).
 - Windows build fix (#76).
6.2.1
 - Compile fixes.
6.2.0
 - At last!  A check against version mismatch between library and headers.
 - Small compile fixes.
6.1.1
 - Small compile fixes.
 - A particular error string would always come out empty.
6.1.0
 - Dependencies among headers have changed.  You may need extra includes.
 - Library headers now include "*.hxx" directly, not the user-level headers.
 - Supports parsing of SQL arrays, when using "ASCII-like" encodings.
6.0.0
 - C++11 is now required.  Your compiler must have shared_ptr, noexcept, etc.
 - Removed configure.ac.in; we now use configure.ac directly.
 - Removed pqxx::items.  Use the new C++11 initialiser syntax.
 - Removed maketemporary.  We weren't using it.
 - Can now be built outside the source tree.
 - New, simpler, lambda-friendly transactor framework.
 - New, simpler, prepared statements and parameterised statements.
 - Result rows can be passed around independently.
 - New exec0(): perform query, expect zero rows of data.
 - New exec1(): perform query, expect (and return) a single row of data.
 - New exec_n(): perform query, expect exactly n rows of data.
 - No longer defines Visual Studio's NOMINMAX in headers.
 - Much faster configure script.
 - Most configuration items are gone.
 - Retired all existing capability flags.
 - Uses WSAPoll() on Windows.
 - Documentation on readthedocs.org, thanks Tim Sheerman-Chase.
5.1.0
 - Releases after this will require C++11!
 - Internal simplification to pqxx::result.
 - A row object now keeps its result object alive.
 - New exec() variants: "expect & return 1 row," "expect no rows," "expect n."
 - ChangeLog is gone.  It was a drag on maintenance.
5.0.1
 - Exposed sqlstate in sql_error exception class.
5.0
 - The PGSTD namespace alias is gone.  Use the std namespace directly.
 - pqxx::tuple is now pqxx::row, to avoid clashes with std::tuple.
 - Deprecated escape_binary functions dropped.
 - Deprecated notify_listener class dropped.
 - Support for many old compilers dropped.
 - Support for "long long" and "long double" types is always enabled.
 - No longer uses obsolete std::tr1 namespace; use plain std instead.
 - Now requires libpq 9.1 or better.
 - Requires server version 9.1 or better.
 - Support for REPEATABLE READ isolation level added.
 - Makefile fixes for Visual Studio 2013.
 - Supports C++11 and C++14.
 - No longer has obsolete debian & RPM packaging built in.
 - Fixed failure to abort uncommitted subtransactions on destruction.
 - Fixed failure to detect some integer overflows during conversion.
 - Build tooling uses /usr/bin/env python instead of /usr/bin/python.
 - New configure options: --with-postgres-include and --with-postgres-lib.
 - In g++ or compatible compilers, non-exported items are no longer accessible.
 - Many build fixes for various platforms and compilers.
4.0
 - API change: noticers are gone!  Use errorhandlers to capture error output.
 - API change: tablereaders and tablewriters are gone; they weren't safe.
 - API change: prepared statements are now weakly-typed, and much simpler.
 - API change: fields and tuples are now stand-alone classes in ::pqxx.
 - API change: thread-safety field have_strerror_r is now have_safe_strerror.
 - API change: notify_listener has been replaced with notification_receiver.
 - notification_receiver takes a payload parameter.
 - Easier Visual C++ setup.
 - Absolutely requires a libpq version with PQescapeStringConn.
 - Absolutely requires libpq 8.0 or better.
 - Changes for C++0x.
 - Supports clang++.
 - Visual C++ makefiles now support new-style unit tests.
 - Sample headers for more recent Visual Studio versions.
 - Fixes binary-data escaping problems with postgres 9.0.
 - Fixes problems with binary-string handling and escaping.
 - Fixes compatibility problems between 9.x libpq and 7.x backend.
 - quote_name to escape SQL identifiers for use in queries.
 - syntax_error reports error's approximate location in the query.
 - On Windows, now uses ws2_32 instead of wsock32.
 - Various Windows build fixes.
 - Updated for gcc 4.6.0.
 - configure script supports --enable-documentation/--disable-documentation.
 - Streamlined test/release toolchain.
3.1
 - Shared libraries are now versioned by ABI: 3.1 instead of 3.1.0 etc.
 - Threading behaviour is now documented, and can be queried.
 - Version information available at compile time.
 - Supports parameterized statements.
 - Result tuples now support slicing.
 - Configure with --with-tr1=boost to use BOOST shared_ptr.
 - String conversion now has its own header file.
 - Supports read-only transactions.
 - Fixed breakage with Solaris "make".
 - Uses shared_ptr if available.
 - binarystring::str() is no longer cached; no longer returns reference.
 - Fixed problems in Visual C++ Makefile for test suite.
 - Fixed problems with RPM packaging.
 - Fixed build problem on RedHat/CentOS 5.
 - Lets you check whether a prepared statement has been defined.
 - "Varargs" prepared statements.
 - Unnamed prepared statements now supported.
 - Results have iterator as well as const_iterator.
 - Rewrite of robusttransaction logic; may actually do its job now.
 - Connections support async query cancel from signal handler or thread.
 - More documentation for performance features.
3.0
 - Website is now at http://pqxx.org/ (no redirects)
 - Completely replaced cursor classes
 - More helpful error messages on failed connections
 - More detailed hierarchy of constraint-violation exception classes
 - trigger is now called notify_listener, trigger header is now notify-listen
 - New mixin base class pqxx_exception distinguishes libpqxx exception types
 - Quoting is back!  transaction_base::quote() & connection_base::quote()
 - Several build & documentation problems with Visual C++ fixed
 - Compile fixes for gcc 4.2, 4.3
 - Compile fixes for Sun Studio Express 5.9
 - Uses strlcpy() where available, instead of strncpy()
 - Keeps better track of applicable text encodings
 - Fixed bug with prepared statement parameters in separate C++ statements
 - robusttransaction now works for multiple users
 - Pipeline lets you cancel ongoing queries, e.g. because they run for too long
 - Fixed broken escaping of binary values in tablewriter
 - Floating-point types now represented with full precision
 - Proper unit tests for new functionality
 - New traits-based system for adding data types
 - Floating-point infinities now supported
 - Flushing/completing a pipeline now frees up the transaction for other use
 - Completely reworked test suite, builds and runs much faster
 - tablewriter supports writing of raw lines
2.6.9
 - Removed old 1.x API (that means all identifiers with capital letters!)
 - Tested with all current libpq versions and oldest/newest supported backends
 - No longer have old OnCommit()/OnAbort()/OnDoubt() callbacks in transactor!
 - Fixes failure when closing cursors with upper-case letters in their names
 - Fixes bug when adding triggers to connections that aren't open yet
 - Fixes bug when removing triggers
 - Fixes small memory leak when preparing statements
 - Fixes many problems with older backends
 - Fixes bug in result::swap(): protocol versions were not swapped
 - Some errors went undetected when using certain libpq versions
 - Fixes prepared statements on new libpq versions talking to old backends
 - Can estimate server version if libpq does not know how to obtain it
 - Greatly reduced memory usage while escaping strings
 - With Visual C++, creates lib/ directory if not already present
 - Useful error messages when preparing statements
 - Allows prepared statements to be registered explicitly
 - Support for "long long" types; enable with PQXX_ALLOW_LONG_LONG macro
 - Compilation errors for older libpq versions fixed
 - Some new small utility classes for disabling notice processing etc.
 - Result sets remember the queries that yielded them
 - New test script, pqxx-fulltest, tests against all current postgres versions
 - Connections can simulate failure
 - Adds password encryption function
2.6.8
 - Fixes bug: binary parameters to prepared statements truncated at nul bytes
 - New, more specific exception types to distinguish errors from server
 - Resolved serious problems with generated reference documentation
 - Automatically detect Windows socket library with MinGW
 - Windows "make" fixed to run from main directory, not win32
 - Fixes "mktemp" problems on some BSD-based platforms
 - pqxx-config is deprecated; use pkg-config instead
 - On GNU/Linux, uses poll() instead of select() to avoid file descriptor limit
 - Will provide server and protocol version information where available
 - New cursor class, absolute_cursor
2.6.7
 - New escape functions for binary data: transaction_base::esc_raw()
 - Improved detection of socket libraries, especially for MinGW
 - Works around bug in some versions of GNU grep 2.5.1
 - Fixes problem with configuration headers
 - Fixes PQprepare() detection
 - Fixes incomplete Visual C++ Makefile
 - Fixes compile error in workaround for older libpq versions
 - Removes "rpath" link option
2.6.6
 - New, encoding-safe string-escaping functions
 - Upper-case letters now allowed in prepared-statement names
 - Fixes crash in test005
 - More Visual C++ improvements
 - Removed collaboration diagrams from reference docs
 - New templating system for generating Windows Makefiles etc.
2.6.5
 - Visual C++ users: copy win32/common-sample to win32/common before editing it
 - Should fix problems finding socket library on MinGW
 - Even more work on Visual C++ problems
 - Updated documentation for Visual C++ users
 - Fixed bug in prepared statements (mostly visible on Visual C++)
 - Nested transactions work harder to detect backend support
2.6.4
 - Massively improved compatibility with Windows and Visual C++
 - Fixed late initialization of "direct" connection state
 - Fixed problem with initialization of connection capabilities
 - Fixed configuration bug for libpq in nonstandard locations
 - Sample configuration header for libpq found in PostgreSQL 8.1
2.6.3
 - Radical rework of prepared statements; INCOMPATIBLE INTERFACE CHANGE!
 - Dropped support for g++ 2.95
 - Emulate prepared statements support on old libpq or old backend
 - Bug fix: missing tutorial (release script now tests for this)
 - Automatically links in socket library on Windows or Solaris, if needed
 - Bug fix: check for std namespace didn't work
 - Fixes for Cygwin/MSYS/MinGW
2.6.2
 - Bug fix: connection state was not set up properly in some common cases
 - Bug fix: headers were installed in "include" instead of "include/pqxx"
 - Bug fix: sqlesc(string) broke with multibyte or multiple encodings
 - namedclass is now used as a virtual base; affects all subclass constructors
 - Initial implementation of subtransactions
 - Detect more connection capabilities
 - Standard library namespace can be set from configure script's command line
 - Completely reworked connection hierarchy, with separate policy objects
 - Clients can now define their own connection policies
 - Paved the way for client-defined thread synchronization
 - Now lives at http://thaiopensource.org/development/libpqxx/
2.6.1
 - Hugely improved recognition of different strerror_r() versions
 - Resolved link problems with gcc 4.0 and shared library
2.6.0
 - New macro PQXX_SHARED defines whether to use/build libpqxx as shared library
 - Robusttransaction compatible with PostgreSQL 8.1
 - Infrastructure for querying connection/backend capabilities at runtime
 - Greatly improved cursor support
 - Connection reactivation can be inhibited explicitly
 - Tries even harder to make sense of conflicting strerror_r() definitions
 - Detects connection failures that libpq glosses over
 - Reference documentation grouped into more coherent sections
 - Assumes strerror() is threadsafe on systems that have no strerror_r()
 - Now allows connection's socket number to be queried
 - New internal_error class for libpqxx-internal errors
 - With Visual C++, doesn't redefine NOMINMAX if it is defined already
 - Several compatibility improvements for Visual C++
 - Fixes and workarounds for HP-UX and HP aCC compiler
 - Phased old cursor interface out of test suite; tests ported to new interface
 - Added documentation on thread safety
 - New thread safety model
 - Large objects have functions to tell current position
 - Minor updates to tutorial (somebody pay me and I'll do more :)
 - No longer needs libpq-fs.h header
 - Meaningful error messages for ambiguous string conversions fixed
2.5.6
 - Support null parameters to prepared statements (use C-style char pointers)
2.5.5
 - Diagnoses connection failure during result transfer
 - Fixes invalid -R link option in pqxx-config
2.5.4
 - Fix workaround code for older libpq versions without PQunescapeBytea()
 - Work around grep bug in Fedora Core 4 that broke configure in UTF-8 locales
 - In Visual C++, assume libpqxx is a DLL when linking to std library as DLL
 - Missing documentation in distribution archive is back again
 - Export fewer symbols from library binary with gcc 4.0
 - Releases now automatically tested against gcc 4.0
 - Meaningful link errors for additional ambiguous string conversions
 - DLL symbol exports now automatically tested before each release
2.5.3
 - Greatly improved builds on MinGW with MSYS
 - All known problems with MinGW fixed
 - Fix bugs in stream classes that caused failures and crashes with STLport
 - Detects and uses STLport automatically
2.5.2
 - Fix memory leaks
 - Fix problems with NaN (not-a-number values) on some compilers
2.5.1
 - Fix configure script; broke when very recent libpqxx was already installed
 - Fix cursor breakage when "long" is more than 32 bits
 - Fix cases where new-style abort/doubt handlers are used
 - Fix for division-by-zero error in Visual C++ (changed sample headers)
 - Improved checking for strerror_r in configure script
 - Fix for problem MinGW has with configure script
 - Fix spurious failure of Oid check in configure script
2.5.0
 - Fix race condition in removing triggers
 - Fix binary string conversion with older libpq
 - Fix some error strings that may previously have come out wrong
 - No longer includes any libpq headers while compiling client code
 - Improved thread safety: avoid strerror() where possible
 - Prepared statements
 - Translate more error conditions to std::bad_alloc exception
 - Clearer and more specific explanations for configuration failures
 - Improved documentation
 - Looks for standard library in global namespace as well as std
 - Accepts standard C library in std namespace
 - Release script automatically tests with a range of compilers, not just one
 - Compatible with g++ 2.95 again; this time it's tested automatically
2.4.4
 - Fix problems building shared library in Visual C++
 - Fix autobuild in Debian, which was broken by mistake in BSD grep workaround
 - Fix conversion of string to floating-point type NaN
 - Remove stray CVS directories from distribution archive
 - Workaround for Visual C++ problem when issuing messages from destructors
 - Yet more workarounds for Visual C++ bugs
 - Fix situation where connection state might not be restored after failure
 - Fix configuration problem on SunOS
 - Network speedup in connection setup with pending variables and/or triggers
2.4.3
 - Yet more workarounds for bugs in Visual C++ .NET 2003
 - Fixes for SunC++ 5.5
 - On Visual C++, now defines NOMINMAX, fixing large object support
 - Workaround for BSD grep
 - Improvements for builds from CVS
 - Sample config headers for Sun ONE Studio 8
2.4.2
 - Fix minor problems with Apple's version of g++ 3.3
 - Fix problem with MingW on Windows
 - Workarounds and fixes for Visual C++.NET 2003
 - Renewed compatibility with g++ 2.95
 - More sample configuration headers
 - Updated reference documentation
 - Removed assert code
2.4.1
 - Several bugs in icursor_iterator fixed; incompatible interface changes
 - Tightens throw specifications on begin(), end(), size(), capacity()
 - Containers define reference and pointer types
 - Implements swap() in all container types
 - Implements == and != in all container types
 - Stabilizes new (but still limited) cursor interface
 - icursor_iterator thinks purely in stride granularity
 - Introduces </<=/>/>= comparisons for icursor_iterators
 - Allows "adopted SQL cursors" in new cursor interface
 - Reference-counting in binarystrings, so they can be copied (and efficiently)
 - Fixes reference-to-temporary problem with std::reverse_iterator in results
 - Result/tuple reverse_iterators no longer require std::reverse_iterator
 - Includes some sample config headers (in config/sample-headers)
 - Replaces iffy autoconf checks (avoid failures with maintainer mode's -Werror)
 - Fixes incompatibility with some implementations of Unix "cut" program (again)
2.4.0
 - Fixes incompatibility with some implementations of Unix "cut" program
 - Fixes "ptrdiff_t redefinition" problem in some environments
 - More container-like tuples, so fields can be iterated
 - All size_type types are now unsigned
 - More conservative robusttransaction--thanks Tom Lane
 - Stream-like extraction operator for result field conversion
 - Warnings about deprecated headers now suppressed while compiling library
 - Iterator constructors and copy assignments now have empty throw specs
2.3.0
 - Generates MinGW Makefile automatically
 - Documents MinGW build
 - Workaround for missing prepared-statement support
 - Potential bug fixed in closing of connections
 - Fixed incompatibility between new cursor streams and older backends
 - Removed pqxxbench
2.2.9
 - Bugfix in removing trigger
 - Added "failed connection" to regression test
 - Some changes to throw specifications
 - Putting libpq in its own namespace is optional
2.2.8
 - Moved libpq into pqxx::internal::pq namespace
 - New config system separates compiler-related items from libpq-related ones
 - Auto-generates Visual C++ Makefile, should always remain up-to-date now
2.2.7
 - Bugfix: from_string() didn't handle LONG_MIN--thanks Yannick Boivin
2.2.6
 - Complete "pipeline" rewrite, for better exception safety
 - New garbage collection scheme for "result;" constructors now exception-free
2.2.5
 - First new cursor classes!
 - Fixed strange failure in tablewriter during large insertions
 - Updated tutorial
2.2.4
 - New utility class template, items<> for easy container initialization
 - New utility function template, separated_list()
 - Error handling bugfix in tablewriter
 - Fixed tablereader handling of lines ending in empty fields
 - tablereader lines no longer end in newline with old libpq versions
2.2.3
 - Trigger names no longer need to be proper identifiers
 - Compile fixes for g++ 3.4.0 and other modern compilers
 - Tablestreams may specify column lists
 - Deprecated Quote() in favour of sqlesc(); improved quoting
 - Fixed generation of libpqxx.spec
2.2.2
 - Bugfix in fieldstream w.r.t. reading strings on some systems
 - Renamed config.h to internalconfig.h to avoid confusion
 - New connection functions allow client to sleep until notification arrives
 - Notification functions return number of notifications received
 - Even fewer client-visible macros exported by libconfig.h
2.2.1
 - New, 2.x-style string conversions without locale problem
 - Documentation improvements
 - Implemented result::swap()
2.2.0
 - Installs to /usr/local by default, NOT to /usr/local/pqxx like before!
 - Uses Postgres-provided script to find Postgres (thanks Peter Eisentraut)
 - Which means no more configure arguments required on Irix (thanks Arjen Baart)
 - Fixes long-standing bug in result class!
 - New pipeline class for throughput optimization
 - New field stream class: read result field as C++ stream
 - Separate namespace pqxx::internal for definitions not relevant to the user
 - More Windows compilation fixes
 - SUN Workshop 6 compile fixes and workarounds (thanks Jon Meinecke)
 - Implemented reverse_iterator for result class
 - Checks for functional std::reverse_iterator template
 - Preliminary Makefile for MinGW compiler (thanks Pasquale Fersini)
 - Changed the way unique<> works
 - Checks for functional std::count_if()
 - Bugs fixed & test programs added
2.1.3
 - Makefile fixes for Visual C++, thanks Paresh Patel
 - Library ABI versioning implemented, thanks Roger Leigh
 - Uses old SQL isolation level syntax for compatibility, thanks koun@sina.com
 - tablestreams can explicitly complete() before destructor
 - Bugfix in robusttransaction: forgot to set isolation level
 - Fixed off-by-ones in tablewriter escape code
 - tablestreams now use \n-style escape sequences
 - tablestreams support octal numbers
 - Freely definable "null" strings in tablestreams, as originally intended
 - Improved Debian packaging, thanks Roger Leigh
 - tablestreams use libpq's new-style COPY functions, if available
 - Extended automation of build/release procedure
 - tablewriter writes in nonblocking mode to help hide communication latency
 - Can get backend variables as well as set them
 - More configuration macro cleanups
 - Workaround for missing clear() in standard string
 - Merry Christmas!
2.1.2
 - Compile fix for gcc libstdc++ 2.9, thanks Jaroslaw Staniek
 - Moved deprecated functions below current ones
 - Cleanups for Debian packaging (thanks Roger Leigh, new Debian maintainer!)
 - Updated authors listings
 - Bumped ABI version number for the first time (now 2:0:1)
2.1.1
 - More workarounds for gcc 2.95
 - Automated tools keep test makefiles up to date
2.1.0
 - Asynchronous connections
 - Fixed configure --includedir option (thanks Ray Dassen!)
 - Compile fixes for SUN Workshop 6, and one for gcc on FreeBSD 4.8
2.0.0
 - New stable release!
 - Includes all changes since 1.5 release.
 - Workarounds for Microsoft Visual C++ 7 problems.  Thanks Costin Musteata!
 - No longer need to define PQXX_NO_PARTIAL_CLASS_TEMPLATE_SPECIALISATION
 - Integrated Windows configuration into regular configuration
 - Only uses #warning if preprocessor supports it
 - Works on libpq versions without PQ[un]escapeBytea()
1.9.9
 - Minor documentation changes
1.9.8
 - Workaround for compile problem with postgres 7.3
 - Convenience typedef for transaction<>: "work"
1.9.7
 - binarystring rewritten and moved to its own file
 - binarystring::size() does not include terminating null byte!
 - Implemented escaping of binary strings
 - Fix in workaround for missing numeric_limits on some compilers
 - String conversion supported for unsigned char *
 - More helpful link errors for unsupported string conversions
 - Complete test coverage
1.9.6
 - Fixes in "field table" support
 - Improved coexistence with client program's config.h, if any
 - Prefixed autoconf macros used in headers with "PQXX_"
1.9.5
 - Header file contents moved to .hxx files for editor filetype recognition
 - Fixes wrong timestamp for include/pqxx/result in 1.9.4 distribution
1.9.4
 - Fixes Visual C++ build problem when compiling as library
1.9.3
 - Quick release for various minor changes
1.9.2
 - Renamed most public member functions to all-lower-case names
 - <pqxx/all> (previously <pqxx/all.h> is now called <pqxx/pqxx>
1.9.1
 - tablestream destructor crashed if table didn't exist (thanks Sean [Rogers?])
 - Renamed all header files to remove ".h" suffix
 - Tables created by regression test now prefixed with "pqxx" for safety
 - Large objects now considered stable
 - Migrated tutorial from SGML to DocBook XML (thanks Wichert Akkerman)
 - Added tests 57-59
 - Fixed compile error in largeobject
 - Updated Windows makefiles
1.9.0
 - EVERYTHING HAS CHANGED.  Read the list or run into trouble!
 - CURSOR HAS INCOMPATIBLE CHANGES AND MAY BE REPLACED COMPLETELY
 - CACHEDRESULT HAS INCOMPATIBLE CHANGES (won't compile without changes)
 - REVISE YOUR TRANSACTORS; now templatized on transaction type
 - Finally got license file in order
 - Incompatible change in setting transactor quality of service
 - Cursors require serializable isolation level (checked at link time)
 - Renamed Connection_base to connection_base, Connection to connection,
   LazyConnection to lazyconnection
 - Renamed LargeObject to largeobject, LargeObjectAccess to largeobjectaccess
 - Renamed Noticer to noticer
 - Renamed Trigger to trigger
 - Renamed Result to result, Tuple to tuple, Field to field
 - Renamed Unique<> to unique<>
 - Renamed CachedResult to cachedresult
 - Transformed Transaction Taxonomy (TTT):
 - Renamed Transaction_base to transaction_base
 - Renamed Transaction to transaction
 - Renamed Transactor to transactor<> (now a template)
 - Implemented transaction isolation levels as compile-time static properties
 - transaction and robusttransaction now templatized on their isolation levels
 - cachedresult requires serializable isolation level (checked at link time)
 - Now need to include pqxx/transactor.h yourself if you need transactors
 - Large objects require real backend transaction at compile time
 - New type oid and constant oid_none for row identifiers resp. null oid
 - Added some forgotten PQXX_LIBEXPORTs
 - Tweaked documentation in many places
1.8.1
 - By popular request: more convenient way to read field values
 - Documented locale sensitivity of ToString(), FromString(), Field::to()
1.8.0
 - Compiles on gcc 2.95 again (heavy streambuf workarounds in largeobject.h)
 - ConnectionItf renamed to Connection_base, TransactionItf to Transaction_base
 - connectionitf.h is now connection_base.h, transactionitf.h connection_base.h
1.7.8
 - BinaryString class for unescaping bytea strings
 - PQAlloc template keeps track of libpq-allocated objects
 - Removed some consts in Unique<>, ConnectionItf, sorry!
 - Can now set session variables on connections, transactions
1.7.7
 - ./configure also looks for postgres in /usr/local/pgsql
 - test007 now uses SQL_ASCII as its test encoding
 - integrated Greg Hookey's Debian packaging
1.7.6
 - added postgres library (libpq) to dynamic link path
1.7.5
 - added test052 - test055
 - added Result::Tuple::ColumnNumber()
 - also test setting of client encodings
 - removed superfluous versions of to_file() from large object classes
1.7.4
 - new exception class, sql_error, remembers query text
 - moved exception classes to new file include/pqxx/except.h
 - test cases report texts of any failed queries
 - added tools/rmlo.cxx
1.7.3
 - default constructors for connection classes
 - revamped seeking operations on large objects
 - better error messages in large objects
 - added test050, test051
1.7.2
 - more workarounds for Sun CC 5.1, thanks Jeroen van Erp!
 - preliminary support for "named" queries
 - can now Quote() string constants
 - included Doxyfile in distribution archive
 - helps avoid Windows memory allocation problem in DLLs
 - allows setting of client character set encoding
1.7.1
 - regenerated documentation
1.7.0
 - removed all deprecated features
 - connection string documentation in README
 - separate Connection, LazyConnection classes
 - made test001 more concise
 - added test049
1.6.4
 - configure script now respects different std namespace
1.6.3
 - olostream, lostream now flush themselves before closing
 - fixed compilation problems when using ToString<>() on a plain char *
 - compilation fixes for Sun compiler (thanks Jeroen van Erp!)
 - added .pc file for pkgconfig (thanks Ray Dassen!)
1.6.2
 - Debian packaging added to distribution archive
 - new ilostream, olostream, lostream classes
1.6.1
 - large object's cunlink() replaced by remove()
 - default constructor for LargeObject
1.6.0
 - new large objects interface
 - added test048
1.5.0
 - allow result fields to be written to streams
 - removed confusing CachedResult::clear()
 - minor documentation updates
 - added test046, test047
 - added <pqxx/all.h> convenience header
1.4.5
 - fixed crash CachedResult that was less shallow than I thought
 - fixed quoting problem with adopted SQL cursors
1.4.4
 - (forgot to save cursor.cxx with new constructor in 1.4.4, sorry)
1.4.3
 - all tests now have three-digit numbers
 - Cursor can adopt SQL cursor returned by a function
1.4.2
 - bugfix in CachedResult when accessing empty Results
 - minor documentation improvements
1.4.1
 - documents new homepage: http://pqxx.tk/
 - Connection constructor accepts null connect string
 - Exec() now also takes queries as C++ strings
1.4.0
 - Connection::IsOpen() renamed to is_open()
 - NoticeProcessor replaced by Noticer (with C++ linkage)
1.3.7:
 - detects nasty rare problem case with Cursors in unknown positions
1.3.6:
 - fixed detection of missing PQescapeString().  Thanks David Wright!
v1.3.5:
 - documented Windows build procedure
 - fixed problem with upper-case letters in cursor names.  Thanks key88!
2003-01-19 16:00, v1.3.4:
 - support long double type
 - clarified some error messages
2003-01-08 18:45, v1.3.3:
 - fix missing include in test13
2003-01-07 02:30, v1.3.2:
 - configure looks for postgres includes/library in more places, thanks Ray!
2003-01-02 23:00, v1.3.1:
 - bugfix in Cursor positioning
2003-01-02 20:30, v1.3.0:
 - absolute positioning for Cursor
 - better documentation on cursors
 - reduced, but improved test suite output
2002-12-23 17:30, v1.2.8:
 - Cursor::Move() returns number of rows skipped
 - new typedef Cursor::size_type
2002-12-14 23:30, v1.2.7:
 - test suite now distinguishes expected errors from unexpected ones
2002-12-09 20:00, v1.2.6:
 - fixed some Cursor test cases for change in postgres 7.3
 - added important warning to Cursor
2002-12-09 02:00, v1.2.5:
 - added important warning to CachedResult
2002-12-08 14:14, v1.2.4:
 - fixed compile error on some systems in include/pqxx/util.h
2002-12-04 12:00, v1.2.3:
 - workaround for broken <sys/select.h> on some systems
 - fixed Quote() bug
2002-12-03 01:30, v1.2.2:
 - fixed serious CachedResult bug
 - added test41
2002-12-02 17:00, v1.2.1:
 - hopefully fixed cursor bug with PostgreSQL 7.3
2002-12-01 22:00, v1.2.0:
 - new CachedResult class
2002-11-07 13:15, v1.1.4:
 - workaround for missing InvalidOid definition
2002-10-23 16:00, v1.1.3:
 - Cursor & TableStream hierarchy now work on any transaction type
 - get no. of affected rows & oid of inserted row from Result
 - increased test coverage
2002-10-21 01:30, v1.1.2:
 - updated build procedure
 - Debian packaging improvements
2002-09-25 03:00, v1.1.1:
 - supports activating/deactivating of connections
 - various Connection getters now activate deferred connection first
2002-09-23 01:00, v1.1.0:
 - supports lazy connections (added 19 test cases just for these)
 - greatly reduced performance overhead for RobustTransaction
 - removed id field from RobustTransaction's transaction log tables
2002-09-14 20:00, v1.0.1:
 - now lives on GBorg
 - various packaging updates
2002-06-12 17:30, v0.5.1:
 - no longer have to destroy one transaction before creating the next
2002-06-07 17:15, v0.5.0:
 - "make install" now finally installs headers!
 - distribution now includes SGML (DocBook) version of tutorial
2002-06-04 15:00, v0.4.4:
 - may now have multiple triggers with same name on single connection
2002-06-02 23:00, v0.4.3:
 - fixed TableReader problem with \t and \n
2002-06-01 21:00, v0.4.2:
 - hopefully fixes compile problem with broken std::iterator
 - configure no longer requires --with-postgres-include=/usr/include/postgresql
2002-05-29 22:00, v0.4.1:
 - can now also handle bool, unsigned char, short field types
2002-05-27 22:30, v0.4.0:
 - RENAMED Transactor::TRANSACTIONTYPE to argument_type for STL conformance
 - RENAMED Result::Field::name() to Name()
 - documentation improvements
 - minor optimizations
2002-05-18 00:00, v0.3.1:
 - removed broken postgres_fe.h dependency (hopefully permanent fix)
2002-05-12 22:45, v0.3.0:
 - also looks for postgres_fe.h in postgres' internal/ directory (tmp fix)
2002-05-05 01:30, v0.2.3:
 - extensive build instructions in README
 - make check now controlled through PG environment variables
2002-05-04 19:30, v0.2.2:
 - more STL conformance
 - fixed regression test
 - test6 now copies "orgevents" to "events" by default
2002-04-28 23:45 Version bumped to 0.2
2002-04-28 23:45 Self-generated distribution archive
2002-04-27 14:20 Replaced automake symlinks with actual files
2002-04-07 02:30 Released with configure script
2002-03-29 01:15 Not yet released.  Still integrating autogen stuff...
