orchid-orm 1.75.0 → 1.76.1

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.d.ts CHANGED
@@ -13,7 +13,15 @@ interface BelongsToOptions<Columns extends Column.Shape.QueryInit = Column.Shape
13
13
  on?: ColumnsShape.InputPartial<Related['columns']['shape']>;
14
14
  }
15
15
  type BelongsToParams<T extends RelationConfigSelf, FK extends string> = { [Name in FK]: T['columns']['shape'][Name]['__type'] };
16
- type BelongsToDefaultRequired<T extends RelationConfigSelf, Rel extends BelongsTo> = Rel['related']['softDelete'] extends true | string ? false : { [K in Rel['options']['columns'][number] & string]: T['columns']['shape'][K]['data']['isNullable'] extends true ? false : true }[Rel['options']['columns'][number] & string] extends true ? true : false;
16
+ type BelongsToDefaultRequired<T extends RelationConfigSelf, Rel extends BelongsTo, Related> = Related extends {
17
+ softDelete: true;
18
+ } ? false : BelongsToDefaultRequiredFromColumns<T, Rel>;
19
+ type BelongsToDefaultRequiredFromColumns<T extends RelationConfigSelf, Rel extends BelongsTo> = BelongsToColumnRequired<T['columns']['shape'][Rel['options']['columns'][number] & string]> extends true ? true : false;
20
+ type BelongsToColumnRequired<Column> = Column extends {
21
+ data: {
22
+ isNullable: true;
23
+ };
24
+ } ? false : true;
17
25
  type BelongsToQuery<T extends Query, Name extends string> = { [P in keyof T]: P extends '__selectable' ? SelectableFromShape<T['shape'], Name> : P extends '__as' ? Name : P extends CreateMethodsNames | DeleteMethodsNames ? never : T[P] } & QueryHasWhere;
18
26
  interface BelongsToDataForCreate<Name extends string, FK extends string, Required, Q extends Query> {
19
27
  columns: FK;
@@ -261,16 +269,27 @@ type RelationToOneDataForCreateSameQuery<Q extends RelationToOneDataForCreateSam
261
269
  };
262
270
  interface RelationThunkBase {
263
271
  type: string;
264
- related: ORMTableInput;
272
+ id: string;
265
273
  options: unknown;
266
274
  }
267
275
  type RelationThunk = BelongsTo | HasOne | HasMany | HasAndBelongsToMany;
268
276
  interface RelationThunks {
269
277
  [K: string]: RelationThunk;
270
278
  }
