All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog
- Add Test Coverage for Mixed-Type Vector Columns (FLOAT32 and FLOAT16) 2907 What was added: Expanded the vector test suite to validate scenarios where VECTOR(FLOAT32) and VECTOR(FLOAT16) columns coexist in the same schema, including coverage for JDBC operations and bulk copy workflows. Who benefits: Developers building vector-based workloads that mix float32 and float16 vector columns within the same database schema. Impact: Ensures reliable driver behavior and compatibility for mixed vector types across CRUD operations, bulk copy, metadata, and advanced database objects such as stored procedures and TVPs.
-
Add VECTOR(FLOAT16) Subtype Support #2899 What was added: Introduced support for the VECTOR(FLOAT16) subtype, including feature negotiation and IEEE-754 compliant serialization/deserialization between Java Float[] and half-precision wire format. Who benefits: Applications building AI, embeddings, and vector search workloads that require reduced memory footprint and network payload. Impact: Enables efficient float16 vector storage and transmission while preserving backward compatibility and the existing Java programming model.
-
Add prepareMethod=none Execution Path#2890 What was added: New prepareMethod=none option that forces literal parameter substitution with SQL batch execution, bypassing server-side prepared statement handles (sp_prepexec / sp_prepare). Who benefits: Applications preferring SQL Server–managed plan caching without driver-managed prepared handle reuse. Impact: Executes prepared statements as plain SQL batches, maintaining connection-level temp tables and providing a simplified alternative execution model while leaving the default behavior unchanged.
-
Statement-Level Performance Logger Metrics#2885 What was added: Extended Performance Logger to capture detailed execution metrics for Statement and PreparedStatement (REQUEST_BUILD, FIRST_SERVER_RESPONSE, PREPARE, PREPEXEC, EXECUTE). Who benefits: Developers and performance engineers analyzing execution timing and driver behavior. Impact: Provides granular observability across all statement execution paths with minimal overhead.
-
StateMachineTest Framework for JUnit 5#2887 What was added: Lightweight, seed-reproducible state-machine testing framework for randomized JDBC state exploration. Who benefits: Driver maintainers and CI stability efforts. Impact: Improves edge-case detection with reproducible failures without third-party dependencies.
-
Add AI-Assisted Development Context Files#2882 What was added: ARCHITECTURE.md, GLOSSARY.md, and PATTERNS.md to guide AI-assisted development. Who benefits: Contributors using AI coding assistants. Impact: Improves code consistency and productivity by documenting architecture and established design patterns.
-
Enhance Code Coverage (CallableStatement, DatabaseMetaData, PreparedStatement)#2875 What was added: Expanded unit and integration test coverage for key driver components including SQLServerCallableStatement, SQLServerDatabaseMetaData, and SQLServerPreparedStatement. Who benefits: Driver maintainers and users relying on stable metadata, statement execution, and callable behavior. Impact: Improves regression detection and long-term stability.
-
New Bug Regression Tests in JUnit#2888 What was added: Migrated legacy FX regression tests (37 scenarios) covering statement execution, ResultSet behavior, batching, cursors, and transaction flows into JUnit with full behavioral parity. Who benefits: Contributors and CI validation pipelines. Impact: Achieves complete FX regression coverage with reproducible execution paths and improved long-term reliability.
###Changed
-
Remove ADAL Dependency – Migrate Windows AAD Integrated Auth to MSQA APIs#2864 What was changed: Replaced deprecated ADAL-based adalsql.dll flow with MSQA (mssql-auth.dll, MSAL C++). Who benefits: Users of Windows Active Directory Integrated Authentication. Impact: Fully removes legacy ADAL dependency, aligns with Microsoft deprecation guidance, and modernizes authentication architecture.
-
Refactor DatabaseMetaData.getColumns() to use sp_columns_170 with fallback#2883 What was changed: getColumns() now prefers sp_columns_170 (SQL Server 2025) for accurate metadata on newer types such as VECTOR and enhanced JSON, with automatic fallback to sp_columns_100. Who benefits: Applications performing schema discovery against SQL Server 2025 and Azure environments. Impact: Ensures correct metadata for new engine features while preserving backward compatibility with older SQL Server versions.
-
Version Bumps to Address CVEs in Transitive Dependencies#2894 What was changed: Upgraded azure-identity to 1.18.2 and msal4j to 1.23.1, which in turn update transitive dependencies including Netty (4.1.130.Final), Reactor Netty (1.2.13), and Nimbus JOSE JWT (10.0.1). Who benefits: Applications using Azure Active Directory authentication and Azure Identity–based connection flows. Impact: Resolves security vulnerabilities in transitive dependencies, including CVE-2025-67735, CVE-2025-53864, CVE-2025-58056, CVE-2025-58057, CVE-2025-55163, CVE-2025-24970, CVE-2025-22227, and CVE-2025-25193, with no breaking API changes.
###Fixed
-
Fix Cross-Database Stored Procedure Execution with Named Parameters#2895 What was fixed: Ensured sp_sproc_columns is fully qualified with database.sys to avoid context errors. Who benefits: Applications calling procedures across databases with named parameters. Impact: Resolves metadata lookup failures and eliminates schema name-squatting security risks.
-
Exception Chaining for Nested Stored Procedure Errors#2886 What was fixed: Multiple nested RAISERROR calls now surface correctly via SQLException.getNextException. Who benefits: Applications invoking nested stored procedures. Impact: Aligns driver behavior with SQL Server semantics while preserving backward compatibility through lazy exception chaining.
-
Remove Outdated Regex Delimiter Comment (Bulk CSV)#2880 What was fixed: Updated comment to clarify delimiters are treated as literal text in SQLServerBulkCSVFileRecord. Who benefits: Users of bulk CSV ingestion. Impact: Aligns documentation with actual driver behavior.
-
Introduce prepareMethod=scopeTempTablesToConnection for PreparedStatements with temp tables #2844 What was added: New prepareMethod option that scopes temporary tables created in prepared statements to the connection by using literal parameter substitution instead of server-side prepared handles. Who benefits: Developers using temporary tables (#temp) inside PreparedStatement executions. Impact: Ensures temporary tables remain visible across executions of different prepared statements/statements within the same connection.
-
Send User Agent Information via TDS Feature Extension #2848 What was added: User agent telemetry is sent to SQL Server using a new LOGIN7 TDS Feature Extension (USERAGENT). Who benefits: Platform owners and maintainers analyzing driver usage patterns and runtime environments. Impact: Improves telemetry accuracy and enables data-driven testing and support decisions without affecting application behavior.
-
Enable Vector and JSON Tests on SQL Server 2025 #2846 What was added: Test coverage for vector and JSON features on SQL Server 2025 with a new xSQLv17 test tag. Who benefits: Contributors validating driver compatibility with the latest SQL Server release. Impact: More testing coverage increases confidence in SQL Server 2025 vector and JSON functionality.
-
Enhance Code Coverage for SQLServerResultSet #2870 What was added: Expanded unit test coverage for SQLServerResultSet. Who benefits: Driver maintainers and contributors. Impact: Improves long-term stability and regression detection.
- Update bundle-version in Manifest to Include JRE Suffix #2876 What changed: Bundle-Version in the manifest now includes the jre8 / jre11 suffix to match the JAR file name. Who benefits: Users and tooling relying on OSGi metadata consistency. Impact: Aligns manifest metadata with published artifacts and avoids ambiguity.
-
SQL Server Integrity Enhancement Support in supportsIntegrityEnhancementFacility #2745 What was fixed: Corrected metadata reporting to reflect SQL Server’s support for integrity constraints. Who benefits: Applications relying on JDBC metadata to determine database capabilities. Impact: Ensures accurate reporting of primary key, foreign key, check, unique, and NOT NULL constraint support.
-
Fix Geography Coordinate Parsing with Scientific Notation #2837 What was fixed: Prevented NumberFormatException when parsing Geography coordinates expressed in scientific notation. Who benefits: Applications working with very small spatial coordinate values. Impact: Enables correct handling of negative exponents in WKT parsing.
-
Bulk Copy Batch Insert: Proper Fallback for SQL Functions #2845 What was fixed: Automatic fallback to standard batch execution when SQL functions are used in bulk copy batch inserts. Who benefits: Users executing PreparedStatement.executeBatch() with expressions like len(?) or encryption functions. Impact: Prevents bulk copy failures while preserving performance for compatible statements.
-
Fix Bulk Copy Batch Insert with Persisted Computed Columns #2855 What was fixed: Corrected destination column validation logic to ignore computed persisted columns in bulk copy batch insert. Who benefits: Users performing bulk inserts into tables with computed columns. Impact: Prevents false “invalid column mapping” errors and restores bulk copy compatibility.
-
Fix DatabaseMetaData.getIndexInfo() Collation Conflict in UNION ALL #2867 What was fixed: Resolved collation conflicts when server and database collations differ in the query executed by getIndexInfo call. Who benefits: Applications querying index metadata in mixed-collation environments. Impact: Ensures reliable metadata retrieval by applying COLLATE DATABASE_DEFAULT consistently.
-
Fix getSchemas() Returning NULL TABLE_CATALOG for Built-in Schemas #2872 What was fixed: Corrected catalog resolution logic for built-in schemas like dbo, sys etc. Who benefits: Applications consuming schema metadata. Impact: Ensures JDBC-compliant catalog reporting for all schemas.
-
Fix Statement.execute() Skipping Update Count After Batch Error #2866 What was fixed: Prevented loss of valid update counts following an error in mixed batch execution. Who benefits: Applications using Statement.execute() with mixed DML and query batches. Impact: Restores correct JDBC result traversal semantics after exceptions.
-
Support IP Address Validation in Certificate SAN #2873 What was fixed: Added RFC 5280–compliant IP address validation in SSL certificate SAN checks. Who benefits: Users connecting via IP address over TLS. Impact: Removes need for hostname workarounds while preserving strict security guarantees.
-
Fix TVP Type Name Collision in CallableStatement Tests #2869 What was fixed: Eliminated test failures caused by table-valued parameter type name collisions. Who benefits: Contributors and CI pipelines. Impact: Improves test reliability without affecting runtime behavior.
-
Performance logger and callback handling mechanism #2706 What was added: Introduced performance logging framework to track critical driver operations such as connection time, prelogin, login, and token acquisition. Who benefits: Developers and operators monitoring JDBC driver performance. Impact: Enables visibility into driver-level latencies via com.microsoft.sqlserver.jdbc.PerformanceMetrics.Connection logger and extensible callback infrastructure for future metrics.
-
Test enhancements #2712 What changed: Improved unit test coverage for SQLServerConnectionTest, SQLServerDatabaseMetaData and few more classes. Who benefits: Contributors and maintainers. Impact: Improves code coverage with junit tests.
- Java 25 (LTS) support and removal of non-LTS versions 22–24 #2821 What changed: Added official support for Java 25 (LTS) and removed non-LTS Java versions (22–24) from Maven and Gradle build configurations. Who benefits: Developers aligning builds with long-term supported Java versions. Impact: Ensures continued compatibility and stability with LTS Java releases; simplifies build maintenance.
-
Bulk insert parsing of isolated quotes in tab-delimited data #2795 What was fixed: Resolved IndexOutOfBoundsException caused by incorrect quote state handling during tab-delimited bulk copy operations. Who benefits: Users performing bulk inserts from tab-delimited data containing isolated quotes. Impact: Ensures isolated quotes are treated as literal characters; improves parsing reliability and consistency.
-
PreparedStatement INSERT update Count with triggers and multi-Value inserts #2817 What was fixed: Corrected inaccurate update counts returned by PreparedStatement for multi-value INSERT statements with triggers. Who benefits: Developers relying on accurate update counts in batch or trigger-based inserts. Impact: Ensures consistent and accurate update count behavior across all INSERT execution scenarios.
-
Fix for fatal error handling in DONE tokens #2741 What was fixed: Corrected TDS message handling to properly detect and propagate fatal severity (25+) errors. Who benefits: Applications needing reliable error propagation during critical SQL Server failures. Impact: Prevents silent failures and ensures robust TDS stream recovery during fatal error conditions.
-
Fix for getParameterMetaData() crash with table-valued parameters #2746 What was fixed: Prevented SQLServerException when calling getParameterMetaData() on statements using Table-Valued Parameters (TVPs). Who benefits: Developers using structured or table-valued parameters. Impact: Restores correct metadata extraction for TVP parameters, ensuring full JDBC metadata compatibility.
-
supportsIntegrityEnhancementFacility() returns accurate value #2828 What was fixed: Corrected DatabaseMetaData.supportsIntegrityEnhancementFacility() to return true for SQL Server. Who benefits: Applications querying database metadata for integrity constraint support. Impact: Accurately reports SQL Server’s full support for primary, foreign key, and check constraints.
-
Fix bulk copy for batch insert to support InputStream data (#2826)(#2826) What was fixed: Enabled setBinaryStream() to work correctly with Bulk Copy for Batch Insert into VARBINARY(MAX) columns. Who benefits: Developers inserting large binary data via streams. Impact: Prevents “invalid hex format” errors; ensures InputStream-based binary inserts work seamlessly.
-
Addressed failure on Azure Synapse serverless SQL pool caused by the unsupported sp_statistics procedure #2839 What changed: Added a try–catch fallback in getIndexInfoAzureDW() to query sys.indexes, sys.index_columns, sys.columns, and sys.tables when sp_statistics is unavailable. Who benefits: Applications retrieving index metadata from Azure Synapse serverless SQL pool or other environments lacking sp_statistics. Impact: Ensures reliable metadata retrieval through a sys.indexes fallback, consistent NON_UNIQUE mapping, and aligned behavior with Azure SQL Database.
-
Test cleanup #2734 What changed: Updated tests to clean up temporary objects post-execution. Who benefits: Contributors and maintainers. Impact: Reduces test flakiness and improves maintainability of the test suite.
- Use sys.all_objects for accurate function and procedure filtering #2705 What changed: Differentiated stored procedures and functions using sys.all_objects instead of sp_stored_procedures. Who benefits: Developers using getProcedures() and getFunctions() in JDBC. Impact: Ensures correct metadata retrieval, preventing confusion from mixed results.
-
Fix trustStoreType JVM property consultation in SSL Connections #2724 What was fixed: Ensured fallback to JVM system property javax.net.ssl.trustStoreType if connection property is unset. Who benefits: Users configuring SSL via system properties. Impact: Enables proper SSL trust store resolution, improving compatibility with system configurations.
-
Addressed a data integrity and performance issue for bulk copy batch inserts with non-Unicode Strings #2735 What was fixed: Resolved performance degradation and incorrect string handling in bulk copy batch inserts when useBulkCopyForBatchInsert=true and sendStringParametersAsUnicode=false. Who benefits: Applications using SQL Server JDBC Bulk Copy for high-volume inserts, especially with non-Unicode or accented character data. Impact: Restores expected string storage, improves bulk insert performance for bulk copy API.
-
Handle SQL comments at start of query in getGenerateKeys() method #2731 What was fixed: Corrected detection of INSERT statements when preceded by SQL comments. Who benefits: Developers using getGeneratedKeys() after commented SQL inserts. Impact: Fixes previously failing key retrieval when comments are present before the query.
-
Fix update count handling for multi-statement queries executed via PreparedStatement execute method. #2737 What was fixed: Corrected update count handling for multi-statement queries run using PreparedStatement execute method, ensuring accurate counts for INSERT and other DML operations. Who benefits: Java applications using SQL Server JDBC with multi-statement PreparedStatement executions. Impact: Eliminates inconsistent update counts between Statement and PreparedStatement, improving reliability of result processing logic.
-
CodeQL suppression fixes #2728 What was fixed: Suppressed CodeQL rule [SM05141] with justification for broader usage scenarios. Who benefits: Developers maintaining code quality tools like CodeQL. Impact: Prevents unnecessary alerts for valid usage in multi-environment libraries.
-
JSON datatype support #2558 What was added: Support for reading and writing JSON columns in SQL Server. Who benefits: Developers working with semi-structured data in SQL Server. Impact: Enhances application flexibility by natively handling JSON content, reducing need for manual parsing.
-
Add order hints for Bulk Copy operations #2701 What was added: Support for specifying order hints during Bulk Copy. Who benefits: Data engineers and DBAs managing large data migrations or ETL jobs. Impact: Improves bulk data load performance.
-
Coding best practices and review process #2666 What was added: Introduced contributor guidelines, coding best practices, and review processes. Who benefits: Open-source contributors and maintainers of the mssql-jdbc project. Impact: Improves code quality, consistency, and onboarding experience for new contributors.
-
Add new trusted AKV URLs for FR and DE #2708 What was added: Registered four new Azure Key Vault and Managed HSM endpoints for France and Germany. Who benefits: Customers in regulated regions (France, Germany) using AKV for encryption. Impact: Enables secure key operations via region-specific trusted endpoints.
-
Fix for null handling in temporal types with bulk copy #2702 What was fixed: Properly handle null values for temporal types when sendTemporalDataTypesAsStringForBulkCopy=false. Who benefits: Developers using batch insert with native temporal types in bulk copy. Impact: Prevents failures during bulk inserts, improving reliability of time-sensitive data ingestion.
-
Fix string insertion with bulk copy API when sendStringParametersAsUnicode=false #2704 What was fixed: Resolved issue where strings were inserted as byte arrays in batch bulk copy mode when sendStringParametersAsUnicode is set to false. Who benefits: Developers using non-Unicode string inserts in performance-sensitive batch operations. Impact: Ensures string integrity during batch inserts, eliminating silent data corruption.
-
Vector datatype support #2634
What was added: Native support for SQL Server’s newVECTORdata type with APIs for inserts, selects, stored procedures, and bulk copy.
Who benefits: Developers building AI/ML workloads or semantic search applications using vector data in SQL Server.
Impact: Enables native vector storage and access via JDBC, eliminating the performance overhead of managing vector data as strings. -
New connection options,
quotedIdentifierandconcatNullYieldsNull#2618
What was added: ) New connection options,quotedIdentifierandconcatNullYieldsNull, to control QUOTED_IDENTIFIER and CONCAT_NULL_YIELDS_NULL session settings for both new and pooled connections.
Who benefits: Developers needing Sybase-default behavior for their applications.
Impact: Reduces Sybase migration effort by allowing control of these session values. -
Support for temporal and money datatypes when using bulk copy for batch insert operations #2670
What was added: Support for batch inserts ofDATETIME,DATE,MONEY, etc., when using theuseBulkCopyForBatchInsertoption.
Who benefits: High-volume data insert users.
Impact: Improves performance for previously unsupported types (except in Azure Synapse Analytics (formerly Azure SQL DW). -
Mockito integration into JDBC driver tests #2644
What was added: Mockito added as a test dependency.
Who benefits: Developers and contributors writing unit tests.
Impact: Enables better control and test coverage.
-
releaseSavepointexception type standardized toSQLFeatureNotSupported#2583
What changed: SQLServerException replaced with SQLFeatureNotSupportedException to comply with JDBC specification.
Who benefits: Developers expecting JDBC standard exceptions.
Impact: Enables better exception handling in client code. -
ActiveDirectoryPasswordauthentication deprecated #2624
What changed: Added deprecation warning for Microsoft Entra ID password authentication method.
Who benefits: Microsoft Entra ID authentication users.
Impact: Encourages migration to more secure methods. -
Include Columnstore indexes in
getIndexInfo()#2598
What changed: Replacedsp_statisticswith a custom query to support all index types.
Who benefits: Developers using metadata APIs.
Impact: More accurate index metadata. -
Corrected schema filtering in
getSchemas()#2643
What changed: Ensured schemas are properly filtered when a catalog name is provided.
Who benefits: Users of metadata functions.
Impact: Complies with JDBC specification and avoids confusion. -
Increased redirection limit #2659
What changed: Raised maximum redirection hops from 1 to 10.
Who benefits: Azure SQL Fabric users.
Impact: Enables successful multi-hop connection scenarios.
-
Session recovery with Entra ID authentication and redirect mode #2668
What was fixed: Redirect information is now followed during session recovery when using Entra ID authentication.
Who benefits: Azure SQL DB users using Entra ID and connection resiliency.
Impact: Prevents connection recovery failures. -
Javadoc build warnings #2640
What was fixed: Cleaned up invalid Javadoc syntax.
Who benefits: Developers building the driver.
Impact: Cleaner builds, better docs. -
OffsetDateTime formatting in SQLServerDataTable #2652
What was fixed: TheOffsetDateTimetoString()method was omitting seconds when seconds are zero, which resulted in the server rejecting those records. UsedDateTimeFormatterto avoid this invalid format.
Who benefits: Users insertingOffsetDateTimevalues.
Impact: Prevents conversion errors. -
String comparison in SQLServerDataTable.equals() #2653
What was fixed: Replaced==with.equals()for strings.
Who benefits: Anyone comparing data tables.
Impact: Accurate comparison behavior. -
PreparedStatement metadata caching for encrypted columns #2663
What was fixed: Fixed loss of type metadata acrossPreparedStatementreuse.
Who benefits: Users of Always Encrypted with secure enclaves.
Impact: Prevents insert failures in batch encryption. -
Make IBM security module optional #2636
What was fixed: IBM security dependency is now optional.
Who benefits: Applications not using IBM modules.
Impact: Avoids classloading issues. -
Invalidate enclave session on reconnect #2638
What was fixed: Enclave session cache no longer reused across reconnects.
Who benefits: Users of Always Encrypted with secure enclaves in failover configurations.
Impact: Prevents internal enclave errors due to invalid enclave session references after failover. -
File path error handling in
ConfigurableRetryLogic#2650
What was fixed: Robust error handling for missing/unreadable retry config files.
Who benefits: All users.
Impact: Prevents driver errors due to application file path issues. -
Suppressed CodeQL warnings for crypto usages #2677
What was fixed: Suppressed CodeQL security warnings for cryptographic use cases.
Who benefits: Reviewers using CodeQL.
Impact: Maintains compatibility and audit clarity. -
Batch insert fix for case-sensitive column name mismatch #2695
What was fixed:executeBatch()now respects case sensitivity of collations when matching column names.
Who benefits: Applications using case-sensitive/case-insensitive schemas.
Impact: Avoids metadata retrieval failures during batch inserts.
- Added provision to set SQLServerBulkCopy options in PreparedStatement #2555
- Changed the scope of BULK_COPY_OPERATION_CACHE to connection #2594
- Added "requireSecret" exclude tag for tests which require adding a secret to app registration #2596
- Added com.ibm.security.auth.module and com.sun.security.auth.module as option import #2609
- Updated driver dependency versions #2614
- Introduced timeouts for MSAL calls #2562
- Fixed getGeneratedKeys functionality for execute API #2554
- Fixed ISQLServerConnection java doc reference #2560
- Fixed OffsetDateTime conversion for pre-Gregorian dates #2568
- Fix for driver cutting out the question mark from columns labels (aliases) #2569
- Fixed issue with SQLServerBulkCopy from CSV with setEscapeColumnDelimerts set to true #2575
- Fixed issue for finding
mssql-jdbc.propertieslocation in test environments #2579 - Fixed issue for IBM Semeru Runtime Certified Edition for z/OS and Kerberos #2581
- Set appropriate value to requestedEncryptionLevel for encrypt=STRICT #2597
- Add test for ManagedIdentityWithEncryptStrict #2599
- Check for null when getting DTV values (JDBC spec compliance - getBinaryStream /getAsciiStream will return null when the value is null) #2600
- Removed scheme from URI before fetching path for CRL path check #2622
- Added configurable retry logic feature, supporting both statement, and connection, retry #2396#2519
- Added JDK 23 support #2515
- Reverted "Execute Stored Procedures Directly" feature, as well as subsequent changes related to the feature #2488
- Changed MSAL logging from FINEST to FINER #2489
- Updated project pom file to pull dependencies from public Azure Artifacts Feed #2504
- Changed how Kerberos authentication acquires subject to provide compatibility for Kerberos with Java 23 and above #2539
- Removed user and password check for AccessTokenCallback #2549
- Changed driver behavior to allow prepared statement objects to be reused, preventing a "multiple queries are not allowed" error #2482
- Adjusted DESTINATION_COL_METADATA_LOCK, in SQLServerBulkCopy, so that is properly released in all cases #2484
- Fixed connection retry behavior when
connectRetryCountis set to a value greater than 1 #2513 - Resolved JavaDoc warnings that would appear during project build #2521
- Fixed infinite loop when removing open statement #2547
- Fixed regression with specifying argument names in callable statement syntax #2480
- Added JDK 22 support #2414
- Added credential caching for Managed Identity Credential and Default Azure Credential #2415
- Added Caching SQLServerBulkCopy object for batch insert #2435
- Added connection level bulk copy metadata caching #2464
- Added logging to token caching #2468
- Bump org.bouncycastle:bcprov-jdk18on from 1.77 to 1.78 #2403
- Enum SQLServerSortOrder is now public #2405
- Bump com.azure:azure-identity from 1.12.1 to 1.12.2 #2447
- Bump com.microsoft.azure:msal4j from 1.15.0 to 1.15.1 #2448
- Execute stored procedures directly for RPC calls #2410
- Fix SqlAuthenticationToken constructor accepting unix epoch #2425
- TokenCredential class shouldn't be required #2441
- Fixed timestamp string conversion error for CallableStatements #2449
- Fixed CallableStatements default value regression #2452
- Fixed parentheses parsing for stored procedure names and function names #2467
- Server Message Handler and SQLException Chaining #2251
- Finish support for RFC4180 for CSV bulk insert operations #2338
- Allow constructing a microsoft.sql.DateTimeOffset instance from a java.time.OffsetDateTime value #2340
- Added support for TDSType.GUID #2370
- Fix to allow connection retries to be disabled by setting connectRetryCount to 0 #2293
- Fix to ensure metadata returned follows JDBC data type specs #2326
- Added token cache map to fix use of unintended auth token for subsequent connections #2341
- Fix calling procedures with output parameters by their four-part syntax #2349
- Reset socketTimeout to original value after a successful connection open #2355
- Clear prepared statement cache when resetting statement pool connection #2361
- Clear prepared statement handle before reconnect #2364
- Fixed ClassLoader leak of ActivityCorrelator ThreadLocal #2366
- Check if TDSCommand counter is null before incrementing #2368
- Escape schema for getProcedures and getProcedureColumns in SQLServerDatabaseMetaData #2369
- Fix to properly validate money and small money values for BulkCopy #2379
- Adjusted PreparedStatement cache, so it's cleared before every execute #2272
- Updated azure-identity, azure-security-keyvault-keys, bouncycastle, and msal library versions #2279
- Changed
socketTimeoutto ensure it's always less than or equal tologinTimeout#2280 - Change BulkCopy behavior from serializing and deserializing Timestamp objects, to using the objects directly #2291
- Fixed the way ActivityID was defined and used to be more in line with the behavior of other Microsoft drivers #2254
- Fixed missing getters and setters for
useBulkCopyForBatchInsert#2277 - Fixed an issue where, when using the TOP qualifier in a query, the driver returns an error concerning ParameterMetadata #2287
- Fixed an issue where insert statements with missing whitespace worked correctly in regular cases, but not when using batch inserts #2290
- Fixed timezone not being properly applied to Timestamps when inserted using batch insert with bulkcopy #2291
- Fixed locks in IOBuffer to prevent deadlock issues that could arise #2295
- Fixed an issue where, when an exception has no cause, the exception itself is passed along instead, preventing it from being lost #2300
- Added connection property,
useDefaultJaasConfig, to allow Kerberos authentication without any additional external configuration #2147 - Allow calling of stored procedures directly through use of new connection property
useFlexibleCallableStatements, simplifying the procedure and improving performance #2154 - Added connection property,
useDefaultGSSCredential, to allow the driver to create GSSCredential on behalf of a user using Native GSS-API for Kerberos authentication #2177 - Added Java 21 support #2229
- Added connection property,
calcBigDecimalScale, to allow the driver to calculate scale and precision from Big Decimal inputs #2248 - Added a new named logger for connection open retries and idle connection resiliency reconnects #2250
- Changed how IBM JDK is checked for to prevent issues with OSGi environments #2150#2209
- Updated azure-security-keyvault-keys, bouncycastle, and h2 library versions. As well, Upgraded from
bcprov-jdk15onandbcpkix-jdk15ontobcprov-jdk18onandbcpkix-jdk18onas the former is no longer being updated #2162#2182#2249 - Changes to bulkcopy to allow for performance improvements when loading a large number of timestamps #2194
- Added additional errors that should translate to RMFAIL #2201
- Properly synchronize all calls to MSAL, preventing the driver from making extra calls and providing unnecessary dialogues #2218
- Changed driver retry behavior to retry the correct number of times based on connectRetryCount. These changes were later reverted prior to the 12.6.0 release #2247#2267
- Fix to ignore irrelevant computed columns during bulk insert #1562
- Fixed an issue where signature was not properly verified when using Java Key Store, as well as adding a new API to sign column master key metadata (and return generated signature) for use with Java Key Store and Azure Key Vault #2160
- Fixed an issue where a null SQLState was returned when trying to convert a date to a long #2185
- Fixed an issue where schemaPattern was not properly being escaped in SQLServerDatabaseMetadata #2195
- Fixes getObject()'s erroneous conversion of DateTimeOffset to LocalDateTime #2204
- Fixed an issue with ParameterMetadata not properly checking for an invalid index 0 #2217
- Fixed bulkcopy metadata query to make use of cached data, if it's available #2231
- Fixed an issue when writing TVP row values, where input values were not properly filtered for BigDecimal scale #2239
- Revert #2051 (Big decimal precision) / #2116 (Fix for bigDecimal values between 0 and 1 having too high of a precision) #2176
- Fixed server certificate validation for encrypt=strict #2174
- Fixed issues identified by SonarQube #2145
- Added a case to throw XAER_RMFAIL on connection reset for XA transactions 2118
- Added support for Azure Active Directory Service Principal Certificate Authentication 2128
- Improved performance of building parameter type definitions 1938
- Removed check condition that had no effect 2129
- Updated azure-security-keyvault-keys, azure-identity, gson and h2 library versions 2133
- Changed serverName sent in LOGIN packet to include instanceName 2140
- Resolved high thread count when using findSocketUsingThreading 2104
- Corrected Activity ID behavior to stay the same for the life of the process, always send Activity ID in PRELOGIN, increment sequence for each new connection and send a unique client ID that persists for duration of process 2136
- Added additional logging info to help debug 2118
- Added SQL query to toString() in SQLServerPreparedStatement 2099
- Added Java 20 support 2097
- Added access token callback class connection string property 2073
- Updated azure-identity version 2114
- Updated msal4j version 2102
- Allow failover partner to be tried in case of socket timeout 2100
- Updated supportsLikeEscapeClause() to check for Azure data warehouse 2092
- sp_cursor calls now have table names passed in instead of an empty string 2087
- Updated federated authentication logic to use persistence token cache when fetching token 2079
- Updated supportTransaction method to reflect whether server supports transactions 2075
- Made jdk.net optional OSGi import 2069
- Upgraded to latest OSGi JDBC specification 2017
- Fixed missing property value for disableStatmentPooling meta info query 2120
- Fixed typo in access token error message 2119
- Fixed BigDecimal error when values between 0 and 1 are specified 2116
- Fixed lockTimeout not taking effect when redirect mode is set in Azure DB 2110
- Fixed shared timer race condition 2085
- Fixed XA error handling to rethrow XAER_RMFAIL instead of XAER_RMERR 2078
- Fixed issue by accounting for zero meta query results 2074
- Fixed invalid batch inserts when columns provided in insert differs in order from table schema 1992
- Added new connection property datetimeParameterType to specify datatype to use for date/timestamp parameters 1687
- Renamed driver DefaultAzureCredential authentication to ActiveDirectoryDefault 2055
- Update to dynamically check for ExtendedSocketOption class 2043
- Upgraded dependency versions 2040 1966
- Misc code cleanup and test fixes 2059 2053 2049 2048 2044 2041 2031 2029 2016 2014 1991 1977 1974 1970 1969 1962
- Fixed BigDecimal Precision/Scale issue 2051
- Fixed NULL state and 0 error code for SQL exceptions 2018
- Fixed incorrect updateCount 2013
- Fixed Azure Active Directory username cache matching to be case insensitive 1923
- Fixed concurrency issues in encrypt/decrypt obfuscation methods for truststore password 1968
- Fixed Idle Connection recovery so that unprocessedResponseCount isn't over decremented 1989
- Fixed race condition connecting to the wrong SQLServer host in configurable IPv6 1968
- Added support for access token callback 1940
- Added support for DefaultAzureCredential 1936
- Added support for Java 19 1929
- Driver is Loom friendly 1931
- Managed Identity authentication is achieved with Azure Identity instead 1936
- Updated MSAL and jackson-databind versions 1947
- Updated Azure-Identity version 1941
- Made MSAL an optional dependency 1893
- Added FINE logging for token expiry 1875
- Upgraded junit jupiter 1895
- Ensure that batchParamValues is cleared in all cases when executing a batch 1869
- Fixed query cancellation bug 1897
- Fixed callable statement index out of bounds error 1898
- Fixed sonartype warnings 1950
- Fixed check for DONE token when fetching result sets 1943
- Fixed race condition in secure string utility 1948
- Fixed attestation NONE protocol bug to work with all servers and enclave types 1942
- Fixed signed byte comparison 1920
- Added support for caching parameter metadata for Always Encrypted with secure enclaves 1866
- Added explicit dependency for com.microsoft.azure.msal4j (was a transitive dependency in previous releases) 1863
- Changed default loginTimeout value to 30s 1885
- Updated dependency versions of com.azure.azure-security-keyvault-keys and com.azure.azure-identity 1863
- Send TDS version 8 in Login7 when in strict mode (encrypt=strict) 1870
- Validate that the serverName field of the connection string does not have an equal sign 1853
- Fixed intermittent null prepared statement handle error caused by sp_prepare when used with batch queries. 1886
- Fixed race condition with addressList which may result in IndexOutOfBoundsException when establishing multiple connections 1855
- Updated secure string usage to prepend Initialization Vector into the encrypted bytes so each IV is unique and preserved with its encrypted bytes for later decryption 1858
- Added check for DONE_ERROR status token which may occur from a killed session on the server 1857
- Fixed issue where the driver may assert when canceling a statement 1872
- Added support for caching managed identity tokens 1825
- Added support for caching Always Encrypted parameter metadata 1845
- Switched from strings to char arrays for secure string use 1813
- Added check for negotiated ALPN 1818
- Fixed double connection issue when enabling TDS 8.0 and SSL by reusing original socket connection 1817
- Fixed unknown token error 0xA3 when selectMethod cursor is used with data classification 1821
- Fixed out-of-bounds error for when a data classification information type is not provided 1847
- Added support for Java 18 1802
- Added support for bulk insert of null GUID values 1778
- Added ALPN for TDS 8.0 connections 1795
- Updated dependency versions of azure-keyvault and azure-identity 1798
- Refactored Idle Connection Resiliency timeout to use existing SharedTimer 1794
- Fixed regression with Always Encrypted with secure enclaves 1805
- Added new connection string property prepareMethod to toggle use of sp_prepare 1719
- Added Azure Active Directory tests for Azure Data Explorer using user/password/applicationName 1755
- Added check for MSAL library when attempting ActiveDirectoryServicePrincipal authentication 1759
- Added new encrypt options for TDSS support 1757
- Added Configurable IPv6 Support 1766
- Added serverCertificate connection property for encrypt=strict 1773
- Added encrypt utility to obfuscate password strings 1780
- Added option for NONE attestation protocol 1779
- Simplified traceID creation in DataSource and PooledConnection 1747
- Refactored SQLServerColumnEncryptionAzureKeyVaultProvider usage in SQLServerConnection 1774
- Removed extra call to executeCommand() within connectionCommand() 1754
- Fixed warnings for Implicit narrowing conversion in compound assignment 1758
- Added check for MSAL library when attempting ActiveDirectoryServicePrincipal authentication 1759
- Fixed Managed Identity retry interval to exponential backoff properly 1770
- Support for datetimeoffset with sql_variant 1673
- Canonical host name resolution when realm is provided in connection string 1730
- Changed certificate validation behavior to validate when encryption is negotiated from either the client or the server side, not just the client side 1731
- Enclave Provider to use non blocking /dev/urandom 1734
- Updated azure dependancy versions to address vulnerability issues1733
- Updated Bouncy Castle version 1735
- Fixed issues detected by SonarQube 1739
- Fix for Idle Connection Resiliency for Azure AD Authentication 1706
- Retry for intermittent java NativeSeedGenerator 1705
- Default encryption to true 1697
- Fix for Azure AD interactive authentication timeout 1696
- Deprecated AADSecurePrincipalId/AADSecurePrincipalSecret 1693
- Fixed TDSParser stuck on TDS_COLMETADATA issue [#1662] (#1662)
- Fixed conversion of LocalDateTime and LocalTime to String in Bulk Copy [#1640] (#1640)
- Idle Connection Resiliency Feature 1669
- Fix for Bulkcopy multibyte characters in char/vchar columns 1671
- Java 17 support 1676
- Added logging when deriving realm 1672
- Added check for closed statement to registerColumnEncryptionKeyStoreProvidersOnStatement 1644
- Added 42108 and 42109 to transient error list 1643
- Fixed and issue where Statement.closeOnCompletion() would cause a Null Pointer Exeception 1639
- Fixed conversion of LocalDateTime and LocalTime to String in Bulk Copy 1640
- Added JAVA 16 support #1579
- Added optional realm connection string property for Kerberos authenticatoin #1581
- Added support for multiple, successive connections using AKV provider #1594
- Updated error messages for Enclave exceptions with forward link to troubleshooting guide #1585
- Added driver version to the database during prelogin #1583
- Append MSAL exception error msg to error string #1576
- Send client process ID to server on Java 9+ #1595
- Removed dependency to org.hamcrest #1596
- Updated dependency versions for azure-identity, azure-security-keyvault-keys, adal4j, gson, antlr, and bouncycastle #1613
- Removed Java 9-specific class references from the Java 8 jar #1626
- Updated dependencies versions and upgraded to Gradle version 7 #1627
- Fixed memory leak issue #1633
- Fixed an issue where batch fails when always encrypted is enabled in connection string and clearParameters was called #1578
- Added replication connection option #1566
- Fixed an issue where
trustStorePasswordis null when using applicationIntent=ReadOnly #1565 - Fixed an issue where redirected token contains named instance in servername #1568
- Added Open Connection Retry feature #1535
- Added server recognition for Azure Synapse serverless SQL pool, and Azure SQL Edge #1543
- Fixed potential integer overflow in TDSWriter.writeString() #1531
- Fixed an issue with client secret being empty during ActiveDirectoryServicePrincipal authentication in Azure environment. #1519
- Added logic to handle multi-factor authentication timeouts during ActiveDirectoryInteractive authentication #1488
- Fixed an issue with high memory allocation during bulk copy #1475
- Added maxResultBuffer connection property 1431
- Added support for Service Principal Authentication 1456
- Added support for Azure Active Directory Interactive Authentication 1464
- Enabled useBulkCopyForBatchInsert against non Azure SQL Data Warehouse servers #1465
- Added support for already connected sockets when using custom socket factory 1420
- Added JAVA 15 support #1434
- Added LocalDateTime and OffsetDateTime support in CallableStatement 1393
- Added new endpoints to the list of trusted Azure Key Vault endpoints #1445
- Fixed an issue with column ordinal mapping not being sorted when using bulk copy #1406
- Fixed PooledConnectionTest to catch exceptions from threads #1409
- Fixed an issue with bulk copy when inserting non-unicode multibyte strings #1421
- Fixed intermittent deadlock issue in DBMetadatatest #1423
- Fixed Gradle exclude tags #1424
- Fixed an issue with SQLServerBulkCSVFileRecord ignoring empty trailing columns when using setEscapeColumnDelimitersCSV() API #1438
- Changed visibility of SQLServerBulkBatchInsertRecord to package-private #1408
- Upgraded to the latest Azure Key Vault libraries #1413
- Updated API version when using MSI authentication #1418
- Enabled Azure Active Directory integrated authentication tests on non-Windows clients #1425
- Updated the driver to remove clientKeyPassword from memory #1428
- Updated SQLServerPreparedStatement.getMetaData() to retain exception details #1430
- Made ADALGetAccessTokenForWindowsIntegrated thread-safe #1441
- Fixed issue with SQLServerConnectionPoolProxy not being compatible with
delayLoadingLobs. #1403 - Fixed a potential
NullPointerExceptionissue withdelayLoadingLobs. #1403 - Fixed issue with decrypting column encryption keys using Windows Certificate Store.
- Added support for sensitivity ranking when using SQL Data Discovery and Classification #1338 #1373
- Added SQLServerDatabaseMetaData.getDatabaseCompatibilityLevel() API to return the database compatibility level #1345
- Added support for Azure SQL DNS Caching #1357
- Fixed an issue with DatabaseMetaData.getColumns() intermittently returning table column descriptions in incorrect order #1348
- Fixed an issue with spatial datatypes casting error when Always Encrypted is enabled #1353
- Fixed an issue with DatabaseMetaData.getColumns() not returning correct type for IS_AUTOINCREMENT and IS_GENERATEDCOLUMN against Azure Data Warehouse #1356
- Fixed an issue with Geography.STAsBinary() and Geometry.STAsBinary() returning WKB format instead of CLR format #1364
- Fixed an issue with allowing non-MSSQL ResultSets to bulk copy DateTimeOffset #1365
- Fixed issues identified by SonarQube #1369
- Fixed an issue with batch insertion failing when Always Encrypted is enabled #1378
- Updated Gradle build file to fix Azure pipelines #1359
- Added database name to Always Encrypted enclave caching key #1388
- Added functionality to validate both certificate beginning and expiration dates when creating encrypted connection #1394
- Added delayed durability option to SQLServerConnection.commit() #1310
- Introduced SQLServerBulkCSVFileRecord.setEscapeColumnDelimitersCSV() to escape delimiters and double quotes when using bulk copy to load from CSV files #1312
- Added certificate expiry validation when using Always Encrypted with secure enclaves feature #1321
- Added SQL State to Exception when connection is closed #1326
- Introduced extended bulk copy support against Azure Data Warehouse #1331
- Introduced 'delayLoadingLobs' connection property to provide backward compatibility when streaming LOBs #1336
- Fixed an issue with MSI authentication failing due to expiry date format mismatch #1308
- Fixed an issue with streams not getting closed when using Always Encrypted with secure enclaves feature #1315
- Fixed an issue with retrieving SQL VARIANT as its underlying type #1320
- Fixed issues with the driver not being JAVA 8 compliant #1328
- Fixed an issue with PreparedStatement when inserting large spatial data types #1337
- Updated driver and test dependencies #1294, #1313
- Improved exception message when connecting to redirection-enabled Azure server #1311
- Improved performance when parsing connection string #1317
- Updated the driver to throw a warning when TLS version lower than 1.2 is negotiated #1322
- Removed unused code #1330
- Added connection properties to specify custom SocketFactory #1217
- Added support for Client Certificate Authentication #1284
- Added support for JAVA 14 #1290
- Added support for authentication to Azure Key Vault using Managed Identity #1286
- Fixed an issue with escaping curly brackets in connection string #1251
- Fixed a warning when retrieving Operating System information from SQL Server Linux when using distributed transactions #1279
- Updated Gradle dependencies #1244
- Updated SQLServerPreparedStatement.setObject() to retrieve TVP name from SQLServerDataTable #1282
- Added an option to configure the list of trusted Azure Key Vault endpoints #1285
- Fixed a potential NullPointerException issue when retrieving data as java.time.LocalTime or java.time.LocalDate type with SQLServerResultSet.getObject() #1250
- Added new tests for Always Encrypted with secure enclaves feature #1166
- Added backwards compatibility for calling SQLServerClob.length() on nvarchar columns #1214
- Fixed an issue with potentially creating more enclave sessions than needed #1208
- Fixed an issue with InputStream closing when calling SQLServerBlob.length() on an
imagecolumn #1214 - Fixed a potential performance issue created from trailing spaces in PreparedStatement queries #1215
- Fixed an issue with native Always Encrypted calls not being synchronized #1220
- Fixed issues identified by SonarQube #1226, Semmle #1234, and CredScanner #1237
- Added more tests to improve code coverage for Always Encrypted with secure enclaves feature #1186
- Added certificate and enclave session caching for Always Encrypted with secure enclaves feature #1189
- Fixed a potential NullPointerException in SQLServerDataColumn.equals() #1168
- Fixed an issue with BulkCopy when source is unicode char/varchar and destination is nchar/nvarchar #1193
- Fixed an issue with SQLServerDatabaseMetaData.getColumns() only returning the first column against Azure SQL Data Warehouse #1197
- Fixed an issue with SQLServerDatabaseMetaData.getImportedKeys() failing against Azure SQL Data Warehouse #1205
- Made internal model public for SQLServerSpatialDatatype class #1169
- Updated ISQLServerBulkData APIs to throw SQLException instead of SQLServerException #1187
- Changed SQLServerConnection.state to volatile #1194
- Optimized temporal datatype getter methods by replacing Calendar with LocalDatetime #1200
- Updated driver and test dependencies #1203
- Added ISQLServerBulkData to remove implementation details from ISQLServerBulkRecord #1099
- Added support for Azure national clouds when using Azure Key Vault #1130
- Implemented hashCode() and equals() APIs for SQLServerDataTable and SQLServerDataColumn #1146
- Added support for JAVA 13 #1151
- Added support for Always Encrypted with Secure Enclaves #1155
- Fixed Geography.STAsBinary() returning null for a single point #1074
- Fixed DatabaseMetaData.getImportedKeys() returning duplicate rows #1092
- Fixed issue with truststore password being removed too early for XA connections #1133
- Fixed issue with SQLServerDatabaseMetada.getColumns() not escaping wildcard characters #1138
- Removed extra spaces in SQLServerDatabaseMetaData.getNumericFunctions() and SQLServerDatabaseMetaData.getStringFunctions() return values #1117
- Improved performance of column name lookups #1066
- Test improvements #1100
- Updated issue templates #1148
- Improved performance of CallableStatement and ParameterMetaData when using procedure names that contain wildcard characters #1149
- Updated CI to use SQL Server 2012 instead of 2008R2 #1153
- Reverted #1025 as it contains breaking changes. This removes
hashCode()andequals()APIs fromSQLServerDataTableandSQLServerDataColumn.
- Fixed issues reported by Static Analysis Tool - SonarQube #1077 #1103
- Fixed issues with array bound checking in 'useFmtOnly' implementation #1094
- Performance improvements #1075
- Changed NTLM Authentication implementation to not store password in plain text #1095 #1108
- Updated the Maven dependency of 'Java Client Runtime for AutoRest' to 1.6.10 version of the library #1097
- Changed NTLM Authentication error strings #1105
- Added support for NTLM Authentication #998
- Added new connection property 'useFmtOnly' to retrieve parameter metadata #1044
- Added support for JDK 12 with an additional "jre12" JAR #1050
- Added 'keyVaultProviderClientId' and 'keyVaultProviderClientKey' connection properties to enhance Always Encrypted usability #902
- Implemented
hashCode()andequals()APIs forSQLServerDataTableandSQLServerDataColumn#1025 - Added Maven Shade plugin configuration to package the driver jars in uber-jars #1043 #1078 #1081
- Fixed
DatabaseMetadata.getColumns()API to returnResultSetas per JDBC 4.3 Specifications #1016 - Fixed issue with invalid Spatial data types by marking them valid by default #1035
- Fixed issues with Login Timeout not getting applied appropriately #1049
- Fixed
SharedTimerimplementation to use class level lock for thread safety #1046 - Fixed issues with
SQLServerDatabaseMetadata.getMaxConnections()API query #1009 - Fixed issues with next
ResultSetbeing consumed when reading warnings #991 - Fixed exception handling in
SQLServerPreparedStatementto make it consistent withSQLServerStatement#1003 - Fixed misleading exception message in
SQLServerCallableStatementimplementation #1064 - JUnit Test fixes and improvements #994 #1004 #1005 #1006 #1008 #1015 #1017 #1019 #1027 #1032 #1034 #1036 #1041 #1047 #1060
- Improved performance of driver by continuously cleaning up
ActivityIdsstored in internal Map #1020 - Improved performance by removing
Enum.values()calls to avoid unnecessary array cloning #1065 - Improved performance of
SQLServerDataTable.internalAddRow()function #990
- Added support in SQLServerBulkCopy to allow Pooled/XA Connection instances during object creation #968
- Added support for FLOAT data type for bulk copy operation when using RowSet #986
- Fixed a possible Statement leak in SQLServerConnection.isValid() API #955
- Fixed rounding behavior when inserting datetime values into SQL Server version 2016 and later #962
- Fixed SQLServerConnection.abort() API behavior to clear resources consistently #983
- Fixed SQLServerConnection documentation #984
- Fixed SQL Exception Error State length to respect SQLSTATE Standards #977
- Refactored SELECT_METHOD in SQLServerConnection to not fetch the same connection property twice #987
- Improved SQLServerParameterMetadata API implementations and code coverage #973
- Fixed parsing issues with certain parameterized queries #950
- Added Azure Pipelines CI configuration to trigger Windows Client testing with SQL Server 2017 and SQL Server 2008 R2 #940
- Fixed issue with ThreadPoolExecutor thread preventing JVM from exiting #944
- Fixed issues reported by Static Analysis Tool - SonarQube #928 #930 #933
- Fixed Timestamp comparison with "Thai" locale in DataTypesTest #941
- Changed timeout request handling implementation to use SharedTimer #920
- Removed Appveyor CI and updated Travis CI configuration #940
- Added APIs for DataSourceFactory and OSGI Framework #700
- Added support for OffsetDateTime to be passed as 'type' in ResultSet.getObject() #830
- Added support for Active Directory MSI Authentication #838
- Added more datatype tests to JUnit test suite #878 #916
- Added an option to perform JUnit testing against Azure Data Warehouse #903
- Added new APIs to retrieve SQL Server error information received with SQLServerException #905
- Fixed issue with java.time.OffsetDateTime value sent to the server being affected by the default timezone #831
- Fixed SSL certificate validation to respect wildcards #836
- Fixed Bulk Copy for batch insert operation to not error out against specific datatypes #912
- Fixed synchronization on a non-final field #860
- Removed hardcoded error messages from test file #904
- Updated Issue and Pull Request templates #906
- Updated JUnit tests by closing all resources consistently and updated Maven dependency versions to latest #919
- Added a new SQLServerMetaData constructor for string values of length greater than 4000 #876
- Fixed an issue with Geography.point() having coordinates reversed #853
- Fixed intermittent test failures #854 #862 #888
- Fixed an issue with setAutoCommit() leaving a transaction open when running against Azure SQL Data Warehouse #881
- Changed query timeout logic to use a single thread #842
- Code cleanup #857 #873
- Removed populating Lobs when calling ResultSet.wasNull() #875
- Improved retry logic for intermittent TLS1.2 issue when establishing a connection #882
- Added support for JDK 11 #824 #837 #807
- Updated SQL keywords in DatabaseMetaData #829
- Improvements in DatabaseMetadata to prevent Statement leaks and enhance Statement caching #806
- Fixed slf4j warning message in tests #841
- Fixed potential NullPointerException in logException() #844
- Fixed intermittent failures in JUnit - LobsTest #827
- Fixed useBulkCopyForBatchInserts API to respect Statement timeout value #817
- Updated JUnit tests to remove hard-coded names #809
- Removed illegal reflection access in Kerberos Authentication #839
- Enabled non-running JUnit tests #847
- Updated Clobs to use StandardCharsets.US_ASCII instead of hard-coded string #855
- Code cleanup #821 #825
- Added streaming capabilities for Clob.getAsciiStream() #799
- Fixed a bug where calling length() after obtaining a stream would close the stream for Clobs/NClobs #799
- Fixed Clob/NClob encoding issues #799
- Fixed issues in Bulk Copy exception handling #801
- Fixed closeable resource leaks in JUnit tests #797
- Fixed issues with apostrophe being passed in table name #780
- Fixed statement leaks and improved exception handling in SQLServerParameterMetadata #780
- Changed error message to be thrown when data out of range for DECIMAL/NUMERIC types #796
- Added support for LocalDate, LocalTime and LocalDateTime to be passed as 'type' in ResultSet.getObject() #749
- Added support to read SQL Warnings after ResultSet is read completely #785
- Fixed Javadoc warnings and removed obselete HTML tags from Javadocs #786
- Fixed random JUnit failures in framework tests #762
- Improved performance of readLong() function by unrolling loop and using bitwise operators instead of additions #763
- Removed logging logic which caused performance degradation in AE #773
- Added 'Automatic-Module-Name' manifest entry to jre10 Jar, allowing JDK 10 users to access driver module 'com.microsoft.sqlserver.jdbc' #732
- Added setUseBulkCopyForBatchInsert() to request boundary declaration APIs #739
- Added new test for validation of supported public APIs in request boundary declaration APIs #746
- Fixed policheck issue with a keyword #745
- Fixed issues reported by static analysis tools (SonarQube, Fortify) #747
- Reformatted code and updated mssql-jdbc-formatter #742
- Changed Sha1HashKey to CityHash128Key for generating PreparedStatement handle and metadata cache keys #717
- Changed order of logic for checking the condition for using Bulk Copy API #736
- Changed collation name in UTF8SupportTest #741
- Changed scope of unwanted Public APIs #757
- Changed behavior of Bulk Copy API for batch inserts to disallow non-parameterized queries #756
- Changed APIs and JavaDocs for Spatial Datatypes #752
- Improved Javadoc comments in driver #754, #760
- Added new connection property "useBulkCopyForBatchInsert" to enable Bulk Copy API support for batch insert operation #686
- Added implementation for Java 9 introduced Boundary methods APIs on Connection interface #708
- Added support for "Data Classification Specifications" on fetched resultsets #709
- Added support for UTF-8 feature extension #722
- Fixed issue with escaping catalog name when retrieving from database metadata #718
- Fixed issue with tests requiring additional dependencies #729
- Made driver default compliant to JDBC 4.2 specifications #711
- Updated ADAL4J dependency version to 1.6.0 #711
- Cleaned up socket handling implementation to generalize functionality for different JVMs and simplified the logic for single address case #663
- Added removed constructor back to AKV Provider which supports authentication with a customized method to fetch accessToken #675
- Added support for JDK 10 for both Maven and Gradle #691
- Added a resource bundle to handle JUnit error strings #698
- Fixed the driver disposing user created credentials when using Kerberos Constrained Delegation #636
- Fixed an issue with HostnameInCertificate when redirected while connected to Azure #644
- Fixed an intermittent issue with Prepared Statement handle not found #648
- Fixed a conflict with JDBC Compliance where the driver was returning marked columns as SS_IS_COMPUTED instead of IS_GENERATED #695
- Fixed maven build warnings and deprecated Java API warnings #701
- Fixed some Javadoc related warnings #702
- Added new connection property "cancelQueryTimeout" to cancel QueryTimeout on Connection and Statement #674
- Improved performance degradation while maintaining JDBC compliance with results from sp_fkeys #677
- Fixed an issue where ResultSetMetaData instances created by a ResultSet that has been closed were not persisting #685
- Fixed an issue with PreparedStatement.setBigDecimal when no scale is passed #684
- Fixed an issue with Clobs/NClobs not persisting after ResultSet/Connection closes #682
- Updated the samples to be usable with Eclipse directly, and updated the driver version used by the samples to 6.4.0.jre9 #679
- Updated Gradle script for building JDBC Driver #689
- Updated Maven dependencies for test suite #676
- Updated multiple Maven dependency and plugin versions #688
- Test cases for Date, Time, and Datetime2 data types #558
- Fixed an issue where ResultSetMetadata returned incorrect columnType for Geometry and Geography data types #657
- Fixed server side CPU Affinity problems caused by uneven connection distribution across NUMA Nodes when multiSubnetFailover is true #662
- Fixed an issue where Driver wasn't parsing TDS Packets completely to capture exceptions raised inside executed stored procedures #664
- Fixed an issue where driver throws exception when using setMaxRows() followed by query execution when SHOWPLAN_TEXT is ON #666
- Removed unused imports which forced users to import the ADAL4J library #652
- Support for spatial datatypes #642
- Fixed blobs becoming unavailable when the Result Set cursor moves or the Result Set closes #595
- Fixed an issue when attempting to insert an empty or null value into an encrypted column #632
- Fixed a misleading error message thrown by the driver when a user doesn't have execute permissions #635
- Fixed statements throwing SQLServerException instead of java.sql.SQLTimeoutException when the query times out #641
- Unit tests now use SQLException in most cases instead of SQLServerException.
- Support added for AAD Integrated Authentication with ADAL4J on Windows/Linux/Mac OS #603
- Enable Recover after MSDTC is restarted #581
- Added Version Update configuration rules to project #541
- JDK 9 Compatibility + JDBC 4.3 API support added to the driver [#601 (https://github.com/Microsoft/mssql-jdbc/pull/601)
- Re-introduced Retry Logic for Prepared Statement Caching implementation and remove detect change context function #618 and #620
- Fixes for SonarQube Reported issues #599
- Fixes for Random Assertion Errors #597
- Updated Appveyor to use JDK9 building driver and running tests #619
- JDK 7 compilation support removed from the driver #601
- Added support for using database name as part of the key for handle cache #561
- Updated ADAL4J version to 1.3.0 and also added it into README file #564
- Fixed issues with static loggers being set by every constructor invocation #563
- Added handle for Account Locked Exception 18486 during login in SQLServerConnection #522
- Fixed the issues with Prepared Statement Metadata Caching implementation #543
- Fixed issues with static logger member in abstract class 'SQLServerClobBase' #537
- Added new ThreadGroup creation to prevent IllegalThreadStateException if the underlying ThreadGroup has been destroyed #474
- Added try-with-resources to JUnit tests #520
- Fixed the issue with passing parameters names that start with '@' to a CallableStatement #495
- Fixed SQLServerDataTable creation being O(n^2) issue #514
- Changed some manual array copying to System.arraycopy() #500
- Removed redundant toString() on String objects #501
- Replaced literals with constants #502
- Added connection properties for specifying custom TrustManager #74
- Fixed exception thrown by getters on null columns #488
- Fixed issue with DatabaseMetaData#getImportedKeys() returns wrong value for DELETE_RULE #490
- Fixed issue with ActivityCorrelator causing a classloader leak #465
- Removed explicit extends Object #469
- Removed unnecessary return statements #471
- Simplified overly complex boolean expressions #472
- Replaced explicit types with <> (the diamond operator) #420
- Fixed some error messages #452 & #459
- Fixed statement leaks #455
- Fixed an issue regarding loginTimeout with TLS #456
- Fixed sql_variant issue with String type #442
- Fixed issue with throwing error message for unsupported datatype #450
- Fixed issue that initial batchException was not thrown #458
- Changed sendStringParameterAsUnicode to impact set/update null #445
- Removed connection property: fipsProvider #460
- Replaced for and while loops with foeach loops #421
- Replaced explicit types with the diamond operator #468 & #420
- Added support for datetime/smallDatetime in TVP #435
- Added more JUnit tests for Always Encrypted #432
- Fixed getString issue for uniqueIdentifier #423
- Fixed Turkey locale issue when lowercasing an "i" #384
- Fixed issue with incorrect parameter count for INSERT with subquery #373
- Fixed issue with running DDL in PreparedStatement #372
- Fixed issue with parameter metadata with whitespace characters #371
- Fixed handling of explicit boxing and unboxing #84
- Fixed metadata caching batch query issue #393
- Fixed javadoc issue for the newest maven version #385
- Updated ADAL4J dependency to version 1.2.0 #392
- Updated azure-keyvault dependency to version 1.0.0 #397
- Updated ADAL4J to version 1.2.0 and AKV to version 1.0.0 #516
- Fixed queries without parameters using preparedStatement #372
- Removed metadata caching #377
- Added TVP and BulkCopy random data test for all data types with server cursor #319
- Added AE setup and test #337,328
- Added validation for javadocs for every commit #338
- Added metdata caching #345
- Added caching mvn dependencies for Appveyor #320
- Added caching mvn dependencies for Travis-CI #322
- Added handle for bulkcopy exceptions #286
- Added handle for TVP exceptions #285
- Fixed metadata caching issue with AE on connection #361
- Fixed issue with String index out of range parameter metadata #353
- Fixed javaDocs #354
- Fixed javaDocs #299
- Performance fix from @brettwooldridge #347
- Get local host name before opening TDSChannel #324
- Fixed TVP Time issue #317
- Fixed SonarQube issues #300
- Fixed SonarQube issues #301
- Fixed random TDS invalid error #310
- Fixed password logging #298
- Fixed bulkcopy cursor issue #270
- Refresh Kerberos configuration #279
- Added support for data type LONGVARCHAR, LONGNVARCHAR, LONGVARBINARY and SQLXML in TVP #259
- Added new connection property to accept custom JAAS configuration for Kerberos #254
- Added support for server cursor with TVP #234
- Experimental Feature: Added new connection property to support network timeout #253
- Added support to authenticate Kerberos with principal and password #163
- Added temporal types to BulkCopyCSVTestInput.csv #262
- Added automatic detection of REALM in SPN needed for Cross Domain authentication #40
- Updated minor semantics #232
- Cleaned up Azure Active Directory (AAD) Authentication methods #256
- Updated permission check before setting network timeout #255
- Turn TNIR (TransparentNetworkIPResolution) off for Azure Active Directory (AAD) Authentication and changed TNIR multipliers #240
- Wrapped ClassCastException in BulkCopy with SQLServerException #260
- Initialized the XA transaction manager for each XAResource #257
- Fixed BigDecimal scale rounding issue in BulkCopy #230
- Fixed the invalid exception thrown when stored procedure does not exist is used with TVP #265
- Added constrained delegation to connection sample #188
- Added snapshot to identify nightly/dev builds #221
- Clarifying public deprecated constructors in LOBs #226
- Added OSGI Headers in MANIFEST.MF #218
- Added cause to SQLServerException #202
- Removed java.io.Serializable interface from SQLServerConnectionPoolProxy #201
- Refactored DROP TABLE and DROP PROCEDURE calls in test code #222
- Removed obsolete methods from DriverJDBCVersion #187
- Typos in SQLServerConnectionPoolProxy #189
- Fixed issue where exceptions are thrown if comments are in a SQL string #157
- Fixed test failures on pre-2016 servers #215
- Fixed SQLServerExceptions that are wrapped by another SQLServerException #213
- Fixed a stream isClosed error on LOBs test #233
- LOBs are fully materialised #16
- Fix precision issue in TVP #217
- Re-interrupt the current thread in order to restore the threads interrupt status #196
- Re-use parameter metadata when using Always Encrypted #195
- Improved performance for PreparedStatements through minimized server round-trips #166
- Added socket timeout exception as cause#180
- Added Constrained delegation support#178
- Added JUnit test for Statement test#174
- Added test for statement.cancel() when MultiSubnetFailover is set to true#173
- Added tests for lobs #168
- Added badges for License, Maven Central, JavaDocs & gitter chat room #184
- Enabled update counts for SELECT INTO statements#175
- Use Executor service instead of thread#162
- Convert socket adaptor to socket#160
- Added isWrapperFor methods for MetaData classes#94
- Added Code Coverage #136
- Added TVP schema test #137
- Introduced FIPS boolean property #135
- Added unit statement test cases #147
- Enabled AAD Authentication with Access Token on Linux #142
- Enabled AAD Authentication with ActiveDirectoryPassword on Linux #146
- Made Azure Key Vault and Azure Active Directory Authentication Dependencies optional #148
- Getting TVP name from ParameterMetaData when using TVP with a stored procedure #138
- Fixed getBinaryStream issue #133
- Fixed an issue of Bulk Copy when AlwaysEncrypted is enabled on connection and destination table is not encrypted #151
- Added Binary and Varbinary types to the jUnit test framework #119
- Added BulkCopy test cases for csv #123
- Added BulkCopy ColumnMapping test cases #127
- Switched to clean rounding for bigDecimal #118
- Updated BVT tests to use jUnit test framework #120
- In case of socket timeout occurrence, avoid connection retry #122
- Changed ant build file to skip tests #126
- Fixed the inconsistent coding style #4
- Fixed NullPointerException in case when SocketTimeout occurs #65
- Socket timeout implementation for both connection string and data source #85
- Query timeout API for datasource #88
- Added connection tests #95
- Added Support for FIPS enabled JVM #97
- Added additional tests for bulk copy [#110] (https://github.com/Microsoft/mssql-jdbc/pull/110)
- Remove redundant type casts #63
- Read SQL Server error message if status flag has DONE_ERROR set #73
- Fix a bug when the value of queryTimeout is bigger than the max value of integer #78
- Add new dependencies to gradle build script #81
- Updates to test framework #90
- Set the jre8 version as default #59
- Fixed exception SQL Server instance in use does not support column encryption #65
- TVP Handling is causing exception when calling SP with return value #80
- BigDecimal in TVP can incorrectly cause SQLServerException related to invalid precision or scale #86
- Fixed the connection close issue on using variant type [#91] (https://github.com/Microsoft/mssql-jdbc/issues/91)
- Java Docs #46
- Driver version number in LOGIN7 packet #43
- Travis- CI Integration #23
- Appveyor Integration #23
- Make Ms Jdbc driver more Spring friendly #9
- Implement Driver#getParentLogger #8
- Implement missing MetaData #unwrap methods #12
- Added Gradle build script #54
- Added a queryTimeout connection parameter #45
- Added Stored Procedure support for TVP #47
- Use StandardCharsets #15
- Use Charset throughout #26
- Upgrade azure-keyvault to 0.9.7 #50
- Avoid unnecessary calls to String copy constructor #14
- make setObject() throw a clear exception for TVP when using with result set #48
- Few clean-ups like remove wild card imports, unused imports etc. #52
- Update Maven Plugin #55
- Open Sourced.