Skip to content

Commit b0e4343

Browse files
committed
Refactor maps and update UTs
1 parent c78803f commit b0e4343

File tree

2 files changed

+41
-46
lines changed

2 files changed

+41
-46
lines changed

v2/spanner-to-sourcedb/src/main/java/com/google/cloud/teleport/v2/templates/dbutils/dml/MySQLDMLGenerator.java

Lines changed: 5 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -121,53 +121,23 @@ public DMLGeneratorResponse getDMLStatement(DMLGeneratorRequest dmlGeneratorRequ
121121
}
122122

123123
private static DMLGeneratorResponse getUpsertStatement(
124-
String tableName,
125-
List<String> primaryKeys,
126-
Map<String, String> columnNameValues,
127-
Map<String, String> pkcolumnNameValues) {
124+
String tableName, Map<String, String> allColumnNameValues) {
128125

129126
String allColumns = "";
130127
String allValues = "";
131128
String updateValues = "";
132129

133130
int index = 0;
134131

135-
for (Map.Entry<String, String> entry : pkcolumnNameValues.entrySet()) {
136-
String colName = entry.getKey();
137-
String colValue = entry.getValue();
138-
139-
allColumns += "`" + colName + "`";
140-
allValues += colValue;
141-
// Add PK columns as well to the UPDATE clause
142-
updateValues += " `" + colName + "` = " + colValue;
143-
144-
// Add comma if not the last item in this loop
145-
if (index + 1 < pkcolumnNameValues.size()) {
146-
allColumns += ",";
147-
allValues += ",";
148-
updateValues += ",";
149-
}
150-
index++;
151-
}
152-
153-
// Add a separator comma if we had PKs AND we have non-PKs to add
154-
if (!pkcolumnNameValues.isEmpty() && !columnNameValues.isEmpty()) {
155-
allColumns += ",";
156-
allValues += ",";
157-
updateValues += ",";
158-
}
159-
160-
index = 0;
161-
162-
for (Map.Entry<String, String> entry : columnNameValues.entrySet()) {
132+
for (Map.Entry<String, String> entry : allColumnNameValues.entrySet()) {
163133
String colName = entry.getKey();
164134
String colValue = entry.getValue();
165135
allColumns += "`" + colName + "`";
166136
allValues += colValue;
167137
updateValues += " `" + colName + "` = " + colValue;
168138

169139
// Add comma if not the last item in this loop
170-
if (index + 1 < columnNameValues.size()) {
140+
if (index + 1 < allColumnNameValues.size()) {
171141
allColumns += ",";
172142
allValues += ",";
173143
updateValues += ",";
@@ -223,8 +193,8 @@ private static DMLGeneratorResponse generateUpsertStatement(
223193
dmlGeneratorRequest.getKeyValuesJson(),
224194
dmlGeneratorRequest.getSourceDbTimezoneOffset(),
225195
dmlGeneratorRequest.getCustomTransformationResponse());
226-
return getUpsertStatement(
227-
sourceTable.name(), sourceTable.primaryKeyColumns(), columnNameValues, pkcolumnNameValues);
196+
columnNameValues.putAll(pkcolumnNameValues);
197+
return getUpsertStatement(sourceTable.name(), columnNameValues);
228198
}
229199

230200
private static Map<String, String> getColumnValues(

v2/spanner-to-sourcedb/src/test/java/com/google/cloud/teleport/v2/templates/dbutils/dml/MySQLDMLGeneratorTest.java

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package com.google.cloud.teleport.v2.templates.dbutils.dml;
1717

1818
import static com.google.common.truth.Truth.assertThat;
19+
import static org.junit.Assert.assertEquals;
1920
import static org.junit.Assert.assertThrows;
2021
import static org.junit.Assert.assertTrue;
2122

@@ -34,6 +35,7 @@
3435
import java.io.InputStream;
3536
import java.nio.channels.Channels;
3637
import java.nio.charset.StandardCharsets;
38+
import java.util.Arrays;
3739
import java.util.HashMap;
3840
import java.util.Map;
3941
import org.apache.beam.sdk.io.FileSystems;
@@ -283,9 +285,13 @@ public void tableOnlyContainsPrimaryKeyColumns() {
283285
.setSourceSchema(sourceSchema)
284286
.build());
285287
String sql = dmlGeneratorResponse.getDmlStatement();
286-
assertTrue(
287-
sql.contains(
288-
"INSERT INTO `resource_access`(`user_id`,`group_id`,`resource_id`) VALUES (101,5,99) ON DUPLICATE KEY UPDATE `user_id` = 101, `group_id` = 5, `resource_id` = 99"));
288+
assertThat(sql.contains("ON DUPLICATE KEY UPDATE"));
289+
assertTrue(sql.contains("`user_id` = 101"));
290+
assertTrue(sql.contains("`group_id` = 5"));
291+
assertTrue(sql.contains("`resource_id` = 99"));
292+
assertEquals(2, countInSQL(sql, "user_id"));
293+
assertEquals(2, countInSQL(sql, "group_id"));
294+
assertEquals(2, countInSQL(sql, "resource_id"));
289295
}
290296

291297
@Test
@@ -997,10 +1003,13 @@ public void testSpannerKeyIsNull() {
9971003
.setSourceSchema(sourceSchema)
9981004
.build());
9991005
String sql = dmlGeneratorResponse.getDmlStatement();
1000-
1001-
assertTrue(
1002-
sql.contains(
1003-
"INSERT INTO `Singers`(`SingerId`,`FirstName`,`LastName`) VALUES (NULL,'kk','ll')"));
1006+
assertThat(sql.contains("ON DUPLICATE KEY UPDATE"));
1007+
assertTrue(sql.contains("`FirstName` = 'kk'"));
1008+
assertTrue(sql.contains("`SingerId` = NULL"));
1009+
assertTrue(sql.contains("`LastName` = 'll'"));
1010+
assertEquals(2, countInSQL(sql, "FirstName"));
1011+
assertEquals(2, countInSQL(sql, "SingerId"));
1012+
assertEquals(2, countInSQL(sql, "LastName"));
10041013
}
10051014

10061015
@Test
@@ -1026,9 +1035,13 @@ public void testKeyInNewValuesJson() {
10261035
.setSourceSchema(sourceSchema)
10271036
.build());
10281037
String sql = dmlGeneratorResponse.getDmlStatement();
1029-
assertTrue(
1030-
sql.contains(
1031-
"INSERT INTO `Singers`(`SingerId`,`FirstName`,`LastName`) VALUES (NULL,'kk','ll')"));
1038+
assertThat(sql.contains("ON DUPLICATE KEY UPDATE"));
1039+
assertTrue(sql.contains("`FirstName` = 'kk'"));
1040+
assertTrue(sql.contains("`SingerId` = NULL"));
1041+
assertTrue(sql.contains("`LastName` = 'll'"));
1042+
assertEquals(2, countInSQL(sql, "FirstName"));
1043+
assertEquals(2, countInSQL(sql, "SingerId"));
1044+
assertEquals(2, countInSQL(sql, "LastName"));
10321045
}
10331046

10341047
@Test
@@ -1281,8 +1294,11 @@ public void customTransformationMatch() {
12811294
.build());
12821295
String sql = dmlGeneratorResponse.getDmlStatement();
12831296

1297+
assertThat(sql.contains("ON DUPLICATE KEY UPDATE"));
12841298
assertTrue(sql.contains("`FullName` = 'kk ll'"));
1285-
assertTrue(sql.contains("VALUES (1,'kk ll')"));
1299+
assertTrue(sql.contains("`SingerId` = 1"));
1300+
assertEquals(2, countInSQL(sql, "FullName"));
1301+
assertEquals(2, countInSQL(sql, "SingerId"));
12861302
}
12871303

12881304
@Test
@@ -1296,4 +1312,13 @@ public void testConvertBase64ToXHex() {
12961312
IllegalArgumentException.class,
12971313
() -> MySQLDMLGenerator.convertBase64ToHex("####GOOGLE####"));
12981314
}
1315+
1316+
public long countInSQL(String sql, String targetWord) {
1317+
if (sql == null || sql.isEmpty()) {
1318+
return 0;
1319+
}
1320+
return Arrays.stream(sql.split("\\W+"))
1321+
.filter(word -> word.equalsIgnoreCase(targetWord))
1322+
.count();
1323+
}
12991324
}

0 commit comments

Comments
 (0)