PostgreSQL 源码解读(210)- 隐式类型转换(func_match_argtypes)
时间: 2023-09-17 14:08:56 浏览: 152
SQL Server 中的数据类型隐式转换问题
在 PostgreSQL 中,函数的匹配主要是通过 func_match_argtypes 函数来完成的,该函数会对函数的参数类型进行匹配,并返回匹配结果。
在 func_match_argtypes 函数中,会首先判断函数参数个数是否匹配,如果不匹配则返回 NULL,否则会逐个比较每个参数的类型是否匹配。在比较类型的过程中,如果参数类型为 UNKNOWN 则会被视为被匹配的类型,即可以匹配到任何类型。而对于参数类型为 POLYMORPHIC 的情况,则会根据该参数是否有实际的类型来进行匹配,如果有则会将 POLYMORPHIC 替换为实际的类型,否则会被视为 UNKNOWN。
在比较类型时,还需要注意到一些特殊情况,比如如果参数类型为 RECORD,则会进行更加复杂的匹配过程。如果参数类型为 ARRAY,则会匹配数组元素类型。如果参数类型为 ANYELEMENT,则会匹配到任何非 NULL 类型。
匹配完成后,会返回一个匹配结果的结构体,其中包含了匹配到的函数 OID、匹配到的参数类型、参数类型是否需要转换等信息。如果有多个函数匹配成功,则会根据转换成本来选择最优的匹配结果。
总体来说,func_match_argtypes 函数实现了 PostgreSQL 中函数的隐式类型转换,使得函数可以接受多种不同类型的参数。
阅读全文