271
- type RelationTableToQuery<Relation> = Relation extends {
272
- related: infer R extends ORMTableInput;
273
- } ? TableQueryBuilder<R> : never;
279
+ type TableClassInstances<T extends TableClasses> = InstanceType<T[keyof T]>;
280
+ type RelationToTableInputById<Tables, Id extends string> = Extract<Tables, {
281
+ id: Id;
282
+ }>;
283
+ type RelationToTableInputByKey<T extends TableClasses, Id extends string> = Id extends keyof T ? InstanceType<T[Id]> : never;
284
+ type RelationToTableInputByName<Tables, Id extends string> = Extract<Tables, {
285
+ table: Id;
286
+ } | {
287
+ name: Id;
288
+ }>;
289
+ type RelationToTableInputByKeyOrName<T extends TableClasses, Id extends string> = Id extends keyof T ? RelationToTableInputByKey<T, Id> : RelationToTableInputByName<TableClassInstances<T>, Id>;
290
+ type RelationToTableInputFromClasses<T extends TableClasses, Id extends string> = RelationToTableInputById<TableClassInstances<T>, Id> extends infer Result ? [Result] extends [never] ? RelationToTableInputByKeyOrName<T, Id> : Result : never;
291
+ type RelationToTableInput<TC extends TableClasses, VC extends TableClasses, Rel extends RelationThunkBase> = RelationToTableInputFromClasses<TC, Rel['id']> extends infer Result ? [Result] extends [never] ? RelationToTableInputFromClasses<VC, Rel['id']> extends infer Result ? [Result] extends [never] ? false : Result : never : Result : never;
292
+ type RelationTableToQuery<TC extends TableClasses, VC extends TableClasses, Rel extends RelationThunkBase> = RelationToTableInput<TC, VC, Rel> extends infer Result extends ORMTableInput ? TableQueryBuilder<TC, VC, Result> : never;
274
293
  interface RelationConfigSelf {
275
294
  columns: {
276
295
  shape: Column.Shape.QueryInit;
@@ -315,23 +334,17 @@ interface OrchidORMTableHelper<T extends Query> {
315
334
  */
316
335
  makeHelper<Args extends unknown[], Result>(fn: (q: T, ...args: Args) => Result): OrchidORMQueryHelper<T, Args, Result>;
317
336
  }
318
- type OrchidORMTables<T extends TableClasses = TableClasses> = { [K in keyof T]: T[K] extends {
319
- new (): infer R extends ORMTableInput;
320
- } ? OrchidORMTableHelper<TableQueryBuilder<R>> : never };
321
- type OrchidORMViews<T extends TableClasses = TableClasses> = { [K in keyof T]: T[K] extends {
337
+ type OrchidORMTables<TC extends TableClasses = TableClasses, VC extends TableClasses = TableClasses> = { [K in keyof TC]: TC[K] extends {
322
338
  new (): infer R extends ORMTableInput;
323
- } ? OrchidORMTableHelper<TableQueryBuilder<R>> : never };
324
- type OrchidORMBundle<T extends TableClasses = TableClasses, V extends TableClasses = TableClasses> = OrchidORMTables<T> & {
325
- $views: OrchidORMViews<V>;
339
+ } ? OrchidORMTableHelper<TableQueryBuilder<TC, VC, R>> : never };
340
+ type OrchidORMBundle<TC extends TableClasses = TableClasses, VC extends TableClasses = TableClasses> = OrchidORMTables<TC> & {
341
+ $views: OrchidORMTables<VC, TC>;
326
342
  };
327
- type OrchidORMDbTables<T extends TableClasses = TableClasses> = { [K in keyof T]: T[K] extends {
343
+ type OrchidORMDbTables<TC extends TableClasses = TableClasses, VC extends TableClasses = TableClasses> = { [K in keyof TC]: TC[K] extends {
328
344
  new (): infer R extends ORMTableInput;
329
- } ? TableQueryBuilder<R> : never };
330
- type OrchidORMDbViews<T extends TableClasses = TableClasses> = { [K in keyof T]: T[K] extends {
331
- new (): infer R extends ORMTableInput;
332
- } ? TableQueryBuilder<R> : never };
333
- type OrchidORM<T extends TableClasses = TableClasses, V extends TableClasses = TableClasses> = OrchidORMDbTables<T> & {
334
- $views: OrchidORMDbViews<V>;
345
+ } ? TableQueryBuilder<TC, VC, R> : never };
346
+ type OrchidORM<TC extends TableClasses = TableClasses, VC extends TableClasses = TableClasses> = OrchidORMDbTables<TC, VC> & {
347
+ $views: OrchidORMDbTables<VC, TC>;
335
348
  } & OrchidORMMethods;
336
349
  /**
337
350
  * Identity helper for table row-level security configuration.
@@ -525,23 +538,23 @@ interface TableInfo {
525
538
  name: string;
526
539
  }
527
540
  interface Table extends Query, TableInfo {}
528
- type BelongsToRequired<T extends RelationConfigSelf, Rel extends BelongsTo> = Rel['options'] extends {
541
+ type BelongsToRequired<T extends RelationConfigSelf, Rel extends BelongsTo, Related> = Rel['options'] extends {
529
542
  required: infer Required extends boolean;
530
543
  } ? Required : Rel['options'] extends {
531
544
  on: unknown;
532
- } ? false : BelongsToDefaultRequired<T, Rel>;
533
- type BelongsToRelationInfo<T extends RelationConfigSelf, Name extends string, Rel extends BelongsTo> = BelongsToInfo<T, Rel['options']['columns'][number] & string, BelongsToRequired<T, Rel>, BelongsToQuery<RelationTableToQuery<Rel>, Name>>;
534
- type BelongsToCreateData<T extends RelationConfigSelf, Name extends string, Rel extends BelongsTo> = BelongsToDataForCreate<Name, Rel['options']['columns'][number] & string, BelongsToRequired<T, Rel>, BelongsToQuery<RelationTableToQuery<Rel>, Name>>;
545
+ } ? false : BelongsToDefaultRequired<T, Rel, Related>;
546
+ type BelongsToRelationInfo<TC extends TableClasses, VC extends TableClasses, T extends RelationConfigSelf, Name extends string, Rel extends BelongsTo> = RelationToTableInput<TC, VC, Rel> extends infer Related extends ORMTableInput ? BelongsToInfo<T, Rel['options']['columns'][number] & string, BelongsToRequired<T, Rel, Related>, BelongsToQuery<TableQueryBuilder<TC, VC, Related>, Name>> : never;
547
+ type BelongsToCreateData<TC extends TableClasses, VC extends TableClasses, T extends RelationConfigSelf, Name extends string, Rel extends BelongsTo> = RelationToTableInput<TC, VC, Rel> extends infer Related extends ORMTableInput ? BelongsToDataForCreate<Name, Rel['options']['columns'][number] & string, BelongsToRequired<T, Rel, Related>, BelongsToQuery<TableQueryBuilder<TC, VC, Related>, Name>> : never;
535
548
  type BelongsToCreateDataColumns<T extends RelationConfigSelf> = { [K in keyof T['relations']]: T['relations'][K] extends BelongsTo ? T['relations'][K]['options']['columns'][number] & string : never }[keyof T['relations']];
536
- type BelongsToCreateDataForColumn<T extends RelationConfigSelf, Column extends string> = { [K in keyof T['relations']]: T['relations'][K] extends BelongsTo ? Column extends T['relations'][K]['options']['columns'][number] ? BelongsToCreateData<T, K & string, T['relations'][K]> : never : never }[keyof T['relations']];
537
- type RelationDataForCreate<T extends RelationConfigSelf, Name extends keyof T['relations'] & string> = T['relations'][Name] extends HasOne ? HasOneInfo<T, Name, T['relations'][Name], HasOneQuery<T, Name, RelationTableToQuery<T['relations'][Name]>>>['dataForCreate'] : T['relations'][Name] extends HasMany ? HasManyInfo<T, Name, T['relations'][Name], HasManyQuery<T, Name, RelationTableToQuery<T['relations'][Name]>>>['dataForCreate'] : T['relations'][Name] extends HasAndBelongsToMany ? HasAndBelongsToManyInfo<T, Name, T['relations'][Name]['options']['columns'][number] & string, HasAndBelongsToManyQuery<Name, RelationTableToQuery<T['relations'][Name]>>>['dataForCreate'] : never;
549
+ type BelongsToCreateDataForColumn<TC extends TableClasses, VC extends TableClasses, T extends RelationConfigSelf, Column extends string> = { [K in keyof T['relations']]: T['relations'][K] extends BelongsTo ? Column extends T['relations'][K]['options']['columns'][number] ? BelongsToCreateData<TC, VC, T, K & string, T['relations'][K]> : never : never }[keyof T['relations']];
550
+ type RelationDataForCreate<TC extends TableClasses, VC extends TableClasses, T extends RelationConfigSelf, Name extends keyof T['relations'] & string> = T['relations'][Name] extends HasOne ? HasOneInfo<T, Name, T['relations'][Name], HasOneQuery<T, Name, RelationTableToQuery<TC, VC, T['relations'][Name]>>>['dataForCreate'] : T['relations'][Name] extends HasMany ? HasManyInfo<T, Name, T['relations'][Name], HasManyQuery<T, Name, RelationTableToQuery<TC, VC, T['relations'][Name]>>>['dataForCreate'] : T['relations'][Name] extends HasAndBelongsToMany ? HasAndBelongsToManyInfo<T, Name, T['relations'][Name]['options']['columns'][number] & string, HasAndBelongsToManyQuery<Name, RelationTableToQuery<TC, VC, T['relations'][Name]>>>['dataForCreate'] : never;
538
551
  type RelationDataForCreateOptionalNames<T extends RelationConfigSelf> = { [K in keyof T['relations'] & string]: T['relations'][K] extends BelongsTo ? never : K }[keyof T['relations'] & string];
539
- type BelongsToRelationsDataForCreate<T extends RelationConfigSelf> = { [Column in BelongsToCreateDataColumns<T>]: BelongsToCreateDataForColumn<T, Column> };
540
- type RelationsDataForCreateOptional<T extends RelationConfigSelf> = RelationDataForCreateOptionalNames<T> extends never ? EmptyObject : { [K in RelationDataForCreateOptionalNames<T>]: (u: RelationDataForCreate<T, K>) => void }[RelationDataForCreateOptionalNames<T>] extends ((u: infer Obj) => void) ? Obj : EmptyObject;
541
- interface TableQueryBuilder<T extends ORMTableInput> extends TableInfo, Db<T['table'] extends string ? T['table'] : T['name'], T['columns']['shape'], T['columns']['data'], T['types'], T['table'] extends string ? T['readOnly'] extends true ? true : undefined : T['readOnly'] extends false ? undefined : true, T> {
542
- relations: T extends RelationConfigSelf ? { [K in keyof T['relations'] & string]: T['relations'][K] extends BelongsTo ? BelongsToRelationInfo<T, K, T['relations'][K]> : T['relations'][K] extends HasOne ? HasOneInfo<T, K, T['relations'][K], HasOneQuery<T, K, RelationTableToQuery<T['relations'][K]>>> : T['relations'][K] extends HasMany ? HasManyInfo<T, K, T['relations'][K], HasManyQuery<T, K, RelationTableToQuery<T['relations'][K]>>> : T['relations'][K] extends HasAndBelongsToMany ? HasAndBelongsToManyInfo<T, K, T['relations'][K]['options']['columns'][number] & string, HasAndBelongsToManyQuery<K, RelationTableToQuery<T['relations'][K]>>> : never } : EmptyObject;
543
- relationsDataForCreate: T extends RelationConfigSelf ? BelongsToRelationsDataForCreate<T> : EmptyObject;
544
- relationsDataForCreateOptional: T extends RelationConfigSelf ? RelationsDataForCreateOptional<T> : EmptyObject;
552
+ type BelongsToRelationsDataForCreate<TC extends TableClasses, VC extends TableClasses, T extends RelationConfigSelf> = { [Column in BelongsToCreateDataColumns<T>]: BelongsToCreateDataForColumn<TC, VC, T, Column> };
553
+ type RelationsDataForCreateOptional<TC extends TableClasses, VC extends TableClasses, T extends RelationConfigSelf> = RelationDataForCreateOptionalNames<T> extends never ? EmptyObject : { [K in RelationDataForCreateOptionalNames<T>]: (u: RelationDataForCreate<TC, VC, T, K>) => void }[RelationDataForCreateOptionalNames<T>] extends ((u: infer Obj) => void) ? Obj : EmptyObject;
554
+ interface TableQueryBuilder<TC extends TableClasses, VC extends TableClasses, T extends ORMTableInput> extends TableInfo, Db<T['table'] extends string ? T['table'] : T['name'], T['columns']['shape'], T['columns']['data'], T['types'], T['table'] extends string ? T['readOnly'] extends true ? true : undefined : T['readOnly'] extends false ? undefined : true, T> {
555
+ relations: T extends RelationConfigSelf ? { [K in keyof T['relations'] & string]: T['relations'][K] extends BelongsTo ? BelongsToRelationInfo<TC, VC, T, K, T['relations'][K]> : T['relations'][K] extends HasOne ? HasOneInfo<T, K, T['relations'][K], HasOneQuery<T, K, RelationTableToQuery<TC, VC, T['relations'][K]>>> : T['relations'][K] extends HasMany ? HasManyInfo<T, K, T['relations'][K], HasManyQuery<T, K, RelationTableToQuery<TC, VC, T['relations'][K]>>> : T['relations'][K] extends HasAndBelongsToMany ? HasAndBelongsToManyInfo<T, K, T['relations'][K]['options']['columns'][number] & string, HasAndBelongsToManyQuery<K, RelationTableToQuery<TC, VC, T['relations'][K]>>> : never } : EmptyObject;
556
+ relationsDataForCreate: T extends RelationConfigSelf ? BelongsToRelationsDataForCreate<TC, VC, T> : EmptyObject;
557
+ relationsDataForCreateOptional: T extends RelationConfigSelf ? RelationsDataForCreateOptional<TC, VC, T> : EmptyObject;
545
558
  }
546
559
  interface PickORMTableInputColumns {
547
560
  columns: {
@@ -557,8 +570,10 @@ interface PickORMTableComputed {
557
570
  }
558
571
  interface PickORMTableInputColumnsAndComputed extends PickORMTableInputColumns, PickORMTableComputed {}
559
572
  interface ORMTableInput extends PickORMTableInputColumnsAndComputed {
573
+ id?: string;
560
574
  autoForeignKeys?: TableData.References.BaseOptions | boolean;
561
575
  schema?: QuerySchema;
576
+ nameInDb?: string;
562
577
  types: unknown;
563
578
  filePath: string;
564
579
  language?: string;
@@ -615,6 +630,10 @@ interface SetColumnsResult<Shape extends Column.Shape.QueryInit, Data extends Ma
615
630
  }
616
631
  interface BaseTableInstance<ColumnTypes> {
617
632
  table?: string;
633
+ /**
634
+ * Database relation name used in SQL and migration generation.
635
+ */
636
+ nameInDb?: string;
618
637
  columns: {
619
638
  shape: Column.Shape.QueryInit;
620
639
  data: MaybeArray<TableDataItem>;
@@ -751,7 +770,7 @@ interface BaseTableInstance<ColumnTypes> {
751
770
  new (): Related;
752
771
  }, options: Options): {
753
772
  type: 'belongsTo';
754
- related: Related;
773
+ id: Related['id'] extends string ? Related['id'] : Related['table'] extends string ? Related['table'] : Related['name'];
755
774
  options: Options;
756
775
  };
757
776
  hasOne<Columns extends Column.Shape.QueryInit, Related extends ORMTableInput, Through extends string, Source extends string, Options extends HasOneOptions<Columns, Related, Through, Source>>(this: {
@@ -762,7 +781,7 @@ interface BaseTableInstance<ColumnTypes> {
762
781
  new (): Related;
763
782
  }, options: Options): {
764
783
  type: 'hasOne';
765
- related: Related;
784
+ id: Related['id'] extends string ? Related['id'] : Related['table'] extends string ? Related['table'] : Related['name'];
766
785
  options: Options;
767
786
  };
768
787
  hasMany<Columns extends Column.Shape.QueryInit, Related extends ORMTableInput, Through extends string, Source extends string, Options extends HasOneOptions<Columns, Related, Through, Source>>(this: {
@@ -773,7 +792,7 @@ interface BaseTableInstance<ColumnTypes> {
773
792
  new (): Related;
774
793
  }, options: Options): {
775
794
  type: 'hasMany';
776
- related: Related;
795
+ id: Related['id'] extends string ? Related['id'] : Related['table'] extends string ? Related['table'] : Related['name'];
777
796
  options: Options;
778
797
  };
779
798
  hasAndBelongsToMany<Columns extends Column.Shape.QueryInit, Related extends ORMTableInput, Options extends HasAndBelongsToManyOptions<Columns, Related>>(this: {
@@ -784,7 +803,7 @@ interface BaseTableInstance<ColumnTypes> {
784
803
  new (): Related;
785
804
  }, options: Options): {
786
805
  type: 'hasAndBelongsToMany';
787
- related: Related;
806
+ id: Related['id'] extends string ? Related['id'] : Related['table'] extends string ? Related['table'] : Related['name'];
788
807
  options: Options;
789
808
  };
790
809
  beforeQuery: BeforeHookMethod;
@@ -892,4 +911,4 @@ declare const createRepo: <T extends Query, Methods extends MethodsBase<T>>(tabl
892
911
  table: T["table"];
893
912
  shape: T["shape"];
894
913
  }>(q: Q) => Query & Q & MapMethods<T, Methods>) & T, Methods>;
895
- export { BaseMaterializedViewInstance, BaseTableClass, BaseTableInstance, BaseViewInstance, DefaultSelect, FromQuery, Insertable, MapMethods, MapQueryMethods, MethodsBase, ORMTableInput, OrchidORM, OrchidORMBundle, OrchidORMDbTables, OrchidORMDbViews, OrchidORMTables, OrchidORMViews, OrchidOrmParam, PickORMTableComputed, PickORMTableInputColumns, PickORMTableInputColumnsAndComputed, Queryable, Repo, Selectable, SetColumnsResult, Table, TableClass, TableClasses, TableInfo, TableQueryBuilder, Updatable, bundleOrchidORM, bundleOrchidORMTables, createBaseTable, createRepo, defineRls, makeOrchidOrmDbWithAdapter, orchidORMWithAdapter, setGrants };
914
+ export { BaseMaterializedViewInstance, BaseTableClass, BaseTableInstance, BaseViewInstance, DefaultSelect, FromQuery, Insertable, MapMethods, MapQueryMethods, MethodsBase, ORMTableInput, OrchidORM, OrchidORMBundle, OrchidORMDbTables, OrchidORMTables, OrchidOrmParam, PickORMTableComputed, PickORMTableInputColumns, PickORMTableInputColumnsAndComputed, Queryable, Repo, Selectable, SetColumnsResult, Table, TableClass, TableClasses, TableInfo, TableQueryBuilder, Updatable, bundleOrchidORM, bundleOrchidORMTables, createBaseTable, createRepo, defineRls, makeOrchidOrmDbWithAdapter, orchidORMWithAdapter, setGrants };
package/dist/index.js CHANGED
@@ -67,6 +67,8 @@ function createBaseTable({ schemaConfig = pqb_internal.defaultSchemaConfig, colu
67
67
  let instance = instances.get(this);
68
68
  if (!instance) {
69
69
  instance = new this();
70
+ const name = instance.table || instance.name;
71
+ if (instance.nameInDb === void 0 && name) instance.nameInDb = instance.snakeCase ? (0, pqb_internal.toSnakeCase)(name) : name;
70
72
  instances.set(this, instance);
71
73
  }
72
74
  return instance;
@@ -214,7 +216,7 @@ function joinHasRelation(baseQuery, joiningQuery, primaryKeys, foreignKeys, len)
214
216
  return q;
215
217
  }
216
218
  const addAutoForeignKey = (tableConfig, from, to, primaryKeys, foreignKeys, options, originalForeignKeys) => {
217
- const toTable = to.table;
219
+ const toTable = to.q.nameInDb || to.table;
218
220
  let fkeyOptions = options.foreignKey !== void 0 ? options.foreignKey : tableConfig.autoForeignKeys;
219
221
  if (!fkeyOptions) return;
220
222
  if (fkeyOptions === true) fkeyOptions = tableConfig.autoForeignKeys || pqb_internal.emptyObject;
@@ -228,7 +230,10 @@ const addAutoForeignKey = (tableConfig, from, to, primaryKeys, foreignKeys, opti
228
230
  if (typeof fkey.fnOrTable === "string") {
229
231
  fkeyTable = fkey.fnOrTable;
230
232
  fkeyColumn = getColumnKeyFromDbName(to, fkeyColumn);
231
- } else fkeyTable = fkey.fnOrTable().instance().table;
233
+ } else {
234
+ const instance = fkey.fnOrTable().instance();
235
+ fkeyTable = instance.nameInDb || instance.table;
236
+ }
232
237
  if (toTable === fkeyTable && pkey === fkeyColumn) return;
233
238
  }
234
239
  }
@@ -239,7 +244,13 @@ const addAutoForeignKey = (tableConfig, from, to, primaryKeys, foreignKeys, opti
239
244
  const sortedFkeys = [...foreignKeys].sort();
240
245
  for (const { references: refs } of constraints) {
241
246
  if (!refs) continue;
242
- if (refs.columns.length === sortedFkeys.length && refs.columns.every((column, i) => column === sortedFkeys[i]) && refs.foreignColumns.length === sortedPkeys.length && (typeof refs.fnOrTable === "string" ? refs.fnOrTable === toTable && refs.foreignColumns.every((column, i) => getColumnKeyFromDbName(to, column) === sortedPkeys[i]) : refs.fnOrTable().instance().table === toTable && refs.foreignColumns.every((column, i) => column === sortedPkeys[i]))) return;
247
+ let sameForeignTable = false;
248
+ if (typeof refs.fnOrTable === "string") sameForeignTable = refs.fnOrTable === toTable && refs.foreignColumns.every((column, i) => getColumnKeyFromDbName(to, column) === sortedPkeys[i]);
249
+ else {
250
+ const instance = refs.fnOrTable().instance();
251
+ sameForeignTable = (instance.nameInDb || instance.table) === toTable && refs.foreignColumns.every((column, i) => column === sortedPkeys[i]);
252
+ }
253
+ if (refs.columns.length === sortedFkeys.length && refs.columns.every((column, i) => column === sortedFkeys[i]) && refs.foreignColumns.length === sortedPkeys.length && sameForeignTable) return;
243
254
  }
244
255
  }
245
256
  (from.internal.tableData.constraints ??= []).push({
@@ -1479,6 +1490,7 @@ const assignTablesToOrm = (isTable, tables, result, adapter, qb, asyncStorage, c
1479
1490
  scopes: table.scopes,
1480
1491
  softDelete: table.softDelete,
1481
1492
  snakeCase: table.snakeCase,
1493
+ nameInDb: table.nameInDb,
1482
1494
  comment: table.comment,
1483
1495
  readOnly: isTable ? table.readOnly ? true : void 0 : table.materialized || table.readOnly !== false ? true : void 0,
1484
1496
  materialized: !isTable && table.materialized ? true : void 0,
@@ -1608,12 +1620,12 @@ const privateOrchidORMWithAdapter = ({ log, logger, autoPreparedStatements, noPr
1608
1620
  viewInstances = assignTablesToOrm(false, views, result.$views, adapter, qb, asyncStorage, commonOptions, schema);
1609
1621
  const tableDbNames = Object.values(tableInstances).map((table) => {
1610
1622
  const s = typeof table.schema === "function" ? table.schema() : table.schema;
1611
- return `${s ? s + "." : ""}${table.table}`;
1623
+ return `${s ? s + "." : ""}${table.nameInDb}`;
1612
1624
  });
1613
1625
  for (const key in views) {
1614
1626
  const view = viewInstances[key];
1615
1627
  const s = typeof view.schema === "function" ? view.schema() : view.schema;
1616
- const name = `${s ? s + "." : ""}${view.name}`;
1628
+ const name = `${s ? s + "." : ""}${view.nameInDb}`;
1617
1629
  if (tableDbNames.includes(name)) throw new Error(`Cannot configure both a table and a view for database relation ${name}`);
1618
1630
  }
1619
1631
  }