Releases: typedb/typedb-driver
TypeDB Driver 2.27.0
Documentation: https://typedb.com/docs/drivers/overview
Distribution
Rust driver
Available from https://crates.io/crates/typedb-driver
Documentation: https://typedb.com/docs/drivers/rust/overview
cargo add [email protected]Java driver
Available through https://repo.typedb.com
Documentation: https://typedb.com/docs/drivers/java/overview
<repositories>
<repository>
<id>repo.typedb.com</id>
<url>https://repo.typedb.com/public/public-release/maven/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupid>com.vaticle.typedb</groupid>
<artifactid>typedb-driver</artifactid>
<version>2.27.0</version>
</dependency>
</dependencies>Python driver
PyPI package: https://pypi.org/project/typedb-driver
Documentation: https://typedb.com/docs/drivers/python/overview
Available through https://pypi.org
pip install typedb-driver==2.27.0
NodeJS driver
NPM package: https://www.npmjs.com/package/typedb-driver
Documentation: https://typedb.com/docs/drivers/nodejs/overview
npm install [email protected]
C++ driver
Compiled distributions comprising headers and shared libraries available at: https://cloudsmith.io/~typedb/repos/public-release/packages/?q=name:^typedb-driver-cpp+version:2.27.0
C driver
Compiled distributions comprising headers and shared libraries available at: https://cloudsmith.io/~typedb/repos/public-release/packages/?q=name:^typedb-driver-clib+version:2.27.0
Documentation: https://typedb.com/docs/drivers/cpp/overview
New Features
Bugs Fixed
Code Refactors
Other Improvements
-
Enable deploy-snapshot jobs on development
-
Add -y to apt udpate, and replaced apt-get with apt
-
Documentation for C driver
Adds documentation for the C driver.
TypeDB Driver 2.27.0-rc0
Documentation: https://typedb.com/docs/drivers/overview
Distribution
Rust driver
Available from https://crates.io/crates/typedb-driver
Documentation: https://typedb.com/docs/drivers/rust/overview
cargo add [email protected]Java driver
Available through https://repo.typedb.com
Documentation: https://typedb.com/docs/drivers/java/overview
<repositories>
<repository>
<id>repo.typedb.com</id>
<url>https://repo.typedb.com/public/public-release/maven/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupid>com.vaticle.typedb</groupid>
<artifactid>typedb-driver</artifactid>
<version>2.27.0-rc0</version>
</dependency>
</dependencies>Python driver
PyPI package: https://pypi.org/project/typedb-driver
Documentation: https://typedb.com/docs/drivers/python/overview
Available through https://pypi.org
pip install typedb-driver==2.27.0rc0
NodeJS driver
NPM package: https://www.npmjs.com/package/typedb-driver
Documentation: https://typedb.com/docs/drivers/nodejs/overview
npm install [email protected]
C++ driver
Compiled distributions comprising headers and shared libraries available at: https://cloudsmith.io/~typedb/repos/public-release/packages/?q=name:^typedb-driver-cpp+version:2.27.0-rc0
C driver
Compiled distributions comprising headers and shared libraries available at: https://cloudsmith.io/~typedb/repos/public-release/packages/?q=name:^typedb-driver-clib+version:2.27.0-rc0
Documentation: https://typedb.com/docs/drivers/cpp/overview
New Features
Bugs Fixed
Code Refactors
Other Improvements
-
Enable deploy-snapshot jobs on development
-
Add -y to apt udpate, and replaced apt-get with apt
-
Documentation for C driver
Adds documentation for the C driver.
TypeDB Driver 2.26.6
Documentation: https://typedb.com/docs/drivers/overview
Distribution
Rust driver
Available from https://crates.io/crates/typedb-driver
Documentation: https://typedb.com/docs/drivers/rust/overview
cargo add [email protected]Java driver
Available through https://repo.typedb.com
Documentation: https://typedb.com/docs/drivers/java/overview
<repositories>
<repository>
<id>repo.typedb.com</id>
<url>https://repo.typedb.com/public/public-release/maven/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupid>com.vaticle.typedb</groupid>
<artifactid>typedb-driver</artifactid>
<version>2.26.6</version>
</dependency>
</dependencies>Python driver
PyPI package: https://pypi.org/project/typedb-driver
Documentation: https://typedb.com/docs/drivers/python/overview
Available through https://pypi.org
pip install typedb-driver==2.26.6
NodeJS driver
NPM package: https://www.npmjs.com/package/typedb-driver
Documentation: https://typedb.com/docs/drivers/nodejs/overview
npm install [email protected]
C++ driver
Compiled distributions comprising headers and shared libraries available at: https://cloudsmith.io/~typedb/repos/public-release/packages/?q=name:^typedb-driver-cpp+version:2.26.6
C driver
Compiled distributions comprising headers and shared libraries available at: https://cloudsmith.io/~typedb/repos/public-release/packages/?q=name:^typedb-driver-clib+version:2.26.6
Documentation: https://typedb.com/docs/drivers/cpp/overview
New Features
-
Update to allow Unicode TypeQL variable names
We update TypeQL and tests to ensure that support for Unicode TypeQL variable names (typedb/typeql#310) is included.
Bugs Fixed
-
Fix Factory CI job names
We fix prerequisites of the sync-dependencies job and bring the C++ behaviour test job names in concordance with the rest.
-
Fix native calls in python driver rules api
Fixes a bug which caused the delete, is_deleted and set_label methods on a Rule to fail.
Code Refactors
-
Consolidate Factory CI behaviour test jobs per driver language
We merge individual
test-{lang}-behaviour-{domain}jobs in FactoryCI into a singletest-{lang}-behaviourjob in order to reduce CI bootup and shutdown overhead per test.We also fix mac-x86_64 Python and maven deployment tests by explicitly enforcing the use of Rosetta.
-
Transition from standalone typedb-common to typeql/common
We update Bazel dependencies and target paths following the merging of typedb-common into vaticle/typeql (see typedb/typeql#313).
-
Refactor C++ docs to reflect other docs
Refactors generated C++ documentation so the Iterator and Future classes are documented in the answer folder. -
Move deployment jobs from Factory CI to CIrcleCI
We move all snapshot deployment jobs from Factory CI to CIrcleCI to ensure that assembly and deployment succeed in the same environment release deployment is performed in. We also consolidate platform independent jobs into
deploy-release/snapshot-anyto further reduce the amount of CI jobs. -
Update driver Java tests to retrieve TypeDB runners as maven library
We update Java tests to use the typedb-runner and typedb-cloud-runner libraries, which are now available from Maven instead of via the Git dependency on typedb-common.
Other Improvements
-
Add README to Node.js NPM package distribution
-
Fix CircleCI sync-dependencies apt installation steps
-
Only run CircleCI snapshot builds and tests in master
-
Switch to ghr v0.16.2 (support release w/o artifacts)
-
Fix maven snapshot deployment test pom version
-
Update unpropagated dependencies
-
Only deploy releases to cloudsmith
We implement the following changes to the release process:
- stop uploading build artifacts to the github releases page;
- update the release notes documentation links;
- add C and C++ artifact download link templates to the release notes template.
-
Fix Factory merge artifact
We remove stray line in automation.yml that appeared due to an ill-resolved merge.
-
Fix CircleCI sync dependencies configuration mismatch
The sync-dependencies step in CircleCI used an obsolete setup step which no longer exists. This PR fixes that issue.
-
Sync dependencies in CI
We add a sync-dependencies job to be run in CI after successful snapshot and release deployments. The job sends a request to vaticle-bot to update all downstream dependencies.
The snapshot dependencies sync job is run in Factory CI after all behaviour and integration tests pass. The CircleCI tests only verify deployment, which is not extensive enough verification to trigger downstream propagation, and not strictly necessary for sync as that is only affected by git dependencies.
The release dependencies sync job, in contrast, runs in CircleCI and only runs after all deployments have succeeded and been verified, so that all downstream deployments can be safely updated.
Importantly, due to the way sync-dependencies is implemented, we revert
dependencies/vaticle/repositories.bzlfrom having a dedicated typedb-protocol version line for the purposes of workspace-status, back to inlined version with the sync-marker. This means that the sync-marker is performing double duty as a workspace status marker.Note: this PR does not update the
dependenciesrepo dependency. It will be updated automatically by the bot during its first pass. -
Remove use of 'sudo' in CI
-
Refactor npm installation and job limitation to prevent CircleCI OOM
-
Fix npm installation and Java bootup configurations
-
Disable diagnostics reporting in CI
-
Increase CircleCI executor size for OOM
-
Fix NPM deploy jobs
-
Migrate artifact hosting to cloudsmith
Updates artifact deployment & consumption rules to use cloudsmith (repo.typedb.com) instead of the self-hosted sonatype repository (repo.vaticle.com).
-
Move doc generation tools to bazel distribution repository
Moves bazel rules used for generating documentation into the vaticle/bazel-distribution repository -
Move dependencies/maven/artifacts.bzl:vaticle_artifacts to dependencies/vaticle/artifacts.bzl:maven_artifacts
-
Move remotejdk bazelrc option into build/run/test to avoid affecting bazel queries
-
Apply release pipeline fixes
TypeDB Driver 2.26.6-rc1
Documentation: https://typedb.com/docs/drivers/overview
Distribution
Rust driver
Available from https://crates.io/crates/typedb-driver
Documentation: https://typedb.com/docs/drivers/rust/overview
cargo add [email protected]Java driver
Available through https://repo.typedb.com
Documentation: https://typedb.com/docs/drivers/java/overview
<repositories>
<repository>
<id>repo.typedb.com</id>
<url>https://repo.typedb.com/public/public-release/maven/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupid>com.vaticle.typedb</groupid>
<artifactid>typedb-driver</artifactid>
<version>2.26.6-rc1</version>
</dependency>
</dependencies>Python driver
PyPI package: https://pypi.org/project/typedb-driver
Documentation: https://typedb.com/docs/drivers/python/overview
Available through https://pypi.org
pip install typedb-driver==2.26.6rc1
NodeJS driver
NPM package: https://www.npmjs.com/package/typedb-driver
Documentation: https://typedb.com/docs/drivers/nodejs/overview
npm install [email protected]
C++ driver
Compiled distributions comprising headers and shared libraries available at: https://cloudsmith.io/~typedb/repos/public-release/packages/?q=name:^typedb-driver-cpp+version:2.26.6-rc1
C driver
Compiled distributions comprising headers and shared libraries available at: https://cloudsmith.io/~typedb/repos/public-release/packages/?q=name:^typedb-driver-clib+version:2.26.6-rc1
Documentation: https://typedb.com/docs/drivers/cpp/overview
New Features
-
Update to allow Unicode TypeQL variable names
We update TypeQL and tests to ensure that support for Unicode TypeQL variable names (typedb/typeql#310) is included.
Bugs Fixed
Code Refactors
-
Transition from standalone typedb-common to typeql/common
We update Bazel dependencies and target paths following the merging of typedb-common into vaticle/typeql (see typedb/typeql#313).
-
Refactor C++ docs to reflect other docs
Refactors generated C++ documentation so the Iterator and Future classes are documented in the answer folder. -
Move deployment jobs from Factory CI to CIrcleCI
We move all snapshot deployment jobs from Factory CI to CIrcleCI to ensure that assembly and deployment succeed in the same environment release deployment is performed in. We also consolidate platform independent jobs into
deploy-release/snapshot-anyto further reduce the amount of CI jobs. -
Update driver Java tests to retrieve TypeDB runners as maven library
We update Java tests to use the typedb-runner and typedb-cloud-runner libraries, which are now available from Maven instead of via the Git dependency on typedb-common.
Other Improvements
-
Only deploy releases to cloudsmith
We implement the following changes to the release process:
- stop uploading build artifacts to the github releases page;
- update the release notes documentation links;
- add C and C++ artifact download link templates to the release notes template.
-
Sync dependencies in CI
We add a sync-dependencies job to be run in CI after successful snapshot and release deployments. The job sends a request to vaticle-bot to update all downstream dependencies.
The snapshot dependencies sync job is run in Factory CI after all behaviour and integration tests pass. The CircleCI tests only verify deployment, which is not extensive enough verification to trigger downstream propagation, and not strictly necessary for sync as that is only affected by git dependencies.
The release dependencies sync job, in contrast, runs in CircleCI and only runs after all deployments have succeeded and been verified, so that all downstream deployments can be safely updated.
Importantly, due to the way sync-dependencies is implemented, we revert
dependencies/vaticle/repositories.bzlfrom having a dedicated typedb-protocol version line for the purposes of workspace-status, back to inlined version with the sync-marker. This means that the sync-marker is performing double duty as a workspace status marker.Note: this PR does not update the
dependenciesrepo dependency. It will be updated automatically by the bot during its first pass. -
Refactor npm installation and job limitation to prevent CircleCI OOM
-
Fix npm installation and Java bootup configurations
-
Disable diagnostics reporting in CI
-
Increase CircleCI executor size for OOM
-
Fix NPM deploy jobs
-
Migrate artifact hosting to cloudsmith
Updates artifact deployment & consumption rules to use cloudsmith (repo.typedb.com) instead of the self-hosted sonatype repository (repo.vaticle.com).
-
Move doc generation tools to bazel distribution repository
Moves bazel rules used for generating documentation into the vaticle/bazel-distribution repository -
Move dependencies/maven/artifacts.bzl:vaticle_artifacts to dependencies/vaticle/artifacts.bzl:maven_artifacts
-
Move remotejdk bazelrc option into build/run/test to avoid affecting bazel queries
-
Apply release pipeline fixes
TypeDB Driver 2.26.5
Documentation: https://typedb.com/docs/clients/overview
Distribution
Rust driver
Available from https://crates.io/crates/typedb-driver
Documentation: https://typedb.com/docs/clients/rust-driver
cargo add [email protected]Java driver
Available through https://repo.vaticle.com
Documentation: https://typedb.com/docs/clients/java-driver
<repositories>
<repository>
<id>repo.vaticle.com</id>
<url>https://repo.vaticle.com/repository/maven/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupid>com.vaticle.typedb</groupid>
<artifactid>typedb-driver</artifactid>
<version>2.26.5</version>
</dependency>
</dependencies>Python driver
PyPI package: https://pypi.org/project/typedb-driver
Documentation: https://typedb.com/docs/clients/python-driver
Available through https://pypi.org
pip install typedb-driver==2.26.5
NodeJS driver
NPM package: https://www.npmjs.com/package/typedb-driver
Documentation: https://typedb.com/docs/clients/nodejs-driver
npm install typedb-driver@
C++ driver
Compiled distributions comprising headers and shared libraries available at: https://github.com/vaticle/typedb-driver/releases/tag/2.26.5
C driver
Compiled distributions comprising headers and shared libraries available at: https://github.com/vaticle/typedb-driver/releases/tag/2.26.5
New Features
-
Check server URL contains port
Fail with a sensible error message when attempting to connect to a TypeDB instance using an address without explicit port.
Bugs Fixed
Code Refactors
-
Increase size of Windows executor in CircleCI to XL
We increase the size of the Windows executor in CircleCI deployment job from medium to xlarge. This change necessitated upgrade from windows orb v2.0.0 to v5.0, and reduced CI time from ~40 minutes to ~20 minutes.
-
Release from Amazon Linux to support GLIBC 2.26
We migrate release jobs in CircleCI from Ubuntu-18.04 to Amazon Linux 2 docker image (RedHat-based), in order to downgrade the GLIBC dependency from 2.27 to 2.26. This approach will enable many users who use Amazon Linux 2 to be sure that they can use TypeDB drivers to connect to TypeDB.
-
Merge CircleCI jobs per platform
We reduce the number of CircleCI jobs by combining all jobs running on the same executor (ie. per platform) into one. This reduces overhead associated with spinning up a new executor for each job and streamlines the release process.
CircleCI now loosely has one deploy job platform, and one test job per platform in both snapshot and release pipelines.
Jobs that do not require native compilation, are unchanged.
Other Improvements
-
Merge 2.26.3 release changes to development
We merge changes made to CI pipelines for the 2.26.3 release back to development.
TypeDB Driver 2.26.3
Documentation: https://typedb.com/docs/clients/overview
Distribution
Rust driver
Available from https://crates.io/crates/typedb-driver
Documentation: https://typedb.com/docs/clients/rust-driver
cargo add [email protected]Java driver
Available through https://repo.vaticle.com
Documentation: https://typedb.com/docs/clients/java-driver
<repositories>
<repository>
<id>repo.vaticle.com</id>
<url>https://repo.vaticle.com/repository/maven/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupid>com.vaticle.typedb</groupid>
<artifactid>typedb-driver</artifactid>
<version>2.26.3</version>
</dependency>
</dependencies>Python driver
PyPI package: https://pypi.org/project/typedb-driver
Documentation: https://typedb.com/docs/clients/python-driver
Available through https://pypi.org
pip install typedb-driver==2.26.3
NodeJS driver
NPM package: https://www.npmjs.com/package/typedb-driver
Documentation: https://typedb.com/docs/clients/nodejs-driver
npm install typedb-driver@
C++ driver
Compiled distributions comprising headers and shared libraries available at: https://github.com/vaticle/typedb-driver/releases/tag/2.26.3
C driver
Compiled distributions comprising headers and shared libraries available at: https://github.com/vaticle/typedb-driver/releases/tag/2.26.3
New Features
Bugs Fixed
-
Fix fetch sub-query aggregation null pointer
We fix a bug where a Fetch query with a Get-Aggregate subquery that returned an empty (ie. undefined) answer throw a null pointer exception.
For example this used to incorrectly throw an exception if 'Alice' doesn't have any salaries in the database, since a 'sum' is undefined for 0 entries.
match $x isa person, has name $n; $n == "Alice"; fetch $n as "name"; total-salary: { match $x has salary $s; get $s; sum $s; };We now correctly return the following JSON structure
[ { "name": {"value": "Alice", "type": {"label": "name", "root": "attribute", "value_type": "string"}}, "total-salary": null } ] -
Update to tonic 1.28
We fix a bug in the installation of the latest typedb-driver Rust by upgrading
tonicto version 1.28.
Code Refactors
-
Release with Ubuntu 18.04 in to lower GLIBC requirement to 2.27.0
We downgrade from Ubuntu 20.04 to 18.04 in CircleCI assembly and deployment jobs, using a Docker image. This lowers the minimum supported glibc version from 2.31 to 2.27.
-
Rename typedb.hpp to typedb_driver.hpp
Other Improvements
-
C++ driver documentation and add missing APIs
Documents the C++ code & adds ascii docs generated via doxygen. Adds a few methods to the classes which were missing. -
Update python credential documentation
-
Update C and CPP entry in README.md
-
Update C++ readme with new 'cloud' terminology
TypeDB Driver 2.26.1
Documentation: https://typedb.com/docs/clients/overview
Distribution
Rust driver
Available from https://crates.io/crates/typedb-driver
Documentation: https://typedb.com/docs/clients/rust-driver
cargo add [email protected]Java driver
Available through https://repo.vaticle.com
Documentation: https://typedb.com/docs/clients/java-driver
<repositories>
<repository>
<id>repo.vaticle.com</id>
<url>https://repo.vaticle.com/repository/maven/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupid>com.vaticle.typedb</groupid>
<artifactid>typedb-driver</artifactid>
<version>2.26.1</version>
</dependency>
</dependencies>Python driver
PyPI package: https://pypi.org/project/typedb-driver
Documentation: https://typedb.com/docs/clients/python-driver
Available through https://pypi.org
pip install typedb-driver==2.26.1
NodeJS driver
NPM package: https://www.npmjs.com/package/typedb-driver
Documentation: https://typedb.com/docs/clients/nodejs-driver
npm install typedb-driver@
C++ driver
Compiled distributions comprising headers and shared libraries available at: https://github.com/vaticle/typedb-driver/releases/tag/2.26.1
C driver
Compiled distributions comprising headers and shared libraries available at: https://github.com/vaticle/typedb-driver/releases/tag/2.26.1
API Changes
- The TypeDB Cloud/Enterprise driver entry point has been renamed. Use
TypeDB.cloudDriver()instead ofTypeDB.enterpriseDriver()to connect to TypeDB Cloud/Enterprise.
New Features
-
Introduce C++ driver
Introduce the C++ driver for TypeDB. It is built against the C++17 standard and distributed as an archive containing the headers (under/include& a shared library under/lib).Usage: As usual, add the headers paths to your include path in the compile step & the library to your link step. For windows, the 'import-lib'
typedb-driver-cpp-<platform>.if.libis included to link against.Architecture: The C++ driver is a thin wrapper around the TypeDB rust driver, introducing classes for a more intuitive interface. Each C++ object holds a unique pointer to the corresponding native rust object and is the unique owner of that rust object. To ensure this, we enforce move-semantics on the C++ objects. The rust object is freed when the C++ object owning it is destructed. Any error encountered will throw a
TypeDB::DriverException. Note that methods which returnIterableorFuturewhich encounter a server-side error will only throw when they are evaluated (usingbeginorgetrespectively).Example:
// All files are included from typedb.hpp #include <typedb.hpp> int main() { TypeDB::Driver driver = TypeDB::Driver::coreDriver("127.0.0.1:1729"); std::string dbName = "move-example"; TypeDB::Driver driver = TypeDB::Driver::coreDriver("127.0.0.1:1729"); driver.databases.create(dbName); TypeDB::Database db = driver.databases.get(dbName); // Database db1 = db; // Copying is disabled: Produces a compiler error. TypeDB::Database db1 = std::move(db); // Moves ownership from db to db1 try { std::cout << db.name() << std::endl; // db is no longer valid } catch (TypeDB::DriverException e) { // C++ Internal Error: The object does not have a valid native handle. It may have been: uninitialised, moved or disposed std::cerr << "Caught exception: " << e.message() << std::endl; } std::cout << "db.name(): " << db1.name() << std::endl; // Ok: Prints 'move-objects' return 0; }
Bugs Fixed
-
Java JNI library loading: fallback when platform not specified
Previously, the JNI library would be selected based on if the containing JAR contains the expected platform string. When TypeDB Driver Java is repackaged by the end user, the JNI library is relocated and is likely missing the platform specification in its path. Now, if only one native library candidate is found in classpath, we attempt to use that rather than fail.
Code Refactors
-
Replace all instances of 'enterprise' with 'cloud'
We replace the term 'enterprise' with 'cloud', to reflect the new consistent terminology used throughout Vaticle.
-
C++ driver UX improvements
Add a few missing APIs, and easier-to-use function variants.
Other Improvements
-
Fix circleci assembly tests for C++ driver
Fix assembly test paths broken in previous commit -
Release pipeline for C++ driver
Introduce build targets & jobs for the release pipeline of the C++ driver
TypeDB Driver 2.25.8
Documentation: https://typedb.com/docs/clients/overview
Distribution
Rust driver
Available from https://crates.io/crates/typedb-driver
Documentation: https://typedb.com/docs/clients/rust-driver
cargo add [email protected]Java driver
Available through https://repo.vaticle.com
Documentation: https://typedb.com/docs/clients/java-driver
<repositories>
<repository>
<id>repo.vaticle.com</id>
<url>https://repo.vaticle.com/repository/maven/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupid>com.vaticle.typedb</groupid>
<artifactid>typedb-driver</artifactid>
<version>2.25.8</version>
</dependency>
</dependencies>Python driver
PyPI package: https://pypi.org/project/typedb-driver
Documentation: https://typedb.com/docs/clients/python-driver
Available through https://pypi.org
pip install typedb-driver==2.25.8
NodeJS driver
NPM package: https://www.npmjs.com/package/typedb-driver
Documentation: https://typedb.com/docs/clients/nodejs-driver
npm install [email protected]
API Changes
- 'Fetch' attribute value type moves from the outer layer to the 'type' - see 'Code Refactors'
- TypeDB Core sessions automatically and lazily reconnect on network failure or timeout on the server-side
- Restore
ConceptMap.map()API on all languages
New Features
-
Session callbacks: on reopen, persistent on close; FFI bug fixes
Session callbacks
- All drivers:
- implement session reopen callbacks, executed when a session closed on the server side successfully reconnects;
- core session now attempts to reconnect if it is closed on the remote server, in line with enterprise behaviour;
Session::on_close()callbacks are now executed each time the session closes (rather than just once);
- NodeJS:
- implement session and transaction callbacks (
onClose(),Session::onReopen());
- implement session and transaction callbacks (
Miscellaneous fixes
- Java, Python:
- prevent exceptions in callbacks from crashing the native layer;
- fix the issue where static root types could not be used with Concept APi;
- reintroduce
ConceptMap.map()to retrieve the full mapping;
- Rust:
- convert error messages from tuple enum variants to struct, allowing the fields to be named;
- All drivers:
- fix the issue where session closed on remote server would not register automatically on the client side until a transaction open attempt.
- All drivers:
Bugs Fixed
Code Refactors
-
Fetch value type
We update the expected output of TypeQL Fetch queries: attribute type serialization now includes its value_type.
This change makes the output symmetric between raw values and attributes.Old output format:
{ "attribute_type": { "label": "T", "root": "attribute" }, "raw_value": { "value": "...", "value_type": "string" }, "attribute": { "value": "...", "value_type": "string", "type": { "label": "T", "root": "attribute" } } }New output format:
{ "attribute_type": { "label": "T", "value_type": "string", "root": "attribute" }, "raw_value": { "value": "...", "value_type": "string" }, "attribute": { "value": "...", "type": { "label": "T", "value_type": "string", "root": "attribute" } } }We also fix related JSON string serialization issue in which the hexadecimal escape sequences were not conformant to the JSON standard (
\u0000).
Other Improvements
-
Generate Rust documentation tabs and italics correctly
We generate documentation using the correct syntax for code examples, fixing errors in the generated Rust examples.
-
Fix documentation and for Trait Promise
-
Update vaticle_dependencies with upgraded rules_rust
-
Generate unique documentation anchors
Documentation generation now produces strictly unique anchors, using a combination of class/struct name, method name, and arguments signature as part of the anchor. This strategies means that all overloads and variations of method, for example in Java, now have uniquely referrable links.
-
Increase CircleCI windows machine sizes from medium to xlarge
TypeDB Driver 2.25.7
Documentation: https://typedb.com/docs/clients/overview
Distribution
Rust driver
Available from https://crates.io/crates/typedb-driver
Documentation: https://typedb.com/docs/clients/rust-driver
cargo add [email protected]Java driver
Available through https://repo.vaticle.com
Documentation: https://typedb.com/docs/clients/java-driver
<repositories>
<repository>
<id>repo.vaticle.com</id>
<url>https://repo.vaticle.com/repository/maven/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupid>com.vaticle.typedb</groupid>
<artifactid>typedb-driver</artifactid>
<version>2.25.7</version>
</dependency>
</dependencies>Python driver
PyPI package: https://pypi.org/project/typedb-driver
Documentation: https://typedb.com/docs/clients/python-driver
Available through https://pypi.org
pip install typedb-driver==2.25.7
NodeJS driver
NPM package: https://www.npmjs.com/package/typedb-driver
Documentation: https://typedb.com/docs/clients/nodejs-driver
npm install [email protected]
New Features
Bugs Fixed
-
Add untyped value getter for Java values and fix Python type hints
We add a simple untyped API to Java's
Valueconcepts, which return the value inside of the Value regardless of its type (double/string/etc.). This value is returned as an Object, and useful for equality checks, printing, etc. Additionally, the same API exists in Python and Node already.We also fix the Python hints for setting the name of a Type, which was incorrectly hinting the type 'Label' when it should have been a simple string.
Code Refactors
-
Silence send errors in network callbacks when receiver dropped
Downgrade the "channel closed"
SendErrorfrom ERROR to DEBUG when the receiving end of the stream is dropped before the stream is exhausted.
This used to occur when the network delivered messages to a dropped channel, for example when executing amatch-insert
and the responses were not consumed explicitly. -
Optimise CI times by retaining server between Java BDD scenarios
We optimise Java CI time by not shutting down the TypeDB server between scenarios. Instead, we delete the existing databases each test, which is much faster.
During this work, we also discovered some sub-par UX in terms of error messages thrown, and missing BDD steps that needed to be implemented.
Other Improvements
-
Fix python BDD TLS connection configuration
-
Fix Rust BDD infer flag and python TLS default to false
-
Update VERSION and regenerate release notes
-
Increase ulimits on unix CircleCI machines
-
Update README links to docs
-
Simplify github PR and issue templates
TypeDB Driver 2.25.6
Documentation: https://typedb.com/docs/clients/overview
Distribution
Rust driver
Available from https://crates.io/crates/typedb-driver
Documentation: https://typedb.com/docs/clients/rust-driver
cargo add [email protected]Java driver
Available through https://repo.vaticle.com
Documentation: https://typedb.com/docs/clients/java-driver
<repositories>
<repository>
<id>repo.vaticle.com</id>
<url>https://repo.vaticle.com/repository/maven/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupid>com.vaticle.typedb</groupid>
<artifactid>typedb-driver</artifactid>
<version>2.25.6</version>
</dependency>
</dependencies>Python driver
PyPI package: https://pypi.org/project/typedb-driver
Documentation: https://typedb.com/docs/clients/python-driver
Available through https://pypi.org
pip install typedb-driver==2.25.6
NodeJS driver
NPM package: https://www.npmjs.com/package/typedb-driver
Documentation: https://typedb.com/docs/clients/nodejs-driver
npm install [email protected]
API changes
Backwards compatible: no
This version uses a new network protocol encoding, version 3.
All drivers:
- New:
QueryManager.fetch- execute a TypeQL Fetch query against the database. Returns JSON in the driver's language. - Rename:
QueryManager.match/matchAggregate/matchGroup/matchGroupAggregateare changed toQueryManager.get/getAggregate/getGroup/getGroupAggregate - Changed return type:
QueryManager.getAggregatereturns an (promise of)Optional<Value>instead of anNumeric. Empty Optional is equivalent to the previously returnedNumeric.NaN
a. Note that in Python and Node, no value is indicated by aNone/nullvalue inside the Promise - Changed return type:
QueryManager.getGroupAggregatereturnsValueGroupinstead of aNumericGroup.
a. TheValuein theValueGroupis optional, with identical behaviour as outlined in point 3. above - Deleted:
toJSONAPIs on 'ConceptMap' and 'Concept' and subtypes are removed. Please use TypeQL Fetch queries to retrieve JSON instead.
Python:
- Changed return type: Concept API and query calls are now either Iterators (same as before) or Promises (new) - both are 'async'. Call
.resolve()on promises to retrieve the result. Note that writes are guaranteed to be completed on the backend before a commit succeeds.
Java:
- Changed return type: Concept API and query calls are now either Streams (same as before) or Promises (new) - both are 'async'. Call
.resolve()on promises to retrieve the result. Note that writes are guaranteed to be completed on the backend before a commit succeeds.
New Features
-
Node driver package automatic version stamping
We leverage Bazel's built-in workspace status and stamping capabilities to ensure that the version of TypeDB Protocol depended on by the node package doesn't go out of sync with the bazel dependency.
To that end, we also add a snapshot deployment test for the node driver, and fix a bug in process of opening a connection to TypeDB Core.
-
Implement Fetch query with JSON output
We implement the newly introduced
Fetchquery. The result of a Fetch query is a stream of serializable JSON objects.For more details, see typedb/typeql#300
Other changes in this PR:
Matchquery is now calledGet, to avoid confusion with a match clause;Numericis deprecated in favour ofOptional<Value>,NumericGroupis replaced by aValueGroupto reflect that change.ValueGroup.value()now returnsOptional<Value>as well.
-
Directly generate docs into directories and add missing doc comments
We had all generated docs files in one directory for each driver. It was not convenient for the user and for the following processing. We added files containing mapping from file names to directory names and organise files according to this mapping.
-
Docs generation
Drivers documentation on our website was created manually and therefore contained some errors and was difficult to maintain.
We add docstrings for API methods, and now one can see them directly in the IDE. Moreover, we introduce scripts for drivers documentation generation for our website, that reduces the amount of errors and simplifies the docs updating process.
Bugs Fixed
-
Fix NodeJS isEnterprise flag computation
-
Update protocol version in package.json for Node driver
-
Fix filenames with incorrect symbols for Windows
We had some filenames in generated AsciiDoc files that are prohibited in Windows. It affected only NodeJS Driver, but cloning the repo was impossible in Windows. We fixed it.
-
Update TLS certificates for client tests
Updates expired TLS certificates which the client uses for tests against TypeDB enterprise.
Code Refactors
-
Wrap native exceptions with python driver exception
We had two exception classes:
TypeDBDriverException, that could be raised by native calls, andTypeDBDriverExceptionExt(TypeDBDriverException), that was raised by python driver methods. In order to catch all driver exceptions we had to useTypeDBDriverException, but this class couldn't be commented properly, because it is defined in the SWIG-generated file, that we wouldn't like to expose.Now all raised exceptions are
TypeDBDriverExceptions, and this class is properly documented. -
Make the C driver interface more human-friendly
We refactor the C interface to make it more human-friendly. We also implement an integration test which doubles as an example.No structures are exposed in the C headers. All operations are done using pointers to rust objects in the underlying rust layer. Thus memory management involves:
- releasing pointers involving a remote resource (Connection, Session, Transaction & Database) using the corresponding
*_closemethod. - releasing pointers to local resources (e.g. iterators & concepts) using the corresponding
*_dropmethod.
- releasing pointers involving a remote resource (Connection, Session, Transaction & Database) using the corresponding
-
Reduce the number of jobs in CI for forks
This repository contains four (and counting!) implementations of the driver for different languages, each of which is fully tested in CI. That leads to an unsustainable number of jobs (~50) being spawned in Factory on each push to a fork, which has caused us significant issues during development as each hotfix had the potential to completely stall our progress.
As the first step to reducing that cost, we introduce a small set of query tests (as those were the ones taking the most time) to be run frequently, whereas the full suite is relegated to be run on the main vaticle repository branches only.
Other Improvements
-
Add linker dependencies for windows
-
UX improvements: FFI logging, error message fix, Rust stream borrow checks
We improve the UX of Driver usage in several ways:
- [Rust/Java/Python] Fix the formatting of error messages received from the server during a transaction.
- [Java] Fix native error message formatting.
- [Java/Python] Add the ability to enable Rust logging over FFI (resolves #482).
- The granularity of the logs is controlled by the
TYPEDB_DRIVER_LOG_LEVELenvironment variable, which can be set to any value oferror(default),warn,info,debug, ortrace, in order of increasing verbosity. Setting the value to"typedb_driver=info"will show only the typedb-driver messages. - More advanced syntax is described in the env_logger documentation
- The granularity of the logs is controlled by the
- [Rust] Network streams now borrow the transaction, so that the transaction can't be mistakenly dropped. (resolves #449)
-
Switch to our patched version of rules_rust (based off v0.30.0)
We update rules_rust to v0.30.0 with a patch that resolves gherkin build errors.
-
Fix misleading error messages and packaging in NodeJS Driver
- Fix misleading "Unable to connect to TypeDB Enterprise" when attempting a core server connection.
- Strip build directory prefix from the NodeJS Driver distribution.
-
Implement missing test steps for Rust, Node, and Python
-
Update release template
-
Update release note driver URLs
-
Move CircleCI jobs for MacOS x86_64 drivers to run on mac arm64 machines
We reconfigure our CircleCI pipeline to use MacOS arm64 machines for running build & test jobs for our TypeDB MacOS x86_64 drivers. This is in light of CircleCI sunsetting MacOS (intel) x86_64 resources in January 2024. -
Document driver entry points
We fix an issue in our auto-generated API documentation that failed to document the entry points to the driver:
coreDriver()andenterpriseDriver()These exist in the root namespace of the driver. Documenting these required some changes to the parsers for each language, except Rust, with some work-arounds to allow specifying method names to document according to regex filters.
-
Remove stray factory dependency
We remove the dependency of a snapshot deployment job on a recently removed test job.