diff options
author | Constantin Michael <constantin@codesynthesis.com> | 2011-10-10 14:48:57 +0200 |
---|---|---|
committer | Constantin Michael <constantin@codesynthesis.com> | 2011-10-21 11:47:13 +0200 |
commit | d8f4d4b403b649df389c57566dba69e06c791364 (patch) | |
tree | dc319a0bdd2dbc6adb209886fbaf7de7c8638536 /odb/relational/oracle/header.cxx | |
parent | 2619b3e1aa1839c13f9041d86de1f864c8823bc7 (diff) |
Enforce maximum byte length for CHAR, NCHAR, VARCHAR2 and NVARCHAR2 images
Diffstat (limited to 'odb/relational/oracle/header.cxx')
-rw-r--r-- | odb/relational/oracle/header.cxx | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/odb/relational/oracle/header.cxx b/odb/relational/oracle/header.cxx index 18c27af..a203d35 100644 --- a/odb/relational/oracle/header.cxx +++ b/odb/relational/oracle/header.cxx @@ -147,10 +147,18 @@ namespace relational // Assume the database character set uses a single byte fixed width // encoding. // - if ((mi.st->type == sql_type::NCHAR || - mi.st->type == sql_type::NVARCHAR2) && !mi.st->byte_semantics) + sql_type::core_type t (mi.st->type); + + if ((t == sql_type::NCHAR || t == sql_type::NVARCHAR2) && + !mi.st->byte_semantics) n *= 4; + if (t == sql_type::CHAR || t == sql_type::NCHAR || + t == sql_type::RAW) + n = n > 2000 ? 2000 : n; + else if (t == sql_type::VARCHAR2 || t == sql_type::NVARCHAR2) + n = n > 4000 ? 4000 : n; + os << "char " << mi.var << "value[" << n << "];" << "ub2 " << mi.var << "size;" << "sb2 " << mi.var << "indicator;" |