Commit 3bf308a1 authored by unknown's avatar unknown

Merge mskold@bk-internal.mysql.com:/home/bk/mysql-5.0

into  mysql.com:/usr/local/home/marty/MySQL/mysql-5.0
parents 27b40827 986d3fc0
...@@ -201,13 +201,13 @@ create table t1 ( ...@@ -201,13 +201,13 @@ create table t1 (
pk1 bit(9) not null primary key, pk1 bit(9) not null primary key,
b int b int
) engine=ndbcluster; ) engine=ndbcluster;
ERROR HY000: Can't create table './test/t1.frm' (errno: 739) ERROR HY000: Can't create table './test/t1.frm' (errno: 906)
create table t1 ( create table t1 (
pk1 int not null primary key, pk1 int not null primary key,
b bit(9), b bit(9),
key(b) key(b)
) engine=ndbcluster; ) engine=ndbcluster;
ERROR HY000: Can't create table './test/t1.frm' (errno: 743) ERROR HY000: Can't create table './test/t1.frm' (errno: 906)
create table t1 ( create table t1 (
pk1 int primary key, pk1 int primary key,
b bit(32) not null b bit(32) not null
......
...@@ -146,7 +146,8 @@ public: ...@@ -146,7 +146,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
......
...@@ -217,11 +217,12 @@ Dbtux::execTUX_ADD_ATTRREQ(Signal* signal) ...@@ -217,11 +217,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;
} }
} }
......
...@@ -1573,7 +1573,7 @@ NdbDictInterface::createOrAlterTable(Ndb & ndb, ...@@ -1573,7 +1573,7 @@ NdbDictInterface::createOrAlterTable(Ndb & ndb,
bool alter) bool alter)
{ {
DBUG_ENTER("NdbDictInterface::createOrAlterTable"); DBUG_ENTER("NdbDictInterface::createOrAlterTable");
unsigned i; unsigned i, err;
if((unsigned)impl.getNoOfPrimaryKeys() > NDB_MAX_NO_OF_ATTRIBUTES_IN_KEY){ if((unsigned)impl.getNoOfPrimaryKeys() > NDB_MAX_NO_OF_ATTRIBUTES_IN_KEY){
m_error.code= 4317; m_error.code= 4317;
DBUG_RETURN(-1); DBUG_RETURN(-1);
...@@ -1683,8 +1683,10 @@ NdbDictInterface::createOrAlterTable(Ndb & ndb, ...@@ -1683,8 +1683,10 @@ NdbDictInterface::createOrAlterTable(Ndb & ndb,
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
...@@ -2157,7 +2159,7 @@ NdbDictInterface::createIndex(Ndb & ndb, ...@@ -2157,7 +2159,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) {
...@@ -2208,10 +2210,12 @@ NdbDictInterface::createIndex(Ndb & ndb, ...@@ -2208,10 +2210,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;
} }
attributeList.id[i] = col->m_attrId; attributeList.id[i] = col->m_attrId;
......
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