@mikro-orm/sql 7.0.3 → 7.0.4-dev.1

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.
Files changed (87) hide show
  1. package/AbstractSqlConnection.d.ts +58 -94
  2. package/AbstractSqlConnection.js +238 -235
  3. package/AbstractSqlDriver.d.ts +155 -410
  4. package/AbstractSqlDriver.js +1941 -2064
  5. package/AbstractSqlPlatform.d.ts +73 -83
  6. package/AbstractSqlPlatform.js +158 -162
  7. package/PivotCollectionPersister.d.ts +15 -33
  8. package/PivotCollectionPersister.js +160 -158
  9. package/README.md +1 -1
  10. package/SqlEntityManager.d.ts +22 -67
  11. package/SqlEntityManager.js +38 -54
  12. package/SqlEntityRepository.d.ts +14 -14
  13. package/SqlEntityRepository.js +23 -23
  14. package/dialects/mssql/MsSqlNativeQueryBuilder.d.ts +12 -12
  15. package/dialects/mssql/MsSqlNativeQueryBuilder.js +194 -192
  16. package/dialects/mysql/BaseMySqlPlatform.d.ts +45 -64
  17. package/dialects/mysql/BaseMySqlPlatform.js +131 -134
  18. package/dialects/mysql/MySqlExceptionConverter.d.ts +6 -6
  19. package/dialects/mysql/MySqlExceptionConverter.js +77 -91
  20. package/dialects/mysql/MySqlNativeQueryBuilder.d.ts +3 -3
  21. package/dialects/mysql/MySqlNativeQueryBuilder.js +69 -66
  22. package/dialects/mysql/MySqlSchemaHelper.d.ts +39 -39
  23. package/dialects/mysql/MySqlSchemaHelper.js +319 -327
  24. package/dialects/oracledb/OracleDialect.d.ts +52 -81
  25. package/dialects/oracledb/OracleDialect.js +149 -155
  26. package/dialects/oracledb/OracleNativeQueryBuilder.d.ts +12 -12
  27. package/dialects/oracledb/OracleNativeQueryBuilder.js +236 -232
  28. package/dialects/postgresql/BasePostgreSqlPlatform.d.ts +105 -108
  29. package/dialects/postgresql/BasePostgreSqlPlatform.js +350 -351
  30. package/dialects/postgresql/FullTextType.d.ts +6 -10
  31. package/dialects/postgresql/FullTextType.js +51 -51
  32. package/dialects/postgresql/PostgreSqlExceptionConverter.d.ts +5 -5
  33. package/dialects/postgresql/PostgreSqlExceptionConverter.js +43 -55
  34. package/dialects/postgresql/PostgreSqlNativeQueryBuilder.d.ts +1 -1
  35. package/dialects/postgresql/PostgreSqlNativeQueryBuilder.js +4 -4
  36. package/dialects/postgresql/PostgreSqlSchemaHelper.d.ts +82 -102
  37. package/dialects/postgresql/PostgreSqlSchemaHelper.js +705 -733
  38. package/dialects/sqlite/BaseSqliteConnection.d.ts +5 -3
  39. package/dialects/sqlite/BaseSqliteConnection.js +19 -21
  40. package/dialects/sqlite/NodeSqliteDialect.d.ts +1 -1
  41. package/dialects/sqlite/NodeSqliteDialect.js +23 -23
  42. package/dialects/sqlite/SqliteDriver.d.ts +1 -1
  43. package/dialects/sqlite/SqliteDriver.js +3 -3
  44. package/dialects/sqlite/SqliteExceptionConverter.d.ts +6 -6
  45. package/dialects/sqlite/SqliteExceptionConverter.js +51 -67
  46. package/dialects/sqlite/SqliteNativeQueryBuilder.d.ts +2 -2
  47. package/dialects/sqlite/SqliteNativeQueryBuilder.js +7 -7
  48. package/dialects/sqlite/SqlitePlatform.d.ts +72 -63
  49. package/dialects/sqlite/SqlitePlatform.js +139 -139
  50. package/dialects/sqlite/SqliteSchemaHelper.d.ts +60 -70
  51. package/dialects/sqlite/SqliteSchemaHelper.js +520 -533
  52. package/package.json +3 -3
  53. package/plugin/index.d.ts +35 -42
  54. package/plugin/index.js +36 -43
  55. package/plugin/transformer.d.ts +94 -117
  56. package/plugin/transformer.js +881 -890
  57. package/query/ArrayCriteriaNode.d.ts +4 -4
  58. package/query/ArrayCriteriaNode.js +18 -18
  59. package/query/CriteriaNode.d.ts +25 -35
  60. package/query/CriteriaNode.js +123 -133
  61. package/query/CriteriaNodeFactory.d.ts +6 -49
  62. package/query/CriteriaNodeFactory.js +94 -97
  63. package/query/NativeQueryBuilder.d.ts +118 -118
  64. package/query/NativeQueryBuilder.js +480 -484
  65. package/query/ObjectCriteriaNode.d.ts +12 -12
  66. package/query/ObjectCriteriaNode.js +282 -298
  67. package/query/QueryBuilder.d.ts +904 -1546
  68. package/query/QueryBuilder.js +2164 -2294
  69. package/query/QueryBuilderHelper.d.ts +72 -153
  70. package/query/QueryBuilderHelper.js +1028 -1079
  71. package/query/ScalarCriteriaNode.d.ts +3 -3
  72. package/query/ScalarCriteriaNode.js +46 -53
  73. package/query/enums.d.ts +14 -14
  74. package/query/enums.js +14 -14
  75. package/query/raw.d.ts +6 -16
  76. package/query/raw.js +10 -10
  77. package/schema/DatabaseSchema.d.ts +50 -73
  78. package/schema/DatabaseSchema.js +307 -331
  79. package/schema/DatabaseTable.d.ts +73 -96
  80. package/schema/DatabaseTable.js +927 -1012
  81. package/schema/SchemaComparator.d.ts +66 -70
  82. package/schema/SchemaComparator.js +740 -766
  83. package/schema/SchemaHelper.d.ts +95 -109
  84. package/schema/SchemaHelper.js +659 -675
  85. package/schema/SqlSchemaGenerator.d.ts +58 -78
  86. package/schema/SqlSchemaGenerator.js +501 -535
  87. package/typings.d.ts +266 -380
