Caros, Obrigado pelo esforço na ajuda. Gostaria aqui de pedir que nós abstraíssemos um pouco do problema, já que este é apenas acadêmico. Trata-se do meu TCC de conclusão da pós-graduação em Banco de Dados. Resumidamente, estou criando uma extensão que permitirá fazer otimização de consultas que dependam de cálculos complexos utilizando-se de computação genética. Minha extensão cuida da parte da computação genética da coisa e o usuário irá implementar as funções (em PlPgSQL ou em qualquer outra linguagem de script do postgres) específicas de seus dados e submetê-las à extensão para obter os resultados. Modéstia à parte, a implementação está ficando muito boa!! O código está incrivelmente pequeno e altamente rápido com gerenciamento de memória impecável. (Ao menos na minha opnião!!!! hehehe) Isso em testes sem o Postgres.
Sei que não ficou muito claro, mas espero um dia ter a oportunidade de demonstrá-la em uma PgCon por aí. Na integração com o Postgres a única pendência é fazer com que as funções especificadas possam ser chamadas pela extensão. Procurei, porém não encontrei um exemplo que utilizasse de maneira compreensível as funções FunctionCallX() e fmgr(). Pelo que eu vi no código do Postgres a função fmgr está marcada como Deprecated e consta uma notação para não mais usá-la em novas codificações. Já as funções FunctionCallX possuem parâmetros de inicialização bastante complexos e a explicação do código deixa um pouco a desejar, além do fato de eu não ser nenhum expert em C (mas dá pro gasto... hehehe). Se alguém puder me dar alguma coisa do tipo: _____________________________________________________________ Chamando a função “my_function(int x)”: Código em C: ... Resultado res = FunctionCallx(funcNameToFmgrInfo(“my_function”), intToDatum(50)); _____________________________________________________________ Onde "res" armazenaria o resultado da função "my_function". Não precisa ser necessariamente assim, mas que execute esta ação. Se a chamada da função for por Oid também está valendo. Pessoal, mais uma vez obrigado pela força. Quem der alguma sugestão que me conduza à solução, garanto que coloco um agradecimento na monografia. Não é grande coisa, mas pelo menos seu nome vai constar. E se por ventura, eu conseguir a proeza de apresentar essa ferramenta numa conferência aí vale o IBOPE. Grande abraço a todos. 2009/11/7 Euler Taveira de Oliveira <[email protected]>: > Marcone escreveu: >> Meu problema (sendo mais específico) é que estou criando uma “DLL”, um >> pacote com várias funções (linguagem C), que poderão ser utilizadas >> para aprimoramento de consultas no postgre. Algumas destas funções >> executam outras funções especificadas pelo usuário em PlPgSQL. >> > Como você está fazendo isso? Acredito estar indo pelo caminho mais longo. Por > que não fazer tudo em C ou PL/PgSQL? > >> Em linhas gerais uma das funcionalidades obedece ao seguinte fluxo: >> usuário define algumas funções, chama as funções da “DLL” passando as >> funções criadas (nome da função) como parâmetro, as funções da “DLL” >> executam as funções do usuário e trabalham os resultados obtidos. >> > Para que colocar mais um elemento (funções da DLL) na sua solução? Por que não > utilizar diretamente as funções definidas pelo usuário (UDF)? > >> O problema é que não encontrei uma maneira de chamar uma função do >> usuário com esta estrutura. E, na verdade, nem sei se é possível, mas >> acredito que seja. Sei que devo me aprofundar mais na arquitetura do >> postgre e com isso dar continuidade à implementação, mas se alguém >> puder me mostrar o caminho das pedras eu agradeço. >> > É possível. Vide fmgr_info() e FunctionCallX() (onde 1 <= x <= 9) no > código-fonte do PostgreSQL para obter exemplos. > > > -- > Euler Taveira de Oliveira > http://www.timbira.com/ > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
