@mikro-orm/sql 7.1.0-dev.30 → 7.1.0-dev.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dialects/postgresql/BasePostgreSqlEntityManager.d.ts +19 -0
- package/dialects/postgresql/BasePostgreSqlEntityManager.js +24 -0
- package/dialects/postgresql/BasePostgreSqlPlatform.d.ts +6 -0
- package/dialects/postgresql/BasePostgreSqlPlatform.js +44 -0
- package/dialects/postgresql/index.d.ts +2 -0
- package/dialects/postgresql/index.js +2 -0
- package/dialects/postgresql/typeOverrides.d.ts +14 -0
- package/dialects/postgresql/typeOverrides.js +12 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<a href="https://mikro-orm.io"><img src="https://raw.githubusercontent.com/mikro-orm/mikro-orm/master/docs/static/img/logo-readme.svg?sanitize=true" alt="MikroORM" /></a>
|
|
3
3
|
</h1>
|
|
4
4
|
|
|
5
|
-
TypeScript ORM for Node.js based on Data Mapper, [Unit of Work](https://mikro-orm.io/docs/unit-of-work/) and [Identity Map](https://mikro-orm.io/docs/identity-map/) patterns. Supports MongoDB, MySQL, MariaDB, PostgreSQL, SQLite (including libSQL), MSSQL and Oracle databases.
|
|
5
|
+
TypeScript ORM for Node.js based on Data Mapper, [Unit of Work](https://mikro-orm.io/docs/unit-of-work/) and [Identity Map](https://mikro-orm.io/docs/identity-map/) patterns. Supports MongoDB, MySQL, MariaDB, PostgreSQL (including CockroachDB and PGlite), SQLite (including libSQL), MSSQL and Oracle databases.
|
|
6
6
|
|
|
7
7
|
> Heavily inspired by [Doctrine](https://www.doctrine-project.org/) and [Hibernate](https://hibernate.org/).
|
|
8
8
|
|
|
@@ -19,6 +19,7 @@ Install a driver package for your database:
|
|
|
19
19
|
|
|
20
20
|
```sh
|
|
21
21
|
npm install @mikro-orm/postgresql # PostgreSQL
|
|
22
|
+
npm install @mikro-orm/pglite # PGlite (embedded PostgreSQL in WASM)
|
|
22
23
|
npm install @mikro-orm/mysql # MySQL
|
|
23
24
|
npm install @mikro-orm/mariadb # MariaDB
|
|
24
25
|
npm install @mikro-orm/sqlite # SQLite
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type EntityName } from '@mikro-orm/core';
|
|
2
|
+
import { SqlEntityManager } from '../../SqlEntityManager.js';
|
|
3
|
+
import type { AbstractSqlDriver } from '../../AbstractSqlDriver.js';
|
|
4
|
+
/**
|
|
5
|
+
* Shared base class for PostgreSQL-flavoured entity managers (`pg`, `pglite`).
|
|
6
|
+
* Adds Postgres-only helpers on top of `SqlEntityManager`.
|
|
7
|
+
*/
|
|
8
|
+
export declare class BasePostgreSqlEntityManager<Driver extends AbstractSqlDriver = AbstractSqlDriver> extends SqlEntityManager<Driver> {
|
|
9
|
+
/**
|
|
10
|
+
* Refreshes a materialized view.
|
|
11
|
+
*
|
|
12
|
+
* @param entityName - The entity name or class of the materialized view
|
|
13
|
+
* @param options - Optional settings
|
|
14
|
+
* @param options.concurrently - If true, refreshes the view concurrently (requires a unique index on the view)
|
|
15
|
+
*/
|
|
16
|
+
refreshMaterializedView<Entity extends object>(entityName: EntityName<Entity>, options?: {
|
|
17
|
+
concurrently?: boolean;
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SqlEntityManager } from '../../SqlEntityManager.js';
|
|
2
|
+
/**
|
|
3
|
+
* Shared base class for PostgreSQL-flavoured entity managers (`pg`, `pglite`).
|
|
4
|
+
* Adds Postgres-only helpers on top of `SqlEntityManager`.
|
|
5
|
+
*/
|
|
6
|
+
export class BasePostgreSqlEntityManager extends SqlEntityManager {
|
|
7
|
+
/**
|
|
8
|
+
* Refreshes a materialized view.
|
|
9
|
+
*
|
|
10
|
+
* @param entityName - The entity name or class of the materialized view
|
|
11
|
+
* @param options - Optional settings
|
|
12
|
+
* @param options.concurrently - If true, refreshes the view concurrently (requires a unique index on the view)
|
|
13
|
+
*/
|
|
14
|
+
async refreshMaterializedView(entityName, options) {
|
|
15
|
+
const meta = this.getMetadata(entityName);
|
|
16
|
+
if (!meta.view || !meta.materialized) {
|
|
17
|
+
throw new Error(`Entity ${meta.className} is not a materialized view`);
|
|
18
|
+
}
|
|
19
|
+
const helper = this.getDriver().getPlatform().getSchemaHelper();
|
|
20
|
+
const schema = meta.schema ?? this.config.get('schema');
|
|
21
|
+
const sql = helper.refreshMaterializedView(meta.tableName, schema, options?.concurrently);
|
|
22
|
+
await this.execute(sql);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -71,6 +71,12 @@ export declare class BasePostgreSqlPlatform extends AbstractSqlPlatform {
|
|
|
71
71
|
}): string[];
|
|
72
72
|
marshallArray(values: string[]): string;
|
|
73
73
|
unmarshallArray(value: string): string[];
|
|
74
|
+
escape(value: any): string;
|
|
75
|
+
/**
|
|
76
|
+
* Ported from PostgreSQL 9.2.4 source code (`src/interfaces/libpq/fe-exec.c`),
|
|
77
|
+
* matching `pg.Client.prototype.escapeLiteral` so we don't need a `pg` dep here.
|
|
78
|
+
*/
|
|
79
|
+
private escapeLiteral;
|
|
74
80
|
getVarcharTypeDeclarationSQL(column: {
|
|
75
81
|
length?: number;
|
|
76
82
|
}): string;
|
|
@@ -212,6 +212,50 @@ export class BasePostgreSqlPlatform extends AbstractSqlPlatform {
|
|
|
212
212
|
return v;
|
|
213
213
|
});
|
|
214
214
|
}
|
|
215
|
+
escape(value) {
|
|
216
|
+
if (typeof value === 'bigint') {
|
|
217
|
+
value = value.toString();
|
|
218
|
+
}
|
|
219
|
+
if (typeof value === 'string') {
|
|
220
|
+
return this.escapeLiteral(value);
|
|
221
|
+
}
|
|
222
|
+
if (value instanceof Date) {
|
|
223
|
+
return `'${this.formatDate(value)}'`;
|
|
224
|
+
}
|
|
225
|
+
if (ArrayBuffer.isView(value)) {
|
|
226
|
+
return `E'\\\\x${value.toString('hex')}'`;
|
|
227
|
+
}
|
|
228
|
+
if (Array.isArray(value)) {
|
|
229
|
+
return value.map(v => this.escape(v)).join(', ');
|
|
230
|
+
}
|
|
231
|
+
return value;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Ported from PostgreSQL 9.2.4 source code (`src/interfaces/libpq/fe-exec.c`),
|
|
235
|
+
* matching `pg.Client.prototype.escapeLiteral` so we don't need a `pg` dep here.
|
|
236
|
+
*/
|
|
237
|
+
escapeLiteral(str) {
|
|
238
|
+
let hasBackslash = false;
|
|
239
|
+
let escaped = `'`;
|
|
240
|
+
for (let i = 0; i < str.length; i++) {
|
|
241
|
+
const c = str[i];
|
|
242
|
+
if (c === `'`) {
|
|
243
|
+
escaped += c + c;
|
|
244
|
+
}
|
|
245
|
+
else if (c === '\\') {
|
|
246
|
+
escaped += c + c;
|
|
247
|
+
hasBackslash = true;
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
escaped += c;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
escaped += `'`;
|
|
254
|
+
if (hasBackslash) {
|
|
255
|
+
escaped = ` E${escaped}`;
|
|
256
|
+
}
|
|
257
|
+
return escaped;
|
|
258
|
+
}
|
|
215
259
|
getVarcharTypeDeclarationSQL(column) {
|
|
216
260
|
if (column.length === -1) {
|
|
217
261
|
return 'varchar';
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export * from './PostgreSqlNativeQueryBuilder.js';
|
|
2
2
|
export * from './BasePostgreSqlPlatform.js';
|
|
3
|
+
export * from './BasePostgreSqlEntityManager.js';
|
|
3
4
|
export * from './FullTextType.js';
|
|
4
5
|
export * from './PostgreSqlSchemaHelper.js';
|
|
6
|
+
export * from './typeOverrides.js';
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export * from './PostgreSqlNativeQueryBuilder.js';
|
|
2
2
|
export * from './BasePostgreSqlPlatform.js';
|
|
3
|
+
export * from './BasePostgreSqlEntityManager.js';
|
|
3
4
|
export * from './FullTextType.js';
|
|
4
5
|
export * from './PostgreSqlSchemaHelper.js';
|
|
6
|
+
export * from './typeOverrides.js';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MikroORM keeps PostgreSQL date/timestamp/interval values as raw strings
|
|
3
|
+
* (and array variants as `string[]`); both `pg` and `pglite` would otherwise
|
|
4
|
+
* eagerly parse them via `pg-types`. Centralizing the OID list here keeps the
|
|
5
|
+
* postgres and pglite drivers in lockstep, while leaving the actual array
|
|
6
|
+
* parsing implementation to the leaf driver (so `@mikro-orm/sql` stays free of
|
|
7
|
+
* postgres-array / postgres-date / postgres-interval dependencies).
|
|
8
|
+
*
|
|
9
|
+
* Use `select typname, oid, typarray from pg_type order by oid` to look up OIDs.
|
|
10
|
+
*/
|
|
11
|
+
type PostgreSqlArrayParser = (value: string) => string[];
|
|
12
|
+
type PostgreSqlValueParser = (value: string) => unknown;
|
|
13
|
+
export declare function createPostgreSqlTypeParsers(arrayParse: PostgreSqlArrayParser): Record<number, PostgreSqlValueParser>;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function createPostgreSqlTypeParsers(arrayParse) {
|
|
2
|
+
const parsers = {};
|
|
3
|
+
for (const oid of [1082, 1114, 1184, 1186]) {
|
|
4
|
+
// date, timestamp, timestamptz, interval — kept as raw strings
|
|
5
|
+
parsers[oid] = str => str;
|
|
6
|
+
}
|
|
7
|
+
for (const oid of [1182, 1115, 1185, 1187]) {
|
|
8
|
+
// date[], timestamp[], timestamptz[], interval[]
|
|
9
|
+
parsers[oid] = arrayParse;
|
|
10
|
+
}
|
|
11
|
+
return parsers;
|
|
12
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mikro-orm/sql",
|
|
3
|
-
"version": "7.1.0-dev.
|
|
3
|
+
"version": "7.1.0-dev.31",
|
|
4
4
|
"description": "TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, PostgreSQL and SQLite databases as well as usage with vanilla JavaScript.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"data-mapper",
|
|
@@ -47,13 +47,13 @@
|
|
|
47
47
|
"copy": "node ../../scripts/copy.mjs"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"kysely": "0.
|
|
50
|
+
"kysely": "0.29.0"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@mikro-orm/core": "^7.0.15"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
|
-
"@mikro-orm/core": "7.1.0-dev.
|
|
56
|
+
"@mikro-orm/core": "7.1.0-dev.31"
|
|
57
57
|
},
|
|
58
58
|
"engines": {
|
|
59
59
|
"node": ">= 22.17.0"
|