@@ -1,90 +1,80 @@
1
- import {
2
- type RawQueryFragment,
3
- type Constructor,
4
- type EntityManager,
5
- type EntityRepository,
6
- type IDatabaseDriver,
7
- type IsolationLevel,
8
- type MikroORM,
9
- Platform,
10
- } from '@mikro-orm/core';
1
+ import { type RawQueryFragment, type Constructor, type EntityManager, type EntityRepository, type IDatabaseDriver, type IsolationLevel, type MikroORM, Platform } from '@mikro-orm/core';
11
2
  import { SqlSchemaGenerator } from './schema/SqlSchemaGenerator.js';
12
3
  import { type SchemaHelper } from './schema/SchemaHelper.js';
13
4
  import type { IndexDef } from './typings.js';
14
5
  import { NativeQueryBuilder } from './query/NativeQueryBuilder.js';
15
6
  /** Base class for SQL database platforms, providing SQL generation and quoting utilities. */
16
7
  export declare abstract class AbstractSqlPlatform extends Platform {
17
- #private;
18
- protected readonly schemaHelper?: SchemaHelper;
19
- usesPivotTable(): boolean;
20
- indexForeignKeys(): boolean;
21
- getRepositoryClass<T extends object>(): Constructor<EntityRepository<T>>;
22
- getSchemaHelper(): SchemaHelper | undefined;
23
- /** @inheritDoc */
24
- lookupExtensions(orm: MikroORM): void;
25
- getSchemaGenerator(driver: IDatabaseDriver, em?: EntityManager): SqlSchemaGenerator;
26
- /** @internal */
27
- createNativeQueryBuilder(): NativeQueryBuilder;
28
- getBeginTransactionSQL(options?: { isolationLevel?: IsolationLevel; readOnly?: boolean }): string[];
29
- getCommitTransactionSQL(): string;
30
- getRollbackTransactionSQL(): string;
31
- getSavepointSQL(savepointName: string): string;
32
- getRollbackToSavepointSQL(savepointName: string): string;
33
- getReleaseSavepointSQL(savepointName: string): string;
34
- quoteValue(value: any): string;
35
- getSearchJsonPropertySQL(path: string, type: string, aliased: boolean): string | RawQueryFragment;
36
- getSearchJsonPropertyKey(path: string[], type: string, aliased: boolean, value?: unknown): string | RawQueryFragment;
37
- /**
38
- * Quotes a key for use inside a JSON path expression (e.g. `$.key`).
39
- * Simple alphanumeric keys are left unquoted; others are wrapped in double quotes.
40
- * @internal
41
- */
42
- quoteJsonKey(key: string): string;
43
- getJsonIndexDefinition(index: IndexDef): string[];
44
- supportsUnionWhere(): boolean;
45
- supportsSchemas(): boolean;
46
- /** @inheritDoc */
47
- generateCustomOrder(escapedColumn: string, values: unknown[]): string;
48
- /**
49
- * @internal
50
- */
51
- getOrderByExpression(column: string, direction: string, collation?: string): string[];
52
- /**
53
- * Quotes a collation name for use in COLLATE clauses.
54
- * @internal
55
- */
56
- quoteCollation(collation: string): string;
57
- /** @internal */
58
- protected validateCollationName(collation: string): void;
59
- /** @internal */
60
- validateJsonPropertyName(name: string): void;
61
- /**
62
- * Returns FROM clause for JSON array iteration.
63
- * @internal
64
- */
65
- getJsonArrayFromSQL(
66
- column: string,
67
- alias: string,
68
- _properties: {
69
- name: string;
70
- type: string;
71
- }[],
72
- ): string;
73
- /**
74
- * Returns SQL expression to access an element's property within a JSON array iteration.
75
- * @internal
76
- */
77
- getJsonArrayElementPropertySQL(alias: string, property: string, _type: string): string;
78
- /**
79
- * Wraps JSON array FROM clause and WHERE condition into a full EXISTS condition.
80
- * MySQL overrides this because `json_table` doesn't support correlated subqueries.
81
- * @internal
82
- */
83
- getJsonArrayExistsSQL(from: string, where: string): string;
84
- /**
85
- * Maps a runtime type name (e.g. 'string', 'number') to a driver-specific bind type constant.
86
- * Used by NativeQueryBuilder for output bindings.
87
- * @internal
88
- */
89
- mapToBindType(type: string): unknown;
8
+ #private;
9
+ protected readonly schemaHelper?: SchemaHelper;
10
+ usesPivotTable(): boolean;
11
+ indexForeignKeys(): boolean;
12
+ getRepositoryClass<T extends object>(): Constructor<EntityRepository<T>>;
13
+ getSchemaHelper(): SchemaHelper | undefined;
14
+ /** @inheritDoc */
15
+ lookupExtensions(orm: MikroORM): void;
16
+ getSchemaGenerator(driver: IDatabaseDriver, em?: EntityManager): SqlSchemaGenerator;
17
+ /** @internal */
18
+ createNativeQueryBuilder(): NativeQueryBuilder;
19
+ getBeginTransactionSQL(options?: {
20
+ isolationLevel?: IsolationLevel;
21
+ readOnly?: boolean;
22
+ }): string[];
23
+ getCommitTransactionSQL(): string;
24
+ getRollbackTransactionSQL(): string;
25
+ getSavepointSQL(savepointName: string): string;
26
+ getRollbackToSavepointSQL(savepointName: string): string;
27
+ getReleaseSavepointSQL(savepointName: string): string;
28
+ quoteValue(value: any): string;
29
+ getSearchJsonPropertySQL(path: string, type: string, aliased: boolean): string | RawQueryFragment;
30
+ getSearchJsonPropertyKey(path: string[], type: string, aliased: boolean, value?: unknown): string | RawQueryFragment;
31
+ /**
32
+ * Quotes a key for use inside a JSON path expression (e.g. `$.key`).
33
+ * Simple alphanumeric keys are left unquoted; others are wrapped in double quotes.
34
+ * @internal
35
+ */
36
+ quoteJsonKey(key: string): string;
37
+ getJsonIndexDefinition(index: IndexDef): string[];
38
+ supportsUnionWhere(): boolean;
39
+ supportsSchemas(): boolean;
40
+ /** @inheritDoc */
41
+ generateCustomOrder(escapedColumn: string, values: unknown[]): string;
42
+ /**
43
+ * @internal
44
+ */
45
+ getOrderByExpression(column: string, direction: string, collation?: string): string[];
46
+ /**
47
+ * Quotes a collation name for use in COLLATE clauses.
48
+ * @internal
49
+ */
50
+ quoteCollation(collation: string): string;
51
+ /** @internal */
52
+ protected validateCollationName(collation: string): void;
53
+ /** @internal */
54
+ validateJsonPropertyName(name: string): void;
55
+ /**
56
+ * Returns FROM clause for JSON array iteration.
57
+ * @internal
58
+ */
59
+ getJsonArrayFromSQL(column: string, alias: string, _properties: {
60
+ name: string;
61
+ type: string;
62
+ }[]): string;
63
+ /**
64
+ * Returns SQL expression to access an element's property within a JSON array iteration.
65
+ * @internal
66
+ */
67
+ getJsonArrayElementPropertySQL(alias: string, property: string, _type: string): string;
68
+ /**
69
+ * Wraps JSON array FROM clause and WHERE condition into a full EXISTS condition.
70
+ * MySQL overrides this because `json_table` doesn't support correlated subqueries.
71
+ * @internal
72
+ */
73
+ getJsonArrayExistsSQL(from: string, where: string): string;
74
+ /**
75
+ * Maps a runtime type name (e.g. 'string', 'number') to a driver-specific bind type constant.
76
+ * Used by NativeQueryBuilder for output bindings.
77
+ * @internal
78
+ */
79
+ mapToBindType(type: string): unknown;
90
80
  }
