文档首页
MySQL NDB Cluster API 开发人员指南
相关文档 下载本手册
PDF (US Ltr) - 3.6Mb
PDF (A4) - 3.6Mb


2.3.14 NdbDictionary 类

本节提供有关 NdbDictionary 类的信息,该类存储有关 NDB 数据库对象的元信息,例如表、列和索引。

虽然数据库对象创建和删除的首选方法是通过 MySQL 服务器,但 NdbDictionary 也允许开发人员通过 NDB API 执行这些任务。

NdbDictionary 类概述

父类

子类

DictionaryColumnObject

有关 NdbDictionary 子类的枚举的数字等效项,请参阅 NDB Cluster 源代码树中的文件 /storage/ndb/include/ndbapi/NdbDictionary.hpp

说明

这是一个数据字典类,支持查询有关表、列和索引的信息。它还提供了定义这些数据库对象和删除它们的方法。这两种功能都使用对这些对象建模的内部类来提供。这些类包括以下内部类:

  • Table 用于处理表

  • Column 用于创建表列

  • Index 用于处理二级索引

  • Dictionary 用于创建数据库对象和进行架构查询

  • Event 用于处理集群中的事件。

其他 Object 子类对处理 NDB Cluster 磁盘数据表以及外键约束所需的空间、日志文件组、数据文件和撤消文件进行建模。

使用 NdbDictionary 创建的表和索引无法从 MySQL 服务器查看。

通过 NDB API 删除最初从 NDB Cluster 创建的索引会导致不一致。在执行此类操作后,通过 NDB API 删除了一个或多个索引的表可能不再可供 MySQL 使用。在这种情况下,必须删除该表,然后使用 MySQL 重新创建该表,以使其再次可供 MySQL 访问。

方法

NdbDictionary 本身没有公共实例方法,只有用于处理 NdbRecord 对象的静态方法。不使用 NdbRecord 的操作是通过 NdbDictionary 子类实例方法完成的。下表列出了 NdbDictionary 的公共方法以及每个方法的目的或用途:

表 2.37 NdbDictionary 类方法和说明

名称 说明
getEmptyBitmask() 返回一个空的列存在位掩码,该掩码可与 NdbRecord 一起使用,以指定操作中不包括任何 NdbRecord 列。
getFirstAttrId() 获取由给定 NdbRecord 对象指定的第一個属性 ID。
getRecordIndexName() 获取 NdbRecord 引用的索引对象的名称。
getRecordRowLength() 获取使用给定 NdbRecord 存储一行数据所需的字节数。
getRecordTableName() 获取 NdbRecord 引用的表对象的名称。
getRecordType() 获取 NdbRecord 的 RecordType。
getValuePtr() 使用 NdbRecord 返回指向由属性 ID 指定的存储数据的开头的指针。
isNull() 显示列的空位是 true 还是 false。
setNull() 设置列的空位。

类型

NdbDictionary 定义了两个数据结构,如下所示:

NdbDictionary::AutoGrowSpecification

摘要

本节提供有关 AutoGrowSpecification 数据结构的信息。

父类

NdbDictionary

说明

AutoGrowSpecificationNdbDictionary 类中定义的数据结构,用作 TablespaceLogfileGroup 类的一些方法的参数或返回值。

成员

AutoGrowSpecification 具有下表所示的成员:

表 2.38 NdbDictionary::AutoGrowSpecification 数据结构成员名称和说明

名称 说明
min_free ???
max_size ???
file_size ???
filename_pattern ???

NdbDictionary::getEmptyBitmask()

说明

返回一个空的列存在位掩码,该掩码可与任何 NdbRecord 一起使用,以指定操作中不包括任何 NdbRecord 列。

签名
static const unsigned char* getEmptyBitmask
    (
      void
    )
参数

.

返回值

一个空的位掩码。

NdbDictionary::getFirstAttrId()

说明

获取由 NdbRecord 对象指定的第一個属性 ID。如果未指定属性 ID,则返回 false

签名
static bool getFirstAttrId
    (
      const NdbRecord* record,
      Uint32& firstAttrId
    )
参数

指向 NdbRecord 的指针和对属性 (firstAttrID) 的引用。

返回值

布尔值 false,当无法获取属性 ID 时。

NdbDictionary::getNextAttrId()

说明

获取由传入的属性 ID 之后的 NdbRecord 对象指定的下一个属性 ID。当没有更多属性 ID 可返回时,返回 false

签名
static bool getNextAttrId
    (
      const NdbRecord* record,
      Uint32& attrId
    )
参数

指向 NdbRecord 的指针和对属性 ID 的引用。

返回值

布尔值 false,当无法获取属性 ID 时。

NdbDictionary::getNullBitOffset()

说明

获取给定属性 ID 的空位从 NdbRecord 行开头的偏移量。如果属性 ID 不存在,则返回 false

签名
static bool getNullBitOffset
    (
      const NdbRecord* record,
      Uint32 attrId,
      Uint32& bytes,
      Uint32& bit
    )
参数

一个用于获取给定属性 ID (attrId) 的空位偏移量的 NdbRecord record。偏移量表示为字节数 (bytes) 加上最后一个字节内的位数 (bit)。

