天天看点

PostgreSQL 保留关键字添加方法之一,不带参数的函数

以添加sysdate关键字为例说明:

1、src\backend\parser\gram.y文件的%token <keyword>段添加SYSDATE关键字,

建议按照ASCII顺序添加

2、src\backend\parser\gram.y文件的函数语义分析段添加如下内容:

(可以添加到CURRENT_TIMESTAMP的下面)

----------------------------------------------------------------------

| SYSDATE

{

FuncCall *n = makeNode(FuncCall);

n->funcname = SystemFuncName("now");

n->args = NIL;

n->agg_order = NIL;

n->agg_star = FALSE;

n->agg_distinct = FALSE;

n->func_variadic = FALSE;

n->over = NULL;

n->location = @1;

$$ = (Node *)n;

}

----------------------------------------------------------------------

注:SystemFuncName函数的参数是定义在pg_catalog schema下的函数。

这里的“now”,就是pg_catalog.now()

也就是以下SQL文中调用的函数。

select now();

select pg_catalog.now();

这里可以指定为自定义的函数,该函数只要在执行函数sysdate时存在即可。

编译服务器时,函数可以不存在。

3、src\backend\parser\gram.y文件的reserved_keyword段,添加如下SYSDATE,如

----------------------------------------------------------------------

| SYSDATE

----------------------------------------------------------------------

4、src\include\parser\kwlist.h文件中增加如下语句(※):

----------------------------------------------------------------------

PG_KEYWORD("sysdate", SYSDATE, RESERVED_KEYWORD)

----------------------------------------------------------------------

※:添加时,位置是按照ASCII顺序排列的。

继续阅读