---
title: Change Log
---

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/).
====================

# 5.4.3 - 2025-08-15

## Fixed

- Cloud only: Fix thread used when rate limiting is enabled. Previously enabling
  rate limiting might cause a hang
- Fixed error in WriteMultiple with multiple children-only requests

# 5.4.2 - 2024-05-13

## Added

-   Cloud only: new regions: sa-bogota-1, us-dcc-swjordan-1,
    us-dcc-swjordan-2, ap-dcc-tokyo-1, me-abudhabi-3,
    ap-dcc-gazipur-1, me-dcc-doha-1, ap-hobsonville-1
-   added support for array_collect() and count(distinct) in queries. These
    require server side support which is only available in Oracle NoSQL releases
    23.3 and higher and will not be immediately available in the cloud service
-   Cloud only:  added support for Cloud feature Global Active Tables. This
    includes new requests and classes:

    - AddReplicaRequest
    - DropReplicaRequest
    - ReplicaStatsRequest/Result
    - ReplicaStats
    - Replica

    as well as additional replica-related information
    and interfaces in TableResult

## Changed

- Modified internal query processing to better support elasticity operations

## Fixed

- Improved performance of sorted queries, especially generalized sorting, which
    does not rely on indexes
- Documentation updates for methods added in release 5.4.0 and 5.4.1
- Cloud only: fixed problem where OKE Workload authentication would time
   out before refreshing

## Changed

-   Cloud only: changed domain for OC22/NAP/eu-dcc-rome-1

# 5.4.1 - 2023-08-01

IMPORTANT: This release drops support for Python 2 and supports only
Python 3.5 and higher

## Added

-   Cloud only: New regions: mx-monterrey-1, eu-frankfurt-2,
    eu-madrid-2, eu-jovanovac-1, eu-dcc-rome-1, eu-dcc-zurich-1,
    us-dcc-phoenix-4, us-saltlake-2, sa-valparaiso-1

-   Support for new, flexible wire protocol (V4) has been added. The
previous protocol is still supported for communication with servers that
do not yet support V4. The version negotation is internal and automatic;
however, use of V4 features will fail at runtime when attempted with an
older server. Failure may be an empty or undefined result or an
exception if the request cannot be serviced at all. The following new
features or interfaces depend on the new protocol version

    -   added set/get_durability to QueryRequest for queries that modify data
    -   added pagination information to TableUsageResult and TableUsageRequest
    -   added shard percent usage information to TableUsageResult
    -   added IndexInfo.get_field_types to return the type information on an index on
a JSON field
    -   added the ability to ask for and receive the schema of a query using
        -   PrepareRequest.set_get_query_schema
        -   PreparedStatement.get_query_schema
    -   Cloud only: added use of ETags, DefinedTags and FreeFormTags in
        TableRequest and TableResult
    -   On-premises only. Added support for default namespace and per-request namespace specification

## Changed

-   Dropped support for Python 2.x

# 5.3.7 - 2022-12-12

NOTE: version 5.3.6 was skipped

### Fixed

-   Fixed import package collections.abc for Callable.

## Added

-   Cloud only: New regions: us-tacoma-1, us-chicago-1, eu-dcc-milan-1,
    eu-dcc-milan-2, eu-dcc-dublin-1, eu-dcc-dublin-2, eu-dcc-rating-1,
    eu-dcc-rating-2, us-westjordan-1, us-dcc-phoenix-1, us-dcc-phoenix-2
-   Added new method borneo.NoSQLHandle.query_iterable(query_request) to
    get an iterable that contains all the results of a query.
-   Added support for specifying update operations from parent and child
    tables when executing write_multiple operations.

# 5.3.5 - 2022-08-09

## Fixed

-   Cloud only. Fixed references to the OCI \"auth\" package from iam.py
    that could lead to the error, \"name \'auth\' is not defined.\"

# 5.3.4 - 2022-06-13

## Fixed

-   Cloud only. Recognize the region parameter in the SignatureProvider
    constructor when an explicit provider is passed

## Added

-   Added client statistics. Users can enable internal driver statistics
    by using `NOSQL_STATS_PROFILE=[none|regular|more|all]` environment
    variable or by using the `NoSQLHandleConfig.set_stats_profile()`
    api.
-   Cloud only: New regions: eu-paris-1, eu-madrid-1 and mx-queretaro-1.

# 5.3.3 - 2022-04-19

## Fixed

-   Cloud only: fixed the internal, automatic refresh of the security
    token when using Instance Principal authentication so that it is
    done well before the token expires
-   Use selective module import for OCI SDK modules, and set the
    environment variable, OCI_PYTHON_SDK_NO_SERVICE_IMPORTS=1, to
    improve import speed by suppressing import of unnecessary modules
    from the OCI SDK
