#########
Changelog
#########

Version 1.5.2
=============

* Code optionizations.
* New: Documentation is now also provided as Dash_ / Zeal_ docset, downloadable from releases_ at github.

Version 1.5.1
=============

* Fix: `.ServerDbServices.set_replica_mode()` now works correctly.

Version 1.5.0
=============

* Fix: `.create_database()` now use server configuration user/password if either is not
  specified in database configuration (like `.connect()`)
* Fix: Problem in `.Server` processing incomplete LINE responses.
* New: `verbint` parameter for `.ServerDbServices3.backup()` and `.ServerDbServices3.restore()`

  This is undocumented Firebird v3 gbak feature. See https://github.com/FirebirdSQL/firebird/issues/808
  for details. It's mutually exclusive with `verbose`, and minimal value is 100.

Potentially breaking changes
----------------------------

* Change in `.ServerDbServices3.restore()`: The `verbose` parameter default value was changed
  to `False` to be consistent with `.ServerDbServices3.backup()`
* Change in `.ShutdownMethod`: DENNY_ATTACHMENTS/DENNY_TRANSACTIONS renamed to
  DENY_ATTACHMENTS/DENY_TRANSACTIONS.

Version 1.4.3
=============

* Fix: Load driver configuration only when it's successfully read from file(s)
* Fix: Reading service output will fail if line is greater than 64K
* Fix: Avoid division by zero if fetches stats is zero in DatabaseInfoProvider.cache_hit_ratio
* Fix: Rewind buffer with version string after using in EngineVersionProvider
* Fix: Add low-level access to fb_shutdown_callback API function

Version 1.4.2
=============

* New `.ServerConfig` options: `~ServerConfig.encoding` and `~ServerConfig.encoding_errors`.
* New `.connect_server` parameters: `encoding` and `encoding_errors`.
* Requires firebird-base 1.3.1

Version 1.4.1
=============

* Fixed important bug when iAttachment was not properly released.

Version 1.4.0
=============

Improvements:
-------------

* Added `role` parameter to `.connect_server` and `.SPB_ATTACH`.
* Added `encoding` parameter to `.SPB_ATTACH` with default value `ascii` - used to encode
  `config`, `user`, `password` and `expected_db` values.
* Added `encoding` parameter to `.TPB` with default value `ascii` - used to encode table names.
* `.DPB` parameter `charset` is now used to determine encoding for `config`, `user`,
  `password` and `role` values.
* `.connect_server` has new `encoding` parameter with default value `ascii` that is passed
  to new `.Server.encoding` attribute. `.Server.encoding` is used to encode/decode various
  string values passed between client and server in parameter buffers (see below), and text
  output from services.
* `.ServerInfoProvider` now uses `.Server.encoding` for returned SERVER_VERSION, IMPLEMENTATION,
  GET_ENV, GET_ENV_MSG, GET_ENV_LOCK, USER_DBPATH and DBNAME values.
* `.ServerDbServices` now uses `.Server.encoding` for DBNAME, SQL_ROLE_NAME, FILE, SKIP_DATA,
  INCLUDE_DATA, INCLUDE_TABLE, EXCLUDE_TABLE, INCLUDE_INDEX, EXCLUDE_INDEX, LINE and
  isc_spb_sts_table SPB values.
* `.ServerUserServices` now uses `.Server.encoding` for DBNAME, SQL_ROLE_NAME, USER_NAME,
  GROUP_NAME, FIRST_NAME, MIDDLE_NAME, LAST_NAME and PASSWORD (on storage only) SPB values.
* `.ServerTraceServices` now uses `.Server.encoding` for CONFIG SPB value.
* Failed `.Connection.close` should not cause problems on object destruction anymore.
* Failed `.Server.close` should not cause problems on object destruction anymore.

Backward incompatible changes:
------------------------------

