postgresql/lightdb保留關鍵字與非保留關鍵字

  有幾個地方會添加關鍵字,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,如下:

pg_get_keywords() → setof record ( word textcatcode "char"catdesc text

返回一組描述服務器識別的 SQL 關鍵字的記錄。word列包含關鍵字。catcode列包含一個類別代碼:U對於未保留C的關鍵字、可以是列名T的關鍵字、可以是類型或函數名稱的關鍵字或R完全保留的關鍵字。catdesc列包含描述類別的可能本地化字符串。

 
  完整的lightdb以及postgresql關鍵字清單可見http://www.light-pg.com/docs/lightdb/13.3-22.2/sql-keywords-appendix.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章