返回值

如果不存在具有给定 ID 的属性,则为布尔值 false

NdbDictionary::getOffset()

说明

获取给定属性 ID 的存储从 NdbRecord 行开始的偏移量。如果属性 ID 不存在,则返回 false

签名
static bool getOffset
    (
      const NdbRecord* record,
      Uint32 attrId,
      Uint32& offset
    )
参数

给定属性 ID 的存储从 NdbRecord 行开始的 offset

返回值

如果找不到属性 ID,则为布尔值 false

NdbDictionary::getRecordIndexName()

说明

获取 NdbRecord 引用的 Index 对象的名称。

签名
static const char* getRecordIndexName
    (
      const NdbRecord* record
    )
参数

要获取其名称的 NdbRecord 的指针。

返回值

名称(如果有)。否则,或者如果 NdbRecord 对象不是 IndexAccess 类型,则此方法返回 null。

NdbDictionary::getRecordRowLength()

说明

获取存储一行数据所需的字节数,该行数据的布局如传递给此方法的 NdbRecord 结构所述。

签名
static Uint32 getRecordRowLength
    (
      const NdbRecord* record
    )
参数

一个 NdbRecord 对象。

返回值

每行所需的字节数。

NdbDictionary::getRecordTableName()

说明

返回 NdbRecord 引用的表对象的名称。如果记录不是 TableAccess,则此方法返回 null。

签名
static const char* getRecordTableName
    (
      const NdbRecord* record
    )
参数

要获取其表名的 recordNdbRecord 对象)。

返回值

表的名称,如果 NdbRecord 对象的类型不是 TableAccess,则为 null。

NdbDictionary::getRecordType()

说明

返回传递的 NdbRecord 对象的类型。

签名
static RecordType getRecordType
    (
      const NdbRecord* record
    )
参数

一个 NdbRecord 对象。

返回值

NdbRecordRecordTypeIndexAccessTableAccess)。

NdbDictionary::getValuePtr()

说明

通过查找存储在 NdbRecord 对象中的列的偏移量并返回行位置和偏移量的总和,返回一个指向属性 ID 指定的存储数据开头的指针。

签名

此方法提供行常量和非行常量版本

static const char* getValuePtr
    (
      const NdbRecord* record,
      const char* row,
      Uint32 attrId
    )

static char* getValuePtr
    (
      const NdbRecord* record,
      char* row,
      Uint32 attrId
    )
参数

指向描述行格式的 NdbRecord 对象的指针、指向行数据开头的指针(在此方法的 const 版本中为 const)以及列的属性 ID。

返回值

指向行中属性开头的指针。如果属性不是 NdbRecord 定义的一部分,则此值为 null。

NdbDictionary::isNull()

说明

指示给定列的空位是设置为 true 还是 false。空位相对于行指针的位置是从传递的 NdbRecord 对象获取的。如果该列不可为空,或者如果该列不是 NdbRecord 定义的一部分,则该方法返回 false

签名
static bool isNull
    (
      const NdbRecord* record,
      const char* row,
      Uint32 attrId
    )
参数

指向描述行格式的 NdbRecord 对象的指针、指向行数据开头的指针以及要检查的列的属性 ID。

返回值

如果属性 ID 存在于此 NdbRecord 中,则为布尔值 true,可为空,并且此行的空位已设置;否则,为布尔值 false

NdbDictionary::RecordSpecification

本节提供有关 RecordSpecification 结构的信息。

父类

NdbDictionary

说明

此结构用于在创建 NdbRecord 对象时指定列和范围偏移量。

成员

组成此结构的元素如下表所示

表 2.39 NdbDictionary::RecordSpecification 属性,包含类型和描述

名称 类型 说明
此条目描述的列(列的最大大小定义了行的字段大小)。即使为索引创建 NdbRecord,这也必须指向从基础表而不是从索引本身获取的列。
偏移量 Uint32 数据从行开头的偏移量。对于读取 blob,blob 句柄(NdbBlob)而不是实际的 blob 数据被写入行中。这意味着行中必须至少有 sizeof(NdbBlob*) 可用。
nullbit_byte_offset Uint32 包含 NULL 位的字节从行开头的偏移量。
nullbit_bit_in_byte Uint32 NULL 位 (0-7)。

nullbit_byte_offsetnullbit_bit_in_byte 不适用于不可为空的列。

有关更多信息,请参阅 第 2.3.22 节 “NdbRecord 接口”

NdbDictionary::setNull()

说明

将给定列的空位设置为提供的值。空位的偏移量是从传递的 NdbRecord 对象获取的。如果属性 ID 不是 NdbRecord 的一部分,或者它不可为空,则此方法返回错误 (-1)。

签名
static int setNull
    (
      const NdbRecord* record,
      char* row,
      Uint32 attrId,
      bool value
    )
参数

指向描述行格式的 recordNdbRecord 对象)的指针;指向 row 数据开头的指针;列的属性 ID (attrId);以及要将空位设置成的 valuetruefalse)。

返回值

成功返回 0;如果 attrId 不是 record 的一部分或不可为空,则返回 -1。