ScalarDB 3.18 Release Notes
This page includes a list of release notes for ScalarDB 3.18.
v3.18.0​
Release date: May 1, 2026
Summary​
This release includes a lot of enhancements, improvements, security issue fixes, and bug fixes.
Backward-incompatible changes
- JDBC connection pool migrated from Apache Commons DBCP2 to HikariCP:
- The following configuration properties are no longer supported. They are ignored, with a warning logged, if set:
scalar.db.jdbc.connection_pool.max_idlescalar.db.jdbc.table_metadata.connection_pool.max_idlescalar.db.jdbc.admin.connection_pool.max_idlescalar.db.jdbc.prepared_statements_pool.enabledscalar.db.jdbc.prepared_statements_pool.max_open
- Prepared statement pooling is no longer available because HikariCP has no equivalent feature.
- Connection pool default behavior follows HikariCP rather than DBCP2, which may change runtime behavior even without configuration changes (for example, connection acquisition timeout and idle eviction).
- The following configuration properties are no longer supported. They are ignored, with a warning logged, if set:
- Existing tables require
repairTable()to create the new before-image secondary index. Index-basedGet,Scan, andScanAllin Consensus Commit now rely on a companionbefore_<col>index. Until you runrepairTable()on each existing table, ScalarDB logs a warning at startup and index-based reads fall back to the previous behavior, which may miss records whose indexed column is being concurrently updated. The configurationscalar.db.consensus_commit.index.eventually_consistent_read.enabledis provided as an opt-out but is not recommended for new workloads. - MySQL Connector/J replaced with MariaDB Connector/J. SSL is no longer enabled by default. If you connect to MySQL 8.0 or later with
caching_sha2_passwordauthentication, addsslMode=REQUIREDorallowPublicKeyRetrieval=trueto your JDBC URL. No action is required forjdbc:mysql://URLs because ScalarDB automatically appendspermitMysqlSchemefor compatibility. BigIntColumn.MAX_VALUEandBigIntColumn.MIN_VALUEconstants have been removed. Code that referenced them must useLong.MAX_VALUEandLong.MIN_VALUEinstead.
Community edition​
Enhancements​
- Added
AuthAdmin.getRole(roleName). (#3238) - Added operation-level attributes to allow cross-partition scan, filtering, and ordering on a per-operation basis without requiring global configuration. (#3425)
- Added
DistributedTransactionAdmin.hasPrivilege(). (#3432) - Added
AuthenticationMethodenum and authentication-method-aware user management APIs toAuthAdminto support OIDC authentication. (#3433) - Added
attributesparameter toDistributedTransactionManagerbeginandstartmethods, enabling transaction-scoped attribute configuration. CRUD methods onDistributedTransactionManageralso pass the operation's attributes to the internally begun transaction. Also added support for specifying the isolation level per transaction in Consensus Commit via thecc-transaction-isolationattribute. (#3466 #3517 #3540) - Added support for Google Cloud Spanner as a JDBC storage, via its PostgreSQL-compatible dialect. (#3510)
Improvements​
- Extended the applicability of one-phase commit optimization in the Consensus Commit protocol. This allows one-phase commit to be used even in SERIALIZABLE isolation level when the transaction only reads records that it subsequently updates, improving performance for read-modify-write workloads. (#3295)
- Added batch execution support for mutate operations in the JDBC adapter to improve performance when executing multiple mutations. Mutations with the same SQL statement are now grouped and executed as a batch. (#3304)
- Migrated the JDBC adapter's connection pooling library from Apache Commons DBCP2 to HikariCP for improved performance and reliability. (#3305)
- Changed the behavior of Consensus Commit transactions to allow Insert/Upsert/Update operations after Delete on the same record within the same transaction. Previously, this operation threw an
IllegalArgumentException, but now it properly handles the case by treating it as a new record insertion with null values for unspecified columns. (#3319) - Added @CheckReturnValue annotation to Get/Scan builders. (#3320)
- Added support for setting null values on secondary index columns in DynamoDB. When a null value is set, the attribute is removed from the item and the record will not appear in secondary index scans. (#3326)
- Inserting or updating records with TIME (microsecond precision), TIMESTAMP (millisecond precision), and TIMESTAMPTZ (millisecond precision) column values will truncate out-of-range precision rather than throwing an exception. (#3393)
- Fixed a correctness issue in index-based Get, Scan, and ScanAll operations in Consensus Commit where records whose indexed column was being concurrently updated by another transaction could be missed. ScalarDB now maintains a companion before-image secondary index for each user-defined secondary index on a non-primary-key column and uses it to recover PREPARED/DELETED records during index reads. (#3419 #3463)
- Replaced MySQL Connector/J with MariaDB Connector/J to resolve GPLv2 licensing concerns. (#3428)
- Shortened JDBC index names using a hash when they exceed the maximum identifier length supported by the underlying database. (#3481)
- Relaxed the BigInt value range restriction (
-2^53to2^53) that previously applied to all storage backends. This restriction now only applies to Cosmos DB and Object Storage. Other backends (JDBC, Cassandra, DynamoDB) now support the full Java long range for BigInt columns. (#3490) - Changed the Oracle BIGINT column type mapping from NUMBER(16) to NUMBER(19) to support the full Java long range. (#3507)
- Changed the deprecation policy so that APIs and configurations marked as deprecated will now be removed in 4.0.0 instead of 5.0.0. (#3520)
Bug fixes​
- Fixed option issues in Object Storage adapter. (#3237)
- On Oracle, when importing a table with a column using the
NUMBER(1)data type, which is usually used for BOOLEAN data, that column can now be mapped to ScalarDB BOOLEAN using ScalarDB Schema Loaderoverride-columns-typesetting. (#3239) - Fix to increase the maximum allowed string length with Object Storage. (#3248)
- Updated the upper limit value displayed in the error message for data size limitation in Object Storage adapter. (#3264)
- Added explicit commits for Oracle database when using SERIALIZABLE isolation level to ensure snapshot updates after each operation. (#3294)
- Upgraded the Jackson library to fix a security issue: GHSA-72hv-8253-57qq (#3394)
- Fix
dropColumnFromTable()dropping the secondary index even when column drop is unsupported. (#3450) - Upgraded the Netty library to fix security issues: CVE-2026-33870 and CVE-2026-33871 (#3452)
- Fixed a bug where index-based Get and Scan operations could return incorrect results after lazy recovery rolled back a PREPARED record whose after-image index value matched the query but whose before-image (restored) value did not. (#3488)