-   Added dependencies to setup.py so that \"pip install\" automatically
    includes them

## Added

-   Support for session persistence. If a Set-Cookie HTTP header is
    present borneo will now set a Cookie header using the requested
    session value

# 5.3.0 - 2022-02-17

## Added

-   Cloud only: support for on-demand tables
    -   Changes to TableLimits to specify on-demand tables
-   Existing row modification is made available in Results when the
    operation fails and the previous is requested
-   On-premise only: support for setting Durability in write operations
    -   Added Durability class and methods to set Durability

## Changed

-   Cloud only: updated OCI regions
-   The SDK now detects the version of the server it\'s connected to and
    adjusts its capabilities to match. This allows the SDK to
    communicate with servers that may only support an earlier protocol
    version, with the corresponding feature restrictions

## Fixed

-   Fixed handling of request id so that each request now gets a new id

# 5.2.4 - 2021-05-19

NOTE: a couple of versions were skipped because of internal versioning
issues. There are no public releases for 5.2.2 and 5.2.3

## Added

-   Added NoSQLHandleConfig.set_max_content_length to allow on-premise
    configuration of a maximum request content size. It defaults to
    32MB.
-   If a delegation token is being used for authorization the HTTP
    header, \'opc-obo-token\' will be sent with the contents of the
    token.
-   Rate Limiting (cloud only):
    -   New method NoSQLHandleConfig.set_rate_limiting_enabled to enable
        automatic internal rate limiting based on table read and write
        throughput limits.
    -   If rate limiting is enabled:
        -   NoSQLHandleConfig.set_default_rate_limiting_percentage can
            control how much of a table\'s full limits this client
            handle can consume (default = 100%).
        -   Result classes now have a Result.get_rate_limit_delayed_ms
            method to return the amount of time an operation was delayed
            due to internal rate limiting.
    -   Add rate limiting example and test.
-   RetryStats: New object allows the application to see how much time
    and for what reasons an operation was internally retried.
    -   For successful operations, retry stats can be retrieved using
        Result.get_retry_stats.
    -   Otherwise, the original Request may have retry stats available
        via Request.get_retry_stats (for example, after an exception was
        thrown).
-   Cloud only: New regions: ap-chiyoda-1, me-dubai-1, sa-santiago-1 and
    uk-cardiff-1.
-   Added dependency on dateutil package for flexible timestamp handling

## Changed

-   DefaultRetryHandler now uses incremental backoff mechanism (instead
    of fixed 1-second delay) and may be extended.
-   Updated examples to use NoSQLHandle.do_table_request instead of
    NoSQLHandle.table_request followed by
    TableResult.wait_for_completion.
-   Change PreparedStatement.set_variable method to support both name
    and position variables.
-   Enhance handling of TIMESTAMP types to better handle a datetime
    instance with an explicit timezone. By default fields of type
    TIMESTAMP returned by the system are represented by a \"naive\" (not
    timezone aware) datetime object in the timezone UTC.
-   Timestamp and log level are no longer hard-coded in log messages -
    rather the default logger is configured with a formatter that
    includes them. An application that provides its own logger may
    choose its own format.
-   Adjusted several log messages to use more appropriate levels (ERROR
    for errors, DEBUG for chatter).

## Fixed

-   Fixed a performance issue that causes results to be returned more
    slowly as they got larger. The Python List pop() method was
    mistakenly being used on large arrays.
-   Ensure that TableLimits is always None in TableResult on-premise.
-   Fixed synchronization problem in SignatureProvider.
-   Fixed a problem where the cloud service might succeed when dropping
    a table that does not exist without using \"drop table if exists\"
    when it should throw TableNotFoundException

## Removed

-   NoSQLHandleConfig.set_sec_info_timeout and
    NoSQLHandleConfig.get_sec_info_timeout has been removed.

# 5.2.1 - 2020-08-14

## Added

-   Added NoSQLHandleConfig.set_ssl_cipher_suites to allow the user to
    configure preferred SSL ciphers, and
    NoSQLHandleConfig.get_ssl_cipher_suites to get the ssl cipher
    setting.
-   Added NoSQLHandleConfig.set_ssl_protocol to allow the user to
    configure preferred SSL protocol, and
    NoSQLHandleConfig.get_ssl_protocol to get the ssl protocol setting.
-   Added NoSQLHandleConfig.set_ssl_ca_certs to allow the user to
    configure SSL CA certificates, and
    NoSQLHandleConfig.get_ssl_ca_certs to get the SSL CA certificates
    setting.
-   Cloud only. Added new regions: AP_HYDERABAD_1, AP_MELBOURNE_1,
    AP_OSAKA_1, CA_MONTREAL_1, EU_AMSTERDAM_1, ME_JEDDAH_1.
