pg_parse   [![Build Status]][actions] [![Latest Version]][crates.io] [![Docs Badge]][docs]
===========
[Build Status]: https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fpaupino%2Fpg_parse%2Fbadge&label=build&logo=none
[actions]: https://actions-badge.atrox.dev/paupino/pg_parse/goto
[Latest Version]: https://img.shields.io/crates/v/pg_parse.svg
[crates.io]: https://crates.io/crates/pg_parse
[Docs Badge]: https://docs.rs/pg_parse/badge.svg
[docs]: https://docs.rs/pg_parse
PostgreSQL parser for Rust that uses the [actual PostgreSQL server source]((https://github.com/pganalyze/libpg_query))
to parse
SQL queries and return the internal PostgreSQL parse tree.
## Getting started
Add the following to your `Cargo.toml`
```toml
[dependencies]
pg_parse = "0.12"
```
## Example: Parsing a query
```rust
use pg_parse::ast::Node;
let result = pg_parse::parse("SELECT * FROM contacts");
assert!(result.is_ok());
let result = result.unwrap();
assert!(matches!(*&result[0], Node::SelectStmt(_)));
// We can also convert back to a string, if the `str` feature is enabled (enabled by default).
#[cfg(feature = "str")]
assert_eq!(result[0].to_string(), "SELECT * FROM contacts");
```
## What's the difference between pg_parse and pg_query.rs?
The [`pganalyze`](https://github.com/pganalyze/) organization maintains the official implementation: [
`pg_query.rs`](https://github.com/pganalyze/pg_query.rs). This
closely resembles the name of the C library also published by the team (`libpg_query`). This implementation uses the
protobuf
interface introduced with version 13 of `libpg_query`.
This library similarly consumes `libpg_query` however utilizes the older JSON interface to manage parsing. The intention
of this library
is to maintain a dependency "light" implementation with `serde` and `serde_json` being the only required runtime
dependencies.
So which one should you use? You probably want to use the official `pg_query.rs` library as that will continue to be
kept closely up to date with `libpg_query` updates. This library will continue to be maintained however may not be as
up-to-date as the official implementation.
## Credits
A huge thank you to [Lukas Fittl](https://github.com/lfittl) for all of his amazing work
creating [libpg_query](https://github.com/pganalyze/libpg_query).