From f54e9e5f2776aae188efc38fd25c5b25a7c2f052 Mon Sep 17 00:00:00 2001 From: Constantin Michael Date: Thu, 26 May 2011 16:29:30 +0200 Subject: Complete statement::bind_result implementation --- odb/pgsql/statement.cxx | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) (limited to 'odb') diff --git a/odb/pgsql/statement.cxx b/odb/pgsql/statement.cxx index c53fec0..5e9007d 100644 --- a/odb/pgsql/statement.cxx +++ b/odb/pgsql/statement.cxx @@ -13,6 +13,7 @@ #include #include #include +#include using namespace std; @@ -128,35 +129,46 @@ namespace odb continue; } - // @@ Revise this. - // - size_t buffer_len; - switch (b.type) { case bind::smallint: { - buffer_len = 2; + *static_cast (b.buffer) = endian_traits::ntoh ( + *reinterpret_cast ( + PQgetvalue (result, static_cast (row), i))); + break; } case bind::integer: { - buffer_len = 4; + *static_cast (b.buffer) = endian_traits::ntoh ( + *reinterpret_cast ( + PQgetvalue (result, static_cast (row), i))); + break; } case bind::bigint: { - buffer_len = 8; + *static_cast (b.buffer) = + endian_traits::ntoh (*reinterpret_cast ( + PQgetvalue (result, static_cast (row), i))); + break; } case bind::real: { - buffer_len = 4; + *static_cast (b.buffer) = endian_traits::ntoh ( + *reinterpret_cast ( + PQgetvalue (result, static_cast (row), i))); + break; } case bind::double_: { - buffer_len = 8; + *static_cast (b.buffer) = endian_traits::ntoh ( + *reinterpret_cast ( + PQgetvalue (result, static_cast (row), i))); + break; } case bind::numeric: @@ -164,11 +176,9 @@ namespace odb case bind::bytea: default: { - buffer_len = static_cast ( + *b.size = static_cast ( PQgetlength (result, static_cast (row), i)); - *b.size = buffer_len; - if (b.capacity < *b.size) { if (b.truncated) @@ -178,13 +188,13 @@ namespace odb continue; } + memcpy (b.buffer, + PQgetvalue (result, static_cast (row), i), + *b.size); + break; } }; - - memcpy (b.buffer, - PQgetvalue (result, static_cast (row), i), - buffer_len); } return r; -- cgit v1.1