From 1eaa7876a49de8b4ff82f89aa79684e8b968f4f2 Mon Sep 17 00:00:00 2001 From: Sage Griffin Date: Tue, 15 Sep 2026 12:17:09 -0600 Subject: [PATCH 1/2] Add a more interesting README This adds some more details about the design and reasoning behind the library, along with some cleanup of contribution guidelines. Due to the nature of embedding images within the repo, the embedded images will only show up when the pull request is merged, but will appear broken in the pull request. --- README.md | 144 ++++++++++++++++++++++++++++++++++++++++- benchmark_mem.png | Bin 0 -> 19838 bytes benchmark_mem_log.png | Bin 0 -> 20940 bytes benchmark_time.png | Bin 0 -> 18913 bytes benchmark_time_log.png | Bin 0 -> 20749 bytes 5 files changed, 142 insertions(+), 2 deletions(-) create mode 100755 benchmark_mem.png create mode 100755 benchmark_mem_log.png create mode 100755 benchmark_time.png create mode 100755 benchmark_time_log.png diff --git a/README.md b/README.md index 5c5226c..6a8d088 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ PG Raw Parse provides a low level wrapper around the PostgreSQL backend parser. These bindings, as well as some additional functionality are provided by -[libpg\_query](https://github.com/pganalyze/libpg_query). +[libpg\_query]. In addition to parsing, we provide mechanisms to [traverse an AST], [construct new ASTs], and [transform ASTs]. See the API docs for more details. @@ -12,12 +12,136 @@ new ASTs], and [transform ASTs]. See the API docs for more details. [construct new ASTs]: https://docs.rs/pg_raw_parse/latest/pg_raw_parse/make/index.html [transform ASTs]: https://docs.rs/pg_raw_parse/latest/pg_raw_parse/transform/index.html +## Design + +The primary goal of `pg_raw_parse` is to map to PostgreSQL's parser with as +little overhead as possible. This means mapping to the raw structures whenever +possible, using PostgreSQL's internal allocator, and avoiding any significant +copies of data. + +PostgreSQL does not publish any header files or libraries to expose its backend +functions. We use [libpg\_query], which embeds those files in a form that is +easy to compile without going through cmake, as well as makes a few changes +to enable multithreaded usage. We also use this library for its `deparse` +implementation, turning an AST back into a string. + +When possible, the structures in this library are cast directly from a pointer +to the C structure. The main exception to this is `Node *`, which is +semantically an unsized enum. There is no way to represent an enum with +different sizes for each variant in Rust, so we need our own wrapper enum. The +tag is identical to the tag of the C enum, so LLVM *should* be able to optimize +this away in many cases but it is not guaranteed. + +Everything in pg\_raw\_parse makes use of PostgreSQLs allocator, both for +manipulating the structures returned by `parse`, and for [constructors provided +by this library][construct new ASTs]. It is assumed that ASTs are retained at +the scope of a single query. Each call to `parse` will return an AST with its +own arena. Individual nodes do not implement `Drop`, and are not freed until the +entire arena is dropped. This can result in slightly higher memory usage when +mutating ASTs, as nodes that are replaced will still occupy memory. But the +result is much less overhead from `palloc`/`pfree` in the most common usage +patterns. + +To ensure that fields of an AST node are always allocated on the same arena as +its parent, we make use of [lifetime branding]. [`MemoryToken`] is a type that +is used for constructing node allocated on a specific arena. Constructors +require all fields to be [`Unique`], which represents a node allocated on that +same arena and is not assigned anywhere else. Once all construction/mutation is +complete, the result is wrapped in [`Owned`], which is responsible for freeing +the arena in its destructor. + +[lifetime branding]: https://plv.mpi-sws.org/rustbelt/ghostcell/ +[`MemoryToken`]: https://docs.rs/pg_raw_parse/latest/pg_raw_parse/make/struct.MemoryToken.html +[`Unique`]: https://docs.rs/pg_raw_parse/latest/pg_raw_parse/make/struct.Unique.html +[`Owned`]: https://docs.rs/pg_raw_parse/latest/pg_raw_parse/struct.Owned.html + +Because individual nodes are never freed on their own, once an arena is inside +of an `Owned`, it is frozen. It is only possible to get shared references to +fields within it, and its arena can never be used for allocations again. This +decision was made to make it impossible to cause a memory leak by holding a long +lived reference to an AST, and then mutating it repeatedly. Instead, to mutate +an `Owned` node, it must first be copied onto a new memory arena using +[`make_unique`]. + +[`make_unique`]: https://docs.rs/pg_raw_parse/latest/pg_raw_parse/make/struct.MemoryToken.html#method.make_unique + +The majority of the code in this library is generated from C header files, with +the exception of extremely generic code such as list manipulation. We first run +these header files through [bindgen], and then operate on the resulting code as +if it were a procedural macro. Although this code lives in +[build.rs](blob/main/build.rs), its patterns should be familiar to developers +familiar with writing procedural macros. + +[bindgen]: https://github.com/rust-lang/rust-bindgen + +We create our own layout compatible structs rather than directly exposing the +structs generated by bindgen. This is to give us control over the visibility of +fields, as we don't want raw pointer fields to be public. We generate accessor +methods that convert to our custom type, and check the tag so an invalid node +assignment results in a panic rather than undefined behavior. In particular, +this is required for `Node*`, which cannot be represented in Rust as a simple +pointer cast for the reasons mentioned above. + +C has no concept of generics, so all lists are untyped lists of nodes. However, +many of those fields have documentation stating that they are a list of a single +type of node. We look for those comments, and change the type of the field to a +typed list if we find one. + +[AST traversal][walk an AST] is done using PostgreSQL's internal +`raw_expression_tree_walker` function, with a thin wrapper to handle passing a +Rust closure to C and transform PostgreSQL's exceptions into Rust panics. [AST +transformation][transform ASTs] is done with generated code. + +As a result of relying on code generation for the majority of this library, +supporting new PostgreSQL versions requires very little work. It is usually +nothing more than a submodule update for [libpg\_query], pointing to a commit +which includes the PostgreSQL source for that version. + +## Comparison with pg_query.rs + +The other popular library in this space is [pg\_query.rs], which is maintained +by the same team who maintains [libpg\_query]. While both libraries depend on +[libpg\_query] to get access to PostgreSQL's internal parser, [pg\_query.rs] +uses [libpg\_query]'s protobuf serialization layer to somewhat decouple it from +PostgreSQL's internal details. This type of approach makes sense when you're +maintaining bindings for multiple languages. But Rust's strong C FFI means a +lower level binding allows us to avoid many of the drawbacks of that approach. + +We are able to avoid the overhead of protobuf de/serialization, as well as +memory cost of copying all those structures into a memory space controlled by +the global allocator. `protoc` also generates a fairly inefficient data +structure in this case, causing the `Node` enum to be 584 bytes large. + +In contrast, by binding directly to PostgreSQL's data structures, there is no +memory overhead beyond what would be used either way within PostgreSQL's parser. +And the cost of "constructing" the Rust structures is at most a pointer cast and +a tag check. These two factors result in pg\_raw\_parse performing significantly +better, with the gap increasing as the size of the AST increases. + +#### Parse time + +![Speed benchmark graph](raw/main/benchmark_time.png) + +#### Parse time (log scale) + +![Speed benchmark graph (log scale)](raw/main/benchmark_time_log.png) + +#### Memory Usage + +![Memory benchmark graph](raw/main/benchmark_mem.png) + +#### Memory Usage (log scale) + +![Memory benchmark graph (log scale)](raw/main/benchmark_mem_log.png) + +## Contributing + This library's API surface is primarily driven by the needs of [PgDog](https://github.com/pgdogdev/pgdog). It is not intended to be a complete, one-size-fits-all solution to PostgreSQL ASTs. Contributions are welcome, but pull requests adding large and complex features are unlikely to be accepted unless they align with PgDog's needs. For a more general purpose library, -consider [pg\_query.rs](https://github.com/pganalyze/pg_query.rs). +consider [pg\_query.rs]. ## License @@ -27,3 +151,19 @@ Licensed under either of these: https://www.apache.org/licenses/LICENSE-2.0) * MIT license ([LICENSE-MIT](LICENSE-MIT) or https://opensource.org/licenses/MIT) + +[libpg\_query]: https://github.com/pganalyze/libpg_query +[pg\_query.rs]: https://github.com/pganalyze/pg_query.rs + +## LLM Policy + +This library was primarily written by humans, without LLM assistance. While LLM +assisted pull requests are allowed, any code written by an LLM must be +disclosed. Regardless of whether they were written by a human or an LLM, pull +requests are expected to be of a reasonable size to be reviewed by a human. + +Your pull request description, and any communication with maintainers must be +written by a human. Do not copy/paste output from an LLM into a PR comment. Pull +requests that violate this policy will be closed and locked. + + diff --git a/benchmark_mem.png b/benchmark_mem.png new file mode 100755 index 0000000000000000000000000000000000000000..c1de4eff96b6152146d1d5f79140e52ff0100fcd GIT binary patch literal 19838 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 literal 0 HcmV?d00001 diff --git a/benchmark_mem_log.png b/benchmark_mem_log.png new file mode 100755 index 0000000000000000000000000000000000000000..56aac2cfaa0ca63f1a87538651eb728345226d68 GIT binary patch literal 20940 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 JLOFB){{`+My*dB@ literal 0 HcmV?d00001 diff --git a/benchmark_time_log.png b/benchmark_time_log.png new file mode 100755 index 0000000000000000000000000000000000000000..6f375b78f1f4d48a1e27bdcd8f2c267f47f87a55 GIT binary patch literal 20749 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 literal 0 HcmV?d00001 From 7b7c6866485f94c48ff1542aba5ffd84bd893f60 Mon Sep 17 00:00:00 2001 From: Sage Griffin Date: Tue, 15 Sep 2026 12:52:37 -0600 Subject: [PATCH 2/2] Fix bad benchmark graph --- benchmark_time_log.png | Bin 20749 -> 21905 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/benchmark_time_log.png b/benchmark_time_log.png index 6f375b78f1f4d48a1e27bdcd8f2c267f47f87a55..792203c9ec7fa3f90d763d039c4c1543d0b3b92c 100755 GIT binary patch literal 21905 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"n`3Z(0T+m{qx)Ggky}kl?uN6p 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