Commit 27a2d1b6 authored by mskold@mysql.com's avatar mskold@mysql.com

Merge mysql.com:/usr/local/home/marty/MySQL/mysql-5.0

into  mysql.com:/usr/local/home/marty/MySQL/mysql-5.1-new
parents 15ca6daf 22d345bf
...@@ -147,7 +147,8 @@ public: ...@@ -147,7 +147,8 @@ public:
enum ErrorCode { enum ErrorCode {
NoError = 0, NoError = 0,
InvalidCharset = 743, InvalidCharset = 743,
TooManyBitsUsed = 831 TooManyBitsUsed = 831,
UnsupportedType = 906
}; };
private: private:
Uint32 userPtr; Uint32 userPtr;
......
...@@ -117,9 +117,9 @@ public: ...@@ -117,9 +117,9 @@ public:
/** /**
* Check character set. * Check character set.
*/ */
static bool usable_in_pk(Uint32 typeId, const void* info); static uint check_column_for_pk(Uint32 typeId, const void* info);
static bool usable_in_hash_index(Uint32 typeId, const void* info); static uint check_column_for_hash_index(Uint32 typeId, const void* info);
static bool usable_in_ordered_index(Uint32 typeId, const void* info); static uint check_column_for_ordered_index(Uint32 typeId, const void* info);
/** /**
* Get number of length bytes and length from variable length string. * Get number of length bytes and length from variable length string.
......
...@@ -872,8 +872,8 @@ NdbSqlUtil::likeLongvarbinary(const void* info, const void* p1, unsigned n1, con ...@@ -872,8 +872,8 @@ NdbSqlUtil::likeLongvarbinary(const void* info, const void* p1, unsigned n1, con
// check charset // check charset
bool uint
NdbSqlUtil::usable_in_pk(Uint32 typeId, const void* info) NdbSqlUtil::check_column_for_pk(Uint32 typeId, const void* info)
{ {
const Type& type = getType(typeId); const Type& type = getType(typeId);
switch (type.m_typeId) { switch (type.m_typeId) {
...@@ -882,12 +882,14 @@ NdbSqlUtil::usable_in_pk(Uint32 typeId, const void* info) ...@@ -882,12 +882,14 @@ NdbSqlUtil::usable_in_pk(Uint32 typeId, const void* info)
case Type::Longvarchar: case Type::Longvarchar:
{ {
const CHARSET_INFO *cs = (const CHARSET_INFO*)info; const CHARSET_INFO *cs = (const CHARSET_INFO*)info;
return if(cs != 0 &&
cs != 0 && cs->cset != 0 &&
cs->cset != 0 && cs->coll != 0 &&
cs->coll != 0 && cs->coll->strnxfrm != 0 &&
cs->coll->strnxfrm != 0 && cs->strxfrm_multiply <= MAX_XFRM_MULTIPLY)
cs->strxfrm_multiply <= MAX_XFRM_MULTIPLY; return 0;
else
return 743;
} }
break; break;
case Type::Undefined: case Type::Undefined:
...@@ -896,19 +898,19 @@ NdbSqlUtil::usable_in_pk(Uint32 typeId, const void* info) ...@@ -896,19 +898,19 @@ NdbSqlUtil::usable_in_pk(Uint32 typeId, const void* info)
case Type::Bit: case Type::Bit:
break; break;
default: default:
return true; return 0;
} }
return false; return 906;
} }
bool uint
NdbSqlUtil::usable_in_hash_index(Uint32 typeId, const void* info) NdbSqlUtil::check_column_for_hash_index(Uint32 typeId, const void* info)
{ {
return usable_in_pk(typeId, info); return check_column_for_pk(typeId, info);
} }
bool uint
NdbSqlUtil::usable_in_ordered_index(Uint32 typeId, const void* info) NdbSqlUtil::check_column_for_ordered_index(Uint32 typeId, const void* info)
{ {
const Type& type = getType(typeId); const Type& type = getType(typeId);
if (type.m_cmp == NULL) if (type.m_cmp == NULL)
...@@ -919,13 +921,15 @@ NdbSqlUtil::usable_in_ordered_index(Uint32 typeId, const void* info) ...@@ -919,13 +921,15 @@ NdbSqlUtil::usable_in_ordered_index(Uint32 typeId, const void* info)
case Type::Longvarchar: case Type::Longvarchar:
{ {
const CHARSET_INFO *cs = (const CHARSET_INFO*)info; const CHARSET_INFO *cs = (const CHARSET_INFO*)info;
return if (cs != 0 &&
cs != 0 && cs->cset != 0 &&
cs->cset != 0 && cs->coll != 0 &&
cs->coll != 0 && cs->coll->strnxfrm != 0 &&
cs->coll->strnxfrm != 0 && cs->coll->strnncollsp != 0 &&
cs->coll->strnncollsp != 0 && cs->strxfrm_multiply <= MAX_XFRM_MULTIPLY)
cs->strxfrm_multiply <= MAX_XFRM_MULTIPLY; return 0;
else
return 743;
} }
break; break;
case Type::Undefined: case Type::Undefined:
...@@ -934,9 +938,9 @@ NdbSqlUtil::usable_in_ordered_index(Uint32 typeId, const void* info) ...@@ -934,9 +938,9 @@ NdbSqlUtil::usable_in_ordered_index(Uint32 typeId, const void* info)
case Type::Bit: // can be fixed case Type::Bit: // can be fixed
break; break;
default: default:
return true; return 0;
} }
return false; return 906;
} }
// utilities // utilities
......
...@@ -215,11 +215,12 @@ Dbtux::execTUX_ADD_ATTRREQ(Signal* signal) ...@@ -215,11 +215,12 @@ Dbtux::execTUX_ADD_ATTRREQ(Signal* signal)
break; break;
} }
if (descAttr.m_charset != 0) { if (descAttr.m_charset != 0) {
uint err;
CHARSET_INFO *cs = all_charsets[descAttr.m_charset]; CHARSET_INFO *cs = all_charsets[descAttr.m_charset];
ndbrequire(cs != 0); ndbrequire(cs != 0);
if (! NdbSqlUtil::usable_in_ordered_index(descAttr.m_typeId, cs)) { if ((err = NdbSqlUtil::check_column_for_ordered_index(descAttr.m_typeId, cs))) {
jam(); jam();
errorCode = TuxAddAttrRef::InvalidCharset; errorCode = (TuxAddAttrRef::ErrorCode) err;
break; break;
} }
} }
......
...@@ -2292,7 +2292,7 @@ NdbDictInterface::createOrAlterTable(Ndb & ndb, ...@@ -2292,7 +2292,7 @@ NdbDictInterface::createOrAlterTable(Ndb & ndb,
NdbTableImpl & impl, NdbTableImpl & impl,
bool alter) bool alter)
{ {
unsigned i; unsigned i, err;
char *ts_names[MAX_NDB_PARTITIONS]; char *ts_names[MAX_NDB_PARTITIONS];
DBUG_ENTER("NdbDictInterface::createOrAlterTable"); DBUG_ENTER("NdbDictInterface::createOrAlterTable");
...@@ -2593,8 +2593,10 @@ loop: ...@@ -2593,8 +2593,10 @@ loop:
DBUG_RETURN(-1); DBUG_RETURN(-1);
} }
// primary key type check // primary key type check
if (col->m_pk && ! NdbSqlUtil::usable_in_pk(col->m_type, col->m_cs)) { if (col->m_pk &&
m_error.code= (col->m_cs != 0 ? 743 : 739); (err = NdbSqlUtil::check_column_for_pk(col->m_type, col->m_cs)))
{
m_error.code= err;
DBUG_RETURN(-1); DBUG_RETURN(-1);
} }
// distribution key not supported for Char attribute // distribution key not supported for Char attribute
...@@ -3025,7 +3027,7 @@ NdbDictInterface::createIndex(Ndb & ndb, ...@@ -3025,7 +3027,7 @@ NdbDictInterface::createIndex(Ndb & ndb,
{ {
//validate(); //validate();
//aggregate(); //aggregate();
unsigned i; unsigned i, err;
UtilBufferWriter w(m_buffer); UtilBufferWriter w(m_buffer);
const size_t len = strlen(impl.m_externalName.c_str()) + 1; const size_t len = strlen(impl.m_externalName.c_str()) + 1;
if(len > MAX_TAB_NAME_SIZE) { if(len > MAX_TAB_NAME_SIZE) {
...@@ -3074,10 +3076,12 @@ NdbDictInterface::createIndex(Ndb & ndb, ...@@ -3074,10 +3076,12 @@ NdbDictInterface::createIndex(Ndb & ndb,
// index key type check // index key type check
if (it == DictTabInfo::UniqueHashIndex && if (it == DictTabInfo::UniqueHashIndex &&
! NdbSqlUtil::usable_in_hash_index(col->m_type, col->m_cs) || (err = NdbSqlUtil::check_column_for_hash_index(col->m_type, col->m_cs))
||
it == DictTabInfo::OrderedIndex && it == DictTabInfo::OrderedIndex &&
! NdbSqlUtil::usable_in_ordered_index(col->m_type, col->m_cs)) { (err = NdbSqlUtil::check_column_for_ordered_index(col->m_type, col->m_cs)))
m_error.code = 743; {
m_error.code = err;
return -1; return -1;
} }
// API uses external column number to talk to DICT // API uses external column number to talk to DICT
......
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