希望能够搞明白在sql进行解析的时候postgresql是如何决定要进行类型转换的以及解析的过程中值是以什么方式保存的,最后希望能够了解到postgresql在执行时是如何比较这些值的.
- T_A_Const表示常数值类型
parse_expr.c的transformExpr中值的解析, 在T_A_Const中,可以看到对于一个操作的值是以Value类型保存的,从value的注释中可以看到,除了int类型外,其它的诸如float等都是直接用string保存的.
- T_A_Indirection
查看A_Indirection的定义注释中的一个例子(foo).field1[42][7].field2, 就能够理解他的含义
gram.y中
AexprConst表示所有的constant类型,
parse_oper.c
函数make_op中出现了检查类型兼容的调用, 调用的函数为enforce_generic_type_consistency
parse_coerce.c中是检查类型兼容性的代码,有两千六百多行,得慢慢看了