* `.tpb` parameter `access` renamed to `access_mode`.
* `.FirebirdWarning` now descends from `UserWarning` instead `Warning`, and is reported
  to application via `.warnings.warn` instead raised as exception.
* `.iAttachment_v3` attribute `charset` was renamed to `encoding`.
* `.iXpbBuilder.insert_string` optional parameter `encoding` is now  keyword-only.
  Parameter also added to `.iXpbBuilder.get_string` method.

Version 1.3.4
=============

* `.FirebirdWarning` is not raised as exception, but reported via `warnings.warn`  mechanism.
* User-defined encoding for string parameter and response values exchanged between driver
  and Firebird engine. This includes TPB, DPB, SPB and various service values:

  - `.TPB`: New `encoding` constructor parameter & attribute. Used for `table names` in table reservation.
  - `.DPB`: Encoding based on connection charset for `config`, `user name`, `password` and `role`.
  - `.SPB`: New `encoding` constructor parameter & attribute. Used for `config`, `user name`, `password` and `expected database`.
  - Connection-related providers: Encoding based on connection charset.
  - Server and Service providers: New `.Server.encoding` attribute.
* Fixed bug in `.ServerDbServices3.get_statistics` when `tables` are specified.


Version 1.3.3
=============

* Fix unregistered bug: Newly extended interface breaks the driver (affects usability of
  the driver with Firebird development versions).
* New exception type `.FirebirdWarning`. From now on, warnings from engine are raised as
  `.FirebirdWarning` instead `Warning`. In some future release, warnings will not be raised,
  but reported via `warnings.warn` mechanism.

Version 1.3.2
=============

* Fix unregistered bug: iUtil methods removed after FB 4 Beta 2 broke the Int128/TZ handling.
* New context manager `.temp_database`.

Version 1.3.1
=============

* Fix unregistered bug: wrong handling of Firebird 4 string info parameters.

Version 1.3.0
=============

