packages feed

pg-query-0.0.1.0: README.md

# pg-query

`pg-query` offers Haskell bindings for [libpg_query](https://github.com/pganalyze/libpg_query),
which makes use of the actual PostgreSQL server source to parse SQL queries and
return the internal PostgreSQL parse tree.

## Example

```hs
{-# LANGUAGE NoImplicitPrelude #-}

import Data.Either (Either (Left, Right))
import GHC.Base (error)
import GHC.IO (IO)
import PgQuery (parseSql)
import System.IO (print)

main :: IO ()
main = do
  eResult <- parseSql "select u.name, u.address from users u where u.id = $1"
  case eResult of
    Left err -> error err
    Right result -> print result
```

You should see output that looks like this (formatted for clarity):

```
{ version: 160001
  stmts {
    stmt {
      select_stmt {
        target_list {
          res_target {
            val {
              column_ref {
                fields {
                  string { sval: "u" }
                }
                fields {
                  string { sval: "name" }
                }
                location: 7
              }
            }
            location: 7
          }
        }
        target_list {
          res_target {
            val {
              column_ref {
                fields {
                  string { sval: "u" }
                }
                fields {
                  string { sval: "address" }
                }
                location: 15
              }
            }
            location: 15
          }
        }
        from_clause {
          range_var {
            relname: "users"
            inh: true
            relpersistence: "p"
            alias { aliasname: "u" }
            location: 30
          }
        }
        where_clause {
          a_expr {
            kind: AEXPR_OP
            name {
              string { sval: "=" }
            }
            lexpr {
              column_ref {
                fields {
                  string { sval: "u" }
                }
                fields {
                  string { sval: "id" }
                }
                location: 44
              }
            }
            rexpr {
              param_ref {
                number: 1
                location: 51
              }
            }
            location: 49
          }
        }
        limit_option: LIMIT_OPTION_DEFAULT
        op: SETOP_NONE
      }
    }
  }
}
```

Interacting with the parse tree is made possible through the use of
[proto-lens](https://github.com/google/proto-lens). Some examples can be seen
in `test/PgQuery/`.

## Installation

You'll need to ensure [libpg_query](https://github.com/pganalyze/libpg_query)
is installed before trying to build this package.

## Development

### Building

```
make build
```

### Testing

```
make test
```