@mikro-orm/sql 7.0.2-dev.9 → 7.0.2

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 +95 -47
  2. package/AbstractSqlConnection.js +240 -232
  3. package/AbstractSqlDriver.d.ts +412 -155
  4. package/AbstractSqlDriver.js +2062 -1937
  5. package/AbstractSqlPlatform.d.ts +84 -73
  6. package/AbstractSqlPlatform.js +163 -158
  7. package/PivotCollectionPersister.d.ts +33 -15
  8. package/PivotCollectionPersister.js +158 -160
  9. package/README.md +128 -294
  10. package/SqlEntityManager.d.ts +68 -20
  11. package/SqlEntityManager.js +54 -37
  12. package/SqlEntityRepository.d.ts +15 -14
  13. package/SqlEntityRepository.js +24 -23
  14. package/dialects/mssql/MsSqlNativeQueryBuilder.d.ts +12 -12
  15. package/dialects/mssql/MsSqlNativeQueryBuilder.js +192 -194
  16. package/dialects/mysql/BaseMySqlPlatform.d.ts +64 -45
  17. package/dialects/mysql/BaseMySqlPlatform.js +134 -131
  18. package/dialects/mysql/MySqlExceptionConverter.d.ts +6 -6
  19. package/dialects/mysql/MySqlExceptionConverter.js +91 -77
  20. package/dialects/mysql/MySqlNativeQueryBuilder.d.ts +3 -3
  21. package/dialects/mysql/MySqlNativeQueryBuilder.js +66 -69
  22. package/dialects/mysql/MySqlSchemaHelper.d.ts +39 -39
  23. package/dialects/mysql/MySqlSchemaHelper.js +327 -319
  24. package/dialects/oracledb/OracleDialect.d.ts +81 -52
  25. package/dialects/oracledb/OracleDialect.js +155 -149
  26. package/dialects/oracledb/OracleNativeQueryBuilder.d.ts +12 -12
  27. package/dialects/oracledb/OracleNativeQueryBuilder.js +232 -236
  28. package/dialects/postgresql/BasePostgreSqlPlatform.d.ts +108 -105
  29. package/dialects/postgresql/BasePostgreSqlPlatform.js +351 -350
  30. package/dialects/postgresql/FullTextType.d.ts +10 -6
  31. package/dialects/postgresql/FullTextType.js +51 -51
  32. package/dialects/postgresql/PostgreSqlExceptionConverter.d.ts +5 -5
  33. package/dialects/postgresql/PostgreSqlExceptionConverter.js +55 -43
  34. package/dialects/postgresql/PostgreSqlNativeQueryBuilder.d.ts +1 -1
  35. package/dialects/postgresql/PostgreSqlNativeQueryBuilder.js +4 -4
  36. package/dialects/postgresql/PostgreSqlSchemaHelper.d.ts +102 -82
  37. package/dialects/postgresql/PostgreSqlSchemaHelper.js +711 -683
  38. package/dialects/sqlite/BaseSqliteConnection.d.ts +3 -5
  39. package/dialects/sqlite/BaseSqliteConnection.js +21 -19
  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 +67 -51
  46. package/dialects/sqlite/SqliteNativeQueryBuilder.d.ts +2 -2
  47. package/dialects/sqlite/SqliteNativeQueryBuilder.js +7 -7
  48. package/dialects/sqlite/SqlitePlatform.d.ts +63 -72
  49. package/dialects/sqlite/SqlitePlatform.js +139 -139
  50. package/dialects/sqlite/SqliteSchemaHelper.d.ts +70 -60
  51. package/dialects/sqlite/SqliteSchemaHelper.js +533 -520
  52. package/package.json +4 -4
  53. package/plugin/index.d.ts +44 -35
  54. package/plugin/index.js +44 -36
  55. package/plugin/transformer.d.ts +117 -94
  56. package/plugin/transformer.js +890 -881
  57. package/query/ArrayCriteriaNode.d.ts +4 -4
  58. package/query/ArrayCriteriaNode.js +18 -18
  59. package/query/CriteriaNode.d.ts +35 -25
  60. package/query/CriteriaNode.js +133 -123
  61. package/query/CriteriaNodeFactory.d.ts +49 -6
  62. package/query/CriteriaNodeFactory.js +97 -94
  63. package/query/NativeQueryBuilder.d.ts +120 -117
  64. package/query/NativeQueryBuilder.js +484 -480
  65. package/query/ObjectCriteriaNode.d.ts +12 -12
  66. package/query/ObjectCriteriaNode.js +298 -282
  67. package/query/QueryBuilder.d.ts +1546 -904
  68. package/query/QueryBuilder.js +2270 -2145
  69. package/query/QueryBuilderHelper.d.ts +153 -72
  70. package/query/QueryBuilderHelper.js +1079 -1028
  71. package/query/ScalarCriteriaNode.d.ts +3 -3
  72. package/query/ScalarCriteriaNode.js +53 -46
  73. package/query/enums.d.ts +16 -14
  74. package/query/enums.js +16 -14
  75. package/query/raw.d.ts +16 -6
  76. package/query/raw.js +10 -10
  77. package/schema/DatabaseSchema.d.ts +73 -50
  78. package/schema/DatabaseSchema.js +331 -307
  79. package/schema/DatabaseTable.d.ts +96 -73
  80. package/schema/DatabaseTable.js +1012 -927
  81. package/schema/SchemaComparator.d.ts +58 -54
  82. package/schema/SchemaComparator.js +745 -719
  83. package/schema/SchemaHelper.d.ts +110 -80
  84. package/schema/SchemaHelper.js +676 -645
  85. package/schema/SqlSchemaGenerator.d.ts +79 -58
  86. package/schema/SqlSchemaGenerator.js +536 -501
  87. package/typings.d.ts +380 -266
