Commit f286444b authored by Narayanan V's avatar Narayanan V

Bug#44025 Some schema names longer than 8 characters not supported by IBMDB2I

On IBM i 5.4, schemas with names that are longer 
than 8 characters and contain digits or an underscore
cannot contain IBMDB2I tables, even though this should
theoritically be possible if all alpha characters
are uppercase.

THe current patch fixes the IBMDB2I engine to
allow digits and the underscore(_) to be used in
schema names longer than 8 characters on IBM i 5.4.

storage/ibmdb2i/db2i_misc.h:
  The function which detected whether the
  operating system would treat a schema as an "ordinary identifier" (allowing 10 characters in the name instead of 8) did not cover all possible cases.Function was
  renamed and enhanced to detect all
  possible cases of "ordinary identifiers".
storage/ibmdb2i/ha_ibmdb2i.cc:
  use the renamed function to cover all
  possible cases of ordinary identifiers.
parent 214bd5a1
...@@ -92,11 +92,17 @@ bool convertMySQLNameToDB2Name(const char* input, ...@@ -92,11 +92,17 @@ bool convertMySQLNameToDB2Name(const char* input,
return (o <= outlen-1); return (o <= outlen-1);
} }
bool isUpperOrQuote(const CHARSET_INFO* cs, const char* s) bool isOrdinaryIdentifier(const char* s)
{ {
while (*s) while (*s)
{ {
if (my_isupper(cs, *s) || (*s == '"')) if (my_isupper(system_charset_info, *s) ||
my_isdigit(system_charset_info, *s) ||
(*s == '_') ||
(*s == '@') ||
(*s == '$') ||
(*s == '#') ||
(*s == '"'))
++s; ++s;
else else
return false; return false;
......
...@@ -2122,7 +2122,7 @@ int ha_ibmdb2i::create(const char *name, TABLE *table_arg, ...@@ -2122,7 +2122,7 @@ int ha_ibmdb2i::create(const char *name, TABLE *table_arg,
if (osVersion.v < 6) if (osVersion.v < 6)
{ {
if (strlen(libName) > if (strlen(libName) >
MAX_DB2_V5R4_LIBNAME_LENGTH + (isUpperOrQuote(system_charset_info, libName) ? 2 : 0)) MAX_DB2_V5R4_LIBNAME_LENGTH + (isOrdinaryIdentifier(libName) ? 2 : 0))
{ {
getErrTxt(DB2I_ERR_TOO_LONG_SCHEMA,libName, MAX_DB2_V5R4_LIBNAME_LENGTH); getErrTxt(DB2I_ERR_TOO_LONG_SCHEMA,libName, MAX_DB2_V5R4_LIBNAME_LENGTH);
DBUG_RETURN(DB2I_ERR_TOO_LONG_SCHEMA); DBUG_RETURN(DB2I_ERR_TOO_LONG_SCHEMA);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment