Skip to content

Commit c1eccd4

Browse files
committed
Allow colliding parameters if values are equal
1 parent c53e6c8 commit c1eccd4

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

airbyte-integrations/connectors/destination-mysql/src/main/java/io/airbyte/integrations/destination/mysql/MySQLDestination.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.HashMap;
2323
import java.util.List;
2424
import java.util.Map;
25+
import java.util.Objects;
2526
import java.util.stream.Collectors;
2627
import java.util.stream.Stream;
2728
import org.slf4j.Logger;
@@ -142,10 +143,11 @@ private List<String> convertToJdbcStrings(final Map<String, String> customParame
142143
}
143144

144145
private void assertCustomParametersDontOverwriteDefaultParameters(final Map<String, String> customParameters,
145-
final Map<String, String> defaultParametersMaps) {
146-
final List<String> duplicateKeys = defaultParametersMaps.keySet().stream().filter(customParameters::containsKey).toList();
147-
if (!duplicateKeys.isEmpty()) {
148-
throw new RuntimeException("Cannot overwrite default JDBC parameter " + duplicateKeys);
146+
final Map<String, String> defaultParameters) {
147+
for (final String key : defaultParameters.keySet()) {
148+
if (customParameters.containsKey(key) && !Objects.equals(customParameters.get(key), defaultParameters.get(key))) {
149+
throw new RuntimeException("Cannot overwrite default JDBC parameter " + key);
150+
}
149151
}
150152
}
151153

airbyte-integrations/connectors/destination-mysql/src/test/java/io/airbyte/integrations/destination/mysql/MySQLDestinationTest.java

+14-9
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package io.airbyte.integrations.destination.mysql;
22

3+
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
34
import static org.junit.jupiter.api.Assertions.assertEquals;
45
import static org.junit.jupiter.api.Assertions.assertThrows;
56
import static org.mockito.Mockito.spy;
67

78
import com.fasterxml.jackson.databind.JsonNode;
89
import com.google.common.collect.ImmutableMap;
910
import io.airbyte.commons.json.Jsons;
11+
import io.airbyte.commons.map.MoreMaps;
12+
import java.util.Map;
1013
import java.util.Map.Entry;
1114
import org.junit.jupiter.api.Test;
1215

@@ -87,17 +90,19 @@ void testExtraParams() {
8790

8891
@Test
8992
void testExtraParamsWithDefaultParameter() {
90-
for (final Entry<String, String> entry : MySQLDestination.SSL_JDBC_PARAMETERS.entrySet()) {
91-
final String extraParam = MySQLDestination.formatParameter(entry.getKey(), entry.getValue());
92-
assertThrows(RuntimeException.class, () ->
93-
getDestination().toJdbcConfig(buildConfigWithExtraJdbcParameters(extraParam))
93+
final Map<String, String> allDefaultParameters = MoreMaps.merge(MySQLDestination.SSL_JDBC_PARAMETERS,
94+
MySQLDestination.DEFAULT_JDBC_PARAMETERS);
95+
for (final Entry<String, String> entry : allDefaultParameters.entrySet()) {
96+
final String identicalParameter = MySQLDestination.formatParameter(entry.getKey(), entry.getValue());
97+
final String overridingParameter = MySQLDestination.formatParameter(entry.getKey(), "DIFFERENT_VALUE");
98+
99+
// Do not throw an exception if the values are equal
100+
assertDoesNotThrow(() ->
101+
getDestination().toJdbcConfig(buildConfigWithExtraJdbcParameters(identicalParameter)).get("jdbc_url").asText()
94102
);
95-
}
96-
97-
for (final Entry<String, String> entry : MySQLDestination.DEFAULT_JDBC_PARAMETERS.entrySet()) {
98-
final String extraParam = MySQLDestination.formatParameter(entry.getKey(), entry.getValue());
103+
// Throw an exception if the values are different
99104
assertThrows(RuntimeException.class, () ->
100-
getDestination().toJdbcConfig(buildConfigWithExtraJdbcParameters(extraParam))
105+
getDestination().toJdbcConfig(buildConfigWithExtraJdbcParameters(overridingParameter))
101106
);
102107
}
103108
}

0 commit comments

Comments
 (0)