PostgreSQL语言AST和语句美化器
pglast的Python项目详细描述
简介
在较低的层次上,模块公开两个libpg_查询函数, parse_sql() 和 parse_plpgsql() ,分别接受一个 sql 语句和一个 plpgsql 语句 并返回一个 解析树 作为python字典、列表和标量值的层次结构。在 有些情况下,这些标量对应于一些c typedef枚举,这些枚举是自动的 从上面提到的postgresql头中提取,并作为 pglast.enums 提供。
在更高的层次上,树由三个python类表示,一个表示 一个单独的节点,a 列表 包装一系列节点,a 标量 用于简单值,例如 a 字符串 , 整数 , 布尔值 或 无
每个节点都由一个 标记来标识,该标记是一个字符串标签,用于描述其内容,即 显示为一组 属性以及字典式接口(技术上是 实现一个 \uu getattr\uu 方法和一个 \uu getitem\uu 方法)。当被要求 属性,该节点返回基类的一个实例,即另一个 节点或 list 或a scalar ,具体取决于该项的数据类型。当节点没有 包含请求的属性,它返回一个丢失的标记实例。
a list 包装一个普通的python list 并可能包含一系列节点实例,或者 在某些情况下,可以使用常用语法访问或迭代的其他子列表。
最后,a 标量 携带某种类型的单个值,可通过其 值访问。 属性。
除此之外,模块还实现了两个序列化,一个将 节点 转换为 raw 文本表示法和另一种返回经过美化的表示法的表示法。后者 由 pgpp cli工具公开,请参见下面的示例。