Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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("");
}

Expand Down
2 changes: 2 additions & 0 deletions ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLike.java
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,8 @@ public static String likePatternToRegExp(String likePattern, boolean literalize,
sb.append(".");
} else if (n == '%') {
sb.append(greedyMatch ? ".*" : ".*?");
} else if (n == '*' && !literalize) {
sb.append(greedyMatch ? ".*" : ".*?");
} else {
sb.append(literalize ? Pattern.quote(Character.toString(n)) : n);
}
Expand Down
21 changes: 21 additions & 0 deletions ql/src/test/queries/clientpositive/show_columns_inconsistency.q
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
CREATE DATABASE IF NOT EXISTS col_test_db;
USE col_test_db;

CREATE TABLE wildcard_table (
id_primary INT,
id_secondary INT,
name_first STRING,
name_last STRING
);


SHOW TABLES LIKE 'wild%';
SHOW TABLES LIKE 'wild*';
SHOW TABLES LIKE 'none|wildcard_table';

SHOW COLUMNS FROM wildcard_table LIKE 'id%';
SHOW COLUMNS FROM wildcard_table LIKE 'name_%';
SHOW COLUMNS FROM wildcard_table LIKE 'id*';
SHOW COLUMNS FROM wildcard_table LIKE 'id_primary|name_first';

DROP DATABASE col_test_db CASCADE;
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
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,
name_first STRING,
name_last 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,
name_first STRING,
name_last STRING
)
POSTHOOK: type: CREATETABLE
POSTHOOK: Output: col_test_db@wildcard_table
POSTHOOK: Output: database:col_test_db
PREHOOK: query: SHOW TABLES LIKE 'wild%'
PREHOOK: type: SHOWTABLES
PREHOOK: Input: database:col_test_db
POSTHOOK: query: SHOW TABLES LIKE 'wild%'
POSTHOOK: type: SHOWTABLES
POSTHOOK: Input: database:col_test_db
wildcard_table
PREHOOK: query: SHOW TABLES LIKE 'wild*'
PREHOOK: type: SHOWTABLES
PREHOOK: Input: database:col_test_db
POSTHOOK: query: SHOW TABLES LIKE 'wild*'
POSTHOOK: type: SHOWTABLES
POSTHOOK: Input: database:col_test_db
wildcard_table
PREHOOK: query: SHOW TABLES LIKE 'none|wildcard_table'
PREHOOK: type: SHOWTABLES
PREHOOK: Input: database:col_test_db
POSTHOOK: query: SHOW TABLES LIKE 'none|wildcard_table'
POSTHOOK: type: SHOWTABLES
POSTHOOK: Input: database: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
id_primary
id_secondary
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 '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
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
name_first
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
Loading