postgresql-typed
tsql
postgresql-typed | tsql | |
---|---|---|
2 | 3 | |
83 | 11 | |
- | - | |
4.9 | 6.8 | |
about 2 months ago | 8 months ago | |
Haskell | TypeScript | |
BSD 3-clause "New" or "Revised" License | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
postgresql-typed
- Kysely: TypeScript SQL Query Builder
-
What databases do you find the most productive to connect to Haskell?
If you need Cassandra specifically, cql-io is pretty good. For a general purpose database I'd go with Postgres. There are many good choices in the Haskell ecosystem, but I really like postgres-typed. It lets you write plain SQL, checks you queries against a live database schema at compile time, and makes sure you use the results correctly as well. It's amazing, I never ran into type related errors and it's pretty seamless.
tsql
-
Kysely: TypeScript SQL Query Builder
We use in prod variant of no 1. [0]. Why? Because:
* it's extremely lightweight (built on pure, functional combinators)
* it allows us to use more complex patterns ie. convention where every json field ends with Json which is automatically parsed; which, unlike datatype alone, allows us to create composable query to fetch arbitrarily nested graphs and promoting single [$] key ie. to return list of emails as `string[]` not `{ email: string }[]` with `select email as [$] from Users` etc.
* has convenience combinators for things like constructing where clauses from monodb like queries
* all usual queries like CRUD, exists etc. and some more complex ie. insertIgnore, merge1n etc has convenient api
We resort to runtime type assertions [1] which works well for this and all other i/o; runtime type assertions are necessary for cases when your running service is incorrectly attached to old or future remote schema (there are other protections against it but still happens).
[0] https://github.com/appliedblockchain/tsql
[1] https://github.com/appliedblockchain/assert-combinators
-
Objection to ORM Hatred
Exactly. I'm happy with tsql [0] - template based, with safe sanitation, helper renderers/combinators, used in production for several years, would recommend this approach.
[0] https://github.com/appliedblockchain/tsql
-
DenoDB
Personally I prefer functional combinators like interfaces [0]. Js/ts have tagged templates which enhances those type of interfaces a lot. It gives access to full set of functionality of underlying database, not just common denominator of all used. It allows arbitrary compositions etc.
[0] https://github.com/appliedblockchain/tsql/
What are some alternatives?
postgresql-transactional - Transactional monadic actions on top of PostgreSQL.
denodb - MySQL, SQLite, MariaDB, PostgreSQL and MongoDB ORM for Deno
postgresql-tx - [Moved to: https://github.com/Simspace/postgresql-tx]
postgres - Postgres.js - The Fastest full featured PostgreSQL client for Node.js, Deno, Bun and CloudFlare
postgresql-simple-opts - An optparse-applicative parser for postgresql-simple's connection options
MySQL - A pure node.js JavaScript Client implementing the MySQL protocol.
postgresql-simple-named - :question: Implementation of named parameters for `postgresql-simple` library
trpc - 🧙♀️ Move Fast and Break Nothing. End-to-end typesafe APIs made easy.
cassandra-cql - Haskell client for Cassandra's CQL protocol
PostgreSQL - PostgreSQL client for node.js.
postgresql-syntax - PostgreSQL SQL syntax utilities
JDBI - The Jdbi library provides convenient, idiomatic access to relational databases in Java and other JVM technologies such as Kotlin, Clojure or Scala.