@mikro-orm/sql 7.0.2 → 7.0.3-dev.0

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 (86) hide show
  1. package/AbstractSqlConnection.d.ts +58 -94
  2. package/AbstractSqlConnection.js +238 -235
  3. package/AbstractSqlDriver.d.ts +155 -411
  4. package/AbstractSqlDriver.js +1937 -2061
  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/SqlEntityManager.d.ts +22 -67
  10. package/SqlEntityManager.js +38 -54
  11. package/SqlEntityRepository.d.ts +14 -14
  12. package/SqlEntityRepository.js +23 -23
  13. package/dialects/mssql/MsSqlNativeQueryBuilder.d.ts +12 -12
  14. package/dialects/mssql/MsSqlNativeQueryBuilder.js +194 -192
  15. package/dialects/mysql/BaseMySqlPlatform.d.ts +45 -64
  16. package/dialects/mysql/BaseMySqlPlatform.js +131 -134
  17. package/dialects/mysql/MySqlExceptionConverter.d.ts +6 -6
  18. package/dialects/mysql/MySqlExceptionConverter.js +77 -91
  19. package/dialects/mysql/MySqlNativeQueryBuilder.d.ts +3 -3
  20. package/dialects/mysql/MySqlNativeQueryBuilder.js +69 -66
  21. package/dialects/mysql/MySqlSchemaHelper.d.ts +39 -39
  22. package/dialects/mysql/MySqlSchemaHelper.js +319 -327
  23. package/dialects/oracledb/OracleDialect.d.ts +52 -81
  24. package/dialects/oracledb/OracleDialect.js +149 -155
  25. package/dialects/oracledb/OracleNativeQueryBuilder.d.ts +12 -12
  26. package/dialects/oracledb/OracleNativeQueryBuilder.js +236 -232
  27. package/dialects/postgresql/BasePostgreSqlPlatform.d.ts +105 -108
  28. package/dialects/postgresql/BasePostgreSqlPlatform.js +350 -351
  29. package/dialects/postgresql/FullTextType.d.ts +6 -10
  30. package/dialects/postgresql/FullTextType.js +51 -51
  31. package/dialects/postgresql/PostgreSqlExceptionConverter.d.ts +5 -5
  32. package/dialects/postgresql/PostgreSqlExceptionConverter.js +43 -55
  33. package/dialects/postgresql/PostgreSqlNativeQueryBuilder.d.ts +1 -1
  34. package/dialects/postgresql/PostgreSqlNativeQueryBuilder.js +4 -4
  35. package/dialects/postgresql/PostgreSqlSchemaHelper.d.ts +82 -102
  36. package/dialects/postgresql/PostgreSqlSchemaHelper.js +683 -711
  37. package/dialects/sqlite/BaseSqliteConnection.d.ts +5 -3
  38. package/dialects/sqlite/BaseSqliteConnection.js +19 -21
  39. package/dialects/sqlite/NodeSqliteDialect.d.ts +1 -1
  40. package/dialects/sqlite/NodeSqliteDialect.js +23 -23
  41. package/dialects/sqlite/SqliteDriver.d.ts +1 -1
  42. package/dialects/sqlite/SqliteDriver.js +3 -3
  43. package/dialects/sqlite/SqliteExceptionConverter.d.ts +6 -6
  44. package/dialects/sqlite/SqliteExceptionConverter.js +51 -67
  45. package/dialects/sqlite/SqliteNativeQueryBuilder.d.ts +2 -2
  46. package/dialects/sqlite/SqliteNativeQueryBuilder.js +7 -7
  47. package/dialects/sqlite/SqlitePlatform.d.ts +72 -63
  48. package/dialects/sqlite/SqlitePlatform.js +139 -139
  49. package/dialects/sqlite/SqliteSchemaHelper.d.ts +60 -70
  50. package/dialects/sqlite/SqliteSchemaHelper.js +520 -533
  51. package/package.json +2 -2
  52. package/plugin/index.d.ts +35 -42
  53. package/plugin/index.js +36 -43
  54. package/plugin/transformer.d.ts +94 -117
  55. package/plugin/transformer.js +881 -890
  56. package/query/ArrayCriteriaNode.d.ts +4 -4
  57. package/query/ArrayCriteriaNode.js +18 -18
  58. package/query/CriteriaNode.d.ts +25 -35
  59. package/query/CriteriaNode.js +123 -133
  60. package/query/CriteriaNodeFactory.d.ts +6 -49
  61. package/query/CriteriaNodeFactory.js +94 -97
  62. package/query/NativeQueryBuilder.d.ts +118 -118
  63. package/query/NativeQueryBuilder.js +480 -484
  64. package/query/ObjectCriteriaNode.d.ts +12 -12
  65. package/query/ObjectCriteriaNode.js +282 -298
  66. package/query/QueryBuilder.d.ts +904 -1546
  67. package/query/QueryBuilder.js +2145 -2270
  68. package/query/QueryBuilderHelper.d.ts +72 -153
  69. package/query/QueryBuilderHelper.js +1028 -1079
  70. package/query/ScalarCriteriaNode.d.ts +3 -3
  71. package/query/ScalarCriteriaNode.js +46 -53
  72. package/query/enums.d.ts +14 -14
  73. package/query/enums.js +14 -14
  74. package/query/raw.d.ts +6 -16
  75. package/query/raw.js +10 -10
  76. package/schema/DatabaseSchema.d.ts +50 -73
  77. package/schema/DatabaseSchema.js +307 -331
  78. package/schema/DatabaseTable.d.ts +73 -96
  79. package/schema/DatabaseTable.js +927 -1012
  80. package/schema/SchemaComparator.d.ts +54 -58
  81. package/schema/SchemaComparator.js +719 -745
  82. package/schema/SchemaHelper.d.ts +95 -109
  83. package/schema/SchemaHelper.js +659 -675
  84. package/schema/SqlSchemaGenerator.d.ts +58 -78
  85. package/schema/SqlSchemaGenerator.js +501 -535
  86. package/typings.d.ts +266 -380
