nastra commented on code in PR #8147:
URL: https://github.com/apache/iceberg/pull/8147#discussion_r1280396570


##########
core/src/main/java/org/apache/iceberg/view/ViewMetadata.java:
##########
@@ -121,9 +128,178 @@ default ViewMetadata checkAndNormalize() {
           versions().subList(versions().size() - versionHistorySizeToKeep, 
versions().size());
       List<ViewHistoryEntry> history =
           history().subList(history().size() - versionHistorySizeToKeep, 
history().size());
-      return 
ImmutableViewMetadata.builder().from(this).versions(versions).history(history).build();
+      return ViewMetadata.buildFrom(this)
+          .discardChanges()
+          .versions(versions)
+          .history(history)
+          .build();
     }
 
     return this;
   }
+
+  static Builder builder() {
+    return new Builder();
+  }
+
+  static Builder buildFrom(ViewMetadata base) {
+    return new Builder(base);
+  }
+
+  class Builder {
+    private int formatVersion = 1;
+    private String location;
+    private Integer currentSchemaId;
+    private List<Schema> schemas = Lists.newArrayList();
+    private int currentVersionId = 1;
+    private List<ViewVersion> versions = Lists.newArrayList();
+    private List<ViewHistoryEntry> history = Lists.newArrayList();
+    private Map<String, String> properties = Maps.newHashMap();
+    private List<MetadataUpdate> changes = Lists.newArrayList();
+
+    private Builder() {}
+
+    private Builder(ViewMetadata base) {
+      this.formatVersion = base.formatVersion();
+      this.location = base.location();
+      this.currentSchemaId = base.currentSchemaId();
+      this.schemas = Lists.newArrayList(base.schemas());
+      this.currentVersionId = base.currentVersionId();
+      this.versions = Lists.newArrayList(base.versions());
+      this.history = Lists.newArrayList(base.history());
+      this.properties = Maps.newHashMap(base.properties());
+      this.changes = Lists.newArrayList(base.changes());
+    }
+
+    public Builder formatVersion(int newFormatVersion) {
+      this.formatVersion = newFormatVersion;
+      this.changes.add(new 
MetadataUpdate.UpgradeFormatVersion(newFormatVersion));
+      return this;
+    }
+
+    public Builder location(String newLocation) {
+      this.location = newLocation;
+      this.changes.add(new MetadataUpdate.SetLocation(newLocation));
+      return this;
+    }
+
+    public Builder currentVersionId(int versionId) {
+      this.currentVersionId = versionId;
+      this.changes.add(new MetadataUpdate.SetCurrentViewVersion(versionId));
+      return this;
+    }
+
+    public Builder currentSchemaId(Integer schemaId) {

Review Comment:
   In that case maybe we shouldn't even send the `current-schema-id` in 
https://github.com/apache/iceberg/blob/master/core/src/main/java/org/apache/iceberg/view/ViewMetadataParser.java#L68?
   That would mean that `ViewMetadata#currentSchemaId()` would not be settable 
and would become:
   ```
   default Integer currentSchemaId() {
       return currentVersion().schemaId();
     }
   ```



##########
core/src/main/java/org/apache/iceberg/view/ViewMetadata.java:
##########
@@ -121,9 +128,178 @@ default ViewMetadata checkAndNormalize() {
           versions().subList(versions().size() - versionHistorySizeToKeep, 
versions().size());
       List<ViewHistoryEntry> history =
           history().subList(history().size() - versionHistorySizeToKeep, 
history().size());
-      return 
ImmutableViewMetadata.builder().from(this).versions(versions).history(history).build();
+      return ViewMetadata.buildFrom(this)
+          .discardChanges()
+          .versions(versions)
+          .history(history)
+          .build();
     }
 
     return this;
   }
+
+  static Builder builder() {
+    return new Builder();
+  }
+
+  static Builder buildFrom(ViewMetadata base) {
+    return new Builder(base);
+  }
+
+  class Builder {
+    private int formatVersion = 1;
+    private String location;
+    private Integer currentSchemaId;
+    private List<Schema> schemas = Lists.newArrayList();
+    private int currentVersionId = 1;
+    private List<ViewVersion> versions = Lists.newArrayList();
+    private List<ViewHistoryEntry> history = Lists.newArrayList();
+    private Map<String, String> properties = Maps.newHashMap();
+    private List<MetadataUpdate> changes = Lists.newArrayList();
+
+    private Builder() {}
+
+    private Builder(ViewMetadata base) {
+      this.formatVersion = base.formatVersion();
+      this.location = base.location();
+      this.currentSchemaId = base.currentSchemaId();
+      this.schemas = Lists.newArrayList(base.schemas());
+      this.currentVersionId = base.currentVersionId();
+      this.versions = Lists.newArrayList(base.versions());
+      this.history = Lists.newArrayList(base.history());
+      this.properties = Maps.newHashMap(base.properties());
+      this.changes = Lists.newArrayList(base.changes());
+    }
+
+    public Builder formatVersion(int newFormatVersion) {
+      this.formatVersion = newFormatVersion;
+      this.changes.add(new 
MetadataUpdate.UpgradeFormatVersion(newFormatVersion));
+      return this;
+    }
+
+    public Builder location(String newLocation) {
+      this.location = newLocation;
+      this.changes.add(new MetadataUpdate.SetLocation(newLocation));
+      return this;
+    }
+
+    public Builder currentVersionId(int versionId) {
+      this.currentVersionId = versionId;
+      this.changes.add(new MetadataUpdate.SetCurrentViewVersion(versionId));
+      return this;
+    }
+
+    public Builder currentSchemaId(Integer schemaId) {
+      this.currentSchemaId = schemaId;
+      this.changes.add(new MetadataUpdate.SetCurrentSchema(schemaId));
+      return this;
+    }
+
+    public Builder addSchema(Schema schema) {
+      this.schemas.add(schema);
+      this.changes.add(new MetadataUpdate.AddSchema(schema, 
schema.highestFieldId()));
+      return this;
+    }
+
+    public Builder addAllSchemas(Iterable<Schema> schemaEntries) {
+      for (Schema schema : schemaEntries) {
+        this.schemas.add(schema);
+        this.changes.add(new MetadataUpdate.AddSchema(schema, 
schema.highestFieldId()));
+      }
+      return this;
+    }
+
+    public Builder schemas(Iterable<Schema> newSchemas) {
+      this.schemas = Lists.newArrayList(newSchemas);
+      for (Schema schema : newSchemas) {
+        this.changes.add(new MetadataUpdate.AddSchema(schema, 
schema.highestFieldId()));
+      }
+      return this;
+    }
+
+    public Builder addVersion(ViewVersion version) {
+      this.versions.add(version);
+      this.changes.add(new MetadataUpdate.AddViewVersion(version));
+      return this;
+    }
+
+    public Builder addAllVersions(Iterable<ViewVersion> versionEntries) {

Review Comment:
   removed



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to