Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / возврат длинного целого из С - функций в ХП постгреса / 6 сообщений из 6, страница 1 из 1
25.04.2005, 14:47
    #33033478
mef
mef
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возврат длинного целого из С - функций в ХП постгреса
Вопрос наверное несложный, но что-то я на нём застрял.
Есть функция на С, компилируем-подключаем к постгресу как ХП.
Если возвращаемый тип int в С и int4 в Постгресе - всё ОК.
Если возвращаемый тип long в С и int8 в Постгресе - получаем memory fault.
Вопрос - как бы из С вернуть в постгрес длинное целое (например результат поиска ID в таблице, тип которого - serial)?
Заранее спасибо всем кто помогает.
PS:
может кто ещё поможет с использованием SPI_exec?
она как аргумент принимает const char - строку SQL. Вот как в эту строчку подставить параметры?
то есть ясно, что д.б. что-то типа

sprintf(SQLcmd,"Select .... where ID=%i",param1);
...SPI_exec(SQLcmd)...проблема в том, что SQLcmd - это char *, тогда не работает sprintf, или char[256] (например), тогда не работает SPI_exec. Понятно, что надо типы приводить - но вот как и к чему?
...
Рейтинг: 0 / 0
25.04.2005, 15:19
    #33033612
Kartas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возврат длинного целого из С - функций в ХП постгреса
ежели не ошибаюсь есть в сях такой тип как word и производные
...
Рейтинг: 0 / 0
25.04.2005, 17:21
    #33034025
Hordi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возврат длинного целого из С - функций в ХП постгреса
Кидай тело функции с int8.


Это работает однозначно.

char buf[256];
sprintf(buf,"...=%d",param1);
...SPI_exec(buf);

Успехов
...
Рейтинг: 0 / 0
25.04.2005, 22:29
    #33034517
gamych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возврат длинного целого из С - функций в ХП постгреса
mefВопрос наверное несложный, но что-то я на нём застрял.
Есть функция на С, компилируем-подключаем к постгресу как ХП.
Если возвращаемый тип int в С и int4 в Постгресе - всё ОК.
Если возвращаемый тип long в С и int8 в Постгресе - получаем memory fault.
Вопрос - как бы из С вернуть в постгрес длинное целое (например результат поиска ID в таблице, тип которого - serial)?
Заранее спасибо всем кто помогает.
PS:
может кто ещё поможет с использованием SPI_exec?
она как аргумент принимает const char - строку SQL. Вот как в эту строчку подставить параметры?
то есть ясно, что д.б. что-то типа

sprintf(SQLcmd,"Select .... where ID=%i",param1);
...SPI_exec(SQLcmd)...проблема в том, что SQLcmd - это char *, тогда не работает sprintf, или char[256] (например), тогда не работает SPI_exec. Понятно, что надо типы приводить - но вот как и к чему?
Ежели у тебя 32-разр. платформа (а судя по всему так), то long - это никак не int8, а int4. Юзай long long, и будет тебе счастье. Проверено.
...
Рейтинг: 0 / 0
26.04.2005, 17:24
    #33036637
mef
mef
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возврат длинного целого из С - функций в ХП постгреса
сапасибо всем написавшим.
Действительно, у меня linux 32-x разрядная.
и вчитавшись в доки понял что и вправду long это int4. Так что сам виноват - читаем доки, они рулез.
может я чего не так делаю, но конструкция
char buf[256];
sprintf(buf,"...=%d",param1);
...SPI_exec(buf);
у меня железно вылетает в segmentation fault.
...
Рейтинг: 0 / 0
28.04.2005, 14:53
    #33040630
mef
mef
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
возврат длинного целого из С - функций в ХП постгреса
так, затуп мой. Всё правильно работает как и было указано. Надо лишь делать
Load 'filename' после перекомпилирования .so - иначе connection валится.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / возврат длинного целого из С - функций в ХП постгреса / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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