|
21 | 21 | import org.apache.flink.table.catalog.Column; |
22 | 22 | import org.apache.flink.table.catalog.ResolvedSchema; |
23 | 23 | import org.apache.flink.table.data.DecimalData; |
| 24 | +import org.apache.flink.table.data.GenericArrayData; |
24 | 25 | import org.apache.flink.table.data.GenericMapData; |
25 | 26 | import org.apache.flink.table.data.GenericRowData; |
26 | 27 | import org.apache.flink.table.data.StringData; |
@@ -366,4 +367,60 @@ public static ResolvedSchema getRowMapSchema() { |
366 | 367 | Column.physical( |
367 | 368 | "f16", DataTypes.MAP(DataTypes.VARCHAR(256), DataTypes.VARCHAR(256)))); |
368 | 369 | } |
| 370 | + |
| 371 | + @Test |
| 372 | + public void testArrayExternalConvert() { |
| 373 | + ResolvedSchema schema = |
| 374 | + ResolvedSchema.of( |
| 375 | + // list with string |
| 376 | + Column.physical("f1", DataTypes.ARRAY(DataTypes.STRING())), |
| 377 | + // list with list |
| 378 | + Column.physical("f2", DataTypes.ARRAY(DataTypes.ARRAY(DataTypes.STRING()))), |
| 379 | + // list with row |
| 380 | + Column.physical( |
| 381 | + "f3", |
| 382 | + DataTypes.ARRAY( |
| 383 | + DataTypes.ROW( |
| 384 | + DataTypes.FIELD("l1", DataTypes.STRING()), |
| 385 | + DataTypes.FIELD("l2", DataTypes.INT())))), |
| 386 | + // list with map |
| 387 | + Column.physical( |
| 388 | + "f4", |
| 389 | + DataTypes.ARRAY( |
| 390 | + DataTypes.MAP(DataTypes.STRING(), DataTypes.INT()))), |
| 391 | + // list with date |
| 392 | + Column.physical("f5", DataTypes.ARRAY(DataTypes.DATE()))); |
| 393 | + |
| 394 | + DorisRowConverter converter = |
| 395 | + new DorisRowConverter((RowType) schema.toPhysicalRowDataType().getLogicalType()); |
| 396 | + |
| 397 | + Map<String, Integer> mapData1 = createMapAndPut(new HashMap<>(), "hello", 1); |
| 398 | + Map<String, Integer> mapData2 = createMapAndPut(new HashMap<>(), "world", 2); |
| 399 | + GenericRowData rowData = |
| 400 | + GenericRowData.of( |
| 401 | + new GenericArrayData(new String[] {"1", "2", "3"}), |
| 402 | + new GenericArrayData( |
| 403 | + new GenericArrayData[] { |
| 404 | + new GenericArrayData(new String[] {"1", "2", "3"}), |
| 405 | + new GenericArrayData(new String[] {"4", "5", "6"}) |
| 406 | + }), |
| 407 | + new GenericArrayData( |
| 408 | + new GenericRowData[] { |
| 409 | + GenericRowData.of(StringData.fromString("on"), 1), |
| 410 | + GenericRowData.of(StringData.fromString("off"), 2) |
| 411 | + }), |
| 412 | + new GenericArrayData( |
| 413 | + new GenericMapData[] { |
| 414 | + new GenericMapData(mapData1), new GenericMapData(mapData2) |
| 415 | + }), |
| 416 | + new GenericArrayData(new int[] {1, 2, 3})); |
| 417 | + |
| 418 | + List<Object> row = new ArrayList<>(); |
| 419 | + for (int i = 0; i < rowData.getArity(); i++) { |
| 420 | + row.add(converter.convertExternal(rowData, i)); |
| 421 | + } |
| 422 | + String expected = |
| 423 | + "[[1, 2, 3], [[1, 2, 3], [4, 5, 6]], [{\"l1\":\"on\",\"l2\":\"1\"}, {\"l1\":\"off\",\"l2\":\"2\"}], [{\"hello\":\"1\"}, {\"world\":\"2\"}], [1970-01-02, 1970-01-03, 1970-01-04]]"; |
| 424 | + Assert.assertEquals(expected, row.toString()); |
| 425 | + } |
369 | 426 | } |
0 commit comments