PostgreSQL源码解读》(202)——查询# 115(类型转换)

  

  本节简单介绍了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;      之前   

PostgreSQL源码解读》(202)——查询# 115(类型转换)