@@ -242,6 +242,94 @@ public void testUnexpectedBehavior() {
242
242
() -> submitPipelineJob (pipelineJob , mysqlCdcJar , valuesCdcJar , mysqlDriverJar ));
243
243
}
244
244
245
+ @ Test
246
+ public void testByDefaultTransform () throws Exception {
247
+ String dbName = schemaEvolveDatabase .getDatabaseName ();
248
+
249
+ // We put a dummy transform block that matches nothing
250
+ // to ensure TransformOperator exists, so we could verify if TransformOperator could
251
+ // correctly handle such "bypass" tables with schema changes.
252
+ String pipelineJob =
253
+ String .format (
254
+ "source:\n "
255
+ + " type: mysql\n "
256
+ + " hostname: %s\n "
257
+ + " port: 3306\n "
258
+ + " username: %s\n "
259
+ + " password: %s\n "
260
+ + " tables: %s.members\n "
261
+ + " server-id: 5400-5404\n "
262
+ + " server-time-zone: UTC\n "
263
+ + "\n "
264
+ + "sink:\n "
265
+ + " type: values\n "
266
+ + "transform:\n "
267
+ + " - source-table: another.irrelevant\n "
268
+ + " projection: \" 'irrelevant' AS tag\" \n "
269
+ + "\n "
270
+ + "pipeline:\n "
271
+ + " schema.change.behavior: evolve\n "
272
+ + " parallelism: %d" ,
273
+ INTER_CONTAINER_MYSQL_ALIAS ,
274
+ MYSQL_TEST_USER ,
275
+ MYSQL_TEST_PASSWORD ,
276
+ dbName ,
277
+ parallelism );
278
+ Path mysqlCdcJar = TestUtils .getResource ("mysql-cdc-pipeline-connector.jar" );
279
+ Path valuesCdcJar = TestUtils .getResource ("values-cdc-pipeline-connector.jar" );
280
+ Path mysqlDriverJar = TestUtils .getResource ("mysql-driver.jar" );
281
+ submitPipelineJob (pipelineJob , mysqlCdcJar , valuesCdcJar , mysqlDriverJar );
282
+ waitUntilJobRunning (Duration .ofSeconds (30 ));
283
+ LOG .info ("Pipeline job is running" );
284
+ validateSnapshotData (dbName , "members" );
285
+
286
+ LOG .info ("Starting schema evolution" );
287
+ String mysqlJdbcUrl =
288
+ String .format (
289
+ "jdbc:mysql://%s:%s/%s" , MYSQL .getHost (), MYSQL .getDatabasePort (), dbName );
290
+
291
+ try (Connection conn =
292
+ DriverManager .getConnection (
293
+ mysqlJdbcUrl , MYSQL_TEST_USER , MYSQL_TEST_PASSWORD );
294
+ Statement stmt = conn .createStatement ()) {
295
+
296
+ waitForIncrementalStage (dbName , "members" , stmt );
297
+
298
+ // triggers AddColumnEvent
299
+ stmt .execute ("ALTER TABLE members ADD COLUMN gender TINYINT AFTER age;" );
300
+ stmt .execute ("INSERT INTO members VALUES (1012, 'Eve', 17, 0);" );
301
+
302
+ // triggers AlterColumnTypeEvent and RenameColumnEvent
303
+ stmt .execute ("ALTER TABLE members CHANGE COLUMN age precise_age DOUBLE;" );
304
+
305
+ // triggers RenameColumnEvent
306
+ stmt .execute ("ALTER TABLE members RENAME COLUMN gender TO biological_sex;" );
307
+
308
+ // triggers DropColumnEvent
309
+ stmt .execute ("ALTER TABLE members DROP COLUMN biological_sex" );
310
+ stmt .execute ("INSERT INTO members VALUES (1013, 'Fiona', 16);" );
311
+ stmt .execute ("INSERT INTO members VALUES (1014, 'Gem', 17);" );
312
+ }
313
+
314
+ List <String > expectedTaskManagerEvents =
315
+ Arrays .asList (
316
+ "AddColumnEvent{tableId=%s.members, addedColumns=[ColumnWithPosition{column=`gender` TINYINT, position=AFTER, existedColumnName=age}]}" ,
317
+ "DataChangeEvent{tableId=%s.members, before=[], after=[1012, Eve, 17, 0], op=INSERT, meta=()}" ,
318
+ "AlterColumnTypeEvent{tableId=%s.members, nameMapping={age=DOUBLE}}" ,
319
+ "RenameColumnEvent{tableId=%s.members, nameMapping={age=precise_age}}" ,
320
+ "RenameColumnEvent{tableId=%s.members, nameMapping={gender=biological_sex}}" ,
321
+ "DropColumnEvent{tableId=%s.members, droppedColumnNames=[biological_sex]}" ,
322
+ "DataChangeEvent{tableId=%s.members, before=[], after=[1013, Fiona, 16.0], op=INSERT, meta=()}" ,
323
+ "DataChangeEvent{tableId=%s.members, before=[], after=[1014, Gem, 17.0], op=INSERT, meta=()}" );
324
+
325
+ List <String > expectedTmEvents =
326
+ expectedTaskManagerEvents .stream ()
327
+ .map (s -> String .format (s , dbName , dbName ))
328
+ .collect (Collectors .toList ());
329
+
330
+ validateResult (expectedTmEvents , taskManagerConsumer );
331
+ }
332
+
245
333
private void testGenericSchemaEvolution (
246
334
String behavior ,
247
335
boolean mergeTable ,
0 commit comments