diff --git ql/src/java/org/apache/hadoop/hive/ql/ddl/database/show/ShowDatabasesOperation.java ql/src/java/org/apache/hadoop/hive/ql/ddl/database/show/ShowDatabasesOperation.java index d7cc0334dd..625a48ee71 100644 --- ql/src/java/org/apache/hadoop/hive/ql/ddl/database/show/ShowDatabasesOperation.java +++ ql/src/java/org/apache/hadoop/hive/ql/ddl/database/show/ShowDatabasesOperation.java @@ -20,6 +20,8 @@ import java.io.DataOutputStream; import java.util.List; +import java.util.regex.Pattern; +import java.util.stream.Collectors; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hive.ql.ErrorMsg; @@ -27,6 +29,7 @@ import org.apache.hadoop.hive.ql.ddl.DDLOperationContext; import org.apache.hadoop.hive.ql.ddl.DDLUtils; import org.apache.hadoop.hive.ql.metadata.HiveException; +import org.apache.hadoop.hive.ql.udf.UDFLike; import org.apache.hadoop.io.IOUtils; /** @@ -39,13 +42,11 @@ public ShowDatabasesOperation(DDLOperationContext context, ShowDatabasesDesc des @Override public int execute() throws HiveException { - // get the databases for the desired pattern - populate the output stream - List databases = null; + List databases = context.getDb().getAllDatabases(); if (desc.getPattern() != null) { LOG.debug("pattern: {}", desc.getPattern()); - databases = context.getDb().getDatabasesByPattern(desc.getPattern()); - } else { - databases = context.getDb().getAllDatabases(); + Pattern pattern = Pattern.compile(UDFLike.likePatternToRegExp(desc.getPattern())); + databases = databases.stream().filter(name -> pattern.matcher(name).matches()).collect(Collectors.toList()); } LOG.info("Found {} database(s) matching the SHOW DATABASES statement.", databases.size()); diff --git ql/src/test/queries/clientpositive/database.q ql/src/test/queries/clientpositive/database.q index 36c3c0babf..bfa9d1aad3 100644 --- ql/src/test/queries/clientpositive/database.q +++ ql/src/test/queries/clientpositive/database.q @@ -39,11 +39,14 @@ CREATE DATABASE test_db; SHOW DATABASES; -- SHOW pattern -SHOW DATABASES LIKE 'test*'; +SHOW DATABASES LIKE 'test%'; -- SHOW pattern -SHOW DATABASES LIKE '*ef*'; +SHOW DATABASES LIKE '%ef%'; +-- SHOW pattern +SHOW DATABASES LIKE 'test_d_'; +SHOW DATABASES LIKE 'test__'; USE test_db; SHOW DATABASES; diff --git ql/src/test/queries/clientpositive/describe_database_json.q ql/src/test/queries/clientpositive/describe_database_json.q index 67ca68f487..cff2fba4a2 100644 --- ql/src/test/queries/clientpositive/describe_database_json.q +++ ql/src/test/queries/clientpositive/describe_database_json.q @@ -12,7 +12,7 @@ DESCRIBE SCHEMA EXTENDED jsondb1; SHOW DATABASES; -SHOW DATABASES LIKE 'json*'; +SHOW DATABASES LIKE 'json%'; DROP DATABASE jsondb1; diff --git ql/src/test/results/clientpositive/llap/database.q.out ql/src/test/results/clientpositive/llap/database.q.out index 5027ccda0c..193cc314b7 100644 --- ql/src/test/results/clientpositive/llap/database.q.out +++ ql/src/test/results/clientpositive/llap/database.q.out @@ -87,16 +87,25 @@ POSTHOOK: query: SHOW DATABASES POSTHOOK: type: SHOWDATABASES default test_db -PREHOOK: query: SHOW DATABASES LIKE 'test*' +PREHOOK: query: SHOW DATABASES LIKE 'test%' PREHOOK: type: SHOWDATABASES -POSTHOOK: query: SHOW DATABASES LIKE 'test*' +POSTHOOK: query: SHOW DATABASES LIKE 'test%' POSTHOOK: type: SHOWDATABASES test_db -PREHOOK: query: SHOW DATABASES LIKE '*ef*' +PREHOOK: query: SHOW DATABASES LIKE '%ef%' PREHOOK: type: SHOWDATABASES -POSTHOOK: query: SHOW DATABASES LIKE '*ef*' +POSTHOOK: query: SHOW DATABASES LIKE '%ef%' POSTHOOK: type: SHOWDATABASES default +PREHOOK: query: SHOW DATABASES LIKE 'test_d_' +PREHOOK: type: SHOWDATABASES +POSTHOOK: query: SHOW DATABASES LIKE 'test_d_' +POSTHOOK: type: SHOWDATABASES +test_db +PREHOOK: query: SHOW DATABASES LIKE 'test__' +PREHOOK: type: SHOWDATABASES +POSTHOOK: query: SHOW DATABASES LIKE 'test__' +POSTHOOK: type: SHOWDATABASES PREHOOK: query: USE test_db PREHOOK: type: SWITCHDATABASE PREHOOK: Input: database:test_db diff --git ql/src/test/results/clientpositive/llap/describe_database_json.q.out ql/src/test/results/clientpositive/llap/describe_database_json.q.out index 699eede6f9..b57f1b76a1 100644 --- ql/src/test/results/clientpositive/llap/describe_database_json.q.out +++ ql/src/test/results/clientpositive/llap/describe_database_json.q.out @@ -38,9 +38,9 @@ PREHOOK: type: SHOWDATABASES POSTHOOK: query: SHOW DATABASES POSTHOOK: type: SHOWDATABASES {"databases":["default","jsondb1"]} -PREHOOK: query: SHOW DATABASES LIKE 'json*' +PREHOOK: query: SHOW DATABASES LIKE 'json%' PREHOOK: type: SHOWDATABASES -POSTHOOK: query: SHOW DATABASES LIKE 'json*' +POSTHOOK: query: SHOW DATABASES LIKE 'json%' POSTHOOK: type: SHOWDATABASES {"databases":["jsondb1"]} PREHOOK: query: DROP DATABASE jsondb1