函数使用internal类型的限制添加wm_concat

需求场景

Orafce-3.17往OpenGauss移植,需要保持插件原有的函数wm_concat,故需要内核支持该函数使用internal数据类型。
wm_concat是Oracle12c以前版本的函数,在12c版本之后被删除,但插件Orafce-3.17为了兼容Oracle12c之前的版本,所以需要保留该函数wm_concat。

关联的Issue

orafce兼容A库的wm_concat函数报错

场景表象

Orafce-3.17在OpenGauss-2.1.0版本中,安装插件时,

create extension orafce;

创建wm_concat函数,报错内容如下:

unsafe use of pseudo-type "internal"

插件orafce-3.17中函数wm_concat创建过程

CREATE AGGREGATE pg_catalog.wm_concat(text) (
  SFUNC=pg_catalog.wm_concat_transfn,
  STYPE=internal,
  FINALFUNC=pg_catalog.listagg_finalfn
);

根因分析

opengauss内核对使用internal数据类型的函数限制在代码中InternalAggIsSupported函数中写死,但orafce中的wm_concat函数需要使用internal数据类型,orafce插件为了兼容12c之前的版本,所以必须保留wm_concat。

修改方案

在opengauss内核中InternalAggIsSupported函数处,添加对wm_concat的函数支持。

实现内容

在函数InternalAggIsSupported中,添加wm_concat其使用internal的权限。