v1.3.0
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 |