All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog
- Reverted "Execute Stored Procedures Directly" feature, as well as subsequent changes related to the feature #2488
- Changed MSAL logging from FINER to FINEST #2489
- 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 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
socketTimeout
to 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-jdk15on
andbcpkix-jdk15on
tobcprov-jdk18on
andbcpkix-jdk18on
as 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
trustStorePassword
is 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
NullPointerException
issue 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
image
column #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 fromSQLServerDataTable
andSQLServerDataColumn
.
- 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 forSQLServerDataTable
andSQLServerDataColumn
#1025 - Added Maven Shade plugin configuration to package the driver jars in uber-jars #1043 #1078 #1081
- Fixed
DatabaseMetadata.getColumns()
API to returnResultSet
as 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
SharedTimer
implementation to use class level lock for thread safety #1046 - Fixed issues with
SQLServerDatabaseMetadata.getMaxConnections()
API query #1009 - Fixed issues with next
ResultSet
being consumed when reading warnings #991 - Fixed exception handling in
SQLServerPreparedStatement
to make it consistent withSQLServerStatement
#1003 - Fixed misleading exception message in
SQLServerCallableStatement
implementation #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
ActivityIds
stored 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 (#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] (#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] (#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.