Commit c01754c9 authored by unknown's avatar unknown
Browse files

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

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

parents d27c7a7c 316c96fa
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -201,13 +201,13 @@ create table t1 (
pk1 bit(9) not null primary key,
b int
) 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 (
pk1 int not null primary key,
b bit(9),
key(b)
) 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 (
pk1 int primary key,
b bit(32) not null
+2 −1
Original line number Diff line number Diff line
@@ -146,7 +146,8 @@ public:
  enum ErrorCode {
    NoError = 0,
    InvalidCharset = 743,
    TooManyBitsUsed = 831
    TooManyBitsUsed = 831,
    UnsupportedType = 906
  };
private:
  Uint32 userPtr;
+3 −3
Original line number Diff line number Diff line
@@ -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.
+28 −24
Original line number Diff line number Diff line
@@ -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 &&
      if(cs != 0 &&
         cs->cset != 0 &&
         cs->coll != 0 &&
         cs->coll->strnxfrm != 0 &&
        cs->strxfrm_multiply <= MAX_XFRM_MULTIPLY;
         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 &&
      if (cs != 0 &&
          cs->cset != 0 &&
          cs->coll != 0 &&
          cs->coll->strnxfrm != 0 &&
          cs->coll->strnncollsp != 0 &&
        cs->strxfrm_multiply <= MAX_XFRM_MULTIPLY;
          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
+3 −2
Original line number Diff line number Diff line
@@ -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;
      }
    }
Loading