postgresql源码分析--解析sql--类型系统

本文探讨了PostgreSQL中SQL解析过程中的类型转换机制、值的保存方式及执行时值的比较方法。详细分析了T_A_Const类型的解析流程、T_A_Indirection的含义及其在SQL语法中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

希望能够搞明白在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中是检查类型兼容性的代码,有两千六百多行,得慢慢看了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值