-   Cloud only. Added support for authenticating via Resource Principal.
    This can be used in Oracle Cloud Functions to access NoSQL cloud
    service:
    -   Added a new method
        SignatureProvider.create_with_resource_principal.
    -   Added a new method
        SignatureProvider.get_resource_principal_claim to retrieve
        resource principal metadata with ResourcePrincipalClaimKeys such
        as compartment and tenancy OCID.
-   Added generic group by and SELECT DISTINCT. These features will only
    work with servers that also support generic group by.

## Changed

-   Cloud only. Added the support in SignatureProvider to configure and
    pass region to NoSQLHandleConfig:
    -   SignatureProvider built with OCI standard config file is now
        able to read \'region\' parameter from config file and pass to
        NoSQLHandleConfig implicitly.
    -   Change constructor of SignatureProvider to allow passing Region
        programmatically with user profile.
    -   Change the method
        SignatureProvider.create_with_instance_principal to allow
        setting Region with instance principal.
-   Deprecated QueryRequest.set_continuation_key and
    QueryRequest.get_continuation_key, use QueryRequest.is_done instead.

## Fixed

-   On-premise only. Don\'t validate request sizes.
-   TableUsageRequest: added validation check that end time must be
    greater than start time if both of them are specified, throw IAE if
    end time is smaller than start time.
-   Changed min/max implementation to make them deterministic.
-   On-premise only. Fixed a problem where the HTTP Host header was not
    being adding in all request cases. This prevented use of an
    intermediate proxy such as Nginx, which validates headers.

## Removed

-   The requirement of third party package \"cryptography\" has been
    removed.
-   The TableBusyException has been removed.

# 5.2.0 - 2020-02-20

## Added

-   OCI Native support for the cloud service
    -   Include support for IAM based security in the cloud service.
    -   When using the cloud service, tables are now created in
        compartments. Compartments can be specified for tables in APIs
        and query statements. By default the compartment is the root
        compartment of the tenancy when authenticated as a specific
        user. The compartment name or id can be specified by default in
        NoSQLHandleConfig or specified in each Request object. The
        compartment name can also be used as a prefix on a table name
        where table names are accepted and in queries, e.g.
        \"mycompartment:mytable\".

## Removed

-   Removed support for IDCS based security in the cloud service.
-   TableResult.wait_for_state() has been removed. Use
    wait_for_completion().

# 5.1.0 - 2019-08-30

## Added

-   Added PutRequest.set_exact_match() to allow the user to control
    whether an exact schema match is required on a put. The default
    behavior is false.
-   Support for complex, multi-shard queries:
    -   Sorted/ordered multi-shard queries.
    -   Multi-shard aggregation.
    -   Geo-spatial queries such as geo_near().
-   Support for Identity Columns:
    -   Added PutRequest.get/set_identity_cache_size() to allow a user
        to control the number of cached values are used for identity
        columns. The default value is set when the identity column is
        defined.
    -   Added PutResult.get_generated_value() which will return a
        non-none value if an identity column value was generated by the
        operation. This is only relevant for tables with an identity
        column defined.
-   Added a new, simpler TableResult.wait_for_completion() method to
    wait for the completion of a TableRequest vs waiting for a specific
    state.
-   Added NoSQLHandle.do_table_request() to encapsulate a TableRequest
    and waiting for its completion in a single, synchronous call.
-   Added OperationNotSupportedException to handle operations that are
    specific to on-premise and cloud service environments.
-   Support for both the Oracle NoSQL Database Cloud Service and the
    on-premise Oracle NoSQL Database product.
    -   Added StoreAccessTokenProvider for authentication of access to
        an on-premise store

    -   Added AuthenticationException to encapsulate authentication
        problems when accessing an on-premise store.

    -   Added SystemRequest, SystemStatusRequest, and SystemResult for
        administrative operations that are not table-specific.

    -   Added methods on NoSQLHandle for *system* requests, which are
        those that do not involve specific tables:

        > -   system_request(), system_status(), list_namespaces(),
        >     list_users(), list_roles()

    -   Added NoSQLHandle.do_system_request to encapsulate a
        SystemRequest and waiting for its completion in a single,
        synchronous call.

    -   Now that the driver can access both the cloud service and an
        on-premise store some operations, classes and exceptions are
        specific to each environment. These are noted in updated API
        documentation.

## Changed

-   Parameters to TableResult.wait_for_state() changed. It is no longer
    static and acts on *self*, modifying state as required.

## Removed

-   TableResult.wait_for_state_res() has been removed. Use
    wait_for_state().

# 5.0.0 - 2019-03-31

## Added

-   Initial Release
-   Support for Oracle NoSQL Database Cloud Service
