fix: MS SQLServer container does not allow for custom queryString #9463
+14
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Current behavior
If a user attempts to create a connection using the MS SQLServer container with an additional queryString, like:
Then the JDBCContainer will throw an error because of the following logic:
testcontainers-java/modules/jdbc/src/main/java/org/testcontainers/containers/JdbcDatabaseContainer.java
Lines 315 to 317 in 7351b66
If the queryString is changed to `?databaseName=TEST" then a malformed JDBC URL is constructed:
[10/25/2024 15:50:39:255 CDT] [main] DEBUG tc.mcr.microsoft.com/mssql/server:2019-CU18-ubuntu-20.04 - Trying to create JDBC connection using com.microsoft.sqlserver.jdbc.SQLServerDriver to jdbc:sqlserver://myhost:38291;encrypt=false?databaseName=TEST with properties: {password=A_Str0ng_Required_Password, user=sa}Expected behavior
The MS SQLServer container should override the default behavior of the
constructUrlForConnectionmethod to allow for the non-standard JDBC URL syntax for MS SQLServer which is to use a starting character ';' and delimiter ';'.Prior Work
Fixes #5728 - where issue was originally reported
Fixes #5736 - where issue was originally fixed, but this approach is less heavy handed. Takes existing methods and overwrites behavior for the SQLServer module.