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

soumyakanti3578 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new ea55c313761 HIVE-29610: Add support for SQL wildcards (% and _) in 
SHOW COLUMNS aligning with other SHOW commands (#6481)
ea55c313761 is described below

commit ea55c3137610b29a7f64bbfe6a46e716339531bc
Author: Raghav Aggarwal <[email protected]>
AuthorDate: Wed Jun 3 23:49:42 2026 +0530

    HIVE-29610: Add support for SQL wildcards (% and _) in SHOW COLUMNS 
aligning with other SHOW commands (#6481)
---
 .../table/column/show/ShowColumnsOperation.java    |   6 +-
 .../org/apache/hadoop/hive/ql/udf/UDFLike.java     |   3 +-
 .../queries/clientpositive/show_columns_like.q     |  29 +++++
 ql/src/test/queries/clientpositive/show_tables.q   |   4 +
 .../clientpositive/llap/show_columns_like.q.out    | 129 +++++++++++++++++++++
 .../results/clientpositive/llap/show_tables.q.out  |  16 +++
 6 files changed, 183 insertions(+), 4 deletions(-)

diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/column/show/ShowColumnsOperation.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/column/show/ShowColumnsOperation.java
index 289479b7ee7..cd40dc91966 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/column/show/ShowColumnsOperation.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/column/show/ShowColumnsOperation.java
@@ -36,6 +36,7 @@
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.ql.metadata.Table;
 import org.apache.hadoop.hive.ql.session.SessionState;
+import org.apache.hadoop.hive.ql.udf.UDFLike;
 
 /**
  * Operation process of showing the columns.
@@ -77,10 +78,9 @@ private Matcher getMatcher() {
     if (columnPattern == null) {
       columnPattern = "*";
     }
-    columnPattern = columnPattern.toLowerCase();
-    columnPattern = columnPattern.replaceAll("\\*", ".*");
 
-    Pattern pattern = Pattern.compile(columnPattern);
+    String regex = UDFLike.likePatternToRegExp(columnPattern, false, true);
+    Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
     return pattern.matcher("");
   }
 
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLike.java 
b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLike.java
index b455e91b452..12becaa8e7c 100755
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLike.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLike.java
@@ -83,7 +83,8 @@ public static String likePatternToRegExp(String likePattern, 
boolean literalize,
 
       if (n == '_') {
         sb.append(".");
-      } else if (n == '%') {
+      } else if (n == '%' || (n == '*' && !literalize)) {
+        // Both % and * (when not literalized) are treated as standard regex 
.* 
         sb.append(greedyMatch ? ".*" : ".*?");
       } else {
         sb.append(literalize ? Pattern.quote(Character.toString(n)) : n);
diff --git a/ql/src/test/queries/clientpositive/show_columns_like.q 
b/ql/src/test/queries/clientpositive/show_columns_like.q
new file mode 100644
index 00000000000..3cee9698f3a
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/show_columns_like.q
@@ -0,0 +1,29 @@
+CREATE DATABASE IF NOT EXISTS col_test_db;
+USE col_test_db;
+
+CREATE TABLE wildcard_table (
+  id_primary INT,
+  id_secondary INT,
+  idxprimary INT,
+  name_first STRING,
+  name_last STRING,
+  MixedCaseColumn INT,
+  another_Mixed_Col STRING
+);
+
+SHOW COLUMNS FROM wildcard_table LIKE 'id%';
+SHOW COLUMNS FROM wildcard_table LIKE 'name_%';
+-- Case Insensitivity test
+SHOW COLUMNS FROM wildcard_table LIKE 'mixedcase%';
+SHOW COLUMNS FROM wildcard_table LIKE 'another_mixed_col';
+SHOW COLUMNS FROM wildcard_table LIKE 'id*';
+SHOW COLUMNS FROM wildcard_table LIKE 'id_primary|name_first';
+
+-- Additional tests for '_' and empty results
+SHOW COLUMNS FROM wildcard_table LIKE 'id_secondar_';
+SHOW COLUMNS FROM wildcard_table LIKE 'id__rimary';
+SHOW COLUMNS FROM wildcard_table LIKE 'abc%';
+SHOW COLUMNS FROM wildcard_table LIKE 'id__';
+SHOW COLUMNS FROM wildcard_table LIKE 'id\_primary';
+
+DROP DATABASE col_test_db CASCADE;
diff --git a/ql/src/test/queries/clientpositive/show_tables.q 
b/ql/src/test/queries/clientpositive/show_tables.q
index 97e48921a69..bc48f60c0c2 100644
--- a/ql/src/test/queries/clientpositive/show_tables.q
+++ b/ql/src/test/queries/clientpositive/show_tables.q
@@ -53,3 +53,7 @@ USE `database`;
 CREATE TABLE foo_n4(a INT);
 USE default;
 SHOW TABLES FROM `database` LIKE "foo_n4";
+
+-- SHOW TABLES with legacy glob and regex
+SHOW TABLES LIKE 'shtb_*';
+SHOW TABLES LIKE 'shtb_test1_n0|shtb_test2_n0';
diff --git a/ql/src/test/results/clientpositive/llap/show_columns_like.q.out 
b/ql/src/test/results/clientpositive/llap/show_columns_like.q.out
new file mode 100644
index 00000000000..43fab7544b2
--- /dev/null
+++ b/ql/src/test/results/clientpositive/llap/show_columns_like.q.out
@@ -0,0 +1,129 @@
+PREHOOK: query: CREATE DATABASE IF NOT EXISTS col_test_db
+PREHOOK: type: CREATEDATABASE
+PREHOOK: Output: database:col_test_db
+POSTHOOK: query: CREATE DATABASE IF NOT EXISTS col_test_db
+POSTHOOK: type: CREATEDATABASE
+POSTHOOK: Output: database:col_test_db
+PREHOOK: query: USE col_test_db
+PREHOOK: type: SWITCHDATABASE
+PREHOOK: Input: database:col_test_db
+POSTHOOK: query: USE col_test_db
+POSTHOOK: type: SWITCHDATABASE
+POSTHOOK: Input: database:col_test_db
+PREHOOK: query: CREATE TABLE wildcard_table (
+  id_primary INT,
+  id_secondary INT,
+  idxprimary INT,
+  name_first STRING,
+  name_last STRING,
+  MixedCaseColumn INT,
+  another_Mixed_Col STRING
+)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: col_test_db@wildcard_table
+PREHOOK: Output: database:col_test_db
+POSTHOOK: query: CREATE TABLE wildcard_table (
+  id_primary INT,
+  id_secondary INT,
+  idxprimary INT,
+  name_first STRING,
+  name_last STRING,
+  MixedCaseColumn INT,
+  another_Mixed_Col STRING
+)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: col_test_db@wildcard_table
+POSTHOOK: Output: database:col_test_db
+PREHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'id%'
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: col_test_db@wildcard_table
+POSTHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'id%'
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: col_test_db@wildcard_table
+id_primary          
+id_secondary        
+idxprimary          
+PREHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'name_%'
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: col_test_db@wildcard_table
+POSTHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'name_%'
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: col_test_db@wildcard_table
+name_first          
+name_last           
+PREHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'mixedcase%'
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: col_test_db@wildcard_table
+POSTHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'mixedcase%'
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: col_test_db@wildcard_table
+mixedcasecolumn     
+PREHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'another_mixed_col'
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: col_test_db@wildcard_table
+POSTHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'another_mixed_col'
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: col_test_db@wildcard_table
+another_mixed_col   
+PREHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'id*'
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: col_test_db@wildcard_table
+POSTHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'id*'
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: col_test_db@wildcard_table
+id_primary          
+id_secondary        
+idxprimary          
+PREHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'id_primary|name_first'
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: col_test_db@wildcard_table
+POSTHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'id_primary|name_first'
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: col_test_db@wildcard_table
+id_primary          
+idxprimary          
+name_first          
+PREHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'id_secondar_'
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: col_test_db@wildcard_table
+POSTHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'id_secondar_'
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: col_test_db@wildcard_table
+id_secondary        
+PREHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'id__rimary'
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: col_test_db@wildcard_table
+POSTHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'id__rimary'
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: col_test_db@wildcard_table
+id_primary          
+idxprimary          
+PREHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'abc%'
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: col_test_db@wildcard_table
+POSTHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'abc%'
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: col_test_db@wildcard_table
+PREHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'id__'
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: col_test_db@wildcard_table
+POSTHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'id__'
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: col_test_db@wildcard_table
+PREHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'id\_primary'
+PREHOOK: type: SHOWCOLUMNS
+PREHOOK: Input: col_test_db@wildcard_table
+POSTHOOK: query: SHOW COLUMNS FROM wildcard_table LIKE 'id\_primary'
+POSTHOOK: type: SHOWCOLUMNS
+POSTHOOK: Input: col_test_db@wildcard_table
+id_primary          
+PREHOOK: query: DROP DATABASE col_test_db CASCADE
+PREHOOK: type: DROPDATABASE
+PREHOOK: Input: database:col_test_db
+PREHOOK: Output: col_test_db@wildcard_table
+PREHOOK: Output: database:col_test_db
+POSTHOOK: query: DROP DATABASE col_test_db CASCADE
+POSTHOOK: type: DROPDATABASE
+POSTHOOK: Input: database:col_test_db
+POSTHOOK: Output: col_test_db@wildcard_table
+POSTHOOK: Output: database:col_test_db
diff --git a/ql/src/test/results/clientpositive/llap/show_tables.q.out 
b/ql/src/test/results/clientpositive/llap/show_tables.q.out
index dbdc52195bc..bb15d36391e 100644
--- a/ql/src/test/results/clientpositive/llap/show_tables.q.out
+++ b/ql/src/test/results/clientpositive/llap/show_tables.q.out
@@ -588,3 +588,19 @@ POSTHOOK: query: SHOW TABLES FROM `database` LIKE "foo_n4"
 POSTHOOK: type: SHOWTABLES
 POSTHOOK: Input: database:database
 foo_n4
+PREHOOK: query: SHOW TABLES LIKE 'shtb_*'
+PREHOOK: type: SHOWTABLES
+PREHOOK: Input: database:default
+POSTHOOK: query: SHOW TABLES LIKE 'shtb_*'
+POSTHOOK: type: SHOWTABLES
+POSTHOOK: Input: database:default
+shtb_test1_n0
+shtb_test2_n0
+PREHOOK: query: SHOW TABLES LIKE 'shtb_test1_n0|shtb_test2_n0'
+PREHOOK: type: SHOWTABLES
+PREHOOK: Input: database:default
+POSTHOOK: query: SHOW TABLES LIKE 'shtb_test1_n0|shtb_test2_n0'
+POSTHOOK: type: SHOWTABLES
+POSTHOOK: Input: database:default
+shtb_test1_n0
+shtb_test2_n0

Reply via email to