有幾個地方會添加關鍵字,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 關鍵字的記錄。該 |