| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| scalardb-cluster-data-loader-cli-3.18.0-all.jar | 2026-05-01 | 191.9 MB | |
| scalardb-cluster-replication-cli-3.18.0-all.jar | 2026-05-01 | 191.6 MB | |
| scalardb-cluster-schema-loader-3.18.0-all.jar | 2026-05-01 | 191.8 MB | |
| scalardb-cluster-sql-cli-3.18.0-all.jar | 2026-05-01 | 195.0 MB | |
| scalardb-data-loader-cli-3.18.0.jar | 2026-05-01 | 153.3 MB | |
| scalardb-schema-loader-3.18.0.jar | 2026-05-01 | 152.7 MB | |
| README.md | 2026-05-01 | 13.7 kB | |
| v3.18.0 source code.tar.gz | 2026-05-01 | 1.9 MB | |
| v3.18.0 source code.zip | 2026-05-01 | 2.7 MB | |
| Totals: 9 Items | 1.1 GB | 0 | |
Summary
This release includes a lot of enhancements, improvements, security issue fixes, and bug fixes.
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)
Enterprise edition
Enhancements
ScalarDB Cluster
- Added
getRole()API and equivalent to retrieve a single role by name. - Added support for starting replication with existing backup site tables.
- Added support for the
executeBatchAPI in ScalarDB Cluster SQL transactions, enabling batch execution of multiple SQL statements in a single call. - Added client-side optimizations for SQL transactions (piggyback_begin and write_buffering) to reduce RPC overhead between the client and the cluster.
- Added support for configuring a separate gRPC port for the admin service by using the
scalar.db.cluster.node.admin.portproperty. - Added
DistributedTransactionAdmin.hasPrivilege()to check if a specified user has a specific privilege on a table. - Added support for the attributes parameter in transaction begin/start methods, enabling transaction-scoped configuration such as isolation level.
- Added OIDC JWT authentication support.
- Added ThreadLocal-based user-password authentication support via
CredentialsHolder, allowing multiple users to share a singleTransactionManager. - Added property-based OIDC JWT authentication support for the client, allowing JWT access tokens to be passed via configuration properties.
ScalarDB SQL
- Added
Metadata.getRole(roleName) - Added support for Spring Boot 4 in Spring Data JDBC for ScalarDB.
- Added support for extending
AbstractJdbcConfigurationfor custom bean configuration in Spring Data JDBC for ScalarDB. - Changed the
PreparedStatementAPI to usebind()methods that return aBoundStatementfor parameter binding, instead of directly setting values onPreparedStatement. Note that this is a breaking change, and users may need to update their source code accordingly. - Added
executeBatchAPI to execute multiple statements in a single call, with support in the core SQL API, direct-mode, and JDBC driver. - Added support for BLOB literals using X'hex' syntax in SQL statements.
- Added support for AuthenticationMethod in
CREATE/ALTER USERandSHOW USERS - Added support for specifying transaction-scoped attributes in
BEGINandSTART TRANSACTIONSQL statements using theWITHclause (e.g.,BEGIN WITH 'cc-transaction-isolation' = 'SNAPSHOT'). Also addedbegin(Map), andbeginReadOnly(Map)methods toSqlSessionfor programmatic attribute specification. - Updated
SqlJdbcDatabaseMetaData.getUserName()to return the authenticated user name viaMetadata.getCurrentUser(). - Added support for specifying ABAC read and write tags in the
WITHclause ofBEGINandSTART TRANSACTIONstatements.
Improvements
ScalarDB Cluster
- Refactored internal auth token handling to use a type-safe class hierarchy instead of string prefix parsing.
- Auth, ABAC, and Encryption modules no longer require
scalar.db.cross_partition_scan.enabled=trueto be enabled globally. These modules now use operation-level cross-partition scan attributes and run internal metadata transactions with Snapshot Isolation. - Changed the deprecation policy so that APIs marked as deprecated will now be removed in 4.0.0 instead of 5.0.0.
ScalarDB GraphQL
- Relaxed the range of values accepted by the GraphQL
BigIntscalar to the full Javalongrange, aligning with the corresponding relaxation in ScalarDB. Backend-specific limits (Cosmos DB and Object Storage still restrict BigInt to-2^53to2^53) are now enforced by ScalarDB at the storage layer rather than by the GraphQL layer.
ScalarDB SQL
- Improve thread pool management in two-phase commit interface transaction to avoid potential starvation issues in Spring Data JDBC for ScalarDB.
- Added one-operation mode support for one-shot query execution to improve performance by skipping explicit transaction begin/commit when the SQL query can be expressed as a single operation.
- 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.
- Fixed an issue where the shadow jar was unnecessarily published to GitHub Packages for the CLI module.
- Update the TIMESTAMPTZ literal to make optional the space character before the UTC timezone
Zcharacter. For example,2021-03-04 12:30:45.123Zis now accepted, in addition to the current format2021-03-04 12:30:45.123 Z. Also, when selecting a TIMESTAMPTZ column, the value is printed without a space before theZ. - Refactored the SQL statement builder APIs for improved type safety and ergonomics.
SelectStatementBuildernow enforces SQL clause ordering at the type level so thathaving()is only callable aftergroupBy(), and HAVING supports the same fluent.and(...)/.or(...)chain as WHERE;Having.of(...)factories have been consolidated intoHaving.create(...);CreateUserStatementBuilder/AlterUserStatementBuilderexpose explicitwithPassword()/withSuperuser()/withNoSuperuser()methods in place of the previous overloadedwith(...); theUserOptionenum has been removed in favor of a nullablesuperuserboolean onCreateUserStatement/AlterUserStatement; andFunctionRefnow provides convenience factories (count(),sum(...),avg(...),min(...),max(...)) for common aggregates.
Bug fixes
ScalarDB Cluster
- Made
GRANT ROLEcommand idempotent, allowing duplicate grants and upgrading toWITH ADMIN OPTIONwhen re-granting. - Fixed a bug where ScalarDB Cluster cannot be deployed in the Omnistrate environment by upgrading
scalar-metering. - Fixed a bug where the pause functionality did not work correctly when transactions expired.
- Fixed an issue where the batch operation with piggyback commit threw
CrudExceptioninstead ofCrudConflictExceptionwhen a commit conflict occurred. This allows clients to properly detect and handle commit conflicts. - Fixed a bug where
batch()with piggyback commit threwCrudExceptioninstead ofUnknownTransactionStatusExceptionon unexpected gRPC errors. This could cause incorrect error handling on the client side, as the transaction status was actually unknown when piggyback commit was enabled. - Upgraded
grpc_health_probeto fix security issues: CVE-2025-68121, CVE-2025-61726, CVE-2025-61728, CVE-2025-61729, and CVE-2025-61730 - Excluded
com.microsoft.azure:adal4jfrom the Kubernetes Java Client to fix security issues: CVE-2023-52428, CVE-2021-31684, and CVE-2023-1370 - Upgraded the Jackson library to fix a security issue: GHSA-72hv-8253-57qq
- Upgraded
grpc_health_probeto fix security issues: CVE-2025-59250 and CVE-2026-25679 - Upgraded the Netty library to fix security issues: CVE-2026-33870 and CVE-2026-33871
- Fixed a bug where one-shot batch operations bypassed pause control in the GateKept transaction managers.
- Upgraded
grpc_health_probeto fix a security issue: CVE-2026-34986.
ScalarDB SQL
- Ambiguous column names in ORDER BY and HAVING clauses were detected.
- Fixed a
ClassCastExceptionthat occurred inStatementUtils.appendTerm()when handlingDATE,TIME,TIMESTAMP, andTIMESTAMPTZvalues. These values are now correctly formatted as string literals instead of being incorrectly cast to String. - Fixed
SelectStatement.toSql()to correctly generate ORDER BY clauses with aggregate functions such asSUM()andCOUNT(). Previously, only column-based orderings were handled, causing incorrect SQL output when function-based orderings were used. - Fixed a bug where duplicate column names were allowed in CREATE TABLE statements.
- Fixed missing strict date validation on time-related type formatters, which could allow invalid dates (e.g., February 30) to be silently accepted instead of rejected.
ResultSet.getObjecton BLOB columns now returns ajava.sql.Blob, andResultSet.getBlob,ResultSet.getBinaryStream, and severalPreparedStatement.setBlob/setBinaryStreamoverloads are now supported.ResultSetMetaData.getColumnTypefor FLOAT columns now returnsTypes.REAL(previouslyTypes.FLOAT).ResultSet.getStringnow returns Javanullfor SQL NULL instead of the literal string"null", in line with the JDBC spec. As a side effect, the SQL CLI now renders BLOB values asX'...'hex literals instead of[B@xxxxxxxx.- Fixed an issue where
CachedMetadata#invalidateNamespaceNamesCache()did not actually invalidate the cached list of namespaces, causingSHOW NAMESPACESand related operations to potentially return stale results until the cache TTL expired.