From a5768b46f05f869559dd9a3561d47864abf3622e Mon Sep 17 00:00:00 2001 From: yyin-talend Date: Fri, 6 Jun 2025 15:06:18 +0800 Subject: [PATCH 1/2] fix(QTDI-1559): Output component does not populate inner record correctly in studio --- .../sdk/component/runtime/di/record/DiRowStructVisitor.java | 5 ----- .../component/runtime/di/record/DiRowStructVisitorTest.java | 4 +++- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/component-studio/component-runtime-di/src/main/java/org/talend/sdk/component/runtime/di/record/DiRowStructVisitor.java b/component-studio/component-runtime-di/src/main/java/org/talend/sdk/component/runtime/di/record/DiRowStructVisitor.java index 942bfc8f7fd09..01fd409483840 100644 --- a/component-studio/component-runtime-di/src/main/java/org/talend/sdk/component/runtime/di/record/DiRowStructVisitor.java +++ b/component-studio/component-runtime-di/src/main/java/org/talend/sdk/component/runtime/di/record/DiRowStructVisitor.java @@ -475,11 +475,6 @@ private void onArray(final Entry entry, final Collection value) { } private void onObject(final String name, final Object value) { - if (Record.class.isInstance(value)) {// keep old action here - recordBuilder.withString(name, jsonb.toJson(value)); - return; - } - recordBuilder.with(rowStructSchema.getEntry(name), value); } diff --git a/component-studio/component-runtime-di/src/test/java/org/talend/sdk/component/runtime/di/record/DiRowStructVisitorTest.java b/component-studio/component-runtime-di/src/test/java/org/talend/sdk/component/runtime/di/record/DiRowStructVisitorTest.java index 011bfd49deda4..7a5e8c40aef32 100644 --- a/component-studio/component-runtime-di/src/test/java/org/talend/sdk/component/runtime/di/record/DiRowStructVisitorTest.java +++ b/component-studio/component-runtime-di/src/test/java/org/talend/sdk/component/runtime/di/record/DiRowStructVisitorTest.java @@ -125,6 +125,7 @@ void visit() { createMetadata(dynamic, "BYTES", StudioTypes.LIST, BYTES); createMetadata(dynamic, "DATES", StudioTypes.LIST, DATES); createMetadata(dynamic, "RECORDS", StudioTypes.LIST, RECORDS); + createMetadata(dynamic, "RECORD", StudioTypes.OBJECT, RECORD); createMetadata(dynamic, "BIG_DECIMALS", StudioTypes.LIST, BIG_DECIMALS); createMetadata(dynamic, "dynDate", StudioTypes.DATE, DATE); createMetadata(dynamic, "dynStringDate", StudioTypes.STRING, @@ -141,7 +142,7 @@ void visit() { final Record record = visitor.get(rowStruct, factory); final Schema schema = record.getSchema(); // should have 3 excluded fields - assertEquals(58, schema.getEntries().size()); + assertEquals(59, schema.getEntries().size()); // schema metadata assertFalse(schema.getEntry("id").isNullable()); @@ -219,6 +220,7 @@ void visit() { assertEquals(String.valueOf(Character.MAX_VALUE), record.getString("char0")); assertEquals(dynObject, record.get(Object.class, "dynObject")); assertEquals(STRINGS, record.getArray(String.class, "STRINGS")); + assertEquals(RECORD, record.get(Record.class, "RECORD")); assertEquals(LONGS, record.getArray(Long.class, "LONGS")); assertEquals(FLOATS, record.getArray(Float.class, "FLOATS")); assertEquals(DOUBLES, record.getArray(Double.class, "DOUBLES")); From 9f7779f244895715953f1b26325ae0c66a29b710 Mon Sep 17 00:00:00 2001 From: yyin-talend Date: Fri, 6 Jun 2025 16:53:34 +0800 Subject: [PATCH 2/2] fix(QTDI-1559): Add record with sub-record to junit test. --- .../component/runtime/di/record/DiRowStructVisitorTest.java | 4 +++- .../talend/sdk/component/runtime/di/record/VisitorsTest.java | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/component-studio/component-runtime-di/src/test/java/org/talend/sdk/component/runtime/di/record/DiRowStructVisitorTest.java b/component-studio/component-runtime-di/src/test/java/org/talend/sdk/component/runtime/di/record/DiRowStructVisitorTest.java index 7a5e8c40aef32..05b787be11cde 100644 --- a/component-studio/component-runtime-di/src/test/java/org/talend/sdk/component/runtime/di/record/DiRowStructVisitorTest.java +++ b/component-studio/component-runtime-di/src/test/java/org/talend/sdk/component/runtime/di/record/DiRowStructVisitorTest.java @@ -126,6 +126,7 @@ void visit() { createMetadata(dynamic, "DATES", StudioTypes.LIST, DATES); createMetadata(dynamic, "RECORDS", StudioTypes.LIST, RECORDS); createMetadata(dynamic, "RECORD", StudioTypes.OBJECT, RECORD); + createMetadata(dynamic, "RECORD_SUB", StudioTypes.OBJECT, RECORD_WITH_SUB); createMetadata(dynamic, "BIG_DECIMALS", StudioTypes.LIST, BIG_DECIMALS); createMetadata(dynamic, "dynDate", StudioTypes.DATE, DATE); createMetadata(dynamic, "dynStringDate", StudioTypes.STRING, @@ -142,7 +143,7 @@ void visit() { final Record record = visitor.get(rowStruct, factory); final Schema schema = record.getSchema(); // should have 3 excluded fields - assertEquals(59, schema.getEntries().size()); + assertEquals(60, schema.getEntries().size()); // schema metadata assertFalse(schema.getEntry("id").isNullable()); @@ -221,6 +222,7 @@ void visit() { assertEquals(dynObject, record.get(Object.class, "dynObject")); assertEquals(STRINGS, record.getArray(String.class, "STRINGS")); assertEquals(RECORD, record.get(Record.class, "RECORD")); + assertEquals(RECORD_WITH_SUB, record.get(Record.class, "RECORD_SUB")); assertEquals(LONGS, record.getArray(Long.class, "LONGS")); assertEquals(FLOATS, record.getArray(Float.class, "FLOATS")); assertEquals(DOUBLES, record.getArray(Double.class, "DOUBLES")); diff --git a/component-studio/component-runtime-di/src/test/java/org/talend/sdk/component/runtime/di/record/VisitorsTest.java b/component-studio/component-runtime-di/src/test/java/org/talend/sdk/component/runtime/di/record/VisitorsTest.java index c6d30043b6015..1dd5aaab7b490 100644 --- a/component-studio/component-runtime-di/src/test/java/org/talend/sdk/component/runtime/di/record/VisitorsTest.java +++ b/component-studio/component-runtime-di/src/test/java/org/talend/sdk/component/runtime/di/record/VisitorsTest.java @@ -71,6 +71,9 @@ public class VisitorsTest { protected static final Record RECORD = factory.newRecordBuilder().withInt("ntgr", 1).withString("str", "one").build(); + protected static final Record RECORD_WITH_SUB = + factory.newRecordBuilder().withInt("ntgr", 1).withRecord("record1", RECORD).build(); + protected static final Object OBJECT = new Object(); protected static final Document DOCUMENT = new Document();