1.4 KiB
1.4 KiB
Dialects
A dialect is the package that knows one database: how to read its catalog, how to write its SQL, how to run a transaction and what its errors mean.
| Package | Database | Embeds | Writes return rows | Estimated count | Row security |
|---|---|---|---|---|---|
@crudy/restloom-postgres |
PostgreSQL 13+ | json_build_object, json_agg |
RETURNING |
planner estimate | yes |
Postgres
import { postgres } from '@crudy/restloom-postgres';
const db = postgres(pool);
- Transactions: every request is one transaction,
READ ONLYfor reads, withSET LOCAL statement_timeoutfromlimits.timeoutMs. - Types: enums read as text. A domain reads as its base type.
- Timestamps: they are written in the session's time zone, as Postgres writes them in JSON.
- Procedures: calls use named arguments, so the order in the body does not matter.
Changing how SQL is written
Every piece of SQL comes from one overridable method of the dialect's renderer. To change one, subclass it and pass it in:
import { PostgresRenderer, postgres } from '@crudy/restloom-postgres';
class Renderer extends PostgresRenderer {
like(expr: string, pattern: string, insensitive: boolean) {
return insensitive ? `unaccent(${expr}) ILIKE unaccent(${pattern})` : super.like(expr, pattern, false);
}
}
const db = postgres(pool, { renderer: new Renderer() });
The pieces are listed in writing a dialect.