MySQL:如何编写Information Schema Plugin(3)
初始化的目的是为了填充结构体st_schema_table,从而确定表的定义,在查询表的时候,调用相应的函数进行记录填充。由于该结构体与内建的i_s表是公用的,因此一些字段我们可以直接忽略掉。在编写plugin的时候,我们需要填充的内容包括:
Ø Fields_info
Ø Fill_table
2).初始化表结构fields_info
Fields_info结构体为st_field_info
字段 |
类型 |
描述 |
field_name |
const char* |
列名,通常用大写表示 |
field_length |
uint |
当列的类型为varchar、text时表示字符数,列类型为blob时表示字节数,类型为float 或double时表示数字数,对于decima类型,值为precision*100+scale |
field_type |
enum enum_field_types |
枚举类型,用于指定行类型,包括如下: MYSQL_TYPE_TINY、 MYSQL_TYPE_SHORT、 MYSQL_TYPE_INT24、 MYSQL_TYPE_LONG、 MYSQL_TYPE_LONGLONG、 MYSQL_TYPE_TIME、 MYSQL_TYPE_DATE、 MYSQL_TYPE_DATETIME、MYSQL_TYPE_TIMESTAMP、MYSQL_TYPE_FLOAT、 MYSQL_TYPE_DOUBLE、MYSQL_TYPE_DECIMAL、MYSQL_TYPE_NEWDECIMAL、MYSQL_TYPE_TINY_BLOB、MYSQL_TYPE_MEDIUM_BLOB、MYSQL_TYPE_BLOB、MYSQL_TYPE_LONG_BLOB、MYSQL_TYPE_STRING,虽然类型很多,但在内置的i_s表中,只用到了MYSQL_TYPE_STRING, MYSQL_TYPE_LONGLONG, MYSQL_TYPE_LONG, MYSQL_TYPE_DECIMAL, MYSQL_TYPE_DATETIME这几种类型,为了避免意外的分享,我们也尽量使用这几种。 |
value |
int |
未使用 |
field_flags |
uint |
用于表示列的属性,为MY_I_S_UNSIGNED表示列为unsigned类型,为MY_I_S_MAYBE_NULL 表示该列的值可能为NULL 这里需要注意,如果定义为MY_I_S_MAYBE_NULL类型,那么在填充表字段信息时,我们总需要首先调用: (非空)tables->table->field[0]->set_notnull(); (为空)tables->table->field[0]->set_null();
|
old_name |
const char* |
表 |
open_method |
uint |
仅用于内建的i_s表 |
相关新闻>>
- 发表评论
-
- 最新评论 更多>>