All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog
- Added new Azure Key Vault endpoints to the list of trusted endpoints #1264
- 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 (microsoft#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 to 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] (microsoft#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] (microsoft#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.