Awesome
purescript-selda
About
purescript-selda is an SQL library (eDSL) which allows a user to write type-safe queries.
- Generated SQL is guaranteed to be correct by the type system.
- It supports arbitrarily nested queries with capabilities of filtering, joins and aggregation.
- We used standard monadic abstraction which supports writing queries in a linear, natural style.
- Our main target is PostgreSQL though in the upcoming release (already on master) we add SQLite3 support (with ability to support other db backends).
Example Query
To declare a type for a SQL table (already created in the db) we write the following table definition:
people ∷ Table (id ∷ Int, name ∷ String, age ∷ Maybe Int)
people = Table { name: "people" }
Once we've defined the tables, we can write queries, e.g.
selectFrom people \{ id, name, age } → do
{ balance } ← leftJoin bankAccounts \b → id .== b.personId
restrict $ id .> lit 1
pure { id, balance }
Generated SQL for the above query:
SELECT people_0.id AS id, bank_accounts_1.balance AS balance
FROM people people_0
LEFT JOIN bank_accounts bank_accounts_1 ON ((people_0.id = bank_accounts_1.personId))
WHERE ((people_0.id > 1))
For a more gentle introduction and more examples please refer to the Step-by-Step Guide.
More Help
If you have any questions please don't hesitate to ask. <br>I'll be happy to help and provide any guidance if necessary. <br>Open an issue or hit me up directly (either on slack, forum or directly via email).
Install
Install postgresql-client's dependencies
npm install pg decimal.js
Info
- Introductory Guide: End-to-End example: how to setup, write queries, use aggregation, deal with type errors and execute queries and inserts.
- Advanced Guide: Custom Types and Expressions (
litPG
,Any
,EForeign
, custom PG functions), more flexible table definitions (Source
, db schemas, set-returning functions) - unsafe escape hatches - Test Suite: For information about features, examples, usage, etc. refer to the test suite:
Test.Common
,Test.PG
,Test.SQLite3
. To run the tests,docker-compose up -d
helps to prepare postgres database. - Documentation: Pursuit docs
- My thesis
Credits
Supported by Lambda Terms
Inspired by selda