/** * Returns a set of registered function names which matchs the given pattern. * This is used for the CLI command "SHOW FUNCTIONS LIKE 'regular expression';" * * @param funcPatternStr * regular expression of the interested function names * @return set of strings contains function names */ public static Set<String> getFunctionNamesByLikePattern(String funcPatternStr) { Set<String> funcNames = new TreeSet<String>(); Set<String> allFuncs = getFunctionNames(); String[] subpatterns = funcPatternStr.trim().split("\\|"); for (String subpattern : subpatterns) { subpattern = "(?i)" + subpattern.replaceAll("\\*", ".*"); try { Pattern patternObj = Pattern.compile(subpattern); for (String funcName : allFuncs) { if (patternObj.matcher(funcName).matches()) { funcNames.add(funcName); } } } catch (PatternSyntaxException e) { continue; } } return funcNames; }
} else { console.printInfo("SHOW FUNCTIONS is deprecated, please use SHOW FUNCTIONS LIKE instead."); funcs = FunctionRegistry.getFunctionNames(showFuncs.getPattern()); funcs = FunctionRegistry.getFunctionNames();
/** * Returns a set of registered function names which matchs the given pattern. * This is used for the CLI command "SHOW FUNCTIONS LIKE 'regular expression';" * * @param funcPatternStr * regular expression of the interested function names * @return set of strings contains function names */ public static Set<String> getFunctionNamesByLikePattern(String funcPatternStr) { Set<String> funcNames = new TreeSet<String>(); Set<String> allFuncs = getFunctionNames(); String[] subpatterns = funcPatternStr.trim().split("\\|"); for (String subpattern : subpatterns) { subpattern = "(?i)" + subpattern.replaceAll("\\*", ".*"); try { Pattern patternObj = Pattern.compile(subpattern); for (String funcName : allFuncs) { if (patternObj.matcher(funcName).matches()) { funcNames.add(funcName); } } } catch (PatternSyntaxException e) { continue; } } return funcNames; }
} else { console.printInfo("SHOW FUNCTIONS is deprecated, please use SHOW FUNCTIONS LIKE instead."); funcs = FunctionRegistry.getFunctionNames(showFuncs.getPattern()); funcs = FunctionRegistry.getFunctionNames();
public void reloadFunctions() throws HiveException { HashSet<String> registryFunctions = new HashSet<String>( FunctionRegistry.getFunctionNames(".+\\..+")); for (Function function : getAllFunctions()) { String functionName = function.getFunctionName(); try { LOG.info("Registering function " + functionName + " " + function.getClassName()); String qualFunc = FunctionUtils.qualifyFunctionName(functionName, function.getDbName()); FunctionRegistry.registerPermanentFunction(qualFunc, function.getClassName(), false, FunctionTask.toFunctionResource(function.getResourceUris())); registryFunctions.remove(qualFunc); } catch (Exception e) { LOG.warn("Failed to register persistent function " + functionName + ":" + function.getClassName() + ". Ignore and continue."); } } // unregister functions from local system registry that are not in getAllFunctions() for (String functionName : registryFunctions) { try { FunctionRegistry.unregisterPermanentFunction(functionName); } catch (Exception e) { LOG.warn("Failed to unregister persistent function " + functionName + "on reload. Ignore and continue."); } } }
} else { console.printInfo("SHOW FUNCTIONS is deprecated, please use SHOW FUNCTIONS LIKE instead."); funcs = FunctionRegistry.getFunctionNames(showFuncs.getPattern()); funcs = FunctionRegistry.getFunctionNames();
for (String s : FunctionRegistry.getFunctionNames()) { if (s.matches("[a-z_]+")) { candidateStrings.add(s + "(");
public void reloadFunctions() throws HiveException { HashSet<String> registryFunctions = new HashSet<String>( FunctionRegistry.getFunctionNames(".+\\..+")); for (Function function : getAllFunctions()) { String functionName = function.getFunctionName(); try { LOG.info("Registering function " + functionName + " " + function.getClassName()); String qualFunc = FunctionUtils.qualifyFunctionName(functionName, function.getDbName()); FunctionRegistry.registerPermanentFunction(qualFunc, function.getClassName(), false, FunctionTask.toFunctionResource(function.getResourceUris())); registryFunctions.remove(qualFunc); } catch (Exception e) { LOG.warn("Failed to register persistent function " + functionName + ":" + function.getClassName() + ". Ignore and continue."); } } // unregister functions from local system registry that are not in getAllFunctions() for (String functionName : registryFunctions) { try { FunctionRegistry.unregisterPermanentFunction(functionName); } catch (Exception e) { LOG.warn("Failed to unregister persistent function " + functionName + "on reload. Ignore and continue."); } } }
/** * Verify that UDF in the whitelist can be access * @throws Exception */ @Test public void testUdfInWhiteList() throws Exception { Set<String> funcNames = FunctionRegistry.getFunctionNames(); funcNames.remove("reflect"); FunctionRegistry.setupPermissionsForBuiltinUDFs(funcNames.toString(), ""); assertEquals("substr", FunctionRegistry.getFunctionInfo("substr").getDisplayName()); }
/** * Verify that UDF not in whitelist can't be accessed * @throws Exception */ @Test (expected=SemanticException.class) public void testUdfNotInWhiteList() throws Exception { Set<String> funcNames = FunctionRegistry.getFunctionNames(); funcNames.remove("reflect"); FunctionRegistry.setupPermissionsForBuiltinUDFs(funcNames.toString(), ""); assertEquals("reflect", FunctionRegistry.getFunctionInfo("reflect").getDisplayName()); }
&& (null == schemaName || "".equals(schemaName))) { Set<String> functionNames = FunctionRegistry .getFunctionNames(CLIServiceUtils.patternToRegex(functionName)); for (String functionName : functionNames) { FunctionInfo functionInfo = FunctionRegistry.getFunctionInfo(functionName);
/** * Returns a set of registered function names which matchs the given pattern. * This is used for the CLI command "SHOW FUNCTIONS LIKE 'regular expression';" * * @param funcPatternStr * regular expression of the interested function names * @return set of strings contains function names */ public static Set<String> getFunctionNamesByLikePattern(String funcPatternStr) { Set<String> funcNames = new TreeSet<String>(); Set<String> allFuncs = getFunctionNames(); String[] subpatterns = funcPatternStr.trim().split("\\|"); for (String subpattern : subpatterns) { subpattern = "(?i)" + subpattern.replaceAll("\\*", ".*"); try { Pattern patternObj = Pattern.compile(subpattern); for (String funcName : allFuncs) { if (patternObj.matcher(funcName).matches()) { funcNames.add(funcName); } } } catch (PatternSyntaxException e) { continue; } } return funcNames; }
static protected Class resolveFunc(String funcName) throws IOException { String className = funcName; Class udfClass; if (FunctionRegistry.getFunctionNames().contains(funcName)) { FunctionInfo func; try { func = FunctionRegistry.getFunctionInfo(funcName); } catch (SemanticException e) { throw new IOException(e); } udfClass = func.getFunctionClass(); } else { udfClass = PigContext.resolveClassName(className); if (udfClass == null) { throw new IOException("Cannot find Hive UDF " + funcName); } } return udfClass; }
if (showFuncs.getPattern() != null) { LOG.info("pattern: " + showFuncs.getPattern()); funcs = FunctionRegistry.getFunctionNames(showFuncs.getPattern()); LOG.info("results : " + funcs.size()); } else { funcs = FunctionRegistry.getFunctionNames();
&& (null == schemaName || "".equals(schemaName))) { Set<String> functionNames = FunctionRegistry .getFunctionNames(CLIServiceUtils.patternToRegex(functionName)); for (String functionName : functionNames) { FunctionInfo functionInfo = FunctionRegistry.getFunctionInfo(functionName);
&& (null == schemaName || "".equals(schemaName))) { Set<String> functionNames = FunctionRegistry .getFunctionNames(CLIServiceUtils.patternToRegex(functionName)); for (String functionName : functionNames) { FunctionInfo functionInfo = FunctionRegistry.getFunctionInfo(functionName);
&& (null == schemaName || "".equals(schemaName))) { Set<String> functionNames = FunctionRegistry .getFunctionNames(CLIServiceUtils.patternToRegex(functionName)); for (String functionName : functionNames) { FunctionInfo functionInfo = FunctionRegistry.getFunctionInfo(functionName);
&& (null == schemaName || "".equals(schemaName))) { Set<String> functionNames = FunctionRegistry .getFunctionNames(CLIServiceUtils.patternToRegex(functionName)); for (String functionName : functionNames) { FunctionInfo functionInfo = FunctionRegistry.getFunctionInfo(functionName);
&& (null == schemaName || "".equals(schemaName))) { Set<String> functionNames = FunctionRegistry .getFunctionNames(CLIServiceUtils.patternToRegex(functionName)); for (String functionName : functionNames) { FunctionInfo functionInfo = FunctionRegistry.getFunctionInfo(functionName);
for (String s : FunctionRegistry.getFunctionNames()) { if (s.matches("[a-z_]+")) { sc.addCandidateString(s + "(");