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)

Reply via email to