@mikro-orm/sql 7.2.4-dev.1 → 7.2.4-dev.3

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.
@@ -1143,26 +1143,32 @@ export class AbstractSqlDriver extends DatabaseDriver {
1143
1143
  }
1144
1144
  sql += ' where ';
1145
1145
  const pkProps = meta.primaryKeys.concat(...meta.getOwnConcurrencyCheckKeys());
1146
+ // an optimistically locked batch carries the version in every condition
1147
+ if (meta.versionProperty &&
1148
+ where.every(cond => Utils.isPlainObject(cond) && meta.versionProperty in cond)) {
1149
+ pkProps.push(meta.versionProperty);
1150
+ }
1146
1151
  const pks = Utils.flatten(pkProps.map(pk => meta.properties[pk].fieldNames));
1147
1152
  const useTupleIn = pks.length <= 1 || this.platform.allowsComparingTuples();
1148
1153
  const condTemplate = useTupleIn
1149
1154
  ? `(${pks.map(() => '?').join(', ')})`
1150
1155
  : `(${pks.map(pk => `${this.platform.quoteIdentifier(pk)} = ?`).join(' and ')})`;
1151
- const conds = where.map(cond => {
1156
+ const conds = where.flatMap(cond => {
1152
1157
  // with multiple PK columns the condition is looked up by property name, so it needs to stay an object
1153
1158
  if (pks.length === 1 && Utils.isPlainObject(cond) && Utils.getObjectKeysSize(cond) === 1) {
1154
1159
  cond = Object.values(cond)[0];
1155
1160
  }
1156
1161
  if (pks.length > 1) {
1157
- pkProps.forEach(pk => {
1158
- if (Array.isArray(cond[pk])) {
1159
- params.push(...Utils.flatten(cond[pk]));
1160
- }
1161
- else {
1162
- params.push(cond[pk]);
1163
- }
1162
+ // a date version in sqlite matches either of its storage formats (see `convertVersionValue()`)
1163
+ const version = cond[meta.versionProperty];
1164
+ const versions = version?.$in ?? [version];
1165
+ return versions.map(v => {
1166
+ pkProps.forEach(pk => {
1167
+ const value = pk === meta.versionProperty ? v : cond[pk];
1168
+ params.push(...(Array.isArray(value) ? Utils.flatten(value) : [value]));
1169
+ });
1170
+ return condTemplate;
1164
1171
  });
1165
- return condTemplate;
1166
1172
  }
1167
1173
  params.push(cond);
1168
1174
  return '?';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mikro-orm/sql",
3
- "version": "7.2.4-dev.1",
3
+ "version": "7.2.4-dev.3",
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",
@@ -53,7 +53,7 @@
53
53
  "@mikro-orm/core": "^7.2.3"
54
54
  },
55
55
  "peerDependencies": {
56
- "@mikro-orm/core": "7.2.4-dev.1"
56
+ "@mikro-orm/core": "7.2.4-dev.3"
57
57
  },
58
58
  "engines": {
59
59
  "node": ">= 22.17.0"