Files
evento/node_modules/@mikro-orm/postgresql/PostgreSqlConnection.js
2026-03-18 14:55:56 -03:00

39 lines
1.4 KiB
JavaScript

import { Pool, TypeOverrides } from 'pg';
import Cursor from 'pg-cursor';
import { PostgresDialect } from 'kysely';
import array from 'postgres-array';
import { AbstractSqlConnection, Utils } from '@mikro-orm/sql';
/** PostgreSQL database connection using the `pg` driver. */
export class PostgreSqlConnection extends AbstractSqlConnection {
createKyselyDialect(overrides) {
const options = this.mapOptions(overrides);
return new PostgresDialect({
pool: new Pool(options),
cursor: Cursor,
onCreateConnection: this.options.onCreateConnection ?? this.config.get('onCreateConnection'),
});
}
mapOptions(overrides) {
const ret = { ...this.getConnectionOptions() };
const pool = this.config.get('pool');
Utils.defaultValue(ret, 'max', pool?.max);
Utils.defaultValue(ret, 'idleTimeoutMillis', pool?.idleTimeoutMillis);
// use `select typname, oid, typarray from pg_type order by oid` to get the list of OIDs
const types = new TypeOverrides();
[
1082, // date
1114, // timestamp
1184, // timestamptz
1186, // interval
].forEach(oid => types.setTypeParser(oid, str => str));
[
1182, // date[]
1115, // timestamp[]
1185, // timestamptz[]
1187, // interval[]
].forEach(oid => types.setTypeParser(oid, str => array.parse(str)));
ret.types = types;
return Utils.mergeConfig(ret, overrides);
}
}