Arquivos implementando UDFs devem ser compilados e instalados
na máquina onde o servidor está sendo executado. Este
processo é descrito abaixo pelo arquivo UDF exemplo
udf_example.cc
que é incluído na
distribuição fonte do MySQL. Este arquivo contém as
seguintes funções:
metaphon()
retorna uma string
metafonica do argumento string. Ela é algo como uma
string soundex, mas é mais voltada para o inglês.
myfunc_double()
retorna a soma de
valores ASCII de caracteres e seus argumentos, dividido
pela soma de tamanho de seus argumentos.
myfunc_int()
retorna a soma do tamanho
de seus argumentos.
sequence([const int])
retorna uma
sequência iniciando a partir de um número dado ou 1 se
nenhum número for fornecido.
lookup()
retorna o IP de um nome de
máquina.
reverse_lookup()
retorna o nome de
mauina para um número IP. A função pode ser chamada com
uma string "xxx.xxx.xxx.xxx"
ou quatro
números.
A arquivo carregável dinamicamente deve ser compilado como um arquivo objeto compartilhável usando um comando como este:
shell> gcc -shared -o udf_example.so myfunc.cc
Você pode encontrar facilmente as opções de compilador
corretas para seu sistema executando este comando no
diretório sql
da sua árvore de fonte
MySQL:
shell> make udf_example.o
Você deve executar comando de compilador similar àquele que
o make
mostra, exceto que você deve
remover a opção -c
próxima ao fim da
linha e adicionar -o udf_example.so
. (Em
alguns sistemas você pode precisar deixar o comando
-c
.)
Uma vez que você tenha compilado um objeto compartilhado
contendo UDFs, você deve instalá-lo e avisar o MySQL sobre
ele. Compilar um objeto compartilhado de
udf_example.cc
produz um arquivo com nome
parecido com udf_example.so
(o nome exato
pode variar de plataforma para plataforma). Copie este arquivo
para algum diretório procurado com o ligador dinâmico
ld
, tal como /usr/lib
ou adicione o diretório no qual você colocou o objeto
compartilhado ao arquivo de configuração do ligador (e.g.
/etc/ld.so.conf
).
Em muitos sistemas você pode as variáveis de ambiente
LD_LIBRARY
ou
LD_LIBRARY_PATH
para apontar para o
diretório onde se encontra os seus arquivos de funções UDF.
A página dlopen
do manual diz a você
quais variáveis você deve utilizar em seu sistema. Você
deve configurar isto nos scripts de inicialização
mysql.server
ou
mysqld_safe
e reiniciar o
mysqld
.
Depois da biblioteca ser instalada, notifique
mysqld
sobre as novas funções com estes
comandos:
mysql>CREATE FUNCTION metaphon RETURNS STRING SONAME "udf_example.so";
mysql>CREATE FUNCTION myfunc_double RETURNS REAL SONAME "udf_example.so";
mysql>CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "udf_example.so";
mysql>CREATE FUNCTION lookup RETURNS STRING SONAME "udf_example.so";
mysql>CREATE FUNCTION reverse_lookup
->RETURNS STRING SONAME "udf_example.so";
mysql>CREATE AGGREGATE FUNCTION avgcost
->RETURNS REAL SONAME "udf_example.so";
Funções podem ser deletadas utilizando-se DROP
FUNCTION
:
mysql>DROP FUNCTION metaphon;
mysql>DROP FUNCTION myfunc_double;
mysql>DROP FUNCTION myfunc_int;
mysql>DROP FUNCTION lookup;
mysql>DROP FUNCTION reverse_lookup;
mysql>DROP FUNCTION avgcost;
As instruções CREATE FUNCTION
e
DROP FUNCTION
atualizam a tabela de sistema
func
no banco de dados
mysql
. O nome da função, tipo e
biblioteca compartilhada são salvas na tabela. Você deve ter
os privilégios INSERT
e
DELETE
para o banco de dados
mysql
para criar e deletar funções.
Você não deve usar CREATE FUNCTION
para
adicionar uma função que já tenha sido criada. Se você
precisar reinstalar uma função, você deve removê-la com
DROP FUNCTION
e então reinstalá-la com
CREATE FUNCTION
. Você precisaria fazer
isto, por exemplo, se você recompilar uma nova versão da sua
função, assim o mysqld
obtem a nova
versão. Por outro lado, o servidor continuará a utilizar a
versão antiga.
Funções ativas são recarregadas a cada vez que o servidor
inicia, a menos que você inicie mysqld
com
a opção --skip-grant-tables
. Neste caso, a
a inicialização de UDF é ignorada e as UDFs ficam
indisponíveis. Uma função ativa é aquela que carregada com
CREATE FUNCTION
e não removida com
DROP FUNCTION
.)
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.