* Fix (#4): exeption returns non ascii-127 symbols.
  The error message decode uses `.fbapi.err_encoding` value that is initialized to
  `locale.getpreferredencoding`. Also, the decode is now done with `errors="replace"`.
* Fix unregistered bug: wrong handling of milliseconds in TIME and TEMEPSTAMP datatype.
* Sync _VERSION_ value with package version
* Fix unregistered bug: Do not raise exception if accessed `.Statement.plan` is `None`.
* Fix unregistered bug: `.get_statistics()` does not send `tables` correctly.
* Fix annotations.
* `.ServerTraceServices` methods now have return values.
* User name added to `.TraceSession`.
* Fix unregistered bug: `auth_plugin_list` configuration option is ignored
* All methods of `.ServerDbServices3` except 3 related to limbo transactions have new
  optional keyword-only parameter `role` that is passed to called utility.
* Function `.connect_server()` has new optional keyword-only parameter `expected_db`,
  to access services with non-default security database.

* Improved Firebird 4 support.

  - Version-specific classes introduced. Internal classes `.DatabaseInfoProvider`,
    `.TransactionInfoProvider` and `.ServerDbServices` now implement only Firebird 4 features
    and descend from Firebird 3 versions. The proper variant is returned according to
    connected server.
  - New `.DatabaseConfig` options `session_time_zone`, `set_bind`, `decfloat_round` and
    `decfloat_traps`.
  - New `.DPB` parameters `session_time_zone`, `set_db_replica`, `set_bind`, `decfloat_round`
    and `decfloat_traps`.
  - New `session_time_zone` keyword parameter for `.connect()`.
  - Added explicit support for READ COMMITTED READ CONSISTENCY isolation (when disabled in
    Firebird configuration).
  - Support for transactions started at specified snapshot number.
    New `.TransactionInfoProvider.snapshot_number` property.
    The `.TPB` has new `at_snapshot_number` parameter.
  - `.backup()` and `.local_backup()` have new optional keyword-only arguments
    `include_data`, `keyhoder`, `keyname` and `crypt`, and `ZIP` value was added to `SrvBackupFlag`.
  - `.restore()` and `.local_restore()` have new optional keyword-only
    arguments `include_data`, `keyhoder`, `keyname`, `crypt` and `replica_mode`.
  - `.nbackup()` has new optional keyword-only parameter `guid`.
  - Support for new services.
    New methods `.ServerDbServices.nfix_database()` and `.set_replica_mode()`.
  - Support for `.Statement.timeout`, and `idle_timeout` and `statement_timeout` in `.Connection.info`.
  - New types: `.Features`, `.ReplicaMode`, `.CancelType`, `.DecfloatRound`, `.DecfloatTraps`,
    `.ConnectionFlag` and `.EncryptionFlag`. Firebird 4-related values added to some other
    enum types.

Version 1.2.1
=============

* Fixed dependency to `firebird-base` (v1.3.0)

Version 1.2.0
=============

* Fix unregistered bug: `sql_dialect` is used instead `db_sql_dialect` in `.create_database`.
* Fix (#2): error when handling input parameters with value None
* Added `.Server.mode` attribute to allow fetching service output using LINE or TO_EOF method.
  Default mode is TO_EOF.

Version 1.1.0
=============

* Important: Support for Firebird 4 TIMEZONE is broken (for FB4 RC1). It will be fixed in
  next driver version.
* Build scheme changed to `PEP 517`.
* Various changes to documentation and type hint adjustments.
* Changed: `.DriverConfig.db_defaults` and `.DriverConfig.server_defaults` are now created
  as `optional` (introduced by firebird-base 1.2.0), so configuration file does not require
  `firebird.db.defaults` and `firebird.server.defaults` sections (even empty).
* Fix: unregistered bug in `InfoProvider`.
* Fix: unregistered bug in `FirebirdAPI` initialization.

Version 1.0.0
=============

* Added support for schema and monitor modules from `firebird-lib`_ package.
* Documentation: adjustments to css.

Version 0.8.0
=============

The driver is no longer *beta*, and is now considered as **stable** for Firebird 3.0 (support for Firebird 4 is still evolving till final release).

* Documentation, both in code and separate (especially Usage Guide).
* Added support for new FB4 data types in ARRAY fields.
* Refactoring in driver hooks.
* New `.Cursor.call_procedure()` method.
* Refactoring and fixes in Server and its services.

Version 0.7.0
=============

* Added support for new FB4 data types (TIME/TIMESTAMP WITH TIMEZONE, DECFLOAT[16|34] and
  extended DECIMAL/NUMERIC via INT128 storage).

Version 0.6.0
=============

* More documentation.
* Initial support for Firebird 4+ (interfaces and other definitions). Includes support for
  interface versions.
* `Service` renamed to `Server`. Selected functionality moved to inner objects (relates to
  FB4+ support).
* New module: `~firebird.driver.config` - Driver configuration
* New module: `~firebird.driver.interfaces` - Interface wrappers for Firebird new API
* Changed module: `~firebird.driver.types`

  - Interface wrapper moved to separate module
  - Buffer managers moved to `~firebird.driver.core` module
* Changed module: `~firebird.driver.core`

  - `connect()`, `create_database()` and `connect_server()` now use driver configuration.
  - Simplified/unified transaction isolation specification.
  - Emit warnings when objects with allocated Firebird resources are disposed (by Python
    GC) without prior call to `close()`.
  - Trace instrumentation removed. Use dynamic trace configuration from firebird-base 0.6.0.
  - `Connection` and `Transaction` information moved to inner objects accessible via `info`
    properties (relates to FB4+ support).

Version 0.5.0
=============

Initial release.

.. _firebird-lib: https://pypi.org/project/firebird-lib/
.. _releases: https://github.com/FirebirdSQL/python3-driver/releases
.. _Dash: https://kapeli.com/dash
.. _Zeal: https://zealdocs.org/
