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

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

commit bc40efdfafddee8cd39fa5526a968bc87d7eb820
Author: Miklos Gergely <mgerg...@hortonworks.com>
AuthorDate: Wed Jun 26 17:33:53 2019 +0200

    HIVE-21896: SHOW FUNCTIONS / SHOW FUNCTIONS LIKE - clarify (Miklos Gergely 
via Zoltan Haindrich)
    
    Signed-off-by: Zoltan Haindrich <k...@rxd.hu>
---
 .../TestReplicationScenariosAcrossInstances.java   |  24 +-
 .../apache/hadoop/hive/ql/ddl/DDLOperation.java    |   3 +
 .../hive/ql/ddl/function/ShowFunctionsDesc.java    |   6 -
 .../ql/ddl/function/ShowFunctionsOperation.java    |   7 +-
 .../table/storage/AlterTableSetSerdeOperation.java |   5 +-
 .../hadoop/hive/ql/exec/FunctionRegistry.java      |   2 +-
 .../hadoop/hive/ql/parse/DDLSemanticAnalyzer.java  |   8 +-
 .../org/apache/hadoop/hive/ql/parse/HiveParser.g   |   2 +-
 .../queries/clientnegative/show_functions_wrong.q  |   2 +
 ql/src/test/queries/clientpositive/create_func1.q  |   4 +-
 .../clientpositive/show_describe_func_quotes.q     |   4 +-
 .../test/queries/clientpositive/show_functions.q   |  20 +-
 .../clientnegative/show_functions_wrong.q.out      |   1 +
 .../test/results/clientpositive/create_func1.q.out |   8 +-
 .../clientpositive/show_describe_func_quotes.q.out |   8 +-
 .../results/clientpositive/show_functions.q.out    | 347 +++++++++++++++++++--
 16 files changed, 373 insertions(+), 78 deletions(-)

diff --git 
a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/parse/TestReplicationScenariosAcrossInstances.java
 
b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/parse/TestReplicationScenariosAcrossInstances.java
index 970b8a5..3ee8490 100644
--- 
a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/parse/TestReplicationScenariosAcrossInstances.java
+++ 
b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/parse/TestReplicationScenariosAcrossInstances.java
@@ -91,14 +91,14 @@ public class TestReplicationScenariosAcrossInstances 
extends BaseReplicationAcro
     replica.load(replicatedDbName, incrementalDump.dumpLocation)
         .run("REPL STATUS " + replicatedDbName)
         .verifyResult(incrementalDump.lastReplicationId)
-        .run("SHOW FUNCTIONS LIKE '" + replicatedDbName + "*'")
+        .run("SHOW FUNCTIONS LIKE '" + replicatedDbName + "%'")
         .verifyResult(replicatedDbName + ".testFunctionOne");
 
     // Test the idempotent behavior of CREATE FUNCTION
     replica.load(replicatedDbName, incrementalDump.dumpLocation)
         .run("REPL STATUS " + replicatedDbName)
         .verifyResult(incrementalDump.lastReplicationId)
-        .run("SHOW FUNCTIONS LIKE '" + replicatedDbName + "*'")
+        .run("SHOW FUNCTIONS LIKE '" + replicatedDbName + "%'")
         .verifyResult(replicatedDbName + ".testFunctionOne");
   }
 
@@ -148,7 +148,7 @@ public class TestReplicationScenariosAcrossInstances 
extends BaseReplicationAcro
     replica.run("use " + replicatedDbName)
             .run("repl status " + replicatedDbName)
             .verifyResult("null")
-            .run("show functions like '" + replicatedDbName + "*'")
+            .run("show functions like '" + replicatedDbName + "%'")
             .verifyResult(replicatedDbName + "." + funcName1);
 
     // Verify no calls to load f1 only f2.
@@ -182,7 +182,7 @@ public class TestReplicationScenariosAcrossInstances 
extends BaseReplicationAcro
     replica.run("use " + replicatedDbName)
             .run("repl status " + replicatedDbName)
             .verifyResult(tuple.lastReplicationId)
-            .run("show functions like '" + replicatedDbName +"*'")
+            .run("show functions like '" + replicatedDbName +"%'")
             .verifyResults(new String[] {replicatedDbName + "." + funcName1,
                                          replicatedDbName +"." +funcName2});
   }
