Core: Fix namespace SQL statement using ESCAPE character that works with MySQL/PostgreSQL (#10167) (#10169)
Co-authored-by: Chauncy <xuchuanqiu@gmail.com>
diff --git a/core/src/main/java/org/apache/iceberg/jdbc/JdbcUtil.java b/core/src/main/java/org/apache/iceberg/jdbc/JdbcUtil.java
index 8f918b4..ffa606a 100644
--- a/core/src/main/java/org/apache/iceberg/jdbc/JdbcUtil.java
+++ b/core/src/main/java/org/apache/iceberg/jdbc/JdbcUtil.java
@@ -335,7 +335,7 @@
+ TABLE_NAMESPACE
+ " = ? OR "
+ TABLE_NAMESPACE
- + " LIKE ? ESCAPE '\\')"
+ + " LIKE ? ESCAPE '!')"
+ " LIMIT 1";
static final String LIST_NAMESPACES_SQL =
"SELECT DISTINCT "
@@ -426,7 +426,7 @@
+ NAMESPACE_NAME
+ " = ? OR "
+ NAMESPACE_NAME
- + " LIKE ? ESCAPE '\\' "
+ + " LIKE ? ESCAPE '!' "
+ " ) ";
static final String INSERT_NAMESPACE_PROPERTIES_SQL =
"INSERT INTO "
@@ -783,7 +783,7 @@
// when namespace has sub-namespace then additionally checking it with LIKE statement.
// catalog.db can exists as: catalog.db.ns1 or catalog.db.ns1.ns2
String namespaceStartsWith =
- namespaceEquals.replace("\\", "\\\\").replace("_", "\\_").replace("%", "\\%") + ".%";
+ namespaceEquals.replace("!", "!!").replace("_", "!_").replace("%", "!%") + ".%";
if (exists(connections, GET_NAMESPACE_SQL, catalogName, namespaceEquals, namespaceStartsWith)) {
return true;
}