powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / функции на FreePascal
2 сообщений из 2, страница 1 из 1
функции на FreePascal
    #33508596
VAnDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как можно скомпилировать функцию, написанную на FreePascal, что бы её можно было бы использовать из Postgres'а?
...
Рейтинг: 0 / 0
функции на FreePascal
    #33508812
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VAnDSКак можно скомпилировать функцию, написанную на FreePascal, что бы её можно было бы использовать из Postgres'а?

Дежурю сегодня и от нефиг делать решил развлечься :). Для развлечения использовал Linux Debian 3.1, postgres 7.4.7 (установлен из пакетов), fpc 1.9.4.

1) palloc.c - palloc определен как макрос. Чтоб не морочиться с переводом типов из C в Pascal, написал небольшую обертку:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
#include <postgres.h>
#include <fmgr.h>
#include <utils/palloc.h>


void * plpalloc(int size) {
 return palloc(size);
}

Откомпилировал:
Код: plaintext
1.
 gcc -c palloc.c -I /usr/include/postgresql/server
Получил palloc.o

2) Теперь собсно пример функции, func.pas:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 library  func;

 function  plpalloc(s:integer):pointer; cdecl; external;

 {$L palloc.o} 

 function  fpc_sqr_float8( var  x:double):pdouble; cdecl;
 Begin 
 result:=plpalloc(sizeof(double));
 result^:=x*x;
 End ;

 END .

Компилировал так:
Код: plaintext
1.
 fpc -Sd -XX func.pas 
Полученный libfunc.so закинул в /usr/lib/postgresql/udf/libfunc.so

Декларация:
Код: plaintext
1.
2.
3.
CREATE or REPLACE FUNCTION sqr_float8(float8) RETURNS float8
     AS '/usr/lib/postgresql/udf/libfunc.so', 'fpc_sqr_float8'
     LANGUAGE C STRICT;

Проверил:

testdb=# select sqr_float8(12.23)
sqr_float8
------------
149.5729
(1 row)

Вроде работает :)
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / функции на FreePascal
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]