@@ -3,200 +3,202 @@ import { NativeQueryBuilder } from '../../query/NativeQueryBuilder.js';
3
3
  import { QueryType } from '../../query/enums.js';
4
4
  /** @internal */
5
5
  export class MsSqlNativeQueryBuilder extends NativeQueryBuilder {
6
- compile() {
7
- if (!this.type) {
8
- throw new Error('No query type provided');
9
- }
10
- this.parts.length = 0;
11
- this.params.length = 0;
12
- if (this.options.flags?.has(QueryFlag.IDENTITY_INSERT)) {
13
- this.parts.push(`set identity_insert ${this.getTableName()} on;`);
14
- }
15
- const { prefix, suffix } = this.appendOutputTable();
16
- if (prefix) {
17
- this.parts.push(prefix);
18
- }
19
- if (this.options.comment) {
20
- this.parts.push(...this.options.comment.map(comment => `/* ${comment} */`));
21
- }
22
- this.compileCtes();
23
- if (this.options.onConflict && !Utils.isEmpty(Utils.asArray(this.options.data)[0])) {
24
- this.compileUpsert();
25
- } else {
26
- switch (this.type) {
27
- case QueryType.SELECT:
28
- case QueryType.COUNT:
29
- this.compileSelect();
30
- break;
31
- case QueryType.INSERT:
32
- this.compileInsert();
33
- break;
34
- case QueryType.UPDATE:
35
- this.compileUpdate();
36
- break;
37
- case QueryType.DELETE:
38
- this.compileDelete();
39
- break;
40
- case QueryType.TRUNCATE:
41
- this.compileTruncate();
42
- break;
43
- }
44
- if (suffix) {
45
- this.parts[this.parts.length - 1] += ';';
46
- this.parts.push(suffix);
47
- } else if ([QueryType.INSERT, QueryType.UPDATE, QueryType.DELETE].includes(this.type)) {
48
- this.parts[this.parts.length - 1] += '; select @@rowcount;';
49
- }
50
- }
51
- if (this.options.flags?.has(QueryFlag.IDENTITY_INSERT)) {
52
- this.parts.push(`set identity_insert ${this.getTableName()} off;`);
53
- }
54
- return this.combineParts();
55
- }
56
- compileInsert() {
57
- if (!this.options.data) {
58
- throw new Error('No data provided');
59
- }
60
- this.parts.push('insert');
61
- this.addHintComment();
62
- this.parts.push(`into ${this.getTableName()}`);
63
- if (Object.keys(this.options.data).length === 0) {
64
- this.addOutputClause('inserted');
65
- this.parts.push('default values');
66
- return;
67
- }
68
- const parts = this.processInsertData();
69
- if (this.options.flags?.has(QueryFlag.OUTPUT_TABLE)) {
70
- this.parts[this.parts.length - 2] += ' into #out ';
71
- }
72
- this.parts.push(parts.join(', '));
73
- }
74
- appendOutputTable() {
75
- if (!this.options.flags?.has(QueryFlag.OUTPUT_TABLE)) {
76
- return { prefix: '', suffix: '' };
77
- }
78
- const returningFields = this.options.returning;
79
- const selections = returningFields.map(field => `[t].${this.platform.quoteIdentifier(field)}`).join(',');
80
- return {
81
- prefix: `select top(0) ${selections} into #out from ${this.getTableName()} as t left join ${this.getTableName()} on 0 = 1;`,
82
- suffix: `select ${selections} from #out as t; drop table #out`,
83
- };
84
- }
85
- compileUpsert() {
86
- const clause = this.options.onConflict;
87
- const dataAsArray = Utils.asArray(this.options.data);
88
- const keys = Object.keys(dataAsArray[0]);
89
- const values = keys.map(() => '?');
90
- const parts = [];
91
- for (const data of dataAsArray) {
92
- for (const key of keys) {
93
- this.params.push(data[key]);
94
- }
95
- parts.push(`(${values.join(', ')})`);
96
- }
97
- this.parts.push(`merge into ${this.getTableName()}`);
98
- this.parts.push(`using (values ${parts.join(', ')}) as tsource(${keys.map(key => this.quote(key)).join(', ')})`);
99
- if (clause.fields instanceof RawQueryFragment) {
100
- this.parts.push(clause.fields.sql);
101
- this.params.push(...clause.fields.params);
102
- } else if (clause.fields.length > 0) {
103
- const fields = clause.fields.map(field => {
104
- const col = this.quote(field);
105
- return `${this.getTableName()}.${col} = tsource.${col}`;
106
- });
107
- this.parts.push(`on ${fields.join(' and ')}`);
108
- }
109
- const sourceColumns = keys.map(field => `tsource.${this.quote(field)}`).join(', ');
110
- const destinationColumns = keys.map(field => this.quote(field)).join(', ');
111
- this.parts.push(`when not matched then insert (${destinationColumns}) values (${sourceColumns})`);
112
- if (!clause.ignore) {
113
- this.parts.push('when matched');
114
- if (clause.where) {
115
- this.parts.push(`and ${clause.where.sql}`);
116
- this.params.push(...clause.where.params);
117
- }
118
- this.parts.push('then update set');
119
- if (!clause.merge || Array.isArray(clause.merge)) {
120
- const parts = (clause.merge || keys)
121
- .filter(field => !Array.isArray(clause.fields) || !clause.fields.includes(field))
122
- .map(column => `${this.quote(column)} = tsource.${this.quote(column)}`);
123
- this.parts.push(parts.join(', '));
124
- } else if (typeof clause.merge === 'object') {
125
- const parts = Object.entries(clause.merge).map(([key, value]) => {
126
- this.params.push(value);
127
- return `${this.getTableName()}.${this.quote(key)} = ?`;
128
- });
6
+ compile() {
7
+ if (!this.type) {
8
+ throw new Error('No query type provided');
9
+ }
10
+ this.parts.length = 0;
11
+ this.params.length = 0;
12
+ if (this.options.flags?.has(QueryFlag.IDENTITY_INSERT)) {
13
+ this.parts.push(`set identity_insert ${this.getTableName()} on;`);
14
+ }
15
+ const { prefix, suffix } = this.appendOutputTable();
16
+ if (prefix) {
17
+ this.parts.push(prefix);
18
+ }
19
+ if (this.options.comment) {
20
+ this.parts.push(...this.options.comment.map(comment => `/* ${comment} */`));
21
+ }
22
+ this.compileCtes();
23
+ if (this.options.onConflict && !Utils.isEmpty(Utils.asArray(this.options.data)[0])) {
24
+ this.compileUpsert();
25
+ }
26
+ else {
27
+ switch (this.type) {
28
+ case QueryType.SELECT:
29
+ case QueryType.COUNT:
30
+ this.compileSelect();
31
+ break;
32
+ case QueryType.INSERT:
33
+ this.compileInsert();
34
+ break;
35
+ case QueryType.UPDATE:
36
+ this.compileUpdate();
37
+ break;
38
+ case QueryType.DELETE:
39
+ this.compileDelete();
40
+ break;
41
+ case QueryType.TRUNCATE:
42
+ this.compileTruncate();
43
+ break;
44
+ }
45
+ if (suffix) {
46
+ this.parts[this.parts.length - 1] += ';';
47
+ this.parts.push(suffix);
48
+ }
49
+ else if ([QueryType.INSERT, QueryType.UPDATE, QueryType.DELETE].includes(this.type)) {
50
+ this.parts[this.parts.length - 1] += '; select @@rowcount;';
51
+ }
52
+ }
53
+ if (this.options.flags?.has(QueryFlag.IDENTITY_INSERT)) {
54
+ this.parts.push(`set identity_insert ${this.getTableName()} off;`);
55
+ }
56
+ return this.combineParts();
57
+ }
58
+ compileInsert() {
59
+ if (!this.options.data) {
60
+ throw new Error('No data provided');
61
+ }
62
+ this.parts.push('insert');
63
+ this.addHintComment();
64
+ this.parts.push(`into ${this.getTableName()}`);
65
+ if (Object.keys(this.options.data).length === 0) {
66
+ this.addOutputClause('inserted');
67
+ this.parts.push('default values');
68
+ return;
69
+ }
70
+ const parts = this.processInsertData();
71
+ if (this.options.flags?.has(QueryFlag.OUTPUT_TABLE)) {
72
+ this.parts[this.parts.length - 2] += ' into #out ';
73
+ }
129
74
  this.parts.push(parts.join(', '));
130
- }
131
- }
132
- this.addOutputClause('inserted');
133
- this.parts[this.parts.length - 1] += ';';
134
- }
135
- compileSelect() {
136
- this.parts.push('select');
137
- if (this.options.limit != null && this.options.offset == null) {
138
- this.parts.push(`top (?)`);
139
- this.params.push(this.options.limit);
140
- }
141
- this.addHintComment();
142
- this.parts.push(`${this.getFields()} from ${this.getTableName()}`);
143
- this.addLockClause();
144
- if (this.options.joins) {
145
- for (const join of this.options.joins) {
146
- this.parts.push(join.sql);
147
- this.params.push(...join.params);
148
- }
149
- }
150
- if (this.options.where?.sql.trim()) {
151
- this.parts.push(`where ${this.options.where.sql}`);
152
- this.params.push(...this.options.where.params);
153
75
  }
154
- if (this.options.groupBy) {
155
- const fields = this.options.groupBy.map(field => this.quote(field));
156
- this.parts.push(`group by ${fields.join(', ')}`);
157
- }
158
- if (this.options.having) {
159
- this.parts.push(`having ${this.options.having.sql}`);
160
- this.params.push(...this.options.having.params);
161
- }
162
- if (this.options.orderBy) {
163
- this.parts.push(`order by ${this.options.orderBy}`);
164
- }
165
- if (this.options.offset != null) {
166
- /* v8 ignore next */
167
- if (!this.options.orderBy) {
168
- throw new Error('Order by clause is required for pagination');
169
- }
170
- this.parts.push(`offset ? rows`);
171
- this.params.push(this.options.offset);
172
- if (this.options.limit != null) {
173
- this.parts.push(`fetch next ? rows only`);
174
- this.params.push(this.options.limit);
175
- }
176
- }
177
- }
178
- addLockClause() {
179
- if (
180
- !this.options.lockMode ||
181
- ![LockMode.PESSIMISTIC_READ, LockMode.PESSIMISTIC_WRITE].includes(this.options.lockMode)
182
- ) {
183
- return;
76
+ appendOutputTable() {
77
+ if (!this.options.flags?.has(QueryFlag.OUTPUT_TABLE)) {
78
+ return { prefix: '', suffix: '' };
79
+ }
80
+ const returningFields = this.options.returning;
81
+ const selections = returningFields.map(field => `[t].${this.platform.quoteIdentifier(field)}`).join(',');
82
+ return {
83
+ prefix: `select top(0) ${selections} into #out from ${this.getTableName()} as t left join ${this.getTableName()} on 0 = 1;`,
84
+ suffix: `select ${selections} from #out as t; drop table #out`,
85
+ };
86
+ }
87
+ compileUpsert() {
88
+ const clause = this.options.onConflict;
89
+ const dataAsArray = Utils.asArray(this.options.data);
90
+ const keys = Object.keys(dataAsArray[0]);
91
+ const values = keys.map(() => '?');
92
+ const parts = [];
93
+ for (const data of dataAsArray) {
94
+ for (const key of keys) {
95
+ this.params.push(data[key]);
96
+ }
97
+ parts.push(`(${values.join(', ')})`);
98
+ }
99
+ this.parts.push(`merge into ${this.getTableName()}`);
100
+ this.parts.push(`using (values ${parts.join(', ')}) as tsource(${keys.map(key => this.quote(key)).join(', ')})`);
101
+ if (clause.fields instanceof RawQueryFragment) {
102
+ this.parts.push(clause.fields.sql);
103
+ this.params.push(...clause.fields.params);
104
+ }
105
+ else if (clause.fields.length > 0) {
106
+ const fields = clause.fields.map(field => {
107
+ const col = this.quote(field);
108
+ return `${this.getTableName()}.${col} = tsource.${col}`;
109
+ });
110
+ this.parts.push(`on ${fields.join(' and ')}`);
111
+ }
112
+ const sourceColumns = keys.map(field => `tsource.${this.quote(field)}`).join(', ');
113
+ const destinationColumns = keys.map(field => this.quote(field)).join(', ');
114
+ this.parts.push(`when not matched then insert (${destinationColumns}) values (${sourceColumns})`);
115
+ if (!clause.ignore) {
116
+ this.parts.push('when matched');
117
+ if (clause.where) {
118
+ this.parts.push(`and ${clause.where.sql}`);
119
+ this.params.push(...clause.where.params);
120
+ }
121
+ this.parts.push('then update set');
122
+ if (!clause.merge || Array.isArray(clause.merge)) {
123
+ const parts = (clause.merge || keys)
124
+ .filter(field => !Array.isArray(clause.fields) || !clause.fields.includes(field))
125
+ .map((column) => `${this.quote(column)} = tsource.${this.quote(column)}`);
126
+ this.parts.push(parts.join(', '));
127
+ }
128
+ else if (typeof clause.merge === 'object') {
129
+ const parts = Object.entries(clause.merge).map(([key, value]) => {
130
+ this.params.push(value);
131
+ return `${this.getTableName()}.${this.quote(key)} = ?`;
132
+ });
133
+ this.parts.push(parts.join(', '));
134
+ }
135
+ }
136
+ this.addOutputClause('inserted');
137
+ this.parts[this.parts.length - 1] += ';';
184
138
  }
185
- const map = {
186
- [LockMode.PESSIMISTIC_READ]: 'with (holdlock)',
187
- [LockMode.PESSIMISTIC_WRITE]: 'with (updlock)',
188
- };
189
- if (this.options.lockMode !== LockMode.OPTIMISTIC) {
190
- this.parts.push(map[this.options.lockMode]);
139
+ compileSelect() {
140
+ this.parts.push('select');
141
+ if (this.options.limit != null && this.options.offset == null) {
142
+ this.parts.push(`top (?)`);
143
+ this.params.push(this.options.limit);
144
+ }
145
+ this.addHintComment();
146
+ this.parts.push(`${this.getFields()} from ${this.getTableName()}`);
147
+ this.addLockClause();
148
+ if (this.options.joins) {
149
+ for (const join of this.options.joins) {
150
+ this.parts.push(join.sql);
151
+ this.params.push(...join.params);
152
+ }
153
+ }
154
+ if (this.options.where?.sql.trim()) {
155
+ this.parts.push(`where ${this.options.where.sql}`);
156
+ this.params.push(...this.options.where.params);
157
+ }
158
+ if (this.options.groupBy) {
159
+ const fields = this.options.groupBy.map(field => this.quote(field));
160
+ this.parts.push(`group by ${fields.join(', ')}`);
161
+ }
162
+ if (this.options.having) {
163
+ this.parts.push(`having ${this.options.having.sql}`);
164
+ this.params.push(...this.options.having.params);
165
+ }
166
+ if (this.options.orderBy) {
167
+ this.parts.push(`order by ${this.options.orderBy}`);
168
+ }
169
+ if (this.options.offset != null) {
170
+ /* v8 ignore next */
171
+ if (!this.options.orderBy) {
172
+ throw new Error('Order by clause is required for pagination');
173
+ }
174
+ this.parts.push(`offset ? rows`);
175
+ this.params.push(this.options.offset);
176
+ if (this.options.limit != null) {
177
+ this.parts.push(`fetch next ? rows only`);
178
+ this.params.push(this.options.limit);
179
+ }
180
+ }
181
+ }
182
+ addLockClause() {
183
+ if (!this.options.lockMode ||
184
+ ![LockMode.PESSIMISTIC_READ, LockMode.PESSIMISTIC_WRITE].includes(this.options.lockMode)) {
185
+ return;
186
+ }
187
+ const map = {
188
+ [LockMode.PESSIMISTIC_READ]: 'with (holdlock)',
189
+ [LockMode.PESSIMISTIC_WRITE]: 'with (updlock)',
190
+ };
191
+ if (this.options.lockMode !== LockMode.OPTIMISTIC) {
192
+ this.parts.push(map[this.options.lockMode]);
193
+ }
194
+ }
195
+ compileTruncate() {
196
+ const tableName = this.getTableName();
197
+ const sql = `delete from ${tableName}; declare @count int = case @@rowcount when 0 then 1 else 0 end; dbcc checkident ('${tableName.replace(/[[\]]/g, '')}', reseed, @count)`;
198
+ this.parts.push(sql);
199
+ }
200
+ /** MSSQL has no RECURSIVE keyword — CTEs are implicitly recursive. */
201
+ getCteKeyword(_hasRecursive) {
202
+ return 'with';
191
203
  }
192
- }
193
- compileTruncate() {
194
- const tableName = this.getTableName();
195
- const sql = `delete from ${tableName}; declare @count int = case @@rowcount when 0 then 1 else 0 end; dbcc checkident ('${tableName.replace(/[[\]]/g, '')}', reseed, @count)`;
196
- this.parts.push(sql);
197
- }
198
- /** MSSQL has no RECURSIVE keyword — CTEs are implicitly recursive. */
199
- getCteKeyword(_hasRecursive) {
200
- return 'with';
201
- }
202
204
  }
@@ -1,71 +1,52 @@
1
- import {
2
- type SimpleColumnMeta,
3
- type Type,
4
- type TransformContext,
5
- type MikroORM,
6
- type IsolationLevel,
7
- } from '@mikro-orm/core';
1
+ import { type SimpleColumnMeta, type Type, type TransformContext, type MikroORM, type IsolationLevel } from '@mikro-orm/core';
8
2
  import { MySqlSchemaHelper } from './MySqlSchemaHelper.js';
9
3
  import { MySqlExceptionConverter } from './MySqlExceptionConverter.js';
10
4
  import { AbstractSqlPlatform } from '../../AbstractSqlPlatform.js';
11
5
  import type { IndexDef } from '../../typings.js';
12
6
  import { MySqlNativeQueryBuilder } from './MySqlNativeQueryBuilder.js';
13
7
  export declare class BaseMySqlPlatform extends AbstractSqlPlatform {
14
- #private;
15
- protected readonly schemaHelper: MySqlSchemaHelper;
16
- protected readonly exceptionConverter: MySqlExceptionConverter;
17
- protected readonly ORDER_BY_NULLS_TRANSLATE: {
18
- readonly 'asc nulls first': 'is not null';
19
- readonly 'asc nulls last': 'is null';
20
- readonly 'desc nulls first': 'is not null';
21
- readonly 'desc nulls last': 'is null';
22
- };
23
- /** @internal */
24
- createNativeQueryBuilder(): MySqlNativeQueryBuilder;
25
- getDefaultCharset(): string;
26
- init(orm: MikroORM): void;
27
- getBeginTransactionSQL(options?: { isolationLevel?: IsolationLevel; readOnly?: boolean }): string[];
28
- convertJsonToDatabaseValue(value: unknown, context?: TransformContext): unknown;
29
- getJsonIndexDefinition(index: IndexDef): string[];
30
- getBooleanTypeDeclarationSQL(): string;
31
- normalizeColumnType(
32
- type: string,
33
- options: {
34
- length?: number;
35
- precision?: number;
36
- scale?: number;
37
- },
38
- ): string;
39
- getDefaultMappedType(type: string): Type<unknown>;
40
- isNumericColumn(mappedType: Type<unknown>): boolean;
41
- supportsUnsigned(): boolean;
42
- /**
43
- * Returns the default name of index for the given columns
44
- * cannot go past 64 character length for identifiers in MySQL
45
- */
46
- getIndexName(
47
- tableName: string,
48
- columns: string[],
49
- type: 'index' | 'unique' | 'foreign' | 'primary' | 'sequence',
50
- ): string;
51
- getDefaultPrimaryName(tableName: string, columns: string[]): string;
52
- supportsCreatingFullTextIndex(): boolean;
53
- getFullTextWhereClause(): string;
54
- getFullTextIndexExpression(
55
- indexName: string,
56
- schemaName: string | undefined,
57
- tableName: string,
58
- columns: SimpleColumnMeta[],
59
- ): string;
60
- getOrderByExpression(column: string, direction: string, collation?: string): string[];
61
- getJsonArrayFromSQL(
62
- column: string,
63
- alias: string,
64
- properties: {
65
- name: string;
66
- type: string;
67
- }[],
68
- ): string;
69
- getJsonArrayExistsSQL(from: string, where: string): string;
70
- getDefaultClientUrl(): string;
8
+ #private;
9
+ protected readonly schemaHelper: MySqlSchemaHelper;
10
+ protected readonly exceptionConverter: MySqlExceptionConverter;
11
+ protected readonly ORDER_BY_NULLS_TRANSLATE: {
12
+ readonly "asc nulls first": "is not null";
13
+ readonly "asc nulls last": "is null";
14
+ readonly "desc nulls first": "is not null";
15
+ readonly "desc nulls last": "is null";
16
+ };
17
+ /** @internal */
18
+ createNativeQueryBuilder(): MySqlNativeQueryBuilder;
19
+ getDefaultCharset(): string;
20
+ init(orm: MikroORM): void;
21
+ getBeginTransactionSQL(options?: {
22
+ isolationLevel?: IsolationLevel;
23
+ readOnly?: boolean;
24
+ }): string[];
25
+ convertJsonToDatabaseValue(value: unknown, context?: TransformContext): unknown;
26
+ getJsonIndexDefinition(index: IndexDef): string[];
27
+ getBooleanTypeDeclarationSQL(): string;
28
+ normalizeColumnType(type: string, options: {
29
+ length?: number;
30
+ precision?: number;
31
+ scale?: number;
32
+ }): string;
33
+ getDefaultMappedType(type: string): Type<unknown>;
34
+ isNumericColumn(mappedType: Type<unknown>): boolean;
35
+ supportsUnsigned(): boolean;
36
+ /**
37
+ * Returns the default name of index for the given columns
38
+ * cannot go past 64 character length for identifiers in MySQL
39
+ */
40
+ getIndexName(tableName: string, columns: string[], type: 'index' | 'unique' | 'foreign' | 'primary' | 'sequence'): string;
41
+ getDefaultPrimaryName(tableName: string, columns: string[]): string;
42
+ supportsCreatingFullTextIndex(): boolean;
43
+ getFullTextWhereClause(): string;
44
+ getFullTextIndexExpression(indexName: string, schemaName: string | undefined, tableName: string, columns: SimpleColumnMeta[]): string;
45
+ getOrderByExpression(column: string, direction: string, collation?: string): string[];
46
+ getJsonArrayFromSQL(column: string, alias: string, properties: {
47
+ name: string;
48
+ type: string;
49
+ }[]): string;
50
+ getJsonArrayExistsSQL(from: string, where: string): string;
51
+ getDefaultClientUrl(): string;
71
52
  }