类型转换
背景信息
在SQL中,每个数据都与一个决定其行为和用法的数据类型相关。在M-Compatibility里,有四种基本的SQL结构需要独立的类型转换规则。
- 函数调用
多数SQL类型系统是构筑在一套丰富的函数上的。函数调用可以有一个或多个参数。因为SQL允许函数重载,所以不能通过函数名直接找到要调用的函数,分析器必须根据函数提供的参数类型选择正确的函数。
- 操作符
SQL允许在表达式上使用前缀或后缀(一元)操作符,也允许表达式内部使用二元操作符(两个参数)。像函数一样,操作符也可以被重载,因此操作符的选择也和函数一样取决于参数类型。
- 值存储
- UNION,EXCEPT,CASE和相关构造
因为联合SELECT语句中的所有查询结果必须在一列里显示出来,所以每个SELECT子句中的元素类型必须相互匹配并转换成一个统一类型。类似地,一个CASE构造的结果表达式必须转换成统一的类型,这样整个CASE表达式会有一个统一的输出类型。
四种SQL结构在M-Compatibility类型转换规则下分为三种场景:隐式类型转换;显式类型转换;UNION,EXCEPT,CASE和相关构造。M-Compatibility中针对三种场景有不同的转换行为与转换关系。
语义分析阶段会决定表达式的返回值类型并选择适当的转换行为。M-Compatibility数据类型的基本类型分类包括:INTEGER、DECIMAL、STRING、BITSTRING、FLOAT和TEMPORAL。为了解决表达式的类型选择问题,M-Compatibility中每种基本类型之间都存在隐式转换。根据类型与可用的隐式转换,就可能保证有歧义的表达式得到有效的解决方式。