本节简单介绍了PostgreSQL中的类型转换实现。
首先来看看几个示例SQL:
<前>
<代码>=# testdb
testdb=#删除表如果存在t_conv;
om t_conv id=' 1 ':文本;
解释详细的select * from t_conv id比;“13”::文本;
删除表
testdb=#创建表t_conv (int id);
创建表=# testdb=#插入testdb t_conv值(1);
插入0 1=#插入testdb t_conv值(2);
插入0 1=# testdb
代码>
>之前
查询条件为id=' 1 ', ' 1 '转换为int进行比较。
<前> <代码>=# testdb解释详细的select * from t_conv id=' 1 '; 查询计划 --------------------------------------------------------------- Seq扫描> 一、数据结构
<强>
Form_pg_operator
强>
pg_operator中的定义,代码会其中的定义转换为FormData_pg_operator结构体
<前>
<代码>/* - - - - - - - - - - - - - - - - -
* pg_operator定义。cpp这变成
* typedef struct FormData_pg_operator
* - - - - - - - - - - - - - - - - -
*/目录(2617年pg_operator OperatorRelationId)
{
Oid Oid;/* oid *//*操作符*/的名字
NameData oprname;/* OID的命名空间包含*/歌剧院
Oid oprnamespace BKI_DEFAULT (PGNSP);/*操作符*/Oid oprowner BKI_DEFAULT (PGUID);/*“l”、“r”或“b”*/char oprkind BKI_DEFAULT (b);/*可用于合并连接?*/bool oprcanmerge BKI_DEFAULT (f);/*可用于散列连接?*/bool oprcanhash BKI_DEFAULT (f);/*左参数类型,如果“l”oprkind */或0
Oid oprleft BKI_LOOKUP (pg_type);/*正确的参数类型,或者0 ' r ' oprkind */Oid oprright BKI_LOOKUP (pg_type);/*数据类型*/结果
Oid oprresult BKI_LOOKUP (pg_type);/* OID换向器打开,或者如果没有*/0
Oid oprcom BKI_DEFAULT (0) BKI_LOOKUP (pg_operator);/* OID否认者歌剧院或0如果没有*/Oid oprnegate BKI_DEFAULT (0) BKI_LOOKUP (pg_operator);/* OID的底层函数*/regproc oprcode BKI_LOOKUP (pg_proc);/* OID估计量的限制,或0 */regproc超载比BKI_DEFAULT (-) BKI_LOOKUP (pg_proc);/* OID加入估计量,或0 */regproc oprjoin BKI_DEFAULT (-) BKI_LOOKUP (pg_proc);
}FormData_pg_operator;/* - - - - - - - - - - - - - - - - -
* Form_pg_operator对应于一个指针指向一个元组
* pg_operator关系的格式。
* - - - - - - - - - - - - - - - - -
*/typedef FormData_pg_operator * Form_pg_operator;
代码>
>之前