关于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 个赞
坐等新总结