|
29 | 29 | import org.apache.seatunnel.api.table.type.SeaTunnelDataType;
|
30 | 30 | import org.apache.seatunnel.api.table.type.SeaTunnelRow;
|
31 | 31 | import org.apache.seatunnel.api.table.type.SeaTunnelRowType;
|
| 32 | +import org.apache.seatunnel.transform.exception.TransformException; |
32 | 33 |
|
33 | 34 | import org.junit.jupiter.api.Assertions;
|
34 | 35 | import org.junit.jupiter.api.Test;
|
@@ -315,4 +316,105 @@ public void tesCaseWhenClausesWithBooleanField() {
|
315 | 316 | Assertions.assertEquals(false, result.get(0).getField(1));
|
316 | 317 | Assertions.assertEquals(2, result.get(0).getField(2));
|
317 | 318 | }
|
| 319 | + |
| 320 | + @Test |
| 321 | + public void tesCaseWhenBooleanClausesWithField() { |
| 322 | + String tableName = "test"; |
| 323 | + String[] fields = new String[] {"id", "int", "string"}; |
| 324 | + CatalogTable table = |
| 325 | + CatalogTableUtil.getCatalogTable( |
| 326 | + tableName, |
| 327 | + new SeaTunnelRowType( |
| 328 | + fields, |
| 329 | + new SeaTunnelDataType[] { |
| 330 | + BasicType.INT_TYPE, BasicType.INT_TYPE, BasicType.STRING_TYPE |
| 331 | + })); |
| 332 | + ReadonlyConfig config = |
| 333 | + ReadonlyConfig.fromMap( |
| 334 | + Collections.singletonMap( |
| 335 | + "query", |
| 336 | + "select `id`, `int`, (case when `int` = 1 then true else false end) as bool_1 , `string`, (case when `string` = 'true' then true else false end) as bool_2 from dual")); |
| 337 | + SQLTransform sqlTransform = new SQLTransform(config, table); |
| 338 | + List<SeaTunnelRow> result = |
| 339 | + sqlTransform.transformRow(new SeaTunnelRow(new Object[] {1, 1, "true"})); |
| 340 | + |
| 341 | + Assertions.assertEquals(1, result.get(0).getField(0)); |
| 342 | + Assertions.assertEquals(1, result.get(0).getField(1)); |
| 343 | + Assertions.assertEquals(true, result.get(0).getField(2)); |
| 344 | + Assertions.assertEquals("true", result.get(0).getField(3)); |
| 345 | + Assertions.assertEquals(true, result.get(0).getField(4)); |
| 346 | + |
| 347 | + result = sqlTransform.transformRow(new SeaTunnelRow(new Object[] {1, 0, "false"})); |
| 348 | + Assertions.assertEquals(1, result.get(0).getField(0)); |
| 349 | + Assertions.assertEquals(0, result.get(0).getField(1)); |
| 350 | + Assertions.assertEquals(false, result.get(0).getField(2)); |
| 351 | + Assertions.assertEquals("false", result.get(0).getField(3)); |
| 352 | + Assertions.assertEquals(false, result.get(0).getField(4)); |
| 353 | + } |
| 354 | + |
| 355 | + @Test |
| 356 | + public void tesCastBooleanClausesWithField() { |
| 357 | + String tableName = "test"; |
| 358 | + String[] fields = new String[] {"id", "int", "string"}; |
| 359 | + CatalogTable table = |
| 360 | + CatalogTableUtil.getCatalogTable( |
| 361 | + tableName, |
| 362 | + new SeaTunnelRowType( |
| 363 | + fields, |
| 364 | + new SeaTunnelDataType[] { |
| 365 | + BasicType.INT_TYPE, BasicType.INT_TYPE, BasicType.STRING_TYPE |
| 366 | + })); |
| 367 | + ReadonlyConfig config = |
| 368 | + ReadonlyConfig.fromMap( |
| 369 | + Collections.singletonMap( |
| 370 | + "query", |
| 371 | + "select `id`, `int`, cast(`int` as boolean) as bool_1 , `string`, cast(`string` as boolean) as bool_2 from dual")); |
| 372 | + SQLTransform sqlTransform = new SQLTransform(config, table); |
| 373 | + List<SeaTunnelRow> result = |
| 374 | + sqlTransform.transformRow( |
| 375 | + new SeaTunnelRow(new Object[] {Integer.valueOf(1), 1, "true"})); |
| 376 | + |
| 377 | + Assertions.assertEquals(1, result.get(0).getField(0)); |
| 378 | + Assertions.assertEquals(1, result.get(0).getField(1)); |
| 379 | + Assertions.assertEquals(true, result.get(0).getField(2)); |
| 380 | + Assertions.assertEquals("true", result.get(0).getField(3)); |
| 381 | + Assertions.assertEquals(true, result.get(0).getField(4)); |
| 382 | + |
| 383 | + result = |
| 384 | + sqlTransform.transformRow( |
| 385 | + new SeaTunnelRow(new Object[] {Integer.valueOf(1), 0, "false"})); |
| 386 | + Assertions.assertEquals(1, result.get(0).getField(0)); |
| 387 | + Assertions.assertEquals(0, result.get(0).getField(1)); |
| 388 | + Assertions.assertEquals(false, result.get(0).getField(2)); |
| 389 | + Assertions.assertEquals("false", result.get(0).getField(3)); |
| 390 | + Assertions.assertEquals(false, result.get(0).getField(4)); |
| 391 | + |
| 392 | + Assertions.assertThrows( |
| 393 | + TransformException.class, |
| 394 | + () -> { |
| 395 | + try { |
| 396 | + sqlTransform.transformRow( |
| 397 | + new SeaTunnelRow(new Object[] {Integer.valueOf(1), 3, "false"})); |
| 398 | + } catch (Exception e) { |
| 399 | + Assertions.assertEquals( |
| 400 | + "ErrorCode:[COMMON-05], ErrorDescription:[Unsupported operation] - Unsupported CAST AS Boolean: 3", |
| 401 | + e.getMessage()); |
| 402 | + throw e; |
| 403 | + } |
| 404 | + }); |
| 405 | + |
| 406 | + Assertions.assertThrows( |
| 407 | + TransformException.class, |
| 408 | + () -> { |
| 409 | + try { |
| 410 | + sqlTransform.transformRow( |
| 411 | + new SeaTunnelRow(new Object[] {Integer.valueOf(1), 0, "false333"})); |
| 412 | + } catch (Exception e) { |
| 413 | + Assertions.assertEquals( |
| 414 | + "ErrorCode:[COMMON-05], ErrorDescription:[Unsupported operation] - Unsupported CAST AS Boolean: false333", |
| 415 | + e.getMessage()); |
| 416 | + throw e; |
| 417 | + } |
| 418 | + }); |
| 419 | + } |
318 | 420 | }
|
0 commit comments