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

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new 107f4d48bd6 branch-2.1: [fix])(catalog)add equals for external table 
#47956 (#48533)
107f4d48bd6 is described below

commit 107f4d48bd6db5ddad33c40a2ed228ddf84c27ea
Author: zhangdong <[email protected]>
AuthorDate: Mon Mar 3 18:28:43 2025 +0800

    branch-2.1: [fix])(catalog)add equals for external table #47956 (#48533)
    
    Cherry-picked from https://github.com/apache/doris/pull/47956
---
 .../apache/doris/datasource/ExternalCatalog.java   | 18 ++++++++
 .../apache/doris/datasource/ExternalDatabase.java  | 19 ++++++++
 .../org/apache/doris/datasource/ExternalTable.java | 18 ++++++++
 .../doris/datasource/ExternalEqualsTest.java       | 52 ++++++++++++++++++++++
 4 files changed, 107 insertions(+)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalCatalog.java 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalCatalog.java
index 831d48a38be..ace76e8bc1a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalCatalog.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalCatalog.java
@@ -63,6 +63,7 @@ import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.qe.MasterCatalogExecutor;
 import org.apache.doris.transaction.TransactionManager;
 
+import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
@@ -1100,4 +1101,21 @@ public abstract class ExternalCatalog
     public PreExecutionAuthenticator getPreExecutionAuthenticator() {
         return preExecutionAuthenticator;
     }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (!(o instanceof ExternalCatalog)) {
+            return false;
+        }
+        ExternalCatalog that = (ExternalCatalog) o;
+        return Objects.equal(name, that.name);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(name);
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalDatabase.java 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalDatabase.java
index 44c7ae961f3..3ecc75bfdbd 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalDatabase.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalDatabase.java
@@ -43,6 +43,7 @@ import org.apache.doris.persist.gson.GsonUtils;
 import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.qe.MasterCatalogExecutor;
 
+import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
@@ -759,4 +760,22 @@ public abstract class ExternalDatabase<T extends 
ExternalTable>
         // it needs to be judged together with 
Env.isTableNamesCaseInsensitive()
         return Env.isTableNamesCaseInsensitive() || 
extCatalog.getOnlyTestLowerCaseTableNames() == 2;
     }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (!(o instanceof ExternalDatabase)) {
+            return false;
+        }
+        ExternalDatabase<?> that = (ExternalDatabase<?>) o;
+        return Objects.equal(name, that.name) && Objects.equal(extCatalog,
+                that.extCatalog);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(name, extCatalog);
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalTable.java 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalTable.java
index 2d607cc8ff8..aae8d50ca6d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalTable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalTable.java
@@ -41,6 +41,7 @@ import org.apache.doris.statistics.TableStatsMeta;
 import org.apache.doris.statistics.util.StatisticsUtil;
 import org.apache.doris.thrift.TTableDescriptor;
 
+import com.google.common.base.Objects;
 import com.google.common.collect.Lists;
 import com.google.gson.annotations.SerializedName;
 import lombok.Getter;
@@ -450,4 +451,21 @@ public class ExternalTable implements TableIf, Writable, 
GsonPostProcessable {
     public boolean supportInternalPartitionPruned() {
         return false;
     }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (!(o instanceof ExternalTable)) {
+            return false;
+        }
+        ExternalTable that = (ExternalTable) o;
+        return Objects.equal(name, that.name) && Objects.equal(db, that.db);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(name, db);
+    }
 }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/datasource/ExternalEqualsTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/datasource/ExternalEqualsTest.java
new file mode 100644
index 00000000000..fa46141075a
--- /dev/null
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/datasource/ExternalEqualsTest.java
@@ -0,0 +1,52 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.doris.datasource;
+
+import org.apache.doris.datasource.test.TestExternalCatalog;
+import org.apache.doris.datasource.test.TestExternalDatabase;
+import org.apache.doris.datasource.test.TestExternalTable;
+
+import mockit.Mocked;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class ExternalEqualsTest {
+    @Mocked
+    private TestExternalCatalog ctl1;
+    @Mocked
+    private TestExternalCatalog ctl2;
+
+    @Test
+    public void testEquals() {
+        TestExternalDatabase db1 = new TestExternalDatabase(ctl1, 1L, "db1", 
null);
+        TestExternalDatabase db2 = new TestExternalDatabase(ctl2, 1L, "db2", 
null);
+        TestExternalDatabase db3 = new TestExternalDatabase(ctl1, 1L, "db2", 
null);
+        TestExternalDatabase db11 = new TestExternalDatabase(ctl1, 1L, "db1", 
null);
+        Assert.assertNotEquals(db1, db2);
+        Assert.assertNotEquals(db1, db3);
+        Assert.assertEquals(db1, db11);
+
+        TestExternalTable t1 = new TestExternalTable(1L, "t1", null, ctl1, 
db1);
+        TestExternalTable t2 = new TestExternalTable(2L, "t2", null, ctl2, 
db2);
+        TestExternalTable t3 = new TestExternalTable(3L, "t3", null, ctl1, 
db1);
+        TestExternalTable t11 = new TestExternalTable(4L, "t1", null, ctl1, 
db1);
+        Assert.assertNotEquals(t1, t2);
+        Assert.assertNotEquals(t1, t3);
+        Assert.assertEquals(t1, t11);
+    }
+}


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

Reply via email to