У меня есть функция PgSQL объявлена как:SOCI, функция PgSQL возвращения запись таблицы - type_conversion не работает
CREATE FUNCTION auth.read_session(session_id varchar) RETURNS auth.sessions
Он возвращает одну запись из таблицы auth.sessions. У меня есть SOCI type_conversion, которая отлично работает, когда Я запускаю select * from auth.sessions where id = :id
. Он работает, когда найдена совпадающая запись и когда результат равен NULL. Однако, когда я меняю заявление:
select * from auth.read_session('invalid');
я получаю исключение:
Нулевое значение не допускается для данного типа во время выполнения «выберите * из auth.read_session („недопустимый“)» ,
Я попытался с перечислением столбцов, передав soci :: indicator и т. Д. Я не могу заставить его работать. Исключение составляет база type_conversion <>.
В типа-преобразования-traits.h есть комментарий о том, что:
// по умолчанию черты класса type_conversion, действует как пройти через для строки :: получить() // когда никакой фактической конвертации необходим.
Почему перевод не требуется? Да, моя функция возвращает запись типа таблицы «auth.sessions». Должно ли оно возвращать RECORD, чтобы преобразование было запущено?
Да, док говорит: «Если последний запрос происходит не вернуть ни одной строки на всех, нулевое значение будет возвращено». В то время я не был уверен в этом, так как в psql один и тот же запрос каким-то образом показывает мне «пустую строку», а не просто NULL. Интересно, как это делается, поскольку unseting echo_hidden не раскрывает никакой магии. Но psql, похоже, следует за объявленным типом возвращаемого значения и дает пустой пул вместо NULL. – PadThink