Skip to content

v1.3.0

Compare
Choose a tag to compare
@byo byo released this 23 May 13:53
· 1430 commits to master since this release

Release notes

We're pleased to announce immudb 1.3. This version brings some new notable changes, a lot of improvements and some bug fixes.

Revision-based queries

In this version we've extended queries on the KV level by adding value revisions. This brings up an easy to use and elegant way to access historical values for keys such as getting the first version (revision 1) or a previous value (revision -1). You can quickly check how it works with newest immuclient by following our updated User quickstart guide or by writing an application using revision using our SDKs.

Initial support for ALTER TABLE

This version also brings the initial support for ALTER TABLE statements in the SQL layer. We've added support for ADD COLUMN and RENAME COLUMN operations.

Temporal SQL queries based on time

When dealing with historical values on the SQL layer, it is now possible to use time expressions next to transaction ids for specifying historical values. Queries such as SELECT * FROM sales SINCE '2022-01-06 11:38' UNTIL '2022-01-06 12:00' are now perfectly valid. You can find more info in the SQL reference.

Catalog queries

Information about the SQL catalog can now be read directly using SQL. For that purpose we've added few built-in functions into our SQL dialect such as DATABASES(). Read more about this feature in the SQL reference

Documentation updates

In this release we also worked on the immudb documentation available at https://docs.mmudb.io/. Next to hundreds of smaller changes, the new menu structure will help finding useful resources. Most notably, the developer documentation is now split between the Key Value and SQL operations.

Other improvements

There are many more features added in this release. Most notably immudb now supports the USE [DATABASE] <dbname> and UNION SELECT SQL statements increasing the SQL compatibility. In addition to that, the Scan operation on the KV layer has now extended set of parameters allowing much greater filtering of scanned results.

Important notes

Starting with 1.3 release, immudb will now return an error if the amount of rows returned from the Scan, TxScan and ZScan will be greater than the allowed maximum (1000). Before it would return the first 1000 entries without reporting the error. We've found out that the previous behavior lead to a very dangerous and hidden bugs if the caller made an assumption that those calls returned all available results if the limit was not given.

To retrieve results larger than 1000 elements, pagination with a proper limit value should be used. This is the same requirement as before however it currently requires explicit limit value.

In order to handle arbitrary result sizes, future releases of immudb will focus on streaming APIs where entries will be retrieved from the server in an incremental way.

Changelog

[v1.3.0] - 2022-05-23

Bug Fixes

  • embedded/sql: return invalid value when using aggregated col selector in temporal queries
  • pkg/client: enhance client-side validations in verified methods
  • cmd/immuclient: Do not crash on login prompt
  • embedded/sql: selector resolution using valuesRowReader
  • embedded/sql: continue stmt execution on handler after changing db in use
  • embedded/sql: increase auto_increment pk once per row
  • embedded/sql: typo in error message
  • embedded/sql: adjust named parameter parsing
  • github: Run sonarcloud code analysis after cove coverate
  • pkg/database: avoid silent returns when the scan limit is reached
  • pkg/database: Fix detection of incorrect revision numbers
  • pkg/database: Correctly interpret negative revision for getAt

Changes

  • Dockerfile: Add EXPOSE 5432 and IMMUDB_PGSQL_SERVER to all immudb images
  • README.md: Switch to github badge
  • build: Update the RELEASING.md documentation
  • cmd/immuclient: Remove unnecessary sleep for set commands
  • cmd/immuclient: Move history command to a separate file
  • cmd/immuclient: Extract separate immuclient options
  • embedded/sql: validate current database as first step
  • embedded/sql: check tx range edge cases
  • embedded/sql: not showing unexistent db name as part of error message
  • embedded/sql: fully non-transactional db creation and selection
  • embedded/sql: re-include ttimestamp conversions in tx periods
  • embedded/sql: de-duplicate error handling
  • embedded/sql: database selection without multidb handler is still transactional
  • embedded/sql: database selection as non-transactional
  • embedded/sql: postpone period evaluation so to support parameters type inference
  • embedded/sql: param substitution in functional datasource
  • embedded/sql: functional-style catalog queries
  • embedded/sql: quoted identifiers
  • embedded/sql: ensure db selection is the last operation
  • embedded/sql: unit testing db selection
  • embedded/sql: include short database selection stmt
  • embedded/sql: ensure context propagation with multiple txs
  • embedded/sql: implicit time expression
  • embedded/sql: functional catalog api
  • embedded/sql: non-functional catalog access
  • embedded/sql: wip grammar extensions to enrich temporal queries
  • embedded/sql: sql tx with context
  • embedded/sql: multi-db handler
  • embedded/sql: detailed error messages
  • embedded/store: minor refactoring time-based tx lookup
  • github: Speedup push github actions
  • grpc: Extend Scan API with endKey, inclusiveSeek, inclusiveEnd
  • pkg/api: extend database creation response to indicate db already existed
  • pkg/database: minor error renaming
  • pkg/database: Rename getAt to getAtTx
  • pkg/database: provide query parameters during resolution
  • pkg/database: Add missing copyright header in scan_test.go
  • pkg/database: contextual sql tx
  • pkg/database: set multi-db handler after db initialization
  • pkg/database: Improved checking of KeyRequest constraints
  • pkg/database: databases catalog query yet unsupported
  • pkg/database: maintain MaxKeyScanLimit for backward compatibility
  • pkg/integration: Add SQL verify tests after ALTER TABLE
  • pkg/integration: Cleanup and restructure SQL tests
  • pkg/server: upgrade database method signature
  • pkg/server: contextual sql tx

