From 107f4d48bd6db5ddad33c40a2ed228ddf84c27ea Mon Sep 17 00:00:00 2001 From: zhangdong Date: Mon, 3 Mar 2025 18:28:43 +0800 Subject: [PATCH] branch-2.1: [fix])(catalog)add equals for external table #47956 (#48533) Cherry-picked from https://github.com/apache/doris/pull/47956 --- .../doris/datasource/ExternalCatalog.java | 18 +++++++ .../doris/datasource/ExternalDatabase.java | 19 +++++++ .../doris/datasource/ExternalTable.java | 18 +++++++ .../doris/datasource/ExternalEqualsTest.java | 52 +++++++++++++++++++ 4 files changed, 107 insertions(+) create mode 100644 fe/fe-core/src/test/java/org/apache/doris/datasource/ExternalEqualsTest.java 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 831d48a38b..ace76e8bc1 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 44c7ae961f..3ecc75bfdb 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 // 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 2d607cc8ff..aae8d50ca6 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 0000000000..fa46141075 --- /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); + } +}