次のように宣言された pgsql 関数があります。
CREATE FUNCTION auth.read_session(session_id varchar) RETURNS auth.sessions
テーブル auth.sessions から 1 つのレコードを返します。を実行すると完全に正常に動作する SOCI type_conversion がありますselect * from auth.sessions where id = :id
。一致するレコードが見つかった場合、および結果が NULL の場合に機能します。ただし、ステートメントを次のように変更すると:
select * from auth.read_session('invalid');
例外が発生します:
「select * from auth.read_session('invalid')」の実行中は、この型に Null 値を使用できません。
列をリストしたり、soci::indicator を渡したりしてみましたが、うまくいきません。例外は、ベース type_conversion<> から発生します。
type-conversion-traits.h には、次のようなコメントがあります。
// デフォルトの特性クラス type_conversion は、実際の変換が不要な場合に // row::get() のパススルーとして機能します。
なぜ変換が必要ないのですか? はい、私の関数はテーブルタイプ「auth.sessions」のレコードを返します。変換が開始されるように、代わりに RECORD を返す必要がありますか?