orchid-orm 1.49.5 → 1.49.7

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/dist/index.js CHANGED
@@ -298,6 +298,52 @@ const joinQueryChainHOF = (relPKeys, reverseJoin, joinQuery) => (joiningQuery, b
298
298
  }
299
299
  const last = chain[chain.length - 1];
300
300
  const query = "relationConfig" in last ? last.relationConfig.joinQuery(last, baseQuery) : last;
301
+ let useWhereExist = true;
302
+ if (jq.q.returnType !== "value" && jq.q.returnType !== "valueOrThrow") {
303
+ let tablePrefix;
304
+ if (jq.q.order) {
305
+ const prefix = tablePrefix = pqb.getQueryAs(jq) + ".";
306
+ useWhereExist = jq.q.order.every((o) => {
307
+ if (typeof o === "string") {
308
+ return isOwnColumn(prefix, o);
309
+ } else if (orchidCore.isExpression(o)) {
310
+ return false;
311
+ } else {
312
+ for (const key in o) {
313
+ if (!isOwnColumn(prefix, key)) {
314
+ return false;
315
+ }
316
+ }
317
+ return true;
318
+ }
319
+ });
320
+ }
321
+ if (useWhereExist && jq.q.select) {
322
+ const prefix = tablePrefix || pqb.getQueryAs(jq) + ".";
323
+ useWhereExist = jq.q.select.every((s) => {
324
+ if (typeof s === "string") {
325
+ return isOwnColumn(prefix, s);
326
+ } else if (orchidCore.isExpression(s)) {
327
+ return false;
328
+ } else if (!s) {
329
+ return false;
330
+ } else {
331
+ for (const key in s.selectAs) {
332
+ const value = s.selectAs[key];
333
+ if (typeof value !== "string" || !isOwnColumn(prefix, value)) {
334
+ return false;
335
+ }
336
+ }
337
+ return true;
338
+ }
339
+ });
340
+ }
341
+ }
342
+ if (useWhereExist) {
343
+ return jq.where({
344
+ EXISTS: { q: reverseJoin(query, jq) }
345
+ });
346
+ }
301
347
  const result = jq.join(
302
348
  { _internalJoin: reverseJoin(query, jq) },
303
349
  void 0
@@ -310,6 +356,7 @@ const joinQueryChainHOF = (relPKeys, reverseJoin, joinQuery) => (joiningQuery, b
310
356
  if (!result.q.select) result.q.select = ["*"];
311
357
  return wrapQuery(jq, result, item);
312
358
  };
359
+ const isOwnColumn = (prefix, column) => !column.includes(".") || column.startsWith(prefix);
313
360
  const selectRowNumber = (result, relPKeys) => {
314
361
  const hookSelect = result.q.hookSelect = new Map(
315
362
  result.q.hookSelect && [...result.q.hookSelect]
@@ -885,7 +932,11 @@ const nestedUpdate$2 = ({ query, primaryKeys, foreignKeys }) => {
885
932
  ids
886
933
  );
887
934
  if (params.create || params.disconnect || params.set) {
888
- await pqb._queryUpdate(currentRelationsQuery, setNulls);
935
+ let queryToDisconnect = currentRelationsQuery;
936
+ if (params.set) {
937
+ queryToDisconnect = queryToDisconnect.whereNot(params.set);
938
+ }
939
+ await pqb._queryUpdate(queryToDisconnect, setNulls);
889
940
  const record = data[0];
890
941
  if (params.create) {
891
942
  const obj = { ...params.create };
@@ -1238,27 +1289,27 @@ const nestedUpdate$1 = ({ query, primaryKeys, foreignKeys }) => {
1238
1289
  for (const foreignKey of foreignKeys) {
1239
1290
  obj[foreignKey] = null;
1240
1291
  }
1241
- await pqb._queryUpdate(
1242
- getWhereForNestedUpdate(
1243
- t,
1244
- data,
1245
- params.disconnect,
1246
- primaryKeys,
1247
- foreignKeys
1248
- ),
1249
- obj
1292
+ const setConditions = params.set && (Array.isArray(params.set) ? params.set.length : orchidCore.objectHasValues(params.set)) && (Array.isArray(params.set) ? {
1293
+ OR: params.set
1294
+ } : params.set);
1295
+ let queryToDisconnect = getWhereForNestedUpdate(
1296
+ t,
1297
+ data,
1298
+ params.disconnect,
1299
+ primaryKeys,
1300
+ foreignKeys
1250
1301
  );
1251
- if (params.set && (Array.isArray(params.set) ? params.set.length : orchidCore.objectHasValues(params.set))) {
1302
+ if (setConditions) {
1303
+ queryToDisconnect = queryToDisconnect.whereNot(setConditions);
1304
+ }
1305
+ await pqb._queryUpdate(queryToDisconnect, obj);
1306
+ if (setConditions) {
1252
1307
  const obj2 = {};
1253
1308
  for (let i = 0; i < len; i++) {
1254
1309
  obj2[foreignKeys[i]] = data[0][primaryKeys[i]];
1255
1310
  }
1256
1311
  await pqb._queryUpdate(
1257
- t.where(
1258
- Array.isArray(params.set) ? {
1259
- OR: params.set
1260
- } : params.set
1261
- ),
1312
+ t.where(setConditions),
1262
1313
  obj2
1263
1314
  );
1264
1315
  }