Merge three.local.lan:/home/matthias/Arbeit/mysql-5.0/src
into three.local.lan:/home/matthias/Arbeit/mysql-5.0/src-1
This commit is contained in:
commit
0eb3afaf6f
@ -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:
|
|||||||
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:
|
|||||||
/**
|
/**
|
||||||
* 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
|
|||||||
|
|
||||||
// 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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
{
|
{
|
||||||
//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,
|
|||||||
|
|
||||||
// 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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user