This is an automated email from the ASF dual-hosted git repository.

pvillard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 5c8753fe15 NIFI-13643 mapOf returns a FieldValue with a Map instead of 
a Record
5c8753fe15 is described below

commit 5c8753fe15cffeca4d79ddf84d63791caee0582d
Author: EndzeitBegins <[email protected]>
AuthorDate: Wed Aug 7 20:58:05 2024 +0200

    NIFI-13643 mapOf returns a FieldValue with a Map instead of a Record
    
    Signed-off-by: Pierre Villard <[email protected]>
    
    This closes #9163.
---
 .../apache/nifi/record/path/functions/MapOf.java   | 22 ++++++---------------
 .../apache/nifi/record/path/TestRecordPath.java    | 23 +++++++++++-----------
 2 files changed, 18 insertions(+), 27 deletions(-)

diff --git 
a/nifi-commons/nifi-record-path/src/main/java/org/apache/nifi/record/path/functions/MapOf.java
 
b/nifi-commons/nifi-record-path/src/main/java/org/apache/nifi/record/path/functions/MapOf.java
index 22f5611e42..32dd4d3e1c 100644
--- 
a/nifi-commons/nifi-record-path/src/main/java/org/apache/nifi/record/path/functions/MapOf.java
+++ 
b/nifi-commons/nifi-record-path/src/main/java/org/apache/nifi/record/path/functions/MapOf.java
@@ -17,21 +17,16 @@
 
 package org.apache.nifi.record.path.functions;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.stream.Stream;
-
 import org.apache.nifi.record.path.FieldValue;
 import org.apache.nifi.record.path.RecordPathEvaluationContext;
 import org.apache.nifi.record.path.StandardFieldValue;
 import org.apache.nifi.record.path.paths.RecordPathSegment;
-import org.apache.nifi.serialization.SimpleRecordSchema;
-import org.apache.nifi.serialization.record.MapRecord;
-import org.apache.nifi.serialization.record.Record;
 import org.apache.nifi.serialization.record.RecordField;
 import org.apache.nifi.serialization.record.RecordFieldType;
-import org.apache.nifi.serialization.record.RecordSchema;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.stream.Stream;
 
 public class MapOf extends RecordPathSegment {
     private final RecordPathSegment[] valuePaths;
@@ -43,22 +38,17 @@ public class MapOf extends RecordPathSegment {
 
     @Override
     public Stream<FieldValue> evaluate(final RecordPathEvaluationContext 
context) {
-
-        final List<RecordField> fields = new ArrayList<>();
-        final java.util.Map<String, Object> values = new HashMap<>();
+        final Map<String, Object> values = new HashMap<>();
 
         for (int i = 0; i + 1 < valuePaths.length; i += 2) {
             final String key = 
valuePaths[i].evaluate(context).findFirst().get().toString();
             final String value = valuePaths[i + 
1].evaluate(context).findFirst().get().toString();
-            fields.add(new RecordField(key, 
RecordFieldType.STRING.getDataType()));
             values.put(key, value);
         }
 
-        final RecordSchema schema = new SimpleRecordSchema(fields);
-        final Record record = new MapRecord(schema, values);
         final RecordField field = new RecordField("mapOf", 
RecordFieldType.MAP.getMapDataType(RecordFieldType.STRING.getDataType()));
+        final FieldValue responseValue = new StandardFieldValue(values, field, 
null);
 
-        final FieldValue responseValue = new StandardFieldValue(record, field, 
null);
         return Stream.of(responseValue);
     }
 
diff --git 
a/nifi-commons/nifi-record-path/src/test/java/org/apache/nifi/record/path/TestRecordPath.java
 
b/nifi-commons/nifi-record-path/src/test/java/org/apache/nifi/record/path/TestRecordPath.java
index 389c2755c6..a94338aed6 100644
--- 
a/nifi-commons/nifi-record-path/src/test/java/org/apache/nifi/record/path/TestRecordPath.java
+++ 
b/nifi-commons/nifi-record-path/src/test/java/org/apache/nifi/record/path/TestRecordPath.java
@@ -1391,23 +1391,24 @@ public class TestRecordPath {
         return new MapRecord(schema, values);
     }
 
-
     @Test
     public void testMapOf() {
         final List<RecordField> fields = new ArrayList<>();
-        fields.add(new RecordField("fullName", 
RecordFieldType.INT.getDataType()));
-        fields.add(new RecordField("lastName", 
RecordFieldType.STRING.getDataType()));
-        fields.add(new RecordField("firstName", 
RecordFieldType.LONG.getDataType()));
+        fields.add(new RecordField("id", RecordFieldType.INT.getDataType()));
+        fields.add(new RecordField("name", 
RecordFieldType.STRING.getDataType()));
+        fields.add(new RecordField("balance", 
RecordFieldType.DOUBLE.getDataType()));
+        fields.add(new RecordField("missing", 
RecordFieldType.STRING.getDataType()));
 
         final RecordSchema schema = new SimpleRecordSchema(fields);
 
         final Map<String, Object> values = new HashMap<>();
-        values.put("lastName", "Doe");
-        values.put("firstName", "John");
+        values.put("id", 83);
+        values.put("name", "John Doe");
+        values.put("balance", 123.45);
         final Record record = new MapRecord(schema, values);
-        final FieldValue fv = RecordPath.compile("mapOf('firstName', 
/firstName, 'lastName', 
/lastName)").evaluate(record).getSelectedFields().findFirst().get();
-        
assertTrue(fv.getField().getDataType().getFieldType().equals(RecordFieldType.MAP.getMapDataType(RecordFieldType.STRING.getDataType()).getFieldType()));
-        assertEquals("MapRecord[{firstName=John, lastName=Doe}]", 
fv.getValue().toString());
+        final FieldValue fv = RecordPath.compile("mapOf('id', /id, 'name', 
/name, 'money', /balance, 'nullableString', 
/missing)").evaluate(record).getSelectedFields().findFirst().get();
+        assertEquals(fv.getField().getDataType().getFieldType(), 
RecordFieldType.MAP.getMapDataType(RecordFieldType.STRING.getDataType()).getFieldType());
+        assertEquals(Map.of("id", "83", "name", "John Doe", "money", "123.45", 
"nullableString", "null"), fv.getValue());
 
         assertThrows(RecordPathException.class, () -> 
RecordPath.compile("mapOf('firstName', /firstName, 
'lastName')").evaluate(record));
     }
@@ -2294,8 +2295,8 @@ public class TestRecordPath {
         final FieldValue singleArgumentFieldValue = 
evaluateSingleFieldValue("escapeJson(/)", record);
         assertEquals("{\"id\":48,\"name\":\"John Doe\",\"missing\":null}", 
singleArgumentFieldValue.getValue());
         final FieldValue multipleArgumentsFieldValue = 
evaluateSingleFieldValue("mapOf(\"copy\",/)", record);
-        assertInstanceOf(MapRecord.class, 
multipleArgumentsFieldValue.getValue());
-        assertEquals(record.toString(), ((MapRecord) 
multipleArgumentsFieldValue.getValue()).getValue("copy"));
+        assertInstanceOf(Map.class, multipleArgumentsFieldValue.getValue());
+        assertEquals(record.toString(), ((Map<?, ?>) 
multipleArgumentsFieldValue.getValue()).get("copy"));
     }
 
     private List<RecordField> getDefaultFields() {

Reply via email to