orchid-orm 1.59.2 → 1.59.4

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.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { makeColumnTypes, getStackTrace, applyMixins, QueryHooks, defaultSchemaConfig, raw, getCallerFilePath, snakeCaseKey, getColumnTypes, parseTableData, toSnakeCase, emptyObject, emptyArray, _queryHookAfterCreate, _queryHookAfterUpdate, getQueryAs, setQueryObjectValueImmutable, pushQueryOnForOuter, isExpression, cloneQueryBaseUnscoped, DynamicRawSQL, RawSQL, getShapeFromSelect, _queryWhere, _queryDefaults, getPrimaryKeys, VirtualColumn, _with, _queryCreate, _orCreate, getFreeAlias, isQueryReturnsAll, _queryHookBeforeUpdate, _queryFindBy, _queryRows, _queryUpdate, _queryDelete, prepareSubQueryForSql, _queryUpdateOrThrow, _queryCreateMany, OrchidOrmInternalError, toArray, objectHasValues, _queryJoinOn, _queryCreateManyFrom, NotFoundError, _queryFindByOptional, _querySelect, pick, _queryWhereExists, _queryTake, _queryTakeOptional, _initQueryBuilder, Db, getClonedQueryData } from 'pqb';
1
+ import { makeColumnTypes, getStackTrace, applyMixins, QueryHooks, defaultSchemaConfig, raw, getCallerFilePath, snakeCaseKey, getColumnTypes, parseTableData, toSnakeCase, emptyObject, emptyArray, _queryHookAfterCreate, _queryHookAfterUpdate, getQueryAs, setQueryObjectValueImmutable, pushQueryOnForOuter, isExpression, cloneQueryBaseUnscoped, DynamicRawSQL, RawSql, getShapeFromSelect, _queryWhere, _queryDefaults, getPrimaryKeys, VirtualColumn, _with, _queryCreate, _orCreate, getFreeAlias, isQueryReturnsAll, _queryHookBeforeUpdate, _queryFindBy, _queryRows, _queryUpdate, _queryDelete, prepareSubQueryForSql, _queryUpdateOrThrow, _queryCreateMany, OrchidOrmInternalError, toArray, objectHasValues, _queryJoinOn, _queryCreateManyFrom, NotFoundError, _queryFindByOptional, _querySelect, pick, _queryWhereExists, _queryTake, _queryTakeOptional, _initQueryBuilder, Db, getClonedQueryData } from 'pqb';
2
2
  export * from 'pqb';
3
3
  import { AsyncLocalStorage } from 'node:async_hooks';
4
4
 
@@ -387,7 +387,7 @@ const combineOrdering = (result, joined) => {
387
387
  const wrapQuery = (joiningQuery, result, item) => {
388
388
  const baseOuterQuery = cloneQueryBaseUnscoped(joiningQuery);
389
389
  const outer = baseOuterQuery.clone();
390
- outer.q.and = [new DynamicRawSQL(() => new RawSQL(`${item.as || "r"} = 1`))];
390
+ outer.q.and = [new DynamicRawSQL(() => new RawSql(`${item.as || "r"} = 1`))];
391
391
  outer.q.useFromLimitOffset = true;
392
392
  outer.shape = getShapeFromSelect(result, true);
393
393
  outer.q.select = Object.keys(outer.shape);
@@ -415,13 +415,16 @@ class BelongsToVirtualColumn extends VirtualColumn {
415
415
  }
416
416
  const value = item[key];
417
417
  if ("create" in value || "connectOrCreate" in value) {
418
- foreignKeys.forEach((foreignKey) => item[foreignKey] = new RawSQL(""));
418
+ foreignKeys.forEach((foreignKey) => item[foreignKey] = new RawSql(""));
419
419
  const selectPKeys = query.select(...primaryKeys);
420
420
  _with(
421
421
  q,
422
422
  (as) => {
423
423
  foreignKeys.forEach((foreignKey, i) => {
424
- item[foreignKey]._sql = `(SELECT "${as}"."${primaryKeys[i]}" FROM "${as}")`;
424
+ item[foreignKey]._sql = selectCteColumnSql(
425
+ as,
426
+ primaryKeys[i]
427
+ );
425
428
  });
426
429
  },
427
430
  "create" in value ? _queryCreate(selectPKeys, value.create) : _orCreate(
@@ -436,9 +439,8 @@ class BelongsToVirtualColumn extends VirtualColumn {
436
439
  const as = getFreeAlias(q.q.withShapes, "q");
437
440
  _with(q, as, query.select(...primaryKeys).findBy(value.connect));
438
441
  foreignKeys.map((foreignKey, i) => {
439
- const selectColumn = `(SELECT "${as}"."${primaryKeys[i]}" FROM "${as}")`;
440
- item[foreignKey] = new RawSQL(
441
- i === 0 ? `CASE WHEN (SELECT count(*) FROM "${as}") = 0 AND (SELECT 'not-found')::int = 0 THEN NULL ELSE ${selectColumn} END` : selectColumn
442
+ item[foreignKey] = new RawSql(
443
+ selectCteColumnMustExistSql(i, as, primaryKeys[i])
442
444
  );
443
445
  });
444
446
  return;
@@ -542,13 +544,18 @@ const nestedUpdate$3 = ({ query, primaryKeys, foreignKeys, len }) => {
542
544
  }
543
545
  }
544
546
  if (loadPrimaryKeys) {
545
- const record = await _queryFindBy(
546
- query.select(...loadPrimaryKeys),
547
- params.set
548
- );
549
547
  for (let i = 0, len2 = loadPrimaryKeys.length; i < len2; i++) {
550
- update[loadForeignKeys[i]] = record[loadPrimaryKeys[i]];
548
+ update[loadForeignKeys[i]] = new RawSql("");
551
549
  }
550
+ _with(
551
+ q2,
552
+ (as) => {
553
+ for (let i = 0, len2 = loadPrimaryKeys.length; i < len2; i++) {
554
+ update[loadForeignKeys[i]]._sql = selectCteColumnMustExistSql(i, as, loadPrimaryKeys[i]);
555
+ }
556
+ },
557
+ _queryFindBy(query.select(...loadPrimaryKeys), params.set)
558
+ );
552
559
  }
553
560
  } else if (params.create) {
554
561
  const q3 = query.clone();
@@ -645,6 +652,11 @@ const nestedUpdate$3 = ({ query, primaryKeys, foreignKeys, len }) => {
645
652
  }
646
653
  };
647
654
  };
655
+ const selectCteColumnSql = (cteAs, column) => `(SELECT "${cteAs}"."${column}" FROM "${cteAs}")`;
656
+ const selectCteColumnMustExistSql = (i, cteAs, column) => {
657
+ const selectColumn = selectCteColumnSql(cteAs, column);
658
+ return i === 0 ? `CASE WHEN (SELECT count(*) FROM "${cteAs}") = 0 AND (SELECT 'not-found')::int = 0 THEN NULL ELSE ${selectColumn} END` : selectColumn;
659
+ };
648
660
 
649
661
  class HasOneVirtualColumn extends VirtualColumn {
650
662
  constructor(schema, key, state) {