Страница 1 из 1

Почему Firebird при обращении к UDF закрывает соединение?!

Добавлено: 18 янв 2012, 00:39
Сергей
Господа! Помогите разобраться.

Есть функция:

Код: Выделить всё

[user@myhost udf]$ cat str_simple.c
#include <string.h>
#include "/opt/firebird/include/ib_util.h"

char *str_simple(char *str) {

    char *result = ib_util_malloc(strlen(str) + 1);
    memcpy(result, str, strlen(str) + 1);
    return result;
}
Для сборки:

Код: Выделить всё

[user@myhost udf]$ cat makeudf 
#!/bin/bash

gcc -c -O -fpic $1.c &&
ld -G $1.o -lm -lc -o $1.so &&
rm $1.o &&
mv $1.so /opt/firebird/UDF
[user@myhost udf]$ ./makeudf  str_simple
[user@myhost udf]$
В базе функция объявлена так:

Код: Выделить всё

DECLARE EXTERNAL FUNCTION str_simple
CSTRING(256)
RETURNS CSTRING(256) FREE_IT
ENTRY_POINT 'str_simple' MODULE_NAME 'str_simple';
Дальше:

Код: Выделить всё

[user@myhost database]$ /opt/firebird/bin/isql base.gdb -USER sysdba -PASS masterkey
Database:  base.gdb, User: sysdba
SQL> SELECT STR_SIMPLE('Текст') FROM RDB$FIELDS;

STR_SIMPLE                                                                                                                                                                                                                                                             
=============================================================================== 
Statement failed, SQLSTATE = 08006
Error reading data from the connection.
С чего вдруг закрывается соединение?

Всё это в Linux 3.1.9-2-ARCH ... x86_64 и Firebird-SuperServer 2.5.1.26351_0-4

Re: Почему Firebird при обращении к UDF закрывает соединение

Добавлено: 18 янв 2012, 10:47
kdv
соединение закрывается потому, что функция написана криво, и сервер в результате ее вызова падает.
вы функцию пишете по какому-то образцу? например fbudf, rfunc и т.п.?