@Test public void testDropMacro() throws Exception { FunctionRegistry.registerTemporaryUDF("SOME_MACRO", GenericUDFMacro.class); analyze(parse("DROP TEMPORARY MACRO SOME_MACRO")); } @Test(expected = SemanticException.class)
private int createTemporaryFunction(CreateFunctionDesc createFunctionDesc) { try { // Add any required resources FunctionResource[] resources = toFunctionResource(createFunctionDesc.getResources()); addFunctionResources(resources); Class<?> udfClass = getUdfClass(createFunctionDesc); FunctionInfo registered = FunctionRegistry.registerTemporaryUDF( createFunctionDesc.getFunctionName(), udfClass, resources); if (registered != null) { return 0; } console.printError("FAILED: Class " + createFunctionDesc.getClassName() + " does not implement UDF, GenericUDF, or UDAF"); return 1; } catch (HiveException e) { console.printError("FAILED: " + e.toString()); LOG.info("create function: ", e); return 1; } catch (ClassNotFoundException e) { console.printError("FAILED: Class " + createFunctionDesc.getClassName() + " not found"); LOG.info("create function: ", e); return 1; } }
@Test public void testDropMacroExistsDoNotIgnoreErrors() throws Exception { conf.setBoolVar(ConfVars.DROPIGNORESNONEXISTENT, false); FunctionRegistry.registerTemporaryUDF("SOME_MACRO", GenericUDFMacro.class); analyze(parse("DROP TEMPORARY MACRO SOME_MACRO")); } @Test
private int createTemporaryFunction(CreateFunctionDesc createFunctionDesc) { try { // Add any required resources FunctionResource[] resources = toFunctionResource(createFunctionDesc.getResources()); addFunctionResources(resources); Class<?> udfClass = getUdfClass(createFunctionDesc); FunctionInfo registered = FunctionRegistry.registerTemporaryUDF( createFunctionDesc.getFunctionName(), udfClass, resources); if (registered != null) { return 0; } console.printError("FAILED: Class " + createFunctionDesc.getClassName() + " does not implement UDF, GenericUDF, or UDAF"); return 1; } catch (HiveException e) { console.printError("FAILED: " + e.toString()); LOG.info("create function: " + StringUtils.stringifyException(e)); return 1; } catch (ClassNotFoundException e) { console.printError("FAILED: Class " + createFunctionDesc.getClassName() + " not found"); LOG.info("create function: " + StringUtils.stringifyException(e)); return 1; } }
public void testRegisterTemporaryFunctions() throws Exception { FunctionResource[] emptyResources = new FunctionResource[] {}; // UDF FunctionRegistry.registerTemporaryUDF("tmp_ln", UDFLn.class, emptyResources); FunctionInfo functionInfo = FunctionRegistry.getFunctionInfo("tmp_ln"); assertFalse(functionInfo.isNative()); // GenericUDF FunctionRegistry.registerTemporaryUDF("tmp_concat", GenericUDFConcat.class, emptyResources); functionInfo = FunctionRegistry.getFunctionInfo("tmp_concat"); assertFalse(functionInfo.isNative()); // GenericUDAF FunctionRegistry.registerTemporaryUDF("tmp_max",GenericUDAFMax.class, emptyResources); functionInfo = FunctionRegistry.getFunctionInfo("tmp_max"); assertFalse(functionInfo.isNative()); functionInfo = FunctionRegistry.getWindowFunctionInfo("tmp_max"); assertFalse(functionInfo.isNative()); // UDTF FunctionRegistry.registerTemporaryUDF("tmp_explode", GenericUDTFExplode.class, emptyResources); functionInfo = FunctionRegistry.getFunctionInfo("tmp_explode"); assertFalse(functionInfo.isNative()); }
Class<?> udfClass = getUdfClass(createFunctionDesc); if (UDF.class.isAssignableFrom(udfClass)) { FunctionRegistry.registerTemporaryUDF(createFunctionDesc .getFunctionName(), (Class<? extends UDF>) udfClass, false); return 0;
private FunctionInfo registerToSessionRegistry(String qualifiedName, FunctionInfo function) { FunctionInfo ret = null; ClassLoader prev = Utilities.getSessionSpecifiedClassLoader(); try { // Found UDF in metastore - now add it to the function registry // At this point we should add any relevant jars that would be needed for the UDf. FunctionResource[] resources = function.getResources(); try { FunctionTask.addFunctionResources(resources); } catch (Exception e) { LOG.error("Unable to load resources for " + qualifiedName + ":" + e, e); return null; } ClassLoader loader = Utilities.getSessionSpecifiedClassLoader(); Class<?> udfClass = Class.forName(function.getClassName(), true, loader); ret = FunctionRegistry.registerTemporaryUDF(qualifiedName, udfClass, resources); if (ret == null) { LOG.error(function.getClassName() + " is not a valid UDF class and was not registered."); } if (SessionState.get().isHiveServerQuery()) { SessionState.getRegistryForWrite().addToUDFLoaders(loader); } } catch (ClassNotFoundException e) { // Lookup of UDf class failed LOG.error("Unable to load UDF class: " + e); Utilities.restoreSessionSpecifiedClassLoader(prev); } function.shareStateWith(ret); return ret; }
private int createTemporaryFunction(CreateFunctionDesc createFunctionDesc) { try { // Add any required resources FunctionResource[] resources = toFunctionResource(createFunctionDesc.getResources()); addFunctionResources(resources); Class<?> udfClass = getUdfClass(createFunctionDesc); FunctionInfo registered = FunctionRegistry.registerTemporaryUDF( createFunctionDesc.getFunctionName(), udfClass, resources); if (registered != null) { return 0; } console.printError("FAILED: Class " + createFunctionDesc.getClassName() + " does not implement UDF, GenericUDF, or UDAF"); return 1; } catch (HiveException e) { console.printError("FAILED: " + e.toString()); LOG.info("create function: " + StringUtils.stringifyException(e)); return 1; } catch (ClassNotFoundException e) { console.printError("FAILED: Class " + createFunctionDesc.getClassName() + " not found"); LOG.info("create function: " + StringUtils.stringifyException(e)); return 1; } }