@@ -1,177 +1,175 @@
1
1
  class InsertStatement {
2
- order;
3
- #keys;
4
- #data;
5
- constructor(keys, data, order) {
6
- this.order = order;
7
- this.#keys = keys;
8
- this.#data = data;
9
- }
10
- getHash() {
11
- return JSON.stringify(this.#data);
12
- }
13
- getData() {
14
- const data = {};
15
- this.#keys.forEach((key, idx) => (data[key] = this.#data[idx]));
16
- return data;
17
- }
2
+ order;
3
+ #keys;
4
+ #data;
5
+ constructor(keys, data, order) {
6
+ this.order = order;
7
+ this.#keys = keys;
8
+ this.#data = data;
9
+ }
10
+ getHash() {
11
+ return JSON.stringify(this.#data);
12
+ }
13
+ getData() {
14
+ const data = {};
15
+ this.#keys.forEach((key, idx) => (data[key] = this.#data[idx]));
16
+ return data;
17
+ }
18
18
  }
19
19
  class DeleteStatement {
20
- #keys;
21
- #cond;
22
- constructor(keys, cond) {
23
- this.#keys = keys;
24
- this.#cond = cond;
20
+ #keys;
21
+ #cond;
22
+ constructor(keys, cond) {
23
+ this.#keys = keys;
24
+ this.#cond = cond;
25
+ }
26
+ getHash() {
27
+ return JSON.stringify(this.#cond);
28
+ }
29
+ getCondition() {
30
+ const cond = {};
31
+ this.#keys.forEach((key, idx) => (cond[key] = this.#cond[idx]));
32
+ return cond;
33
+ }
34
+ }
35
+ export class PivotCollectionPersister {
36
+ #inserts = new Map();
37
+ #upserts = new Map();
38
+ #deletes = new Map();
39
+ #batchSize;
40
+ #order = 0;
41
+ #meta;
42
+ #driver;
43
+ #ctx;
44
+ #schema;
45
+ #loggerContext;
46
+ constructor(meta, driver, ctx, schema, loggerContext) {
47
+ this.#meta = meta;
48
+ this.#driver = driver;
49
+ this.#ctx = ctx;
50
+ this.#schema = schema;
51
+ this.#loggerContext = loggerContext;
52
+ this.#batchSize = this.#driver.config.get('batchSize');
53
+ }
54
+ enqueueUpdate(prop, insertDiff, deleteDiff, pks, isInitialized = true) {
55
+ if (insertDiff.length) {
56
+ if (isInitialized) {
57
+ this.enqueueInsert(prop, insertDiff, pks);
58
+ } else {
59
+ this.enqueueUpsert(prop, insertDiff, pks);
60
+ }
25
61
  }
26
- getHash() {
27
- return JSON.stringify(this.#cond);
62
+ if (deleteDiff === true || (Array.isArray(deleteDiff) && deleteDiff.length)) {
63
+ this.enqueueDelete(prop, deleteDiff, pks);
28
64
  }
29
- getCondition() {
30
- const cond = {};
31
- this.#keys.forEach((key, idx) => (cond[key] = this.#cond[idx]));
32
- return cond;
65
+ }
66
+ enqueueInsert(prop, insertDiff, pks) {
67
+ for (const fks of insertDiff) {
68
+ const statement = this.createInsertStatement(prop, fks, pks);
69
+ const hash = statement.getHash();
70
+ if (prop.owner || !this.#inserts.has(hash)) {
71
+ this.#inserts.set(hash, statement);
72
+ }
33
73
  }
34
- }
35
- export class PivotCollectionPersister {
36
- #inserts = new Map();
37
- #upserts = new Map();
38
- #deletes = new Map();
39
- #batchSize;
40
- #order = 0;
41
- #meta;
42
- #driver;
43
- #ctx;
44
- #schema;
45
- #loggerContext;
46
- constructor(meta, driver, ctx, schema, loggerContext) {
47
- this.#meta = meta;
48
- this.#driver = driver;
49
- this.#ctx = ctx;
50
- this.#schema = schema;
51
- this.#loggerContext = loggerContext;
52
- this.#batchSize = this.#driver.config.get('batchSize');
74
+ }
75
+ enqueueUpsert(prop, insertDiff, pks) {
76
+ for (const fks of insertDiff) {
77
+ const statement = this.createInsertStatement(prop, fks, pks);
78
+ const hash = statement.getHash();
79
+ if (prop.owner || !this.#upserts.has(hash)) {
80
+ this.#upserts.set(hash, statement);
81
+ }
53
82
  }
54
- enqueueUpdate(prop, insertDiff, deleteDiff, pks, isInitialized = true) {
55
- if (insertDiff.length) {
56
- if (isInitialized) {
57
- this.enqueueInsert(prop, insertDiff, pks);
58
- }
59
- else {
60
- this.enqueueUpsert(prop, insertDiff, pks);
61
- }
62
- }
63
- if (deleteDiff === true || (Array.isArray(deleteDiff) && deleteDiff.length)) {
64
- this.enqueueDelete(prop, deleteDiff, pks);
65
- }
83
+ }
84
+ createInsertStatement(prop, fks, pks) {
85
+ const { data, keys } = this.buildPivotKeysAndData(prop, fks, pks);
86
+ return new InsertStatement(keys, data, this.#order++);
87
+ }
88
+ enqueueDelete(prop, deleteDiff, pks) {
89
+ if (deleteDiff === true) {
90
+ const { data, keys } = this.buildPivotKeysAndData(prop, [], pks, true);
91
+ const statement = new DeleteStatement(keys, data);
92
+ this.#deletes.set(statement.getHash(), statement);
93
+ return;
66
94
  }
67
- enqueueInsert(prop, insertDiff, pks) {
68
- for (const fks of insertDiff) {
69
- const statement = this.createInsertStatement(prop, fks, pks);
70
- const hash = statement.getHash();
71
- if (prop.owner || !this.#inserts.has(hash)) {
72
- this.#inserts.set(hash, statement);
73
- }
74
- }
95
+ for (const fks of deleteDiff) {
96
+ const { data, keys } = this.buildPivotKeysAndData(prop, fks, pks);
97
+ const statement = new DeleteStatement(keys, data);
98
+ this.#deletes.set(statement.getHash(), statement);
75
99
  }
76
- enqueueUpsert(prop, insertDiff, pks) {
77
- for (const fks of insertDiff) {
78
- const statement = this.createInsertStatement(prop, fks, pks);
79
- const hash = statement.getHash();
80
- if (prop.owner || !this.#upserts.has(hash)) {
81
- this.#upserts.set(hash, statement);
82
- }
83
- }
100
+ }
101
+ /**
102
+ * Build the keys and data arrays for pivot table operations.
103
+ * Handles polymorphic M:N by prepending the discriminator column/value.
104
+ */
105
+ buildPivotKeysAndData(prop, fks, pks, deleteAll = false) {
106
+ let data;
107
+ let keys;
108
+ if (deleteAll) {
109
+ data = pks;
110
+ keys = prop.joinColumns;
111
+ } else {
112
+ data = prop.owner ? [...fks, ...pks] : [...pks, ...fks];
113
+ keys = prop.owner
114
+ ? [...prop.inverseJoinColumns, ...prop.joinColumns]
115
+ : [...prop.joinColumns, ...prop.inverseJoinColumns];
84
116
  }
85
- createInsertStatement(prop, fks, pks) {
86
- const { data, keys } = this.buildPivotKeysAndData(prop, fks, pks);
87
- return new InsertStatement(keys, data, this.#order++);
117
+ if (prop.polymorphic && prop.discriminatorColumn && prop.discriminatorValue) {
118
+ data = [prop.discriminatorValue, ...data];
119
+ keys = [prop.discriminatorColumn, ...keys];
88
120
  }
89
- enqueueDelete(prop, deleteDiff, pks) {
90
- if (deleteDiff === true) {
91
- const { data, keys } = this.buildPivotKeysAndData(prop, [], pks, true);
92
- const statement = new DeleteStatement(keys, data);
93
- this.#deletes.set(statement.getHash(), statement);
94
- return;
95
- }
96
- for (const fks of deleteDiff) {
97
- const { data, keys } = this.buildPivotKeysAndData(prop, fks, pks);
98
- const statement = new DeleteStatement(keys, data);
99
- this.#deletes.set(statement.getHash(), statement);
100
- }
121
+ return { data, keys };
122
+ }
123
+ collectStatements(statements) {
124
+ const items = [];
125
+ for (const statement of statements.values()) {
126
+ items[statement.order] = statement.getData();
101
127
  }
102
- /**
103
- * Build the keys and data arrays for pivot table operations.
104
- * Handles polymorphic M:N by prepending the discriminator column/value.
105
- */
106
- buildPivotKeysAndData(prop, fks, pks, deleteAll = false) {
107
- let data;
108
- let keys;
109
- if (deleteAll) {
110
- data = pks;
111
- keys = prop.joinColumns;
112
- }
113
- else {
114
- data = prop.owner ? [...fks, ...pks] : [...pks, ...fks];
115
- keys = prop.owner
116
- ? [...prop.inverseJoinColumns, ...prop.joinColumns]
117
- : [...prop.joinColumns, ...prop.inverseJoinColumns];
118
- }
119
- if (prop.polymorphic && prop.discriminatorColumn && prop.discriminatorValue) {
120
- data = [prop.discriminatorValue, ...data];
121
- keys = [prop.discriminatorColumn, ...keys];
128
+ return items.filter(Boolean);
129
+ }
130
+ async execute() {
131
+ if (this.#deletes.size > 0) {
132
+ const deletes = [...this.#deletes.values()];
133
+ for (let i = 0; i < deletes.length; i += this.#batchSize) {
134
+ const chunk = deletes.slice(i, i + this.#batchSize);
135
+ const cond = { $or: [] };
136
+ for (const item of chunk) {
137
+ cond.$or.push(item.getCondition());
122
138
  }
123
- return { data, keys };
139
+ await this.#driver.nativeDelete(this.#meta.class, cond, {
140
+ ctx: this.#ctx,
141
+ schema: this.#schema,
142
+ loggerContext: this.#loggerContext,
143
+ });
144
+ }
124
145
  }
125
- collectStatements(statements) {
126
- const items = [];
127
- for (const statement of statements.values()) {
128
- items[statement.order] = statement.getData();
129
- }
130
- return items.filter(Boolean);
146
+ if (this.#inserts.size > 0) {
147
+ const filtered = this.collectStatements(this.#inserts);
148
+ for (let i = 0; i < filtered.length; i += this.#batchSize) {
149
+ const chunk = filtered.slice(i, i + this.#batchSize);
150
+ await this.#driver.nativeInsertMany(this.#meta.class, chunk, {
151
+ ctx: this.#ctx,
152
+ schema: this.#schema,
153
+ convertCustomTypes: false,
154
+ processCollections: false,
155
+ loggerContext: this.#loggerContext,
156
+ });
157
+ }
131
158
  }
132
- async execute() {
133
- if (this.#deletes.size > 0) {
134
- const deletes = [...this.#deletes.values()];
135
- for (let i = 0; i < deletes.length; i += this.#batchSize) {
136
- const chunk = deletes.slice(i, i + this.#batchSize);
137
- const cond = { $or: [] };
138
- for (const item of chunk) {
139
- cond.$or.push(item.getCondition());
140
- }
141
- await this.#driver.nativeDelete(this.#meta.class, cond, {
142
- ctx: this.#ctx,
143
- schema: this.#schema,
144
- loggerContext: this.#loggerContext,
145
- });
146
- }
147
- }
148
- if (this.#inserts.size > 0) {
149
- const filtered = this.collectStatements(this.#inserts);
150
- for (let i = 0; i < filtered.length; i += this.#batchSize) {
151
- const chunk = filtered.slice(i, i + this.#batchSize);
152
- await this.#driver.nativeInsertMany(this.#meta.class, chunk, {
153
- ctx: this.#ctx,
154
- schema: this.#schema,
155
- convertCustomTypes: false,
156
- processCollections: false,
157
- loggerContext: this.#loggerContext,
158
- });
159
- }
160
- }
161
- if (this.#upserts.size > 0) {
162
- const filtered = this.collectStatements(this.#upserts);
163
- for (let i = 0; i < filtered.length; i += this.#batchSize) {
164
- const chunk = filtered.slice(i, i + this.#batchSize);
165
- await this.#driver.nativeUpdateMany(this.#meta.class, [], chunk, {
166
- ctx: this.#ctx,
167
- schema: this.#schema,
168
- convertCustomTypes: false,
169
- processCollections: false,
170
- upsert: true,
171
- onConflictAction: 'ignore',
172
- loggerContext: this.#loggerContext,
173
- });
174
- }
175
- }
159
+ if (this.#upserts.size > 0) {
160
+ const filtered = this.collectStatements(this.#upserts);
161
+ for (let i = 0; i < filtered.length; i += this.#batchSize) {
162
+ const chunk = filtered.slice(i, i + this.#batchSize);
163
+ await this.#driver.nativeUpdateMany(this.#meta.class, [], chunk, {
164
+ ctx: this.#ctx,
165
+ schema: this.#schema,
166
+ convertCustomTypes: false,
167
+ processCollections: false,
168
+ upsert: true,
169
+ onConflictAction: 'ignore',
170
+ loggerContext: this.#loggerContext,
171
+ });
172
+ }
176
173
  }
174
+ }
177
175
  }