orchid-orm 1.78.2 → 1.78.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.
package/dist/index.js CHANGED
@@ -591,6 +591,12 @@ const makeNestedUpdateUpsertData = (upsert, setIds) => ({
591
591
  ...setIds
592
592
  }
593
593
  });
594
+ const queryUnionAll = async (queries, indexAs) => {
595
+ const records = await queries[0].unionAll(...queries.slice(1));
596
+ const result = Array(queries.length);
597
+ for (const record of records) result[record[indexAs]] = record;
598
+ return result;
599
+ };
594
600
  const makeRawSqlPlaceholders = (length) => {
595
601
  return Array.from({ length }, () => new pqb_internal.RawSql(""));
596
602
  };
@@ -1464,22 +1470,23 @@ const nestedInsert$1 = ({ query, primaryKeys, foreignKeys }) => {
1464
1470
  let connected;
1465
1471
  if (items.length) {
1466
1472
  const queries = [];
1473
+ const indexAs = (0, pqb_internal.getFreeAlias)(t.shape, "i");
1467
1474
  for (let i = 0, len = items.length; i < len; i++) {
1468
1475
  const [selfData, { connectOrCreate }] = items[i];
1469
1476
  for (const item of connectOrCreate) {
1470
1477
  const obj = {};
1471
1478
  for (let i = 0; i < len; i++) obj[foreignKeys[i]] = selfData[primaryKeys[i]];
1472
- queries.push((0, pqb_internal._queryUpdate)(t.where(item.where), obj));
1479
+ queries.push((0, pqb_internal._querySelect)((0, pqb_internal._queryUpdate)(t.where(item.where), obj), [{ [indexAs]: new pqb_internal.RawSql(String(queries.length)) }]));
1473
1480
  }
1474
1481
  }
1475
- connected = await Promise.all(queries);
1482
+ connected = await queryUnionAll(queries, indexAs);
1476
1483
  } else connected = [];
1477
1484
  let connectedI = 0;
1478
1485
  items.length = 0;
1479
1486
  for (const item of data) if (item[1].connectOrCreate) {
1480
1487
  const length = item[1].connectOrCreate.length;
1481
1488
  connectedI += length;
1482
- for (let i = length; i > 0; i--) if (connected[connectedI - i] === 0) {
1489
+ for (let i = length; i > 0; i--) if (!connected[connectedI - i]) {
1483
1490
  items.push(item);
1484
1491
  break;
1485
1492
  }
@@ -1495,7 +1502,7 @@ const nestedInsert$1 = ({ query, primaryKeys, foreignKeys }) => {
1495
1502
  ...obj
1496
1503
  });
1497
1504
  if (connectOrCreate) {
1498
- for (const item of connectOrCreate) if (connected[connectedI++] === 0) records.push({
1505
+ for (const item of connectOrCreate) if (!connected[connectedI++]) records.push({
1499
1506
  ...item.create,
1500
1507
  ...obj
1501
1508
  });
@@ -1503,23 +1510,20 @@ const nestedInsert$1 = ({ query, primaryKeys, foreignKeys }) => {
1503
1510
  }
1504
1511
  await (0, pqb_internal._queryCreateMany)(t, records);
1505
1512
  }
1506
- items.length = 0;
1507
- for (const item of data) if (item[1].upsert) items.push(item);
1508
- if (items.length) {
1509
- const queries = [];
1510
- for (const [selfData, { upsert }] of items) {
1511
- const foreignKeyValues = {};
1512
- for (let i = 0; i < len; i++) foreignKeyValues[foreignKeys[i]] = selfData[primaryKeys[i]];
1513
- for (const item of (0, pqb_internal.toArray)(upsert)) queries.push((0, pqb_internal._queryUpsert)(t.clone().where(item.findBy), {
1514
- update: {
1515
- ...item.update,
1516
- ...foreignKeyValues
1517
- },
1518
- create: makeNestedUpdateUpsertData(item, foreignKeyValues).create
1519
- }));
1520
- }
1521
- await Promise.all(queries);
1513
+ const queries = [];
1514
+ for (const [selfData, { upsert }] of data) {
1515
+ if (!upsert) continue;
1516
+ const obj = {};
1517
+ for (let i = 0; i < len; i++) obj[foreignKeys[i]] = selfData[primaryKeys[i]];
1518
+ for (const item of (0, pqb_internal.toArray)(upsert)) queries.push((0, pqb_internal._queryUpsert)(t.clone().where(item.findBy), {
1519
+ update: {
1520
+ ...item.update,
1521
+ ...obj
1522
+ },
1523
+ create: makeNestedUpdateUpsertData(item, obj).create
1524
+ }));
1522
1525
  }
1526
+ if (queries.length) await queries[0].unionAll(...queries.slice(1));
1523
1527
  });
1524
1528
  };
1525
1529
  const hasManyCreate = (key, state, nestedInsertFn, self, ctx, items, rowIndexes, count) => {
@@ -1964,16 +1968,18 @@ const nestedInsert = ({ relatedTableQuery, joinTableQuery, primaryKeys, foreignK
1964
1968
  let connected;
1965
1969
  if (items.length) {
1966
1970
  const queries = [];
1967
- for (const [, { connect }] of items) for (const item of connect) queries.push((0, pqb_internal._queryFindBy)(t.select(...throughPrimaryKeys), item));
1968
- connected = await Promise.all(queries);
1971
+ const indexAs = (0, pqb_internal.getFreeAlias)(t.shape, "i");
1972
+ for (const [, { connect }] of items) for (const item of connect) queries.push((0, pqb_internal._queryFindBy)(t.select(...throughPrimaryKeys, { [indexAs]: new pqb_internal.RawSql(String(queries.length)) }), item));
1973
+ connected = await queryUnionAll(queries, indexAs);
1969
1974
  } else connected = [];
1970
1975
  items.length = 0;
1971
1976
  for (const item of data) if (item[1].connectOrCreate) items.push(item);
1972
1977
  let connectOrCreated;
1973
1978
  if (items.length) {
1974
1979
  const queries = [];
1975
- for (const [, { connectOrCreate }] of items) for (const item of connectOrCreate) queries.push((0, pqb_internal._queryFindByOptional)(t.select(...throughPrimaryKeys), item.where));
1976
- connectOrCreated = await Promise.all(queries);
1980
+ const indexAs = (0, pqb_internal.getFreeAlias)(t.shape, "i");
1981
+ for (const [, { connectOrCreate }] of items) for (const item of connectOrCreate) queries.push((0, pqb_internal._queryFindByOptional)(t.select(...throughPrimaryKeys, { [indexAs]: new pqb_internal.RawSql(String(queries.length)) }), item.where));
1982
+ connectOrCreated = await queryUnionAll(queries, indexAs);
1977
1983
  } else connectOrCreated = [];
1978
1984
  let connectOrCreateI = 0;
1979
1985
  items.length = 0;