@@ -204,14 +204,14 @@ public class TestReplicationScenariosAcrossInstances 
extends BaseReplicationAcro
     replica.load(replicatedDbName, incrementalDump.dumpLocation)
         .run("REPL STATUS " + replicatedDbName)
         .verifyResult(incrementalDump.lastReplicationId)
-        .run("SHOW FUNCTIONS LIKE '*testfunctionanother*'")
+        .run("SHOW FUNCTIONS LIKE '%testfunctionanother%'")
         .verifyResult(null);
 
     // Test the idempotent behavior of DROP FUNCTION
     replica.load(replicatedDbName, incrementalDump.dumpLocation)
         .run("REPL STATUS " + replicatedDbName)
         .verifyResult(incrementalDump.lastReplicationId)
-        .run("SHOW FUNCTIONS LIKE '*testfunctionanother*'")
+        .run("SHOW FUNCTIONS LIKE '%testfunctionanother%'")
         .verifyResult(null);
   }
 
@@ -223,7 +223,7 @@ public class TestReplicationScenariosAcrossInstances 
extends BaseReplicationAcro
     WarehouseInstance.Tuple bootStrapDump = primary.dump(primaryDbName, null);
 
     replica.load(replicatedDbName, bootStrapDump.dumpLocation)
-        .run("SHOW FUNCTIONS LIKE '" + replicatedDbName + "*'")
+        .run("SHOW FUNCTIONS LIKE '" + replicatedDbName + "%'")
         .verifyResult(replicatedDbName + ".testFunction");
   }
 
@@ -239,7 +239,7 @@ public class TestReplicationScenariosAcrossInstances 
extends BaseReplicationAcro
     WarehouseInstance.Tuple tuple = primary.dump(primaryDbName, null);
 
     replica.load(replicatedDbName, tuple.dumpLocation)
-        .run("SHOW FUNCTIONS LIKE '" + replicatedDbName + "*'")
+        .run("SHOW FUNCTIONS LIKE '" + replicatedDbName + "%'")
         .verifyResult(replicatedDbName + ".anotherFunction");
 
     FileStatus[] fileStatuses = 
