统一数据库访问
统一数据库访问(UDA)API允许C和C++应用程序绕过本地生成的API,使用预定义的通用导航API来访问数据库。这为开发人员提供了更大的灵活性,尤其是在不需要深入了解数据库字典的情况下。
工作原理
由mcocomp模式编译器为所有本机API调用生成的数据库字典被编码到.c输出文件中。在输出文件中,字典后面是生成的特定于模式的类型安全API函数。这些函数构成了应用程序开发人员用来访问特定字段、索引和数组元素的应用程序特定API(即生成的API)。
请注意,这些单独的函数都调用了低级mco_wrapper函数,如mco_w_new_obj_oid()
、mco_w_obj_delete()
等。这些包装器函数提供了一个“通用”的接口来访问单个数据库对象。然而,它们的实现需要对数据库字典有深入的了解,以便正确地为函数参数指定整数值。这是mcocomp编译器的工作。
UDA API旨在为不需要深入了解数据库字典的应用程序提供类似的“通用”接口。为此,UDA注册表(包括字典和元字典)函数提供了枚举字段、索引和数组元素的方法,使应用程序开发人员可以按名称访问这些元素。然后,将注册表函数返回的整数值传递给UDA访问函数,如mco_uda_new()
、mco_uda_delete()
等。需要注意的是,为了获得这些通用UDA访问函数的灵活性,牺牲了C编译器在使用本机API调用时提供的类型安全性。
#### 开发实践
通常,应用程序开发人员会构建一些“辅助”函数来简化对UDA注册表函数的调用。例如:
unsigned short get_field_no(unsigned short struct_no, const char *field_name)
{
mco_dict_field_info_t field_info;
if ( mco_dict_field_name(metadict, 0, struct_no, field_name, &field_info)
!= MCO_S_OK)
return (unsigned short) -1;
return field_info.field_no;
}
unsigned short get_struct_no(const char *struct_name)
{
mco_dict_struct_info_t struct_info;
if (mco_dict_struct_name(metadict, 0, struct_name, &struct_info)
!= MCO_S_OK)
return (unsigned short) -1;
return struct_info.struct_no;
}
unsigned short get_index_no(const char *struct_name, const char *index_name)
{
mco_dict_index_info_t index_info;
if (mco_dict_index_name(metadict, 0, get_struct_no(struct_name),
index_name, &index_info) != MCO_S_OK)
return (unsigned short) -1;
return index_info.index_no;
}
有了这些“助手”,以下代码片段演示了对 UDA 访问函数的调用,以创建和更新数据库对象:
mco_uda_object_handle_t rec;
mco_uda_value_t value;
uint4 key = 1999;
unsigned short Record_struct_no, key_field_no,
tkey_index_no, hkey_index_no;
Record_struct_no = get_struct_no("Record");
key_field_no = get_field_no(Record_struct_no, "key");
tkey_index_no = get_index_no("Record", "tkey");
hkey_index_no = get_index_no("Record", "hkey");
rc = mco_uda_new(t, Record_struct_no, 0, 0, 0, &rec);
if (MCO_S_OK == rc)
{
value.type = MCO_DD_UINT4;
value.v.u4 = key;
rc = mco_uda_put(&rec, key_field_no, 0, &value);
}
请使用以下链接查看特定 UDA 函数类别的 API:
函数 | 说明 |
---|---|
注册表 | 注册表功能 |
字段和索引 | UDA 字段和索引 |
UDA 函数 | UDA 是一个通用 API |
数据库控制 | 数据库打开/关闭函数 |
对象接口 | 对象新建/删除/检查点/获取/设置函数 |
向量 | 向量函数 |
游标 | 游标函数 |
用户定义索引 | 用户定义索引 |
排序规则 | 排序规则实现 |
编程 | UDA 编程技术 |
序列 | UDA 对序列数据类型的支持 |