关于builtin_func的体会

关于TiDB的builtin function,最近学习有一点体会:
TiDB的函数,都可以新增定义,新加一些需要的函数,
首先需要在parser中定义语法,在parser/ast/functions.go,如
InetAton: “inet_aton”
在package expression里面,需要在expression/builtin.go中定义func定义与parser中ast的关系,如
ast.InetAton: &inetAtonFunctionClass{baseFunctionClass{ast.InetAton, 1, 1}},
然后在相应的builtin_…go中,定义function的实现接口,如expression/builtin_miscellaneous.go中:

_ builtinFunc = &builtinInetAtonSig{}

func (c *inetAtonFunctionClass) getFunctiontype builtinInetAtonSig struct {
baseBuiltinFunc
}

func (b *builtinInetAtonSig) evalInt(row chunk.Row) (int64, bool, error) {

还需要在expression/function_traits.go等中做相应的工作,差不多就可以编译使用了

2 个赞

坐等新总结