在 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. 两步操作即可。