以添加sysdate关键字为例说明:
1、src\backend\parser\gram.y文件的%token
<keyword>段添加SYSDATE关键字,
建议按照ASCII顺序添加
2、src\backend\parser\gram.y文件的函数语义分析段添加如下内容:
(可以添加到CURRENT_TIMESTAMP的下面)
----------------------------------------------------------------------
|
SYSDATE
{
/*
* Translate as
"now()", since we have a function that
* does exactly what is
needed.
*/
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顺序排列的。