summaryrefslogtreecommitdiff
path: root/ndb
diff options
context:
space:
mode:
authorunknown <mskold@mysql.com>2006-04-20 13:35:34 +0200
committerunknown <mskold@mysql.com>2006-04-20 13:35:34 +0200
commitc01754c9f3ff1e10fecf4e8a78581117bb0de659 (patch)
treea96f574f477faa11d12ed80316e3f31eebd4a90c /ndb
parentd27c7a7c80aeb877f5e5069e7fde3c84cfa968ed (diff)
parent316c96fa81adeae15533e5eeba25ee64a47467ee (diff)
downloadmariadb-git-c01754c9f3ff1e10fecf4e8a78581117bb0de659.tar.gz
Merge mskold@bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/usr/local/home/marty/MySQL/mysql-5.0
Diffstat (limited to 'ndb')
-rw-r--r--ndb/include/kernel/signaldata/TupFrag.hpp3
-rw-r--r--ndb/include/util/NdbSqlUtil.hpp6
-rw-r--r--ndb/src/common/util/NdbSqlUtil.cpp52
-rw-r--r--ndb/src/kernel/blocks/dbtux/DbtuxMeta.cpp5
-rw-r--r--ndb/src/ndbapi/NdbDictionaryImpl.cpp18
5 files changed, 47 insertions, 37 deletions
diff --git a/ndb/include/kernel/signaldata/TupFrag.hpp b/ndb/include/kernel/signaldata/TupFrag.hpp
index 8acb3d28bd6..5fb9d7bcf42 100644
--- a/ndb/include/kernel/signaldata/TupFrag.hpp
+++ b/ndb/include/kernel/signaldata/TupFrag.hpp
@@ -146,7 +146,8 @@ public:
enum ErrorCode {
NoError = 0,
InvalidCharset = 743,
- TooManyBitsUsed = 831
+ TooManyBitsUsed = 831,
+ UnsupportedType = 906
};
private:
Uint32 userPtr;
diff --git a/ndb/include/util/NdbSqlUtil.hpp b/ndb/include/util/NdbSqlUtil.hpp
index 3e98dcd1805..36a75136c45 100644
--- a/ndb/include/util/NdbSqlUtil.hpp
+++ b/ndb/include/util/NdbSqlUtil.hpp
@@ -117,9 +117,9 @@ public:
/**
* Check character set.
*/
- static bool usable_in_pk(Uint32 typeId, const void* info);
- static bool usable_in_hash_index(Uint32 typeId, const void* info);
- static bool usable_in_ordered_index(Uint32 typeId, const void* info);
+ static uint check_column_for_pk(Uint32 typeId, const void* info);
+ static uint check_column_for_hash_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.
diff --git a/ndb/src/common/util/NdbSqlUtil.cpp b/ndb/src/common/util/NdbSqlUtil.cpp
index 09e150dbacf..f2506eda6d4 100644
--- a/ndb/src/common/util/NdbSqlUtil.cpp
+++ b/ndb/src/common/util/NdbSqlUtil.cpp
@@ -872,8 +872,8 @@ NdbSqlUtil::likeLongvarbinary(const void* info, const void* p1, unsigned n1, con
// check charset
-bool
-NdbSqlUtil::usable_in_pk(Uint32 typeId, const void* info)
+uint
+NdbSqlUtil::check_column_for_pk(Uint32 typeId, const void* info)
{
const Type& type = getType(typeId);
switch (type.m_typeId) {
@@ -882,12 +882,14 @@ NdbSqlUtil::usable_in_pk(Uint32 typeId, const void* info)
case Type::Longvarchar:
{
const CHARSET_INFO *cs = (const CHARSET_INFO*)info;
- return
- cs != 0 &&
- cs->cset != 0 &&
- cs->coll != 0 &&
- cs->coll->strnxfrm != 0 &&
- cs->strxfrm_multiply <= MAX_XFRM_MULTIPLY;
+ if(cs != 0 &&
+ cs->cset != 0 &&
+ cs->coll != 0 &&
+ cs->coll->strnxfrm != 0 &&
+ cs->strxfrm_multiply <= MAX_XFRM_MULTIPLY)
+ return 0;
+ else
+ return 743;
}
break;
case Type::Undefined:
@@ -896,19 +898,19 @@ NdbSqlUtil::usable_in_pk(Uint32 typeId, const void* info)
case Type::Bit:
break;
default:
- return true;
+ return 0;
}
- return false;
+ return 906;
}
-bool
-NdbSqlUtil::usable_in_hash_index(Uint32 typeId, const void* info)
+uint
+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
-NdbSqlUtil::usable_in_ordered_index(Uint32 typeId, const void* info)
+uint
+NdbSqlUtil::check_column_for_ordered_index(Uint32 typeId, const void* info)
{
const Type& type = getType(typeId);
if (type.m_cmp == NULL)
@@ -919,13 +921,15 @@ NdbSqlUtil::usable_in_ordered_index(Uint32 typeId, const void* info)
case Type::Longvarchar:
{
const CHARSET_INFO *cs = (const CHARSET_INFO*)info;
- return
- cs != 0 &&
- cs->cset != 0 &&
- cs->coll != 0 &&
- cs->coll->strnxfrm != 0 &&
- cs->coll->strnncollsp != 0 &&
- cs->strxfrm_multiply <= MAX_XFRM_MULTIPLY;
+ if (cs != 0 &&
+ cs->cset != 0 &&
+ cs->coll != 0 &&
+ cs->coll->strnxfrm != 0 &&
+ cs->coll->strnncollsp != 0 &&
+ cs->strxfrm_multiply <= MAX_XFRM_MULTIPLY)
+ return 0;
+ else
+ return 743;
}
break;
case Type::Undefined:
@@ -934,9 +938,9 @@ NdbSqlUtil::usable_in_ordered_index(Uint32 typeId, const void* info)
case Type::Bit: // can be fixed
break;
default:
- return true;
+ return 0;
}
- return false;
+ return 906;
}
// utilities
diff --git a/ndb/src/kernel/blocks/dbtux/DbtuxMeta.cpp b/ndb/src/kernel/blocks/dbtux/DbtuxMeta.cpp
index 93c4a583624..c85c8384081 100644
--- a/ndb/src/kernel/blocks/dbtux/DbtuxMeta.cpp
+++ b/ndb/src/kernel/blocks/dbtux/DbtuxMeta.cpp
@@ -217,11 +217,12 @@ Dbtux::execTUX_ADD_ATTRREQ(Signal* signal)
break;
}
if (descAttr.m_charset != 0) {
+ uint err;
CHARSET_INFO *cs = all_charsets[descAttr.m_charset];
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();
- errorCode = TuxAddAttrRef::InvalidCharset;
+ errorCode = (TuxAddAttrRef::ErrorCode) err;
break;
}
}
diff --git a/ndb/src/ndbapi/NdbDictionaryImpl.cpp b/ndb/src/ndbapi/NdbDictionaryImpl.cpp
index f7a28eb989c..6cb8e1f9a24 100644
--- a/ndb/src/ndbapi/NdbDictionaryImpl.cpp
+++ b/ndb/src/ndbapi/NdbDictionaryImpl.cpp
@@ -1573,7 +1573,7 @@ NdbDictInterface::createOrAlterTable(Ndb & ndb,
bool alter)
{
DBUG_ENTER("NdbDictInterface::createOrAlterTable");
- unsigned i;
+ unsigned i, err;
if((unsigned)impl.getNoOfPrimaryKeys() > NDB_MAX_NO_OF_ATTRIBUTES_IN_KEY){
m_error.code= 4317;
DBUG_RETURN(-1);
@@ -1683,8 +1683,10 @@ NdbDictInterface::createOrAlterTable(Ndb & ndb,
DBUG_RETURN(-1);
}
// primary key type check
- if (col->m_pk && ! NdbSqlUtil::usable_in_pk(col->m_type, col->m_cs)) {
- m_error.code= (col->m_cs != 0 ? 743 : 739);
+ if (col->m_pk &&
+ (err = NdbSqlUtil::check_column_for_pk(col->m_type, col->m_cs)))
+ {
+ m_error.code= err;
DBUG_RETURN(-1);
}
// distribution key not supported for Char attribute
@@ -2157,7 +2159,7 @@ NdbDictInterface::createIndex(Ndb & ndb,
{
//validate();
//aggregate();
- unsigned i;
+ unsigned i, err;
UtilBufferWriter w(m_buffer);
const size_t len = strlen(impl.m_externalName.c_str()) + 1;
if(len > MAX_TAB_NAME_SIZE) {
@@ -2208,10 +2210,12 @@ NdbDictInterface::createIndex(Ndb & ndb,
// index key type check
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 &&
- ! NdbSqlUtil::usable_in_ordered_index(col->m_type, col->m_cs)) {
- m_error.code = 743;
+ (err = NdbSqlUtil::check_column_for_ordered_index(col->m_type, col->m_cs)))
+ {
+ m_error.code = err;
return -1;
}
attributeList.id[i] = col->m_attrId;