summaryrefslogtreecommitdiff
path: root/odb/relational/oracle/header.cxx
diff options
context:
space:
mode:
authorConstantin Michael <constantin@codesynthesis.com>2011-10-10 14:48:57 +0200
committerConstantin Michael <constantin@codesynthesis.com>2011-10-21 11:47:13 +0200
commitd8f4d4b403b649df389c57566dba69e06c791364 (patch)
treedc319a0bdd2dbc6adb209886fbaf7de7c8638536 /odb/relational/oracle/header.cxx
parent2619b3e1aa1839c13f9041d86de1f864c8823bc7 (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.cxx12
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;"