Compilando e Instalando Funções Definidas Por Usuário


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 MariaDB. Este arquivo contém as seguintes funções:

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 MariaDB 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 MariaDB. 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 MariaDB 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.)

Retornar