Releases: lucarota/salesforce-jdbc
Releases · lucarota/salesforce-jdbc
2.0.2
- Legacy URL Support:
- Added support for the legacy
jdbc:ascendix:salesforceURL prefix in addition tojdbc:rotaliano:salesforce. - Added warning logs when the deprecated
jdbc:ascendix:salesforceprefix is used, urging users to migrate to the standard prefix.
- Added support for the legacy
- Standard Nullity Expression Rewriting:
- Added rewriting support for standard
IS NULLandIS NOT NULLexpressions in SOQL queries, translating them to= NULLand<> NULLto comply with Salesforce SOQL syntax constraints.
- Added rewriting support for standard
- Support for Client-Side COALESCE Function:
- Implemented the client-side
COALESCEfunction in bothSELECTprojections andWHEREclauses. - In
SELECTprojections, it automatically rewrites incoming queries to request all underlying fields, resolving the first non-null value in-memory. - In
WHEREclauses, it recursively rewrites comparisons containingCOALESCEinto standard SOQL boolean logic (usingAND/ORchains) so filtering runs database-side, performing client-side constant folding to simplify logic and prune false literal comparison branches.
- Implemented the client-side
- Dependency Refactoring:
- Migrated from the deprecated
Parenthesisclass toParenthesedExpressionListin JSQLParser.
- Migrated from the deprecated
- Documentation:
- Added details on custom functions, performance implications, and
WHEREclause behavior to the README.
- Added details on custom functions, performance implications, and
- Client-Side
CASE WHENExpression in SELECT:- Implemented support for SQL
CASE WHEN THEN ELSE ENDconstructs inSELECTprojections. - Since Salesforce SOQL does not natively support
CASEexpressions, the driver rewrites the query to fetch all underlying columns referenced in theCASEstatement, evaluates the expression in-memory row-by-row, and returns the computed value in theResultSetunder the specified alias. - Both searched (
WHEN <condition> THEN) and simple (CASE <field> WHEN <value> THEN) forms are supported. - Supported condition operators include comparisons (
=,!=,<,>,<=,>=,LIKE), nullity checks (IS NULL,IS NOT NULL), and logical connectives (AND,OR,NOT).
- Implemented support for SQL
2.0.1
- Support for OAuth 2.0 Client Credentials Authentication:
- Implemented client credentials flow using
clientIdandclientSecretparameters. - Automatically fetches OAuth 2.0 access tokens and resolves organization metadata without modifying the core
force-partner-apilibrary. - Handles automatic session renewal and retry on expired/invalidated tokens.
- Added caching for user info and access tokens to avoid redundant token requests.
- Implemented client credentials flow using
- Enhanced Configuration & Validation:
- Requires a custom
loginDomainfor Client Credentials authentication, raising an error for unsupported generic domains (login.salesforce.comortest.salesforce.com). - Added warning logs when using the legacy
sandboxparameter along with OAuth parameters.
- Requires a custom
- Security & Logging Improvements:
- Added masking of
clientSecret/client_secretparameter values in JDBC URLs, connection info logs, and error messages.
- Added masking of
- Build Infrastructure & Tooling:
- Upgraded Project Lombok to
1.18.36for complete compatibility with JDK 21+ and JDK 25. - Configured explicit annotation processor paths in Maven compiler plugin.
- Upgraded Project Lombok to
- Testing Improvements:
- Added unit tests for OAuth token handling and error retries.
- Added pre-production integration tests (
selectOAuthPreprod_record,insertOAuthPreprod_record,updateOAuthPreprod_record) inForceDriverConnectivityTestusing live Preprod credentials.
2.0.0
-
Preserved SQL SELECT field order in flattened results:
- Added tracking of fields in their original SQL
SELECTorder. - Flattened field definitions now preserve the order written in the query, even when relationship fields are internally reorganized for Salesforce API compatibility.
- Untracked fields such as subqueries or computed fields are still appended correctly.
- Added tracking of fields in their original SQL
-
Improved result expansion for missing relationship values:
- Expanded result rows now handle missing relationship fields more safely.
- When Salesforce omits relation values, placeholder fields are inserted to keep the result structure aligned with the schema.
-
Introduced a shared abstract base for prepared statements:
- Added a new
AbstractPreparedStatementclass to centralize default stub implementations for unsupported JDBCPreparedStatementmethods. - This reduces duplication and makes statement implementations easier to maintain.
- Added a new
-
Connection handling improvements:
- Improved Salesforce connection lifecycle structure with clearer support for refreshed partner connections after reconnect or re-login operations.
- Added a unique internal identifier for each connection instance to better support session-scoped resources such as caches.
-
Documentation and maintainability improvements:
- Expanded inline documentation for connection and statement behavior.
- Clarified which JDBC features are intentionally unsupported or implemented as no-ops in the Salesforce driver.