This is an automated email from the ASF dual-hosted git repository.
fokko pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg.git
The following commit(s) were added to refs/heads/main by this push:
new d9dbb75ed0 Core: Exclude unexpected namespaces
JdbcCatalog.listNamespaces (#10498)
d9dbb75ed0 is described below
commit d9dbb75ed057c4f6673626763f257c0a9049e249
Author: Yuya Ebihara <[email protected]>
AuthorDate: Fri Jul 12 19:15:24 2024 +0900
Core: Exclude unexpected namespaces JdbcCatalog.listNamespaces (#10498)
* Core: Exclude unexpected namespaces JdbcCatalog.listNamespaces
* Swap order
* Swap it back
---------
Co-authored-by: Fokko Driesprong <[email protected]>
---
.../main/java/org/apache/iceberg/jdbc/JdbcCatalog.java | 10 ++++++++++
.../java/org/apache/iceberg/jdbc/TestJdbcCatalog.java | 17 ++++++++++++++---
2 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/core/src/main/java/org/apache/iceberg/jdbc/JdbcCatalog.java
b/core/src/main/java/org/apache/iceberg/jdbc/JdbcCatalog.java
index 4e10ee96d1..5e985faafb 100644
--- a/core/src/main/java/org/apache/iceberg/jdbc/JdbcCatalog.java
+++ b/core/src/main/java/org/apache/iceberg/jdbc/JdbcCatalog.java
@@ -468,6 +468,16 @@ public class JdbcCatalog extends BaseMetastoreViewCatalog
.toArray(String[]::new)))
// remove duplicates
.distinct()
+ // exclude fuzzy matches when `namespace` contains `%` or `_`
+ .filter(
+ n -> {
+ for (int i = 0; i < namespace.levels().length; i++) {
+ if (!n.levels()[i].equals(namespace.levels()[i])) {
+ return false;
+ }
+ }
+ return true;
+ })
.collect(Collectors.toList());
return namespaces;
diff --git a/core/src/test/java/org/apache/iceberg/jdbc/TestJdbcCatalog.java
b/core/src/test/java/org/apache/iceberg/jdbc/TestJdbcCatalog.java
index 148a483b34..d21605cace 100644
--- a/core/src/test/java/org/apache/iceberg/jdbc/TestJdbcCatalog.java
+++ b/core/src/test/java/org/apache/iceberg/jdbc/TestJdbcCatalog.java
@@ -750,8 +750,11 @@ public class TestJdbcCatalog extends
CatalogTests<JdbcCatalog> {
TableIdentifier tbl4 = TableIdentifier.of("db", "metadata");
TableIdentifier tbl5 = TableIdentifier.of("db2", "metadata");
TableIdentifier tbl6 = TableIdentifier.of("tbl6");
+ TableIdentifier tbl7 = TableIdentifier.of("db2", "ns4", "tbl5");
+ TableIdentifier tbl8 = TableIdentifier.of("d_", "ns5", "tbl6");
+ TableIdentifier tbl9 = TableIdentifier.of("d%", "ns6", "tbl7");
- Lists.newArrayList(tbl1, tbl2, tbl3, tbl4, tbl5, tbl6)
+ Lists.newArrayList(tbl1, tbl2, tbl3, tbl4, tbl5, tbl6, tbl7, tbl8, tbl9)
.forEach(t -> catalog.createTable(t, SCHEMA,
PartitionSpec.unpartitioned()));
List<Namespace> nsp1 = catalog.listNamespaces(Namespace.of("db"));
@@ -765,11 +768,19 @@ public class TestJdbcCatalog extends
CatalogTests<JdbcCatalog> {
List<Namespace> nsp3 = catalog.listNamespaces();
Set<String> tblSet2 =
Sets.newHashSet(nsp3.stream().map(Namespace::toString).iterator());
- assertThat(tblSet2).hasSize(3).contains("db", "db2", "");
+ assertThat(tblSet2).hasSize(5).contains("db", "db2", "d_", "d%", "");
List<Namespace> nsp4 = catalog.listNamespaces();
Set<String> tblSet3 =
Sets.newHashSet(nsp4.stream().map(Namespace::toString).iterator());
- assertThat(tblSet3).hasSize(3).contains("db", "db2", "");
+ assertThat(tblSet3).hasSize(5).contains("db", "db2", "d_", "d%", "");
+
+ List<Namespace> nsp5 = catalog.listNamespaces(Namespace.of("d_"));
+ assertThat(nsp5).hasSize(1);
+ assertThat(nsp5.get(0)).hasToString("d_.ns5");
+
+ List<Namespace> nsp6 = catalog.listNamespaces(Namespace.of("d%"));
+ assertThat(nsp6).hasSize(1);
+ assertThat(nsp6.get(0)).hasToString("d%.ns6");
assertThatThrownBy(() -> catalog.listNamespaces(Namespace.of("db", "db2",
"ns2")))
.isInstanceOf(NoSuchNamespaceException.class)