UDA 字段和索引
数据库类中的字段由以下描述符定义:
typedef struct tag_mco_dict_field_info_t_
{
unsigned short field_no; /* field sequential number (from 0) */
char * name; /* DDL field name */
mco_dict_type_t type; /* field type: MCO_DD_.*/
unsigned int flags; /* flags: MCO_DICT_FI_... */
unsigned short dimension; /* for arrays (MCO_DICT_FI_ARRAY)
* the dimension for the array for
* scalar-type fields is set to 0
*/
unsigned short struct_no; /* if type == MCO_DD_STRUCT),
* the structure number,
* otherwise, 0
*/
} mco_dict_field_info_t, * mco_dict_field_info_p;标志的值可以是以下各项的组合:
#define MCO_DICT_FI_OPTIONAL 1 /* optional field */
#define MCO_DICT_FI_INDEXED 2 /* the field is included in an index */
#define MCO_DICT_FI_VECTOR 4 /* vector-based field */
#define MCO_DICT_FI_ARRAY 8 /* array-based field */
#define MCO_DICT_FI_EVENT_UPD 0x10 /* update event set for field */
#define MCO_DICT_FI_HAS_INIT_DATA 0x20
#define MCO_DICT_FI_NULLABLE 0x40 /* field is nullable */
#define MCO_DICT_FI_NULL_INDICATOR 0x80 /* field is null indicator */以下 API 函数将根据字段描述符的编号或名称获取指向该字段描述符的指针:
MCO_RET mco_dict_field( const mco_metadict_header_t * metadict,
unsigned short dict_no,
unsigned short struct_no,
unsigned short field_no,
/* out */ mco_dict_field_info_p field_info );
MCO_RET mco_dict_field_name ( const mco_metadict_header_t * metadict,
unsigned short dict_no,
unsigned short struct_no,
const char * name,
/* out */ mco_dict_field_info_p field_info );数据库类中的索引由以下描述符定义:
typedef struct tag_mco_dict_index_info_t_
{
unsigned short index_no;
char * name;
unsigned int flags;
unsigned short n_fields;
} mco_dict_index_info_t, * mco_dict_index_info_p;标志的值可以是以下各项的组合:
#define MCO_DICT_II_UNIQUE 1
#define MCO_DICT_II_VOLUNTARY 2
#define MCO_DICT_II_LIST 4
#define MCO_DICT_II_AUTOID 8
#define MCO_DICT_II_TREE 0x10
#define MCO_DICT_II_HASH 0x20
#define MCO_DICT_II_USERDEF 0x40
#define MCO_DICT_II_KDTREE 0x80
#define MCO_DICT_II_RTREE 0x100
#define MCO_DICT_II_PATRICIA 0x200
#define MCO_DICT_II_NULLABLE 0x400以下 API 函数将根据索引描述符的编号或名称获取指向该描述符的指针:
MCO_RET mco_dict_index( const mco_metadict_header_t * metadict,
unsigned short dict_no,
unsigned short struct_no,
unsigned short index_no,
/* out */ mco_dict_index_info_p index_info );
MCO_RET mco_dict_index_name( const mco_metadict_header_t * metadict,
unsigned short dict_no,
unsigned short struct_no,
const char * name,
/* out */ mco_dict_index_info_p index_info );当索引由多个字段组成时,索引的每个部分都由以下描述符定义:
typedef struct tag_mco_dict_ifield_info_t_
{
unsigned short ifield_no; /* segment number (zero-based) */
unsigned short field_no; /* field number that corresponds to
* the segment (within the same
* class) */
unsigned int flags; / *flags: MCO_DICT_IFI_... */
} mco_dict_ifield_info_t, * mco_dict_ifield_info_p;标志的值可以默认为 0 或 :
#define MCO_DICT_IFI_DESCENDING 1 /* sort descending; 0 = ascending */
#define MCO_DICT_IFI_NULLABLE 2 /* field associated with index segment is nullable */这些位值标志可以通过按位或运算来设置所有可能的组合:
flags = 0; // ascending, non-nullable
flags = MCO_DICT_IFI_DESCENDING // descending,non-nullable
flags = MCO_DICT_IFI_NULLABLE // ascending, nullable
flags = MCO_DICT_IFI_DESCENDING | MCO_DICT_IFI_NULLABLE // descending,non-nullable以下 API 函数将根据索引字段的编号或名称获取由多个字段组成的索引中的索引字段描述符的指针:
MCO_RET mco_dict_ifield ( const mco_metadict_header_t * metadict,
unsigned short dict_no,
unsigned short struct_no,
unsigned short index_no,
unsigned short ifield_no,
/* out */ mco_dict_ifield_info_p ifield_info );
MCO_RET mco_dict_ifield_name( const mco_metadict_header_t * metadict,
unsigned short dict_no,
unsigned short struct_no,
unsigned short index_no,
const char * name,
/* out */ mco_dict_ifield_info_p ifield_info );