[firebase-br] Problemas com UDF

sig euler em siginformatica.com.br
Seg Maio 16 16:54:53 -03 2005


Fabiano, criei uma UDF seguindo os passos descritos por vc e funcionou
normalmente. Os parâmetros de compilação estao certos. Fiz o seguinte (
Linux ):

- salvei o seu código no arquivo modulo.c
- compilei: gcc -c -O -fpic -fwritable-strings modulo.c
- gerei o so: ld -G modulo.o -lm -lc -o modulo.so
- copia: cp modulo.so /opt/firebird/udf/modulo.so
- cria a funcao:
declare external function f_Modulo
integer, integer
returns
integer by value
entry_point 'modulo' module_name 'modulo.so';

- testei:
select f_modulo(10,2) from <sua tabela>;

Verifique os passos acima e tente novamente. A única diferença é que utilizo
o Slackware.


----- Original Message -----
From: "Fabiano Alex Arndt" <fabianoallex em pop.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Monday, May 16, 2005 3:56 PM
Subject: [firebase-br] Problemas com UDF


Boa tarde Pessoal,

Estou tendo que criar algumas funções personalizadas para um banco de
dados para simplificar algumas SQLs que estão ficando um pouco
complicadas de se fazer, e achei que solução mais indicada seria
criar algumas UDF, como tenho o banco em linux procurei por uns
exemplos na página da lista e encontrei o seguinte exemplo:

---------------------------
int modulo(int *, int *);

int modulo(a, b)
     int *a;
     int *b;
{
  if (*b == 0)
    return -1; // return something suitably stupid.
  else
    return *a % *b;
}
criei um arquivo .c com o conteudo acima

executei os comandos abaixo:
gcc -c -O -fpic -fwritable-strings <your udf>.c
ld -G <your udf>.o -lm -lc -o <your udflib>.so
cp <your udflib>.so /usr/interbase/udf
No ISQL

e criei a udf no FB.

declare external function f_Modulo
integer, integer
returns
integer by value
entry_point 'modulo' module_name 'name of shared library';
-----------------------------------

fiz quase exatamente como está sendo informado ai em cima,
a unica coisa que não funcionou foi quando executei a seguinte linha:

  ld -G <your udf>.o -lm -lc -o <your udflib>.so

retirei os parametro -lm e -lc, e o arquivo .so foi gerado.
(qual seria a finalidade desses parâmetros?)

mas na hora em que executo uma sql que usa a função que criei
(select f_Modulo(3, 2) from rdb$database;), me é retornado um
erro dizendo que não foi encontrado entry_point ou o module_name
(os nomes de entry_point e module_name estão corretos, ja me certifiquei)

alguém saberia me dizer se está faltando alguma coisa??

obs. uso o FB 1.5.2 e CL10.

Obrigado,
[]'s
Fabiano A. Arndt.




______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa


--
Internal Virus Database is out-of-date.
Checked by AVG Anti-Virus.
Version: 7.0.308 / Virus Database: 266.7.3 - Release Date: 15/03/2005






Mais detalhes sobre a lista de discussão lista