@@ -1,168 +1,164 @@
1
- import { isRaw, JsonProperty, Platform, raw, Utils } from '@mikro-orm/core';
1
+ import { isRaw, JsonProperty, Platform, raw, Utils, } from '@mikro-orm/core';
2
2
  import { SqlEntityRepository } from './SqlEntityRepository.js';
3
3
  import { SqlSchemaGenerator } from './schema/SqlSchemaGenerator.js';
4
4
  import { NativeQueryBuilder } from './query/NativeQueryBuilder.js';
5
5
  /** Base class for SQL database platforms, providing SQL generation and quoting utilities. */
6
6
  export class AbstractSqlPlatform extends Platform {
7
- static #JSON_PROPERTY_NAME_RE = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
8
- schemaHelper;
9
- usesPivotTable() {
10
- return true;
11
- }
12
- indexForeignKeys() {
13
- return true;
14
- }
15
- getRepositoryClass() {
16
- return SqlEntityRepository;
17
- }
18
- getSchemaHelper() {
19
- return this.schemaHelper;
20
- }
21
- /** @inheritDoc */
22
- lookupExtensions(orm) {
23
- SqlSchemaGenerator.register(orm);
24
- }
25
- /* v8 ignore next: kept for type inference only */
26
- getSchemaGenerator(driver, em) {
27
- return new SqlSchemaGenerator(em ?? driver);
28
- }
29
- /** @internal */
30
- /* v8 ignore next */
31
- createNativeQueryBuilder() {
32
- return new NativeQueryBuilder(this);
33
- }
34
- getBeginTransactionSQL(options) {
35
- if (options?.isolationLevel) {
36
- return [`set transaction isolation level ${options.isolationLevel}`, 'begin'];
37
- }
38
- return ['begin'];
39
- }
40
- getCommitTransactionSQL() {
41
- return 'commit';
42
- }
43
- getRollbackTransactionSQL() {
44
- return 'rollback';
45
- }
46
- getSavepointSQL(savepointName) {
47
- return `savepoint ${this.quoteIdentifier(savepointName)}`;
48
- }
49
- getRollbackToSavepointSQL(savepointName) {
50
- return `rollback to savepoint ${this.quoteIdentifier(savepointName)}`;
51
- }
52
- getReleaseSavepointSQL(savepointName) {
53
- return `release savepoint ${this.quoteIdentifier(savepointName)}`;
54
- }
55
- quoteValue(value) {
56
- if (isRaw(value)) {
57
- return this.formatQuery(value.sql, value.params);
58
- }
59
- if (Utils.isPlainObject(value) || value?.[JsonProperty]) {
60
- return this.escape(JSON.stringify(value));
61
- }
62
- return this.escape(value);
63
- }
64
- getSearchJsonPropertySQL(path, type, aliased) {
65
- return this.getSearchJsonPropertyKey(path.split('->'), type, aliased);
66
- }
67
- getSearchJsonPropertyKey(path, type, aliased, value) {
68
- const [a, ...b] = path;
69
- if (aliased) {
70
- return raw(
71
- alias => `json_extract(${this.quoteIdentifier(`${alias}.${a}`)}, '$.${b.map(this.quoteJsonKey).join('.')}')`,
72
- );
73
- }
74
- return raw(`json_extract(${this.quoteIdentifier(a)}, '$.${b.map(this.quoteJsonKey).join('.')}')`);
75
- }
76
- /**
77
- * Quotes a key for use inside a JSON path expression (e.g. `$.key`).
78
- * Simple alphanumeric keys are left unquoted; others are wrapped in double quotes.
79
- * @internal
80
- */
81
- quoteJsonKey(key) {
82
- return /^[a-z]\w*$/i.exec(key) ? key : `"${key}"`;
83
- }
84
- getJsonIndexDefinition(index) {
85
- return index.columnNames.map(column => {
86
- if (!column.includes('.')) {
87
- return column;
88
- }
89
- const [root, ...path] = column.split('.');
90
- return `(json_extract(${root}, '$.${path.join('.')}'))`;
91
- });
92
- }
93
- supportsUnionWhere() {
94
- return true;
95
- }
96
- supportsSchemas() {
97
- return false;
98
- }
99
- /** @inheritDoc */
100
- generateCustomOrder(escapedColumn, values) {
101
- let ret = '(case ';
102
- values.forEach((v, i) => {
103
- ret += `when ${escapedColumn} = ${this.quoteValue(v)} then ${i} `;
104
- });
105
- return ret + 'else null end)';
106
- }
107
- /**
108
- * @internal
109
- */
110
- getOrderByExpression(column, direction, collation) {
111
- if (collation) {
112
- return [`${column} collate ${this.quoteCollation(collation)} ${direction.toLowerCase()}`];
113
- }
114
- return [`${column} ${direction.toLowerCase()}`];
115
- }
116
- /**
117
- * Quotes a collation name for use in COLLATE clauses.
118
- * @internal
119
- */
120
- quoteCollation(collation) {
121
- this.validateCollationName(collation);
122
- return this.quoteIdentifier(collation);
123
- }
124
- /** @internal */
125
- validateCollationName(collation) {
126
- if (!/^[\w]+$/.test(collation)) {
127
- throw new Error(`Invalid collation name: '${collation}'. Collation names must contain only word characters.`);
128
- }
129
- }
130
- /** @internal */
131
- validateJsonPropertyName(name) {
132
- if (!AbstractSqlPlatform.#JSON_PROPERTY_NAME_RE.test(name)) {
133
- throw new Error(
134
- `Invalid JSON property name: '${name}'. JSON property names must contain only alphanumeric characters and underscores.`,
135
- );
136
- }
137
- }
138
- /**
139
- * Returns FROM clause for JSON array iteration.
140
- * @internal
141
- */
142
- getJsonArrayFromSQL(column, alias, _properties) {
143
- return `json_each(${column}) as ${this.quoteIdentifier(alias)}`;
144
- }
145
- /**
146
- * Returns SQL expression to access an element's property within a JSON array iteration.
147
- * @internal
148
- */
149
- getJsonArrayElementPropertySQL(alias, property, _type) {
150
- return `${this.quoteIdentifier(alias)}.${this.quoteIdentifier(property)}`;
151
- }
152
- /**
153
- * Wraps JSON array FROM clause and WHERE condition into a full EXISTS condition.
154
- * MySQL overrides this because `json_table` doesn't support correlated subqueries.
155
- * @internal
156
- */
157
- getJsonArrayExistsSQL(from, where) {
158
- return `exists (select 1 from ${from} where ${where})`;
159
- }
160
- /**
161
- * Maps a runtime type name (e.g. 'string', 'number') to a driver-specific bind type constant.
162
- * Used by NativeQueryBuilder for output bindings.
163
- * @internal
164
- */
165
- mapToBindType(type) {
166
- return type;
167
- }
7
+ static #JSON_PROPERTY_NAME_RE = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
8
+ schemaHelper;
9
+ usesPivotTable() {
10
+ return true;
11
+ }
12
+ indexForeignKeys() {
13
+ return true;
14
+ }
15
+ getRepositoryClass() {
16
+ return SqlEntityRepository;
17
+ }
18
+ getSchemaHelper() {
19
+ return this.schemaHelper;
20
+ }
21
+ /** @inheritDoc */
22
+ lookupExtensions(orm) {
23
+ SqlSchemaGenerator.register(orm);
24
+ }
25
+ /* v8 ignore next: kept for type inference only */
26
+ getSchemaGenerator(driver, em) {
27
+ return new SqlSchemaGenerator(em ?? driver);
28
+ }
29
+ /** @internal */
30
+ /* v8 ignore next */
31
+ createNativeQueryBuilder() {
32
+ return new NativeQueryBuilder(this);
33
+ }
34
+ getBeginTransactionSQL(options) {
35
+ if (options?.isolationLevel) {
36
+ return [`set transaction isolation level ${options.isolationLevel}`, 'begin'];
37
+ }
38
+ return ['begin'];
39
+ }
40
+ getCommitTransactionSQL() {
41
+ return 'commit';
42
+ }
43
+ getRollbackTransactionSQL() {
44
+ return 'rollback';
45
+ }
46
+ getSavepointSQL(savepointName) {
47
+ return `savepoint ${this.quoteIdentifier(savepointName)}`;
48
+ }
49
+ getRollbackToSavepointSQL(savepointName) {
50
+ return `rollback to savepoint ${this.quoteIdentifier(savepointName)}`;
51
+ }
52
+ getReleaseSavepointSQL(savepointName) {
53
+ return `release savepoint ${this.quoteIdentifier(savepointName)}`;
54
+ }
55
+ quoteValue(value) {
56
+ if (isRaw(value)) {
57
+ return this.formatQuery(value.sql, value.params);
58
+ }
59
+ if (Utils.isPlainObject(value) || value?.[JsonProperty]) {
60
+ return this.escape(JSON.stringify(value));
61
+ }
62
+ return this.escape(value);
63
+ }
64
+ getSearchJsonPropertySQL(path, type, aliased) {
65
+ return this.getSearchJsonPropertyKey(path.split('->'), type, aliased);
66
+ }
67
+ getSearchJsonPropertyKey(path, type, aliased, value) {
68
+ const [a, ...b] = path;
69
+ if (aliased) {
70
+ return raw(alias => `json_extract(${this.quoteIdentifier(`${alias}.${a}`)}, '$.${b.map(this.quoteJsonKey).join('.')}')`);
71
+ }
72
+ return raw(`json_extract(${this.quoteIdentifier(a)}, '$.${b.map(this.quoteJsonKey).join('.')}')`);
73
+ }
74
+ /**
75
+ * Quotes a key for use inside a JSON path expression (e.g. `$.key`).
76
+ * Simple alphanumeric keys are left unquoted; others are wrapped in double quotes.
77
+ * @internal
78
+ */
79
+ quoteJsonKey(key) {
80
+ return /^[a-z]\w*$/i.exec(key) ? key : `"${key}"`;
81
+ }
82
+ getJsonIndexDefinition(index) {
83
+ return index.columnNames.map(column => {
84
+ if (!column.includes('.')) {
85
+ return column;
86
+ }
87
+ const [root, ...path] = column.split('.');
88
+ return `(json_extract(${root}, '$.${path.join('.')}'))`;
89
+ });
90
+ }
91
+ supportsUnionWhere() {
92
+ return true;
93
+ }
94
+ supportsSchemas() {
95
+ return false;
96
+ }
97
+ /** @inheritDoc */
98
+ generateCustomOrder(escapedColumn, values) {
99
+ let ret = '(case ';
100
+ values.forEach((v, i) => {
101
+ ret += `when ${escapedColumn} = ${this.quoteValue(v)} then ${i} `;
102
+ });
103
+ return ret + 'else null end)';
104
+ }
105
+ /**
106
+ * @internal
107
+ */
108
+ getOrderByExpression(column, direction, collation) {
109
+ if (collation) {
110
+ return [`${column} collate ${this.quoteCollation(collation)} ${direction.toLowerCase()}`];
111
+ }
112
+ return [`${column} ${direction.toLowerCase()}`];
113
+ }
114
+ /**
115
+ * Quotes a collation name for use in COLLATE clauses.
116
+ * @internal
117
+ */
118
+ quoteCollation(collation) {
119
+ this.validateCollationName(collation);
120
+ return this.quoteIdentifier(collation);
121
+ }
122
+ /** @internal */
123
+ validateCollationName(collation) {
124
+ if (!/^[\w]+$/.test(collation)) {
125
+ throw new Error(`Invalid collation name: '${collation}'. Collation names must contain only word characters.`);
126
+ }
127
+ }
128
+ /** @internal */
129
+ validateJsonPropertyName(name) {
130
+ if (!AbstractSqlPlatform.#JSON_PROPERTY_NAME_RE.test(name)) {
131
+ throw new Error(`Invalid JSON property name: '${name}'. JSON property names must contain only alphanumeric characters and underscores.`);
132
+ }
133
+ }
134
+ /**
135
+ * Returns FROM clause for JSON array iteration.
136
+ * @internal
137
+ */
138
+ getJsonArrayFromSQL(column, alias, _properties) {
139
+ return `json_each(${column}) as ${this.quoteIdentifier(alias)}`;
140
+ }
141
+ /**
142
+ * Returns SQL expression to access an element's property within a JSON array iteration.
143
+ * @internal
144
+ */
145
+ getJsonArrayElementPropertySQL(alias, property, _type) {
146
+ return `${this.quoteIdentifier(alias)}.${this.quoteIdentifier(property)}`;
147
+ }
148
+ /**
149
+ * Wraps JSON array FROM clause and WHERE condition into a full EXISTS condition.
150
+ * MySQL overrides this because `json_table` doesn't support correlated subqueries.
151
+ * @internal
152
+ */
153
+ getJsonArrayExistsSQL(from, where) {
154
+ return `exists (select 1 from ${from} where ${where})`;
155
+ }
156
+ /**
157
+ * Maps a runtime type name (e.g. 'string', 'number') to a driver-specific bind type constant.
158
+ * Used by NativeQueryBuilder for output bindings.
159
+ * @internal
160
+ */
161
+ mapToBindType(type) {
162
+ return type;
163
+ }
168
164
  }