replica.miniDFSCluster.getFileSystem().globStatus(
@@ -273,7 +273,7 @@ public class TestReplicationScenariosAcrossInstances 
extends BaseReplicationAcro
     WarehouseInstance.Tuple tuple = primary.dump(primaryDbName, 
bootStrapDump.lastReplicationId);
 
     replica.load(replicatedDbName, tuple.dumpLocation)
-            .run("SHOW FUNCTIONS LIKE '" + replicatedDbName + "*'")
+            .run("SHOW FUNCTIONS LIKE '" + replicatedDbName + "%'")
             .verifyResult(replicatedDbName + ".anotherFunction");
 
     FileStatus[] fileStatuses = 
replica.miniDFSCluster.getFileSystem().globStatus(
@@ -731,7 +731,7 @@ public class TestReplicationScenariosAcrossInstances 
extends BaseReplicationAcro
             .verifyResults(new String[] { "1", "2" })
             .run("select * from table3")
             .verifyResults(new String[] { "10" })
-            .run("show functions like '" + replicatedDbName + "*'")
+            .run("show functions like '" + replicatedDbName + "%'")
             .verifyResult(replicatedDbName + ".testFunctionOne");
 
     ////////////  Second Incremental ////////////
@@ -769,7 +769,7 @@ public class TestReplicationScenariosAcrossInstances 
extends BaseReplicationAcro
             .verifyResults(new String[] { "1" })
             .run("select * from table3")
             .verifyResults(Collections.emptyList())
-            .run("show functions like '" + replicatedDbName + "*'")
+            .run("show functions like '" + replicatedDbName + "%'")
             .verifyResult(null);
   }
 
@@ -1436,7 +1436,7 @@ public class TestReplicationScenariosAcrossInstances 
extends BaseReplicationAcro
             .verifyResults(new String[] { "t2" })
             .run("select country from t2 order by country")
             .verifyResults(Arrays.asList("india", "uk", "us"))
-            .run("show functions like '" + replicatedDbName + "*'")
+            .run("show functions like '" + replicatedDbName + "%'")
             .verifyResult(replicatedDbName + ".testFunctionOne");
   }
 
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/ddl/DDLOperation.java 
b/ql/src/java/org/apache/hadoop/hive/ql/ddl/DDLOperation.java
index 61858f3..e08ec25 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/ddl/DDLOperation.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/ddl/DDLOperation.java
@@ -23,6 +23,9 @@ import org.slf4j.LoggerFactory;
 
 /**
  * Abstract ancestor class of all DDL Operation classes.
+ *
+ * A class that is extending this abstract class, and which is under the 
org.apache.hadoop.hive.ql.ddl package
+ * will be registered automatically as the operation for it's generic DDLDesc 
argument.
  */
 public abstract class DDLOperation<T extends DDLDesc> {
   protected static final Logger LOG = 
LoggerFactory.getLogger("hive.ql.exec.DDLTask");
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/ddl/function/ShowFunctionsDesc.java 
b/ql/src/java/org/apache/hadoop/hive/ql/ddl/function/ShowFunctionsDesc.java
index 92ae1aa..08977e1 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/ddl/function/ShowFunctionsDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/ddl/function/ShowFunctionsDesc.java
@@ -36,7 +36,6 @@ public class ShowFunctionsDesc implements DDLDesc, 
Serializable {
 
   private final String resFile;
   private final String pattern;
-  private final boolean isLikePattern;
 
   public ShowFunctionsDesc(Path resFile) {
     this(resFile, null, false);
@@ -49,7 +48,6 @@ public class ShowFunctionsDesc implements DDLDesc, 
Serializable {
   public ShowFunctionsDesc(Path resFile, String pattern, boolean 
isLikePattern) {
     this.resFile = resFile.toString();
     this.pattern = pattern;
-    this.isLikePattern = isLikePattern;
   }
 
   @Explain(displayName = "result file", explainLevels = { Level.EXTENDED })
@@ -61,8 +59,4 @@ public class ShowFunctionsDesc implements DDLDesc, 
Serializable {
   public String getPattern() {
     return pattern;
   }
-
-  public boolean getIsLikePattern() {
-    return isLikePattern;
-  }
 }
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/ddl/function/ShowFunctionsOperation.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/ddl/function/ShowFunctionsOperation.java
index 84c4ec2..14a8f92 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/ddl/function/ShowFunctionsOperation.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/ddl/function/ShowFunctionsOperation.java
@@ -51,12 +51,7 @@ public class ShowFunctionsOperation extends 
DDLOperation<ShowFunctionsDesc> {
   private Set<String> fetchFunctions() {
     Set<String> funcs = null;
     if (desc.getPattern() != null) {
-      if (desc.getIsLikePattern()) {
-        funcs = 
FunctionRegistry.getFunctionNamesByLikePattern(desc.getPattern());
-      } else {
-        context.getConsole().printInfo("SHOW FUNCTIONS is deprecated, please 
use SHOW FUNCTIONS LIKE instead.");
-        funcs = FunctionRegistry.getFunctionNames(desc.getPattern());
-      }
+      funcs = 
FunctionRegistry.getFunctionNamesByLikePattern(desc.getPattern());
       LOG.info("Found {} function(s) using pattern {} matching the SHOW 
FUNCTIONS statement.", funcs.size(),
           desc.getPattern());
     } else {
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/AlterTableSetSerdeOperation.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/AlterTableSetSerdeOperation.java
index 69b6a52..faa8724 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/AlterTableSetSerdeOperation.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/AlterTableSetSerdeOperation.java
@@ -60,10 +60,7 @@ public class AlterTableSetSerdeOperation extends 
AbstractAlterTableOperation<Alt
       sd.getSerdeInfo().getParameters().putAll(desc.getProps());
     }
 
-    if (partition != null) {
-      // TODO: wtf? This doesn't do anything.
-      
partition.getTPartition().getSd().setCols(partition.getTPartition().getSd().getCols());
-    } else {
+    if (partition == null) {
       if (Table.shouldStoreFieldsInMetastore(context.getConf(), serdeName, 
table.getParameters())
           && !Table.hasMetastoreBasedSchema(context.getConf(), oldSerdeName)) {
         // If new SerDe needs to store fields in metastore, but the old serde 
doesn't, save
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
index c09db9a..d4887d4 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
@@ -637,7 +637,7 @@ public final class FunctionRegistry {
     Set<String> allFuncs = getFunctionNames();
     String[] subpatterns = funcPatternStr.trim().split("\\|");
     for (String subpattern : subpatterns) {
-      subpattern = "(?i)" + subpattern.replaceAll("\\*", ".*");
+      subpattern = "(?i)" + UDFLike.likePatternToRegExp(subpattern);
       try {
         Pattern patternObj = Pattern.compile(subpattern);
         for (String funcName : allFuncs) {
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
index c74b8da..bd4edb7 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
@@ -2763,13 +2763,11 @@ public class DDLSemanticAnalyzer extends 
BaseSemanticAnalyzer {
    */
   private void analyzeShowFunctions(ASTNode ast) throws SemanticException {
     ShowFunctionsDesc showFuncsDesc;
-    if (ast.getChildCount() == 1) {
-      String funcNames = stripQuotes(ast.getChild(0).getText());
-      showFuncsDesc = new ShowFunctionsDesc(ctx.getResFile(), funcNames);
-    } else if (ast.getChildCount() == 2) {
+    if (ast.getChildCount() > 0) {
+      assert (ast.getChildCount() == 2);
       assert (ast.getChild(0).getType() == HiveParser.KW_LIKE);
       String funcNames = stripQuotes(ast.getChild(1).getText());
-      showFuncsDesc = new ShowFunctionsDesc(ctx.getResFile(), funcNames, true);
+      showFuncsDesc = new ShowFunctionsDesc(ctx.getResFile(), funcNames);
     } else {
       showFuncsDesc = new ShowFunctionsDesc(ctx.getResFile());
     }
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
index e023005..223bbd4 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
@@ -1633,7 +1633,7 @@ showStatement
     | KW_SHOW KW_MATERIALIZED KW_VIEWS ((KW_FROM|KW_IN) db_name=identifier)? 
(KW_LIKE showStmtIdentifier|showStmtIdentifier)?  -> 
^(TOK_SHOWMATERIALIZEDVIEWS (TOK_FROM $db_name)? showStmtIdentifier?)
     | KW_SHOW KW_COLUMNS (KW_FROM|KW_IN) tableName ((KW_FROM|KW_IN) 
db_name=identifier)? (KW_LIKE showStmtIdentifier|showStmtIdentifier)?
     -> ^(TOK_SHOWCOLUMNS tableName (TOK_FROM $db_name)? showStmtIdentifier?)
-    | KW_SHOW KW_FUNCTIONS (KW_LIKE 
showFunctionIdentifier|showFunctionIdentifier)?  -> ^(TOK_SHOWFUNCTIONS 
KW_LIKE? showFunctionIdentifier?)
+    | KW_SHOW KW_FUNCTIONS (KW_LIKE showFunctionIdentifier)?  -> 
^(TOK_SHOWFUNCTIONS KW_LIKE? showFunctionIdentifier?)
     | KW_SHOW KW_PARTITIONS tabName=tableName partitionSpec? -> 
^(TOK_SHOWPARTITIONS $tabName partitionSpec?) 
     | KW_SHOW KW_CREATE (
         (KW_DATABASE|KW_SCHEMA) => (KW_DATABASE|KW_SCHEMA) db_name=identifier 
-> ^(TOK_SHOW_CREATEDATABASE $db_name)
diff --git a/ql/src/test/queries/clientnegative/show_functions_wrong.q 
b/ql/src/test/queries/clientnegative/show_functions_wrong.q
new file mode 100644
index 0000000..92cdaaf
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/show_functions_wrong.q
@@ -0,0 +1,2 @@
+-- SHOW FUNCTIONS <pattern>; is not supported, only SHOW FUNCTIONS LIKE 
<pattern>;
+SHOW FUNCTIONS 'a%';
diff --git a/ql/src/test/queries/clientpositive/create_func1.q 
b/ql/src/test/queries/clientpositive/create_func1.q
index eef07f6..507fbef 100644
--- a/ql/src/test/queries/clientpositive/create_func1.q
+++ b/ql/src/test/queries/clientpositive/create_func1.q
@@ -8,7 +8,7 @@ describe function extended qtest_get_java_boolean;
 create database mydb;
 create function mydb.func1 as 
'org.apache.hadoop.hive.ql.udf.generic.GenericUDFUpper';
 
-show functions mydb.func1;
+show functions like mydb.func1;
 
 describe function extended mydb.func1;
 
@@ -18,7 +18,7 @@ select mydb.func1('abc') from src limit 1;
 drop function mydb.func1;
 
 -- function should now be gone
-show functions mydb.func1;
+show functions like mydb.func1;
 
 -- To test function name resolution
 create function mydb.qtest_get_java_boolean as 
'org.apache.hadoop.hive.ql.udf.generic.GenericUDFUpper';
diff --git a/ql/src/test/queries/clientpositive/show_describe_func_quotes.q 
b/ql/src/test/queries/clientpositive/show_describe_func_quotes.q
index de1451d..4555ad9 100644
--- a/ql/src/test/queries/clientpositive/show_describe_func_quotes.q
+++ b/ql/src/test/queries/clientpositive/show_describe_func_quotes.q
@@ -1,6 +1,6 @@
-SHOW FUNCTIONS 'concat';
+SHOW FUNCTIONS LIKE 'concat';
 
-SHOW FUNCTIONS concat;
+SHOW FUNCTIONS LIKE concat;
 
 DESCRIBE FUNCTION 'concat';
 
diff --git a/ql/src/test/queries/clientpositive/show_functions.q 
b/ql/src/test/queries/clientpositive/show_functions.q
index 6ef0078..29f5fca 100644
--- a/ql/src/test/queries/clientpositive/show_functions.q
+++ b/ql/src/test/queries/clientpositive/show_functions.q
@@ -1,23 +1,23 @@
 EXPLAIN SHOW FUNCTIONS;
 SHOW FUNCTIONS;
 
-EXPLAIN SHOW FUNCTIONS '^c.*';
-SHOW FUNCTIONS '^c.*';
+EXPLAIN SHOW FUNCTIONS LIKE 'c%';
+SHOW FUNCTIONS LIKE 'c%';
 
-SHOW FUNCTIONS '.*e$';
+SHOW FUNCTIONS LIKE '%e';
 
-SHOW FUNCTIONS 'log.*';
+SHOW FUNCTIONS LIKE 'log%';
 
-SHOW FUNCTIONS '.*date.*';
+SHOW FUNCTIONS LIKE '%date%';
 
-SHOW FUNCTIONS '***';
+SHOW FUNCTIONS LIKE '%%%';
 
 EXPLAIN SHOW FUNCTIONS LIKE 'When';
 SHOW FUNCTIONS LIKE 'When';
 
 SHOW FUNCTIONS LIKE 'max|min';
 
-SHOW FUNCTIONS LIKE 'xpath*|m*';
+SHOW FUNCTIONS LIKE 'xpath%|m%';
 
 SHOW FUNCTIONS LIKE 'nomatch';
 
@@ -27,8 +27,8 @@ SHOW FUNCTIONS LIKE 'log';
 
 SHOW FUNCTIONS LIKE `log`;
 
-SHOW FUNCTIONS LIKE 'log*';
+SHOW FUNCTIONS LIKE 'log%';
 
-SHOW FUNCTIONS LIKE "log*";
+SHOW FUNCTIONS LIKE "log%";
 
-SHOW FUNCTIONS LIKE `log*`;
+SHOW FUNCTIONS LIKE `log%`;
diff --git a/ql/src/test/results/clientnegative/show_functions_wrong.q.out 
b/ql/src/test/results/clientnegative/show_functions_wrong.q.out
new file mode 100644
index 0000000..fd31e81
--- /dev/null
+++ b/ql/src/test/results/clientnegative/show_functions_wrong.q.out
@@ -0,0 +1 @@
+FAILED: ParseException line 2:15 extraneous input ''a%'' expecting EOF near 
'<EOF>'
diff --git a/ql/src/test/results/clientpositive/create_func1.q.out 
b/ql/src/test/results/clientpositive/create_func1.q.out
index d4afc83..b1923c7 100644
--- a/ql/src/test/results/clientpositive/create_func1.q.out
+++ b/ql/src/test/results/clientpositive/create_func1.q.out
@@ -29,9 +29,9 @@ POSTHOOK: query: create function mydb.func1 as 
'org.apache.hadoop.hive.ql.udf.ge
 POSTHOOK: type: CREATEFUNCTION
 POSTHOOK: Output: database:mydb
 POSTHOOK: Output: mydb.func1
-PREHOOK: query: show functions mydb.func1
+PREHOOK: query: show functions like mydb.func1
 PREHOOK: type: SHOWFUNCTIONS
-POSTHOOK: query: show functions mydb.func1
+POSTHOOK: query: show functions like mydb.func1
 POSTHOOK: type: SHOWFUNCTIONS
 mydb.func1
 PREHOOK: query: describe function extended mydb.func1
@@ -62,9 +62,9 @@ POSTHOOK: query: drop function mydb.func1
 POSTHOOK: type: DROPFUNCTION
 POSTHOOK: Output: database:mydb
 POSTHOOK: Output: mydb.func1
-PREHOOK: query: show functions mydb.func1
+PREHOOK: query: show functions like mydb.func1
 PREHOOK: type: SHOWFUNCTIONS
-POSTHOOK: query: show functions mydb.func1
+POSTHOOK: query: show functions like mydb.func1
 POSTHOOK: type: SHOWFUNCTIONS
 PREHOOK: query: create function mydb.qtest_get_java_boolean as 
'org.apache.hadoop.hive.ql.udf.generic.GenericUDFUpper'
 PREHOOK: type: CREATEFUNCTION
diff --git a/ql/src/test/results/clientpositive/show_describe_func_quotes.q.out 
b/ql/src/test/results/clientpositive/show_describe_func_quotes.q.out
index 3c249e2..eee1d0a 100644
--- a/ql/src/test/results/clientpositive/show_describe_func_quotes.q.out
+++ b/ql/src/test/results/clientpositive/show_describe_func_quotes.q.out
@@ -1,11 +1,11 @@
-PREHOOK: query: SHOW FUNCTIONS 'concat'
+PREHOOK: query: SHOW FUNCTIONS LIKE 'concat'
 PREHOOK: type: SHOWFUNCTIONS
-POSTHOOK: query: SHOW FUNCTIONS 'concat'
+POSTHOOK: query: SHOW FUNCTIONS LIKE 'concat'
 POSTHOOK: type: SHOWFUNCTIONS
 concat
-PREHOOK: query: SHOW FUNCTIONS concat
+PREHOOK: query: SHOW FUNCTIONS LIKE concat
 PREHOOK: type: SHOWFUNCTIONS
-POSTHOOK: query: SHOW FUNCTIONS concat
+POSTHOOK: query: SHOW FUNCTIONS LIKE concat
 POSTHOOK: type: SHOWFUNCTIONS
 concat
 PREHOOK: query: DESCRIBE FUNCTION 'concat'
diff --git a/ql/src/test/results/clientpositive/show_functions.q.out 
b/ql/src/test/results/clientpositive/show_functions.q.out
index 84a9243..04a0fb4 100644
--- a/ql/src/test/results/clientpositive/show_functions.q.out
+++ b/ql/src/test/results/clientpositive/show_functions.q.out
@@ -325,9 +325,9 @@ xpath_string
 year
 |
 ~
-PREHOOK: query: EXPLAIN SHOW FUNCTIONS '^c.*'
+PREHOOK: query: EXPLAIN SHOW FUNCTIONS LIKE 'c%'
 PREHOOK: type: SHOWFUNCTIONS
-POSTHOOK: query: EXPLAIN SHOW FUNCTIONS '^c.*'
+POSTHOOK: query: EXPLAIN SHOW FUNCTIONS LIKE 'c%'
 POSTHOOK: type: SHOWFUNCTIONS
 STAGE DEPENDENCIES:
   Stage-0 is a root stage
@@ -336,7 +336,7 @@ STAGE DEPENDENCIES:
 STAGE PLANS:
   Stage: Stage-0
     Show Functions
-      pattern: ^c.*
+      pattern: c%
 
   Stage: Stage-1
     Fetch Operator
@@ -344,9 +344,9 @@ STAGE PLANS:
       Processor Tree:
         ListSink
 
-PREHOOK: query: SHOW FUNCTIONS '^c.*'
+PREHOOK: query: SHOW FUNCTIONS LIKE 'c%'
 PREHOOK: type: SHOWFUNCTIONS
-POSTHOOK: query: SHOW FUNCTIONS '^c.*'
+POSTHOOK: query: SHOW FUNCTIONS LIKE 'c%'
 POSTHOOK: type: SHOWFUNCTIONS
 cardinality_violation
 case
@@ -381,9 +381,9 @@ current_groups
 current_schema
 current_timestamp
 current_user
-PREHOOK: query: SHOW FUNCTIONS '.*e$'
+PREHOOK: query: SHOW FUNCTIONS LIKE '%e'
 PREHOOK: type: SHOWFUNCTIONS
-POSTHOOK: query: SHOW FUNCTIONS '.*e$'
+POSTHOOK: query: SHOW FUNCTIONS LIKE '%e'
 POSTHOOK: type: SHOWFUNCTIONS
 assert_true
 case
@@ -430,17 +430,17 @@ udftobyte
 udftodouble
 variance
 xpath_double
-PREHOOK: query: SHOW FUNCTIONS 'log.*'
+PREHOOK: query: SHOW FUNCTIONS LIKE 'log%'
 PREHOOK: type: SHOWFUNCTIONS
-POSTHOOK: query: SHOW FUNCTIONS 'log.*'
+POSTHOOK: query: SHOW FUNCTIONS LIKE 'log%'
 POSTHOOK: type: SHOWFUNCTIONS
 log
 log10
 log2
 logged_in_user
-PREHOOK: query: SHOW FUNCTIONS '.*date.*'
+PREHOOK: query: SHOW FUNCTIONS LIKE '%date%'
 PREHOOK: type: SHOWFUNCTIONS
-POSTHOOK: query: SHOW FUNCTIONS '.*date.*'
+POSTHOOK: query: SHOW FUNCTIONS LIKE '%date%'
 POSTHOOK: type: SHOWFUNCTIONS
 current_date
 date_add
@@ -449,10 +449,315 @@ date_sub
 datediff
 to_date
 validate_acid_sort_order
-PREHOOK: query: SHOW FUNCTIONS '***'
+PREHOOK: query: SHOW FUNCTIONS LIKE '%%%'
 PREHOOK: type: SHOWFUNCTIONS
-POSTHOOK: query: SHOW FUNCTIONS '***'
+POSTHOOK: query: SHOW FUNCTIONS LIKE '%%%'
 POSTHOOK: type: SHOWFUNCTIONS
+!
+!=
+$sum0
+%
+&
+*
++
+-
+/
+<
+<=
+<=>
+<>
+=
+==
+>
+>=
+^
+abs
+acos
+add_months
+aes_decrypt
+aes_encrypt
+and
+approx_distinct
+array
+array_contains
+ascii
+asin
+assert_true
+assert_true_oom
+atan
+avg
+base64
+between
+bin
+bloom_filter
+bround
+bucket_number
+buildversion
+cardinality_violation
+case
+cast_format
+cbrt
+ceil
+ceiling
+char_length
+character_length
+chr
+coalesce
+collect_list
+collect_set
+compute_stats
+concat
+concat_ws
+context_ngrams
+conv
+corr
+cos
+count
+covar_pop
+covar_samp
+crc32
+create_union
+cume_dist
+current_authorizer
+current_catalog
+current_database
+current_date
+current_groups
+current_schema
+current_timestamp
+current_user
+date_add
+date_format
+date_sub
+datediff
+day
+dayofmonth
+dayofweek
+decode
+default.qtest_get_java_boolean
+degrees
+dense_rank
+div
+e
+elt
+encode
+enforce_constraint
+exp
+explode
+extract_union
+factorial
+field
+find_in_set
+first_value
+floor
+floor_day
+floor_hour
+floor_minute
+floor_month
+floor_quarter
+floor_second
+floor_week
+floor_year
+format_number
+from_unixtime
+from_utc_timestamp
+get_json_object
+get_splits
+get_sql_schema
+greatest
+grouping
+hash
+hex
+histogram_numeric
+hour
+if
+in
+in_bloom_filter
+in_file
+index
+initcap
+inline
+instr
+internal_interval
+isfalse
+isnotfalse
+isnotnull
+isnottrue
+isnull
+istrue
+java_method
+json_read
+json_tuple
+lag
+last_day
+last_value
+lcase
+lead
+least
+length
+levenshtein
+like
+likeall
+likeany
+ln
+locate
+log
+log10
+log2
+logged_in_user
+lower
+lpad
+ltrim
+map
+map_keys
+map_values
+mask
+mask_first_n
+mask_hash
+mask_last_n
+mask_show_first_n
+mask_show_last_n
+matchpath
+max
+md5
+mid
+min
+minute
+mod
+month
+months_between
+murmur_hash
+named_struct
+negative
+next_day
+ngrams
+noop
+noopstreaming
+noopwithmap
+noopwithmapstreaming
+not
+ntile
+nullif
+nvl
+octet_length
+or
+parse_url
+parse_url_tuple
+percent_rank
+percentile
+percentile_approx
+percentile_cont
+percentile_disc
+pi
+pmod
+posexplode
+position
+positive
+pow
+power
+printf
+quarter
+quote
+radians
+rand
+rank
+reflect
+reflect2
+regexp
+regexp_extract
+regexp_replace
+regr_avgx
+regr_avgy
+regr_count
+regr_intercept
+regr_r2
+regr_slope
+regr_sxx
+regr_sxy
+regr_syy
+repeat
+replace
+replicate_rows
+restrict_information_schema
+reverse
+rlike
+round
+row_number
+rpad
+rtrim
+second
+sentences
+sha
+sha1
+sha2
+shiftleft
+shiftright
+shiftrightunsigned
+sign
+sin
+size
+sort_array
+sort_array_by
+soundex
+space
+split
+sq_count_check
+sqrt
+stack
+std
+stddev
+stddev_pop
+stddev_samp
+str_to_map
+struct
+substr
+substring
+substring_index
+sum
+surrogate_key
+tan
+to_date
+to_epoch_milli
+to_unix_timestamp
+to_utc_timestamp
+translate
+trim
+trunc
+tumbling_window
+ucase
+udftoboolean
+udftobyte
+udftodouble
+udftofloat
+udftointeger
+udftolong
+udftoshort
+unbase64
+unhex
+unix_timestamp
+upper
+uuid
+validate_acid_sort_order
+var_pop
+var_samp
+variance
+version
+weekofyear
+when
+width_bucket
+windowingtablefunction
+xpath
+xpath_boolean
+xpath_double
+xpath_float
+xpath_int
+xpath_long
+xpath_number
+xpath_short
+xpath_string
+year
+|
+~
 PREHOOK: query: EXPLAIN SHOW FUNCTIONS LIKE 'When'
 PREHOOK: type: SHOWFUNCTIONS
 POSTHOOK: query: EXPLAIN SHOW FUNCTIONS LIKE 'When'
@@ -483,9 +788,9 @@ POSTHOOK: query: SHOW FUNCTIONS LIKE 'max|min'
 POSTHOOK: type: SHOWFUNCTIONS
 max
 min
-PREHOOK: query: SHOW FUNCTIONS LIKE 'xpath*|m*'
+PREHOOK: query: SHOW FUNCTIONS LIKE 'xpath%|m%'
 PREHOOK: type: SHOWFUNCTIONS
-POSTHOOK: query: SHOW FUNCTIONS LIKE 'xpath*|m*'
+POSTHOOK: query: SHOW FUNCTIONS LIKE 'xpath%|m%'
 POSTHOOK: type: SHOWFUNCTIONS
 map
 map_keys
@@ -534,25 +839,25 @@ PREHOOK: type: SHOWFUNCTIONS
 POSTHOOK: query: SHOW FUNCTIONS LIKE `log`
 POSTHOOK: type: SHOWFUNCTIONS
 log
-PREHOOK: query: SHOW FUNCTIONS LIKE 'log*'
+PREHOOK: query: SHOW FUNCTIONS LIKE 'log%'
 PREHOOK: type: SHOWFUNCTIONS
-POSTHOOK: query: SHOW FUNCTIONS LIKE 'log*'
+POSTHOOK: query: SHOW FUNCTIONS LIKE 'log%'
 POSTHOOK: type: SHOWFUNCTIONS
 log
 log10
 log2
 logged_in_user
-PREHOOK: query: SHOW FUNCTIONS LIKE "log*"
+PREHOOK: query: SHOW FUNCTIONS LIKE "log%"
 PREHOOK: type: SHOWFUNCTIONS
-POSTHOOK: query: SHOW FUNCTIONS LIKE "log*"
+POSTHOOK: query: SHOW FUNCTIONS LIKE "log%"
 POSTHOOK: type: SHOWFUNCTIONS
 log
 log10
 log2
 logged_in_user
-PREHOOK: query: SHOW FUNCTIONS LIKE `log*`
+PREHOOK: query: SHOW FUNCTIONS LIKE `log%`
 PREHOOK: type: SHOWFUNCTIONS
-POSTHOOK: query: SHOW FUNCTIONS LIKE `log*`
+POSTHOOK: query: SHOW FUNCTIONS LIKE `log%`
 POSTHOOK: type: SHOWFUNCTIONS
 log
 log10

Reply via email to