Table of Contents
There are two ways to add new functions to MySQL:
You can add the function through the user-defined function (UDF) interface. User-defined functions are added and removed dynamically using the CREATE FUNCTION and DROP FUNCTION statements. See CREATE FUNCTION.
You can add the function as a native (built in) MySQL function. Native functions are compiled into the mysqld server and become available on a permanent basis.
Each method has advantages and disadvantages:
If you write a user-defined function, you must install the object file in addition to the server itself. If you compile your function into the server, you don't need to do that.
You can add UDFs to a binary MySQL distribution. Native functions require you to modify a source distribution.
If you upgrade your MySQL distribution, you can continue to use your previously installed UDFs. For native functions, you must repeat your modifications each time you upgrade.
Whichever method you use to add new functions, they may be used just like native functions such as ABS() or SOUNDEX().
CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|REAL|INTEGER} SONAME shared_library_name DROP FUNCTION function_name
A user-defined function (UDF) is a way to extend MySQL with a new function that works like native (built in) MySQL function such as ABS() and CONCAT().
AGGREGATE is a new option for MySQL Version 3.23. An AGGREGATE function works exactly like a native MySQL GROUP function like SUM or COUNT().
CREATE FUNCTION saves the function's name, type, and shared library name in the mysql.func system table. You must have the INSERT and DELETE privileges for the mysql database to create and drop functions.
All active functions are reloaded each time the server starts, unless you start mysqld with the --skip-grant-tables option. In this case, UDF initialization is skipped and UDFs are unavailable. (An active function is one that has been loaded with CREATE FUNCTION and not removed with DROP FUNCTION.)
For instructions on writing user-defined functions, see Adding functions. For the UDF mechanism to work, functions must be written in C or C++, your operating system must support dynamic loading and you must have compiled mysqld dynamically (not statically).
Note that to make AGGREGATE work, you must have a mysql.func table that contains the column type. If you do not have this table, you should run the script mysql_fix_privilege_tables to create it.