MySQL的UDF(User Defined Function)类似于一种API, 用户根据一定的规范用C/C++(或采用C调用规范的语言)编写一组函数(UDF),然后编译成动态链接库,通过DROP FUNCTION语句来加载和卸载UDF。UDF被加载后可以像调用MySQL的内置函数一样来调用它,并且服务器在启动时会自动加载原来存在的UDF。
复制代码 代码如下:
#ifdef STANDARD/* STANDARD is defined, don't use any mysql functions */ #include <stdlib.h> #include <stdio.h> #include <string.h> #ifdef __WIN__ typedef unsigned __int64 ulonglong; /* Microsofts 64 bit types */ typedef __int64 longlong; #else typedef unsigned long long ulonglong; typedef long long longlong; #endif /*__WIN__*/ #else #include <my_global.h> #include <my_sys.h> #if defined(MYSQL_SERVER) #include <m_string.h> /* To get strmov() */ #else /* when compiled as standalone */ #include <string.h> #endif #endif #include <mysql.h> #include <m_ctype.h> #include <m_string.h> #include <stdlib.h> #include <errno.h> #include <netdb.h> #include <unistd.h> #include<fcntl.h> #include<sys time.h=""> #include<sys ioctl.h=""> #include <sys types.h=""> #include <netinet in.h=""> #include <sys socket.h=""> #include <sys wait.h=""> #include<arpa inet.h=""> #include<unistd.h> #include <mysql.h> #include <ctype.h> #ifdef HAVE_DLOPEN
my_bool http_post_init(UDF_INIT *initid, UDF_ARGS *args, char *message); void http_post_deinit(UDF_INIT *initid); longlong http_post(UDF_INIT *initid, UDF_ARGS *args, char *is_null,char *error); /************************************************************************* ** Example of init function ** Arguments: ** initid Points to a structure that the init function should fill. ** char *ptr; A pointer that the function can use. ** message Error message **RETURN This function should return 1 if something goes wrong. In this case **************************************************************************/ my_bool http_post_init(UDF_INIT *initid, UDF_ARGS *args, char *message) { if (args->arg_count < 3 ) { strcpy(message,"Wrong arguments to http_post; "); return 1; }