在 TiDB 中新建一张 infoschema 表
Last edited by longfangsong at 2021-03-18-
在 tidb 仓库的
infoschema/tables.go
,向文件一开始那个大enum
的最后添加一条TableXXX = "<表名>"
-
在下面的
tableIDMap
里为他添加一个tableId
-
在下面的
tableXXXCols
里面添加这个表的column
定义 -
在下面的
tableNameToColumns
里面添加TableXXX
到tableXXXCols
的映射 -
在
executor/infoschema_reader.go
,为memtableRetriever
,添加一个setDataForXXX
,这个函数的主要用途就是把数据转成Datum
的样子然后放在memtableRetriever
的rows
里面,这里数据从哪里来我就不管了,你自己决定。 -
然后在
memtableRetriever.retrieve
里的大switch
里面加一个case
,case
的键就是你在 1. 中写的那个TableXXX
,行为就是setDataForXXX
。 -
在
executor/builder.go
中的executorBuilder.buildMemTable
里的case util.InformationSchemaName.L
里的那个switch
里面,加上对应的case
,一般在最长的那坨case
最后加一条strings.ToLower(infoschema.TableXXX)
就行
注:
如果希望某个表有全集群和单个 TiDB server 节点两个版本,
只需在 infoschema/cluster.go
注册单 server 表XXX
对应的全集群版本:
CLUSTER_XXX
,然后和对应单机表一起进行 6. 和 7. 两步操作即可。