我有一个 pgsql 函数声明为:
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');
我得到例外:
执行“select * from auth.read_session('invalid')”时,此类型不允许空值。
我尝试列出列、传递 soci::indicator 等。我无法让它工作。异常来自基本 type_conversion<>。
在 type-conversion-traits.h 中有一条评论指出:
// 默认特征类 type_conversion,作为 row::get() 的传递 // 当不需要实际转换时。
为什么不需要转换?是的,我的函数返回表类型“auth.sessions”的记录。它是否应该返回 RECORD 以便启动转换?