From d8f4d4b403b649df389c57566dba69e06c791364 Mon Sep 17 00:00:00 2001 From: Constantin Michael Date: Mon, 10 Oct 2011 14:48:57 +0200 Subject: Enforce maximum byte length for CHAR, NCHAR, VARCHAR2 and NVARCHAR2 images --- odb/relational/oracle/header.cxx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'odb/relational/oracle') 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;" -- cgit v1.1