【标题】(请简要描述下实现的内容)
当targetlist存在系统列时,不重写fulljoin
【实现内容】:
当targetlist存在系统列时,不重写fulljoin
【根因分析】:
重写fulljoin时,生成了一个 Left Join 和一个 Left Anti Full Join,然后用append把两个join结果联合起来,在 reduce_inequality_fulljoins_jointree_recurse 中,append的targetlist来自joinaliasvars,里面不包含系统列的信息,所以在replace_node_clause替换targetList时,没法把系统列的var给替换掉,导致执行时,targetList里面的var存储的varno是错误的。

【实现方案】:
在 reduce_inequality_fulljoins_jointree_recurse 里面修改下,让他能处理系统列也能做到,不过写的代码会比较多,考虑到这个场景实际使用应该比较少,当targetlist包含系统列时,直接禁止重写fulljoin比较简单。
另稍微优化下判断是否能够rewrite fulljoin的逻辑,部分场景下可提前break,减少不必要的检查。

另外,当join条件包含系统列时没有问题,因为他不涉及varno的替换

【关联需求或issue】:
#I73J9V:查询information_schema视图,报错:no relation entry for relid 4
【开发自验报告】:

  1. 请附上自验结果(内容或者截图)
    输入图片说明
    输入图片说明
  2. 是否可以添加fastcheck测试用例,如是,请补充fastcheck用例
    是,已添加
  3. 是否涉及资料修改,如是,在docs仓库补充资料
    不涉及
  4. 是否考虑升级场景(系统表修改、日志持久化以及修改执行态数据格式)
    不涉及
  5. 是否考虑在线扩容等扩展场景
    不涉及
  6. 是否考虑异常场景/并发场景/前向兼容/性能场景
    不涉及
  7. 是否对其他模块产生影响
    不涉及

【其他说明】:
顺便补充了一个小修改,打包的时候打包openGauss_expr_dolphin.ir文件,dolphin插件需要
输入图片说明