Всем доброго времени суток
Нужна помощь, казалось бы, типичная функция из хелп по Постргес, а работать, мало того что не хочет, так сервер роняет. Код:
#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
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, а что то непонятное, ну и функцию я запускал с другими числами, без точек, сервер также падает.
Покопаюсь, спасибо, может наведет
------
Не навело(