• unknown's avatar
    ndb: wl-1442 mysql vs ndb datatypes: prepare · 07ed3805
    unknown authored
    ndb/include/Makefile.am:
      unify api/kernel types
      deprecate 2-bit AttributeType, use 5-bit AttributeExtType
      upgradable from 4.1 via nr/sr/backup
    ndb/include/kernel/AttributeDescriptor.hpp:
      unify api/kernel types
      deprecate 2-bit AttributeType, use 5-bit AttributeExtType
      upgradable from 4.1 via nr/sr/backup
    ndb/include/kernel/signaldata/DictTabInfo.hpp:
      unify api/kernel types
      deprecate 2-bit AttributeType, use 5-bit AttributeExtType
      upgradable from 4.1 via nr/sr/backup
    ndb/include/ndb_constants.h:
      unify api/kernel types
      deprecate 2-bit AttributeType, use 5-bit AttributeExtType
      upgradable from 4.1 via nr/sr/backup
    ndb/include/ndb_types.h:
      unify api/kernel types
      deprecate 2-bit AttributeType, use 5-bit AttributeExtType
      upgradable from 4.1 via nr/sr/backup
    ndb/include/ndbapi/NdbDictionary.hpp:
      unify api/kernel types
      deprecate 2-bit AttributeType, use 5-bit AttributeExtType
      upgradable from 4.1 via nr/sr/backup
    ndb/include/util/NdbSqlUtil.hpp:
      unify api/kernel types
      deprecate 2-bit AttributeType, use 5-bit AttributeExtType
      upgradable from 4.1 via nr/sr/backup
    ndb/src/common/debugger/signaldata/DictTabInfo.cpp:
      unify api/kernel types
      deprecate 2-bit AttributeType, use 5-bit AttributeExtType
      upgradable from 4.1 via nr/sr/backup
    ndb/src/kernel/blocks/dbdict/Dbdict.cpp:
      unify api/kernel types
      deprecate 2-bit AttributeType, use 5-bit AttributeExtType
      upgradable from 4.1 via nr/sr/backup
    ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp:
      unify api/kernel types
      deprecate 2-bit AttributeType, use 5-bit AttributeExtType
      upgradable from 4.1 via nr/sr/backup
    ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp:
      unify api/kernel types
      deprecate 2-bit AttributeType, use 5-bit AttributeExtType
      upgradable from 4.1 via nr/sr/backup
    ndb/src/kernel/blocks/dbtux/DbtuxMeta.cpp:
      unify api/kernel types
      deprecate 2-bit AttributeType, use 5-bit AttributeExtType
      upgradable from 4.1 via nr/sr/backup
    ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp:
      unify api/kernel types
      deprecate 2-bit AttributeType, use 5-bit AttributeExtType
      upgradable from 4.1 via nr/sr/backup
    ndb/src/kernel/vm/MetaData.hpp:
      unify api/kernel types
      deprecate 2-bit AttributeType, use 5-bit AttributeExtType
      upgradable from 4.1 via nr/sr/backup
    ndb/src/ndbapi/Ndb.cpp:
      unify api/kernel types
      deprecate 2-bit AttributeType, use 5-bit AttributeExtType
      upgradable from 4.1 via nr/sr/backup
    ndb/src/ndbapi/NdbDictionaryImpl.cpp:
      unify api/kernel types
      deprecate 2-bit AttributeType, use 5-bit AttributeExtType
      upgradable from 4.1 via nr/sr/backup
    ndb/src/ndbapi/NdbDictionaryImpl.hpp:
      unify api/kernel types
      deprecate 2-bit AttributeType, use 5-bit AttributeExtType
      upgradable from 4.1 via nr/sr/backup
    ndb/src/ndbapi/NdbScanOperation.cpp:
      unify api/kernel types
      deprecate 2-bit AttributeType, use 5-bit AttributeExtType
      upgradable from 4.1 via nr/sr/backup
    07ed3805
AttributeDescriptor.hpp 5.51 KB
/* Copyright (C) 2003 MySQL AB

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */

#ifndef ATTRIBUTE_DESCRIPTOR_HPP
#define ATTRIBUTE_DESCRIPTOR_HPP

class AttributeDescriptor {
  friend class Dbdict;
  friend class Dbtc;
  friend class Dbacc;
  friend class Dbtup;
  friend class Dbtux;
  
private:
  static void setType(Uint32 &, Uint32 type);
  static void setSize(Uint32 &, Uint32 size);
  static void setArray(Uint32 &, Uint32 arraySize);
  static void setNullable(Uint32 &, Uint32 nullable);
  static void setDKey(Uint32 &, Uint32 dkey);
  static void setPrimaryKey(Uint32 &, Uint32 dkey);
  static void setDynamic(Uint32 &, Uint32 dynamicInd);
  
  static Uint32 getType(const Uint32 &);
  static Uint32 getSize(const Uint32 &);
  static Uint32 getSizeInBytes(const Uint32 &);
  static Uint32 getSizeInWords(const Uint32 &);
  static Uint32 getArrayType(const Uint32 &);
  static Uint32 getArraySize(const Uint32 &);
  static Uint32 getNullable(const Uint32 &);
  static Uint32 getDKey(const Uint32 &);
  static Uint32 getPrimaryKey(const Uint32 &);
  static Uint32 getDynamic(const Uint32 &);
};

