C function, dll, падает сервер

Всем доброго времени суток
Нужна помощь, казалось бы, типичная функция из хелп по Постргес, а работать, мало того что не хочет, так сервер роняет. Код:

#include "postgres.h"
#include "fmgr.h"
 
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
 
PG_FUNCTION_INFO_V1(add_one);
 
__declspec (dllexport) Datum add_one(PG_FUNCTION_ARGS)
{
    int32   arg = PG_GETARG_INT32(0);
 
    PG_RETURN_INT32(arg + 1);
}
 
PG_FUNCTION_INFO_V1(fo);
 
__declspec (dllexport) Datum fo(PG_FUNCTION_ARGS)
{
    float8   arg = PG_GETARG_FLOAT8(0);
 
    PG_RETURN_FLOAT8(arg+1);
}

CREATE OR REPLACE FUNCTION "public"."add_one_f"(double precision) RETURN double precision AS
'dll_c.dll','fo'
LANGUAGE C STRICT

select add_one_f(99.0)
server closed the connection unexpectedly
	This probably means the server terminated abnormally
	before OR while processing the request.

WinXP, server Postgres - 8.3, binaries для линковки - 8.3.5, линковка в Dev-cpp под mingw
PS. Функция add_one(integer), то есть тоже самое для int работает нормально

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Дурацкий вопрос: а вы

Дурацкий вопрос: а вы уверены, что на вашей системе разделителем десятичных разрядов является именно "." точка, а не скажем запятая?
Ещё маленький совет - попробуйте покопаться в коде contrib модулей и найти какую-либо функцию для работы с FLOAT. Может на мысли наведёт?

Ну насчёт разделителя

Ну насчёт разделителя десятичных разрядов, была бы ошибка постгрес -просто бы выдал что в скобках не double precision, а что то непонятное, ну и функцию я запускал с другими числами, без точек, сервер также падает.

Покопаюсь, спасибо, может наведет
------
Не навело(

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023