diff options
author | Constantin Michael <constantin@codesynthesis.com> | 2011-06-24 13:20:25 +0200 |
---|---|---|
committer | Constantin Michael <constantin@codesynthesis.com> | 2011-06-24 13:20:25 +0200 |
commit | 019a58726d50f8f7ca1f16e474a90dfa71064bc9 (patch) | |
tree | 908555479891f65471df42c55307151a01fa1232 | |
parent | 26db3d36d9787bb14419b66a4219fd9e1818556a (diff) |
Correct native_bind lengths array initialization
-rw-r--r-- | odb/pgsql/statement.cxx | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/odb/pgsql/statement.cxx b/odb/pgsql/statement.cxx index b73f2dc..c5b4b95 100644 --- a/odb/pgsql/statement.cxx +++ b/odb/pgsql/statement.cxx @@ -85,7 +85,61 @@ namespace odb else { n.formats[i] = 1; - n.lengths[i] = static_cast<int> (*current_bind.size); + + size_t l; + + switch (current_bind.type) + { + case bind::boolean: + { + l = sizeof (bool); + break; + } + case bind::smallint: + { + l = sizeof (short); + break; + } + case bind::integer: + { + l = sizeof (int); + break; + } + case bind::bigint: + { + l = sizeof (long long); + break; + } + case bind::real: + { + l = sizeof (float); + break; + } + case bind::double_: + { + l = sizeof (double); + break; + } + case bind::uuid: + { + // UUID is a 16-byte sequence. + // + l = 16; + break; + } + case bind::text: + case bind::bytea: + case bind::bit: + case bind::varbit: + { + l = *current_bind.size; + break; + } + case bind::numeric: + assert (false); + } + + n.lengths[i] = static_cast<int> (l); } } } |