postgresql/lightdb保留关键字与非保留关键字及AS_LABEL、BARE_LABEL
PG中别名的实现包括AS 别名和不带AS的别名,实现为AS_LABEL和BARE_LABEL之分。BARE_LABEL是可以直接做列别名,AS_LABEL是必须带as或双引号。
关键字作为别名的实现,也需要区分为AS_LABEL或BARE_LABEL。在PG的实现中,绝大部分都实现为BARE_LABEL。
有几个地方会添加关键字,xxx_kwlist.h, xxx_garm.y,包括解析器、ecpg、plpgsql、pgorasql、复制以及gin中的。如下:
postgresql-13.3\doc\src\sgml\generate-keywords-table.pl负责生成keywords.sgml。
postgresql-13.3\src\backend\parser\check_keywords.pl负责校验gram.y和kwlist.h中的关键字相同。
其它各xxx_keywords.c/h各个文件一般include各种kwlist.h文件,这样可以保证只有2类源。
SQL 区分保留关键字和 非保留关键字。根据标准,保留关键字是唯一真正的关键字;它们绝不允许作为标识符。非保留关键字仅在特定上下文中具有特殊含义,可以在其他上下文中用作标识符。大多数非保留关键字实际上是 SQL 指定的内置表和函数的名称。非保留关键字的概念本质上只是为了声明在某些上下文中将某些预定义的含义附加到单词上。如下:
在LightDB解析器中,事情有点复杂。有几种不同类别的标记,从永远不能用作标识符的标记到与普通标识符相比在解析器中绝对没有特殊地位的标记。(后者通常是由 SQL 指定的函数的情况。)添加关键字最重要之一的是在决定在gramy中的哪几类关键字列表中添加。即使保留关键字在LightDB中也不是完全保留的,但可以用作列标签(例如,SELECT 55 AS CHECK
即使CHECK
是保留关键字)。
添加关键字需要考虑的第二个点是原有的应用如果使用了相应的标识符,升级是否会受影响,如果希望不受影响,就只能添加非保留关键字。
查看所有关键字的函数为pg_get_keywords,如下:
返回一组描述服务器识别的 SQL 关键字的记录。该 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2016-08-28 mariadb connector bug
2016-08-28 mybatis 下划线转驼峰配置