玖叶教程网

前端编程开发入门

PostgreSQL "+"操作符函数的获取机制

“+”号操作符对应函数是如何获取的呢?首先需要知道这个函数的oid是哪个。上节中我们知道操作符对应的表达式步骤初始化函数是ExecInitExprRec,其操作符初始化分支是T_OpExpr:



操作符初始化函数是ExecInitFunc,从上图可以看到操作符函数的oid为op->opfuncid,那么gdb跟踪下这个oid的值是多少:



从堆栈里看到,oid是177,我们是以select id1+id2 from t;为例跟踪的,所以该操作符在投影初始化中,所以看到是在ExecBuildProjectionInfo函数中实现。

下面看下oid为177的是哪个函数:



函数为int4pl。再想下操作符的oid从何而来?


...

可以从pg_operator系统表中看到所有+操作符对应的操作函数,int4pl也在其中。通过函数make_op函数在生成最佳路径的时候从系统表根据操作符名和参数类型查询得到函数oid:

make_op

        tup = oper(pstate, opname, ltypeId, rtypeId, false, location);

        opform = (Form_pg_operator) GETSTRUCT(tup);

        result = makeNode(OpExpr);

        result->opno = oprid(tup);

        result->opfuncid = opform->oprcode;

        ...

至此,操作符函数就这么获取了。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言