public void unregisterFunction(String functionName) throws HiveException { lock.lock(); try { functionName = functionName.toLowerCase(); FunctionInfo fi = mFunctions.get(functionName); if (fi != null) { if (fi.isBuiltIn()) { throw new HiveException(ErrorMsg.DROP_NATIVE_FUNCTION.getMsg(functionName)); } mFunctions.remove(functionName); fi.discarded(); if (fi.isPersistent()) { removePersistentFunctionUnderLock(fi); } } } finally { lock.unlock(); } }
public void unregisterFunction(String functionName) throws HiveException { lock.lock(); try { functionName = functionName.toLowerCase(); FunctionInfo fi = mFunctions.get(functionName); if (fi != null) { if (fi.isBuiltIn()) { throw new HiveException(ErrorMsg.DROP_NATIVE_FUNCTION.getMsg(functionName)); } mFunctions.remove(functionName); fi.discarded(); if (fi.isPersistent()) { removePersistentFunctionUnderLock(fi); } } } finally { lock.unlock(); } }
if (function.isBuiltIn()) { builtIns.add(function.getFunctionClass()); } else if (function.isPersistent() && !isNative) {
if (function.isBuiltIn()) { builtIns.add(function.getFunctionClass()); } else if (function.isPersistent() && !isNative) {
if (isNative && info != null && info.isPersistent()) { return registerToSessionRegistry(qualifiedName, info);
if (isNative && info != null && info.isPersistent()) { return registerToSessionRegistry(qualifiedName, info);
assertTrue(functionInfo.isPersistent()); assertTrue(functionInfo.isNative()); assertFalse(functionInfo.isBuiltIn()); functionInfo = FunctionRegistry.getFunctionInfo("default.perm_ln"); assertTrue(functionInfo.isPersistent()); assertTrue(functionInfo.isNative()); assertFalse(functionInfo.isBuiltIn()); GenericUDFConcat.class.getName(), true, emptyResources); functionInfo = FunctionRegistry.getFunctionInfo("default.perm_concat"); assertTrue(functionInfo.isPersistent()); assertTrue(functionInfo.isNative()); assertFalse(functionInfo.isBuiltIn()); GenericUDAFMax.class.getName(), true, emptyResources); functionInfo = FunctionRegistry.getFunctionInfo("default.perm_max"); assertTrue(functionInfo.isPersistent()); functionInfo = FunctionRegistry.getWindowFunctionInfo("default.perm_max"); assertTrue(functionInfo.isPersistent()); assertTrue(functionInfo.isNative()); assertFalse(functionInfo.isBuiltIn()); GenericUDTFExplode.class.getName(), true, emptyResources); functionInfo = FunctionRegistry.getFunctionInfo("default.perm_explode"); assertTrue(functionInfo.isPersistent()); assertTrue(functionInfo.isNative()); assertFalse(functionInfo.isBuiltIn());
private FunctionInfo getQualifiedFunctionInfo(String qualifiedName) throws SemanticException { FunctionInfo info = mFunctions.get(qualifiedName); if (info != null && info.isBlockedFunction()) { throw new SemanticException ("UDF " + qualifiedName + " is not allowed"); } if (!isNative && info != null && info.isDiscarded()) { // the persistent function is discarded. try reload mFunctions.remove(qualifiedName); return null; } // HIVE-6672: In HiveServer2 the JARs for this UDF may have been loaded by a different thread, // and the current thread may not be able to resolve the UDF. Test for this condition // and if necessary load the JARs in this thread. if (isNative && info != null && info.isPersistent()) { return registerToSessionRegistry(qualifiedName, info); } return info; }