Commit 4a12ecf7 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.
parent 064c1b2c
...@@ -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