1616package com .google .cloud .teleport .v2 .templates .dbutils .dml ;
1717
1818import static com .google .common .truth .Truth .assertThat ;
19+ import static org .junit .Assert .assertEquals ;
1920import static org .junit .Assert .assertThrows ;
2021import static org .junit .Assert .assertTrue ;
2122
3435import java .io .InputStream ;
3536import java .nio .channels .Channels ;
3637import java .nio .charset .StandardCharsets ;
38+ import java .util .Arrays ;
3739import java .util .HashMap ;
3840import java .util .Map ;
3941import 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