You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@seatunnel.apache.org by li...@apache.org on 2023/03/26 10:36:13 UTC

[incubator-seatunnel] branch dev updated: [Feature][API] Add copy method to Catalog codes (#4414)

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

liugddx pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-seatunnel.git


The following commit(s) were added to refs/heads/dev by this push:
     new b8c6bbd1e [Feature][API] Add copy method to Catalog codes (#4414)
b8c6bbd1e is described below

commit b8c6bbd1e6dea6462d419d6c7adf20f04d7a2430
Author: Eric <ga...@gmail.com>
AuthorDate: Sun Mar 26 18:36:07 2023 +0800

    [Feature][API] Add copy method to Catalog codes (#4414)
---
 .../apache/seatunnel/api/table/catalog/ConstraintKey.java   | 11 +++++++++++
 .../org/apache/seatunnel/api/table/catalog/PrimaryKey.java  |  5 +++++
 .../apache/seatunnel/api/table/catalog/TableIdentifier.java |  4 ++++
 .../org/apache/seatunnel/api/table/catalog/TableSchema.java | 13 +++++++++++++
 4 files changed, 33 insertions(+)

diff --git a/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/catalog/ConstraintKey.java b/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/catalog/ConstraintKey.java
index d08fb886c..a5e9a1266 100644
--- a/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/catalog/ConstraintKey.java
+++ b/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/catalog/ConstraintKey.java
@@ -22,6 +22,7 @@ import lombok.Data;
 
 import java.io.Serializable;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
@@ -62,6 +63,10 @@ public class ConstraintKey implements Serializable {
         public static ConstraintKeyColumn of(String columnName, ColumnSortType sortType) {
             return new ConstraintKeyColumn(columnName, sortType);
         }
+
+        public ConstraintKeyColumn copy() {
+            return ConstraintKeyColumn.of(columnName, sortType);
+        }
     }
 
     public enum ConstraintType {
@@ -74,4 +79,10 @@ public class ConstraintKey implements Serializable {
         ASC,
         DESC
     }
+
+    public ConstraintKey copy() {
+        List<ConstraintKeyColumn> collect =
+                columnNames.stream().map(ConstraintKeyColumn::copy).collect(Collectors.toList());
+        return ConstraintKey.of(constraintType, constraintName, collect);
+    }
 }
diff --git a/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/catalog/PrimaryKey.java b/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/catalog/PrimaryKey.java
index d5e32c828..e8a3a7402 100644
--- a/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/catalog/PrimaryKey.java
+++ b/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/catalog/PrimaryKey.java
@@ -21,6 +21,7 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.List;
 
 @Data
@@ -36,4 +37,8 @@ public class PrimaryKey implements Serializable {
     public static PrimaryKey of(String primaryKey, List<String> columnNames) {
         return new PrimaryKey(primaryKey, columnNames);
     }
+
+    public PrimaryKey copy() {
+        return PrimaryKey.of(primaryKey, new ArrayList<>(columnNames));
+    }
 }
diff --git a/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/catalog/TableIdentifier.java b/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/catalog/TableIdentifier.java
index 66ae7df2d..102570b82 100644
--- a/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/catalog/TableIdentifier.java
+++ b/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/catalog/TableIdentifier.java
@@ -74,6 +74,10 @@ public final class TableIdentifier implements Serializable {
         return Objects.hash(catalogName, databaseName, tableName);
     }
 
+    public TableIdentifier copy() {
+        return TableIdentifier.of(catalogName, databaseName, tableName);
+    }
+
     @Override
     public String toString() {
         return String.join(".", catalogName, databaseName, tableName);
diff --git a/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/catalog/TableSchema.java b/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/catalog/TableSchema.java
index bd494bfd8..f2b33baa6 100644
--- a/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/catalog/TableSchema.java
+++ b/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/catalog/TableSchema.java
@@ -26,6 +26,7 @@ import lombok.Data;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /** Represent a physical table schema. */
 @Data
@@ -91,5 +92,17 @@ public final class TableSchema implements Serializable {
         public TableSchema build() {
             return new TableSchema(columns, primaryKey, constraintKeys);
         }
+
+        public TableSchema copy() {
+            List<Column> copyColumns =
+                    columns.stream().map(Column::copy).collect(Collectors.toList());
+            List<ConstraintKey> copyConstraintKeys =
+                    constraintKeys.stream().map(ConstraintKey::copy).collect(Collectors.toList());
+            return TableSchema.builder()
+                    .constraintKey(copyConstraintKeys)
+                    .columns(copyColumns)
+                    .primaryKey(primaryKey.copy())
+                    .build();
+        }
     }
 }