@@ -1,36 +1,18 @@
1
- import {
2
- type Dictionary,
3
- type EntityMetadata,
4
- type EntityProperty,
5
- type Primary,
6
- type Transaction,
7
- } from '@mikro-orm/core';
1
+ import { type Dictionary, type EntityMetadata, type EntityProperty, type Primary, type Transaction } from '@mikro-orm/core';
8
2
  import { type AbstractSqlDriver } from './AbstractSqlDriver.js';
9
3
  export declare class PivotCollectionPersister<Entity extends object> {
10
- #private;
11
- constructor(
12
- meta: EntityMetadata<Entity>,
13
- driver: AbstractSqlDriver,
14
- ctx?: Transaction,
15
- schema?: string,
16
- loggerContext?: Dictionary,
17
- );
18
- enqueueUpdate(
19
- prop: EntityProperty<Entity>,
20
- insertDiff: Primary<Entity>[][],
21
- deleteDiff: Primary<Entity>[][] | boolean,
22
- pks: Primary<Entity>[],
23
- isInitialized?: boolean,
24
- ): void;
25
- private enqueueInsert;
26
- private enqueueUpsert;
27
- private createInsertStatement;
28
- private enqueueDelete;
29
- /**
30
- * Build the keys and data arrays for pivot table operations.
31
- * Handles polymorphic M:N by prepending the discriminator column/value.
32
- */
33
- private buildPivotKeysAndData;
34
- private collectStatements;
35
- execute(): Promise<void>;
4
+ #private;
5
+ constructor(meta: EntityMetadata<Entity>, driver: AbstractSqlDriver, ctx?: Transaction, schema?: string, loggerContext?: Dictionary);
6
+ enqueueUpdate(prop: EntityProperty<Entity>, insertDiff: Primary<Entity>[][], deleteDiff: Primary<Entity>[][] | boolean, pks: Primary<Entity>[], isInitialized?: boolean): void;
7
+ private enqueueInsert;
8
+ private enqueueUpsert;
9
+ private createInsertStatement;
10
+ private enqueueDelete;
11
+ /**
12
+ * Build the keys and data arrays for pivot table operations.
13
+ * Handles polymorphic M:N by prepending the discriminator column/value.
14
+ */
15
+ private buildPivotKeysAndData;
16
+ private collectStatements;
17
+ execute(): Promise<void>;
36
18
  }