/**
 *
 * a = Array type            - 2  Bits -> Max 3  (Bit 0-1)
 * t = Attribute type        - 5  Bits -> Max 31  (Bit 2-6)
 * s = Attribute size        - 3  Bits -> Max 7  (Bit 8-10)
 * d = Disk based            - 1  Bit 11
 * n = Nullable              - 1  Bit 12
 * k = Distribution Key Ind  - 1  Bit 13
 * p = Primary key attribute - 1  Bit 14
 * y = Dynamic attribute     - 1  Bit 15
 * z = Array size            - 16 Bits -> Max 65535 (Bit 16-31)
 *
 *           1111111111222222222233
 * 01234567890123456789012345678901
 * aattttt sssdnkpyzzzzzzzzzzzzzzzz
 * aattsss n d k pyzzzzzzzzzzzzzzzz  [ old format ]
 *               
 */

#define AD_ARRAY_TYPE_SHIFT (0)
#define AD_ARRAY_TYPE_MASK  (3)

#define AD_TYPE_SHIFT       (2)
#define AD_TYPE_MASK        (31)

#define AD_SIZE_SHIFT       (8)
#define AD_SIZE_MASK        (7)

#define AD_SIZE_IN_BYTES_SHIFT (3)
#define AD_SIZE_IN_WORDS_OFFSET (31)
#define AD_SIZE_IN_WORDS_SHIFT  (5)

#define AD_NULLABLE_SHIFT    (12)
#define AD_DISTR_KEY_SHIFT   (13)
#define AD_PRIMARY_KEY       (14)
#define AD_DYNAMIC           (15)

#define AD_ARRAY_SIZE_SHIFT  (16)
#define AD_ARRAY_SIZE_MASK   (65535)

inline
void
AttributeDescriptor::setType(Uint32 & desc, Uint32 type){
  ASSERT_MAX(type, AD_TYPE_MASK, "AttributeDescriptor::setType");
  desc |= (type << AD_TYPE_SHIFT);
}

inline
void
AttributeDescriptor::setSize(Uint32 & desc, Uint32 size){
  ASSERT_MAX(size, AD_SIZE_MASK, "AttributeDescriptor::setSize");
  desc |= (size << AD_SIZE_SHIFT);
}

inline
void
AttributeDescriptor::setArray(Uint32 & desc, Uint32 size){
  ASSERT_MAX(size, AD_ARRAY_SIZE_MASK, "AttributeDescriptor::setArray");
  desc |= (size << AD_ARRAY_SIZE_SHIFT);
  if(size <= 1){
    desc |= (size << AD_ARRAY_TYPE_SHIFT);
  } else {
    desc |= (2 << AD_ARRAY_TYPE_SHIFT);
  }
}

inline
void
AttributeDescriptor::setNullable(Uint32 & desc, Uint32 nullable){
  ASSERT_BOOL(nullable, "AttributeDescriptor::setNullable");
  desc |= (nullable << AD_NULLABLE_SHIFT);
}

inline
void
AttributeDescriptor::setDKey(Uint32 & desc, Uint32 dkey){
  ASSERT_BOOL(dkey, "AttributeDescriptor::setDKey");
  desc |= (dkey << AD_DISTR_KEY_SHIFT);
}

inline
void
AttributeDescriptor::setPrimaryKey(Uint32 & desc, Uint32 dkey){
  ASSERT_BOOL(dkey, "AttributeDescriptor::setPrimaryKey");
  desc |= (dkey << AD_PRIMARY_KEY);
}

inline
void
AttributeDescriptor::setDynamic(Uint32 & desc, Uint32 dynamic){
  ASSERT_BOOL(dynamic, "AttributeDescriptor::setDynamic");
  desc |= (dynamic << AD_DYNAMIC);
}

/**
 * Getters
 */
inline
Uint32
AttributeDescriptor::getType(const Uint32 & desc){
  return (desc >> AD_TYPE_SHIFT) & AD_TYPE_MASK;
}

inline
Uint32
AttributeDescriptor::getSize(const Uint32 & desc){
  return (desc >> AD_SIZE_SHIFT) & AD_SIZE_MASK;
}

inline
Uint32
AttributeDescriptor::getSizeInBytes(const Uint32 & desc){
  return (getArraySize(desc) << getSize(desc))
                             >> AD_SIZE_IN_BYTES_SHIFT;
}

inline
Uint32
AttributeDescriptor::getSizeInWords(const Uint32 & desc){
  return ((getArraySize(desc) << getSize(desc)) 
          + AD_SIZE_IN_WORDS_OFFSET) 
                              >> AD_SIZE_IN_WORDS_SHIFT;
}

inline
Uint32
AttributeDescriptor::getArrayType(const Uint32 & desc){
  return (desc >> AD_ARRAY_TYPE_SHIFT) & AD_ARRAY_TYPE_MASK;
}

inline
Uint32
AttributeDescriptor::getArraySize(const Uint32 & desc){
  return (desc >> AD_ARRAY_SIZE_SHIFT) & AD_ARRAY_SIZE_MASK;
}

inline
Uint32
AttributeDescriptor::getNullable(const Uint32 & desc){
  return (desc >> AD_NULLABLE_SHIFT) & 1;
}

inline
Uint32
AttributeDescriptor::getDKey(const Uint32 & desc){
  return (desc >> AD_DISTR_KEY_SHIFT) & 1;
}

inline
Uint32
AttributeDescriptor::getPrimaryKey(const Uint32 & desc){
  return (desc >> AD_PRIMARY_KEY) & 1;
}

inline
Uint32
AttributeDescriptor::getDynamic(const Uint32 & desc){
  return (desc >> AD_DYNAMIC) & 1;
}

#endif