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

iemejia pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git

commit be906f38c5cac14c465332b8179022085ed76c13
Author: Daniel Kulp <[email protected]>
AuthorDate: Wed Apr 28 14:21:13 2021 -0400

    [BEAM-12248] Reduce ArrayList allocation in Row/RowUtils
---
 .../main/java/org/apache/beam/sdk/values/Row.java  | 28 ++++++++++------------
 .../java/org/apache/beam/sdk/values/RowUtils.java  | 13 ++++++++++
 2 files changed, 25 insertions(+), 16 deletions(-)

diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/values/Row.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/values/Row.java
index a19d9b3..9aa9277 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/values/Row.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/values/Row.java
@@ -847,23 +847,19 @@ public abstract class Row implements Serializable {
                 + " fields.");
       }
 
-      FieldOverrides fieldOverrides = new FieldOverrides(schema);
-      fieldOverrides.setOverrides(this.values);
-
-      Row row;
-      if (!fieldOverrides.isEmpty()) {
-        row =
-            (Row)
-                new RowFieldMatcher()
-                    .match(
-                        new CapturingRowCases(schema, fieldOverrides),
-                        FieldType.row(schema),
-                        new RowPosition(FieldAccessDescriptor.create()),
-                        null);
-      } else {
-        row = new RowWithStorage(schema, Collections.emptyList());
+      if (!values.isEmpty()) {
+        FieldOverrides fieldOverrides = new FieldOverrides(schema, 
this.values);
+        if (!fieldOverrides.isEmpty()) {
+          return (Row)
+              new RowFieldMatcher()
+                  .match(
+                      new CapturingRowCases(schema, fieldOverrides),
+                      FieldType.row(schema),
+                      new RowPosition(FieldAccessDescriptor.create()),
+                      null);
+        }
       }
-      return row;
+      return new RowWithStorage(schema, Collections.emptyList());
     }
   }
 
diff --git 
a/sdks/java/core/src/main/java/org/apache/beam/sdk/values/RowUtils.java 
b/sdks/java/core/src/main/java/org/apache/beam/sdk/values/RowUtils.java
index d3b1c21..a5f6210 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/values/RowUtils.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/values/RowUtils.java
@@ -236,6 +236,11 @@ class RowUtils {
       this.rootSchema = rootSchema;
     }
 
+    FieldOverrides(Schema rootSchema, List<Object> overrides) {
+      this.topNode = new FieldAccessNode(rootSchema, overrides);
+      this.rootSchema = rootSchema;
+    }
+
     boolean isEmpty() {
       return topNode.isEmpty();
     }
@@ -270,6 +275,14 @@ class RowUtils {
         nestedAccess = Lists.newArrayList();
       }
 
+      FieldAccessNode(Schema schema, List<Object> overrides) {
+        fieldOverrides = 
Lists.newArrayListWithExpectedSize(schema.getFieldCount());
+        for (Object value : overrides) {
+          fieldOverrides.add(new FieldOverride(value));
+        }
+        nestedAccess = Lists.newArrayList();
+      }
+
       boolean isEmpty() {
         return fieldOverrides.isEmpty() && nestedAccess.isEmpty();
       }

Reply via email to