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