Features

  • Add revision number when getting DB entries
  • Calculate revision number when scanning key history
  • api/schema: Add revision-based option to key query
  • cmd/immuclient: Add restore operation
  • cmd/immuclient: Add revision numbers when looking up key history
  • cmd/immuclient: Add support for revision-based get in immuclient
  • cmd/immuclient: Better error messages for invalid revision for restore command
  • embedded/sql: create database if not exists
  • embedded/sql: queries with temporal ranges
  • embedded/sql: temporal row ranges
  • embedded/sql: catalog queries
  • embedded/sql: WIP - UNION operator
  • embedded/sql: Implement ALTER TABLE ADD COLUMN
  • embedded/store: time-based tx lookup
  • embedded/store: ranged key update reading
  • pkg/client: Add revision-based get request on the go client
  • pkg/database: Add revision-based get request on the GRPC level
  • pkg/server: support database creation from sql
  • pkg/server: support database selection from sql stmt

Downloads

Docker image
https://hub.docker.com/r/codenotary/immudb

Immudb Binaries

File SHA256
immudb-v1.3.0-darwin-amd64 4dd1ffe15682edf57b5b3ee539808e140f4a3ae6f544b8b95ad875772c5776d2
immudb-v1.3.0-darwin-arm64 4dd6c91a59fd868b8b641b7557a9ccebf8f458d6ea5c3c3f6baf96e336bbd810
immudb-v1.3.0-freebsd-amd64 27b3533a1e665dbf74298ac76a67b37058974723f1b214e808cd7d511479c23b
immudb-v1.3.0-linux-amd64 1aaab3892cc1f1ef8bd8e5f02e25e09c76d76cd1f10f57397329bc9040e38a9a
immudb-v1.3.0-linux-amd64-static 2f404dd618798ece9b3fc183a623b13c2bb646d914dbb82f56e1a317a47d0239
immudb-v1.3.0-linux-arm64 8192640ecd581fab6630034fe059a48ad7b1fa5fa0f62abdbfc2bbf219cd04ac
immudb-v1.3.0-linux-s390x 03751514079e98aaacd4bfdcfc26bd79a0abe6d0462ff030d2ecc429dc4da970
immudb-v1.3.0-windows-amd64.exe 232ea264f32197288bea374a76ccb002ab24d3fbbff94aae79cbacdf18880701

Immuclient Binaries

File SHA256
immuclient-v1.3.0-darwin-amd64 5e9def61732ef67c9c78c84a41fe377beb00c81a19b098213ed4e3e80c5d9042
immuclient-v1.3.0-darwin-arm64 e72ab55027815929c082cd7ebcc9e0d82ed6b1ac23de80665846d089bb10b370
immuclient-v1.3.0-freebsd-amd64 08607c50b6f80c8ffa9c2f1e24d5185ea354207bb3cb2b83207e8f61e364f4f3
immuclient-v1.3.0-linux-amd64 4085ffa302e3830c2f86ee0eac91ee0b1b40315cdf91440c95d44da4f90aa2ab
immuclient-v1.3.0-linux-amd64-static b74b1e8205c25c0bf677b0c610dfa1e95a9e7eebd6b3ae104db49d8a9b24ed9c
immuclient-v1.3.0-linux-arm64 613b463fe821fdd24ac3528c719f65776d35202af5d0353af87a4af0c9d86a14
immuclient-v1.3.0-linux-s390x f6eef9db22c117baa1bb1f8ada6ee06178f78073c09df99d01091e96d713cbf2
immuclient-v1.3.0-windows-amd64.exe 944ec1075974eabdcee59e07adaf2ad3651fcc73302e4894b727e05aa2fe9e4a

Immuadmin Binaries

File SHA256
immuadmin-v1.3.0-darwin-amd64 742a58b2d12f1c8d58e606012eb6cf23014b9da799d7e32035e477755339be8e
immuadmin-v1.3.0-darwin-arm64 704aa6742dcf988945bcbfff89a66b05beb60dffb6696832d784861dd5bc4969
immuadmin-v1.3.0-freebsd-amd64 28fa9d3261a6f16b40be26bcf82161344f62a02ec9c3299d31d6f43fac819baf
immuadmin-v1.3.0-linux-amd64 19b74c16004006de75c02c557505f0318601117ee403af0612d3d9f278983765
immuadmin-v1.3.0-linux-amd64-static 47b7de246028db75da38a7cc6fc8bcfd3fd59f17d093f717df6b662597c50ecd
immuadmin-v1.3.0-linux-arm64 4fda30818dbe6b27c7de78a88f8dd9b79345287dcdde64dba540f1ff68a946d3
immuadmin-v1.3.0-linux-s390x a0d854236d3f9a98ac64141fcacbefe6aff8358c004478ee8da38ee8718f4e14
immuadmin-v1.3.0-windows-amd64.exe 69a1a2cef32aa69fc84dff7c7ef2c696be269319baebba630d83a8323845f1af