drizzle-orm 0.38.4-e36471e → 0.39.0-0cc153d

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.
Files changed (71) hide show
  1. package/alias.cjs.map +1 -1
  2. package/alias.d.cts +1 -1
  3. package/alias.d.ts +1 -1
  4. package/alias.js.map +1 -1
  5. package/d1/session.cjs +2 -2
  6. package/d1/session.cjs.map +1 -1
  7. package/d1/session.js +2 -2
  8. package/d1/session.js.map +1 -1
  9. package/mysql-core/db.cjs +3 -0
  10. package/mysql-core/db.cjs.map +1 -1
  11. package/mysql-core/db.js +3 -0
  12. package/mysql-core/db.js.map +1 -1
  13. package/mysql-core/dialect.cjs +22 -19
  14. package/mysql-core/dialect.cjs.map +1 -1
  15. package/mysql-core/dialect.d.cts +5 -2
  16. package/mysql-core/dialect.d.ts +5 -2
  17. package/mysql-core/dialect.js +25 -21
  18. package/mysql-core/dialect.js.map +1 -1
  19. package/package.json +49 -49
  20. package/pg-core/db.cjs +3 -0
  21. package/pg-core/db.cjs.map +1 -1
  22. package/pg-core/db.js +3 -0
  23. package/pg-core/db.js.map +1 -1
  24. package/pg-core/dialect.cjs +19 -7
  25. package/pg-core/dialect.cjs.map +1 -1
  26. package/pg-core/dialect.d.cts +5 -3
  27. package/pg-core/dialect.d.ts +5 -3
  28. package/pg-core/dialect.js +22 -9
  29. package/pg-core/dialect.js.map +1 -1
  30. package/relations.cjs +69 -71
  31. package/relations.cjs.map +1 -1
  32. package/relations.d.cts +79 -69
  33. package/relations.d.ts +79 -69
  34. package/relations.js +69 -73
  35. package/relations.js.map +1 -1
  36. package/sql/expressions/conditions.cjs.map +1 -1
  37. package/sql/expressions/conditions.d.cts +4 -4
  38. package/sql/expressions/conditions.d.ts +4 -4
  39. package/sql/expressions/conditions.js.map +1 -1
  40. package/sql/sql.cjs +22 -1
  41. package/sql/sql.cjs.map +1 -1
  42. package/sql/sql.js +23 -2
  43. package/sql/sql.js.map +1 -1
  44. package/sql-js/session.cjs +32 -69
  45. package/sql-js/session.cjs.map +1 -1
  46. package/sql-js/session.d.cts +3 -7
  47. package/sql-js/session.d.ts +3 -7
  48. package/sql-js/session.js +32 -69
  49. package/sql-js/session.js.map +1 -1
  50. package/sqlite-core/db.cjs +3 -0
  51. package/sqlite-core/db.cjs.map +1 -1
  52. package/sqlite-core/db.js +3 -0
  53. package/sqlite-core/db.js.map +1 -1
  54. package/sqlite-core/dialect.cjs +21 -18
  55. package/sqlite-core/dialect.cjs.map +1 -1
  56. package/sqlite-core/dialect.d.cts +5 -2
  57. package/sqlite-core/dialect.d.ts +5 -2
  58. package/sqlite-core/dialect.js +24 -20
  59. package/sqlite-core/dialect.js.map +1 -1
  60. package/sqlite-core/query-builders/query.cjs +3 -3
  61. package/sqlite-core/query-builders/query.cjs.map +1 -1
  62. package/sqlite-core/query-builders/query.js +3 -3
  63. package/sqlite-core/query-builders/query.js.map +1 -1
  64. package/table.cjs.map +1 -1
  65. package/table.d.cts +2 -2
  66. package/table.d.ts +2 -2
  67. package/table.js.map +1 -1
  68. package/version.cjs +1 -1
  69. package/version.d.cts +1 -1
  70. package/version.d.ts +1 -1
  71. package/version.js +1 -1
package/relations.d.ts CHANGED
@@ -2,9 +2,11 @@ import { type AnyTable, type InferModelFromColumns, Table } from "./table.js";
2
2
  import { type AnyColumn, Column } from "./column.js";
3
3
  import { entityKind } from "./entity.js";
4
4
  import { and, asc, between, desc, exists, ilike, inArray, isNotNull, isNull, like, not, notBetween, notExists, notIlike, notInArray, notLike, or } from "./sql/expressions/index.js";
5
- import { type Placeholder, SQL, sql, type SQLWrapper } from "./sql/sql.js";
6
- import { type Assume, type Equal, type Simplify, type ValueOrArray, type Writable } from "./utils.js";
7
- export declare class Relations<TSchema extends Record<string, unknown> = Record<string, unknown>, TTables extends Record<string, Table> = Record<string, Table>, TConfig extends RelationsBuilderConfig<TTables> = RelationsBuilderConfig<TTables>> {
5
+ import { type Placeholder, SQL, sql, type SQLWrapper, View } from "./sql/sql.js";
6
+ import type { Assume, Equal, Simplify, ValueOrArray, Writable } from "./utils.js";
7
+ export type FieldValue = Column | SQLWrapper | SQL.Aliased | SQL;
8
+ export type FieldSelection = Record<string, FieldValue>;
9
+ export declare class Relations<TSchema extends Record<string, unknown> = Record<string, unknown>, TTables extends Record<string, Table | View> = Record<string, Table | View>, TConfig extends RelationsBuilderConfig<TTables> = RelationsBuilderConfig<TTables>> {
8
10
  readonly schema: TSchema;
9
11
  readonly tables: TTables;
10
12
  readonly config: TConfig;
@@ -20,7 +22,7 @@ export type AnyRelations = Relations<Record<string, any>, Record<string, any>, R
20
22
  export declare abstract class Relation<TSourceTableName extends string = string, TTargetTableName extends string = string> {
21
23
  readonly targetTable: AnyTable<{
22
24
  name: TTargetTableName;
23
- }>;
25
+ }> | View<TTargetTableName>;
24
26
  static readonly [entityKind]: string;
25
27
  readonly $brand: 'RelationV2';
26
28
  fieldName: string;
@@ -31,35 +33,35 @@ export declare abstract class Relation<TSourceTableName extends string = string,
31
33
  tableName: TTargetTableName;
32
34
  }>[];
33
35
  alias: string | undefined;
34
- where: RelationsFilter<Record<string, Column>> | undefined;
36
+ where: RelationsFilter | undefined;
35
37
  sourceTable: AnyTable<{
36
38
  name: TSourceTableName;
37
- }>;
39
+ }> | View<TSourceTableName>;
38
40
  through?: {
39
- source: AnyColumn[];
40
- target: AnyColumn[];
41
+ source: RelationsBuilderColumnBase[];
42
+ target: RelationsBuilderColumnBase[];
41
43
  };
42
- throughTable?: Table;
44
+ throughTable?: Table | View;
43
45
  isReversed?: boolean;
44
46
  constructor(targetTable: AnyTable<{
45
47
  name: TTargetTableName;
46
- }>);
48
+ }> | View<TTargetTableName>);
47
49
  }
48
50
  export declare class One<TSourceTableName extends string, TTargetTableName extends string, TOptional extends boolean = boolean> extends Relation<TSourceTableName, TTargetTableName> {
49
51
  static readonly [entityKind]: string;
50
52
  protected $relationBrand: 'OneV2';
51
53
  readonly optional: TOptional;
52
- constructor(targetTable: AnyTable<{
54
+ constructor(tables: Record<string, Table | View>, targetTable: AnyTable<{
53
55
  name: TTargetTableName;
54
- }>, config: AnyOneConfig | undefined);
56
+ }> | View<TTargetTableName>, config: AnyOneConfig | undefined);
55
57
  }
56
58
  export declare class Many<TSourceTableName extends string, TTargetTableName extends string> extends Relation<TSourceTableName, TTargetTableName> {
57
59
  readonly config: AnyManyConfig | undefined;
58
60
  static readonly [entityKind]: string;
59
61
  protected $relationBrand: 'ManyV2';
60
- constructor(targetTable: AnyTable<{
62
+ constructor(tables: Record<string, Table | View>, targetTable: AnyTable<{
61
63
  name: TTargetTableName;
62
- }>, config: AnyManyConfig | undefined);
64
+ }> | View<TTargetTableName>, config: AnyManyConfig | undefined);
63
65
  }
64
66
  export declare abstract class AggregatedField<T = unknown> implements SQLWrapper<T> {
65
67
  static readonly [entityKind]: string;
@@ -67,8 +69,8 @@ export declare abstract class AggregatedField<T = unknown> implements SQLWrapper
67
69
  readonly _: {
68
70
  readonly data: T;
69
71
  };
70
- protected table: Table | undefined;
71
- onTable(table: Table): this;
72
+ protected table: Table | View | undefined;
73
+ onTable(table: Table | View): this;
72
74
  abstract getSQL(): SQL<T>;
73
75
  }
74
76
  export declare class Count extends AggregatedField<number> {
@@ -117,7 +119,7 @@ export declare function getOrderByOperators(): {
117
119
  desc: typeof desc;
118
120
  };
119
121
  export type OrderByOperators = ReturnType<typeof getOrderByOperators>;
120
- export type FindTableInRelationalConfig<TSchema extends TablesRelationalConfig, TTargetTable extends Table, TTableName extends string = TTargetTable['_']['name']> = ExtractObjectValues<{
122
+ export type FindTableInRelationalConfig<TSchema extends TablesRelationalConfig, TTargetTable extends Table | View, TTableName extends string = TTargetTable['_']['name']> = ExtractObjectValues<{
121
123
  [K in keyof TSchema as TSchema[K]['tsName'] extends TTableName ? K : never]: TSchema[K];
122
124
  }>;
123
125
  export type SQLOperator = {
@@ -130,23 +132,22 @@ export type DBQueryConfig<TRelationType extends 'one' | 'many' = 'one' | 'many',
130
132
  with?: {
131
133
  [K in keyof TTableConfig['relations']]?: boolean | (TTableConfig['relations'][K] extends Relation ? DBQueryConfig<TTableConfig['relations'][K] extends One<string, string> ? 'one' : 'many', TSchema, FindTableInRelationalConfig<TSchema, TTableConfig['relations'][K]['targetTable']>> : never) | undefined;
132
134
  } | undefined;
133
- extras?: Record<string, SQLWrapper> | ((table: Simplify<AnyTable<TTableConfig> & TTableConfig['columns']>, operators: SQLOperator) => Record<string, SQLWrapper>) | undefined;
134
- offset?: number | Placeholder | undefined;
135
- where?: RelationsFilter<TTableConfig['columns']> | undefined;
135
+ extras?: Record<string, SQLWrapper> | ((table: TTableConfig['table'], operators: SQLOperator) => Record<string, SQLWrapper>) | undefined;
136
+ where?: RelationsFilter<TTableConfig['table']> | undefined;
136
137
  orderBy?: {
137
138
  [K in keyof TTableConfig['columns']]?: 'asc' | 'desc' | undefined;
138
- } | ((fields: Simplify<AnyTable<TTableConfig> & TTableConfig['columns']>, operators: OrderByOperators) => ValueOrArray<AnyColumn | SQL>) | undefined;
139
+ } | ((table: TTableConfig['table'], operators: OrderByOperators) => ValueOrArray<AnyColumn | SQL>) | undefined;
140
+ offset?: number | Placeholder | undefined;
139
141
  } & (TRelationType extends 'many' ? {
140
142
  limit?: number | Placeholder | undefined;
141
143
  } : {});
142
144
  export interface TableRelationalConfig {
143
- table: Table;
145
+ table: Table | View;
144
146
  tsName: string;
145
147
  dbName: string;
146
- columns: Record<string, Column>;
147
- relations: Record<string, RelationsBuilderEntry>;
148
- primaryKey: AnyColumn[];
149
148
  schema: string | undefined;
149
+ columns: FieldSelection;
150
+ relations: Record<string, RelationsBuilderEntry>;
150
151
  }
151
152
  export type TablesRelationalConfig = Record<string, TableRelationalConfig>;
152
153
  export interface RelationalSchemaConfig<TTablesConfig extends TablesRelationalConfig> {
@@ -157,15 +158,14 @@ export interface RelationalSchemaConfig<TTablesConfig extends TablesRelationalCo
157
158
  type NonUndefinedRecord<TRecord extends Record<string, any>> = {
158
159
  [K in keyof TRecord as K extends undefined ? never : K]: TRecord[K];
159
160
  };
160
- export type ExtractTablesWithRelations<TRelations extends Relations, TTables extends Record<string, Table> = TRelations['tables']> = {
161
+ export type ExtractTablesWithRelations<TRelations extends Relations, TTables extends Record<string, Table | View> = TRelations['tables']> = {
161
162
  [K in keyof TTables]: {
162
163
  table: TTables[K];
163
164
  tsName: K & string;
164
165
  dbName: TTables[K]['_']['name'];
165
- columns: TTables[K]['_']['columns'];
166
+ columns: TTables[K] extends Table ? TTables[K]['_']['columns'] : Assume<TTables[K], View>['_']['selectedFields'];
166
167
  relations: K extends keyof TRelations['config'] ? TRelations['config'][K] extends Record<string, any> ? NonUndefinedRecord<TRelations['config'][K]> : Record<string, never> : Record<string, never>;
167
- primaryKey: AnyColumn[];
168
- schema: TTables[K]['_']['schema'];
168
+ schema: TTables[K] extends Table ? TTables[K]['_']['schema'] : string | undefined;
169
169
  };
170
170
  };
171
171
  export type ReturnTypeOrValue<T> = T extends (...args: any[]) => infer R ? R : T;
@@ -178,11 +178,20 @@ export type NonUndefinedKeysOnly<T> = ExtractObjectValues<{
178
178
  export type TruthyKeysOnly<T> = ExtractObjectValues<{
179
179
  [K in keyof T as T[K] extends undefined | false ? never : K]: K;
180
180
  }> & keyof T;
181
- export type BuildQueryResult<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig, TFullSelection extends true | Record<string, unknown>> = Equal<TFullSelection, true> extends true ? InferModelFromColumns<TTableConfig['columns']> : TFullSelection extends Record<string, unknown> ? Simplify<(TFullSelection['columns'] extends Record<string, unknown> ? InferModelFromColumns<{
182
- [K in Equal<Exclude<TFullSelection['columns'][keyof TFullSelection['columns'] & keyof TTableConfig['columns']], undefined>, false> extends true ? Exclude<keyof TTableConfig['columns'], NonUndefinedKeysOnly<TFullSelection['columns']>> : {
183
- [K in keyof TFullSelection['columns']]: Equal<TFullSelection['columns'][K], true> extends true ? K : never;
184
- }[keyof TFullSelection['columns']] & keyof TTableConfig['columns']]: TTableConfig['columns'][K];
185
- }> : InferModelFromColumns<TTableConfig['columns']>) & (TFullSelection['extras'] extends Record<string, unknown> | ((...args: any[]) => Record<string, unknown>) ? {
181
+ export type ExtractSelectionColumns<TSelection extends Record<string, unknown>> = {
182
+ [K in keyof TSelection as TSelection[K] extends Column ? K : never]: TSelection[K];
183
+ };
184
+ export type ExtractSelectionNonColumns<TSelection extends Record<string, unknown>> = {
185
+ [K in keyof TSelection as TSelection[K] extends Column ? never : K]: TSelection[K];
186
+ };
187
+ export type InferRelationalQueryTableResult<TRawSelection extends Record<string, unknown>, TSelectedFields extends Record<string, unknown> | undefined = undefined, TFilteredSelection extends Record<string, unknown> = TSelectedFields extends undefined ? TRawSelection : {
188
+ [K in Equal<Exclude<TSelectedFields[keyof TSelectedFields & keyof TRawSelection], undefined>, false> extends true ? Exclude<keyof TRawSelection, NonUndefinedKeysOnly<TSelectedFields>> : {
189
+ [K in keyof TSelectedFields]: Equal<TSelectedFields[K], true> extends true ? K : never;
190
+ }[keyof TSelectedFields] & keyof TRawSelection]: TRawSelection[K];
191
+ }, TColumns extends Record<string, unknown> = ExtractSelectionColumns<TFilteredSelection>, TSubqueries extends Record<string, unknown> = ExtractSelectionNonColumns<TFilteredSelection>> = (TColumns extends Record<string, Column> ? InferModelFromColumns<TColumns> : {}) & (TSubqueries extends Record<string, Exclude<FieldValue, Column>> ? {
192
+ [K in keyof TSubqueries as TSubqueries[K] extends FieldValue ? K : never]: ReturnType<Assume<TSubqueries[K], SQLWrapper>['getSQL']>['_']['type'];
193
+ } : {});
194
+ export type BuildQueryResult<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig, TFullSelection extends true | Record<string, unknown>> = Equal<TFullSelection, true> extends true ? Simplify<InferRelationalQueryTableResult<TTableConfig['columns']>> : TFullSelection extends Record<string, unknown> ? Simplify<(InferRelationalQueryTableResult<TTableConfig['columns'], TFullSelection['columns'] extends Record<string, unknown> ? TFullSelection['columns'] : undefined>) & (TFullSelection['extras'] extends Record<string, unknown> | ((...args: any[]) => Record<string, unknown>) ? {
186
195
  [K in NonUndefinedKeysOnly<ReturnTypeOrValue<TFullSelection['extras']>>]: ReturnType<Assume<ReturnTypeOrValue<TFullSelection['extras']>[K], SQLWrapper>['getSQL']>['_']['type'];
187
196
  } : {}) & (TFullSelection['with'] extends Record<string, unknown> ? BuildRelationResult<TSchema, TFullSelection['with'], TTableConfig['relations']> : {})> : never;
188
197
  export interface NormalizedRelation {
@@ -208,11 +217,11 @@ export declare class RelationsBuilderTable<TTableName extends string = string> i
208
217
  readonly name: TTableName;
209
218
  readonly table: AnyTable<{
210
219
  name: TTableName;
211
- }>;
220
+ }> | View<TTableName>;
212
221
  };
213
222
  constructor(table: AnyTable<{
214
223
  name: TTableName;
215
- }>);
224
+ }> | View<TTableName>, key: string);
216
225
  getSQL(): SQL;
217
226
  }
218
227
  export type RelationsBuilderColumnConfig<TTableName extends string = string, TData = unknown> = {
@@ -220,8 +229,9 @@ export type RelationsBuilderColumnConfig<TTableName extends string = string, TDa
220
229
  readonly data: TData;
221
230
  readonly column: AnyColumn<{
222
231
  tableName: TTableName;
223
- }>;
232
+ }> | SQL<TData> | SQLWrapper<TData> | SQL.Aliased<TData>;
224
233
  readonly through?: RelationsBuilderColumnBase;
234
+ readonly key: string;
225
235
  };
226
236
  export type RelationsBuilderColumnBase<TTableName extends string = string, TData = unknown> = {
227
237
  _: RelationsBuilderColumnConfig<TTableName, TData>;
@@ -233,12 +243,13 @@ export declare class RelationsBuilderColumn<TTableName extends string = string,
233
243
  readonly data: TData;
234
244
  readonly column: AnyColumn<{
235
245
  tableName: TTableName;
236
- }>;
246
+ }> | SQL<TData> | SQLWrapper<TData> | SQL.Aliased<TData>;
237
247
  readonly through?: RelationsBuilderColumnBase;
248
+ readonly key: string;
238
249
  };
239
250
  constructor(column: AnyColumn<{
240
251
  tableName: TTableName;
241
- }>, through?: RelationsBuilderColumn);
252
+ }> | SQL<TData> | SQLWrapper<TData> | SQL.Aliased<TData>, tableName: TTableName, key: string, through?: RelationsBuilderColumn);
242
253
  through(column: RelationsBuilderColumn): RelationsBuilderColumnBase<TTableName, TData>;
243
254
  getSQL(): SQL;
244
255
  }
@@ -260,42 +271,40 @@ export type RelationFieldsFilterInternals<T> = {
260
271
  NOT?: RelationsFieldFilter<T>;
261
272
  OR?: RelationsFieldFilter<T>[];
262
273
  };
263
- export type RelationsFieldFilter<T> = RelationFieldsFilterInternals<T> | (T extends Record<string, any> ? never : T);
264
- export type RelationsFilter<TColumns extends Record<string, Column>> = {
265
- [K in keyof TColumns]?: RelationsFieldFilter<TColumns[K]['_']['data']>;
274
+ export type RelationsFieldFilter<T = unknown> = RelationFieldsFilterInternals<T> | (unknown extends T ? never : T extends object ? never : T);
275
+ export type RelationsFilter<TTable extends Table | View = Table | View, TColumns extends FieldSelection = TTable extends View ? Assume<TTable['_']['selectedFields'], FieldSelection> : Assume<TTable, Table>['_']['columns']> = {
276
+ [K in keyof TColumns]?: TColumns[K] extends Column ? RelationsFieldFilter<TColumns[K]['_']['data']> : RelationsFieldFilter<unknown>;
266
277
  } & {
267
- OR?: RelationsFilter<TColumns>[];
268
- NOT?: RelationsFilter<TColumns>;
269
- RAW?: (table: Simplify<AnyTable<{
270
- columns: TColumns;
271
- }> & TColumns>, operators: Operators) => SQL;
278
+ OR?: RelationsFilter<TTable, TColumns>[];
279
+ NOT?: RelationsFilter<TTable, TColumns>;
280
+ RAW?: (table: TTable, operators: Operators) => SQL;
272
281
  };
273
- export interface OneConfig<TSchema extends Record<string, Table>, TSourceColumns extends Readonly<[RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]]> | Readonly<RelationsBuilderColumnBase>, TTargetTableName extends string, TOptional extends boolean> {
282
+ export interface OneConfig<TSchema extends Record<string, Table | View>, TSourceColumns extends Readonly<[RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]]> | Readonly<RelationsBuilderColumnBase>, TTargetTableName extends string, TOptional extends boolean> {
274
283
  from?: TSourceColumns | Writable<TSourceColumns>;
275
284
  to?: TSourceColumns extends [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]] ? {
276
285
  [K in keyof TSourceColumns]: RelationsBuilderColumnBase<TTargetTableName>;
277
286
  } : RelationsBuilderColumnBase<TTargetTableName>;
278
- where?: TSourceColumns extends [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]] ? RelationsFilter<TSchema[TSourceColumns[number]['_']['tableName']]['_']['columns']> : RelationsFilter<TSchema[Assume<TSourceColumns, RelationsBuilderColumnBase>['_']['tableName']]['_']['columns']>;
287
+ where?: TSourceColumns extends [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]] ? RelationsFilter<TSchema[TSourceColumns[number]['_']['tableName']]> : RelationsFilter<TSchema[Assume<TSourceColumns, RelationsBuilderColumnBase>['_']['tableName']]>;
279
288
  optional?: TOptional;
280
289
  alias?: string;
281
290
  }
282
- export type AnyOneConfig = OneConfig<Record<string, Table>, Readonly<[RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]] | RelationsBuilderColumnBase<string, unknown>>, string, boolean>;
283
- export interface ManyConfig<TSchema extends Record<string, Table>, TSourceColumns extends Readonly<[RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]]> | Readonly<RelationsBuilderColumnBase>, TTargetTableName extends string> {
291
+ export type AnyOneConfig = OneConfig<Record<string, Table | View>, Readonly<[RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]] | RelationsBuilderColumnBase<string, unknown>>, string, boolean>;
292
+ export interface ManyConfig<TSchema extends Record<string, Table | View>, TSourceColumns extends Readonly<[RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]]> | Readonly<RelationsBuilderColumnBase>, TTargetTableName extends string> {
284
293
  from?: TSourceColumns;
285
294
  to?: TSourceColumns extends [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]] ? {
286
295
  [K in keyof TSourceColumns]: RelationsBuilderColumnBase<TTargetTableName>;
287
296
  } : RelationsBuilderColumnBase<TTargetTableName>;
288
- where?: TSourceColumns extends [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]] ? RelationsFilter<TSchema[TSourceColumns[number]['_']['tableName']]['_']['columns']> : RelationsFilter<TSchema[Assume<TSourceColumns, RelationsBuilderColumnBase>['_']['tableName']]['_']['columns']>;
297
+ where?: TSourceColumns extends [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]] ? RelationsFilter<TSchema[TSourceColumns[number]['_']['tableName']]> : RelationsFilter<TSchema[Assume<TSourceColumns, RelationsBuilderColumnBase>['_']['tableName']]>;
289
298
  alias?: string;
290
299
  }
291
- export type AnyManyConfig = ManyConfig<Record<string, Table>, Readonly<[RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]]> | Readonly<RelationsBuilderColumnBase>, string>;
292
- export interface OneFn<TTables extends Record<string, Table>, TTargetTableName extends string> {
300
+ export type AnyManyConfig = ManyConfig<Record<string, Table | View>, Readonly<[RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]]> | Readonly<RelationsBuilderColumnBase>, string>;
301
+ export interface OneFn<TTables extends Record<string, Table | View>, TTargetTableName extends string> {
293
302
  <TSourceColumns extends Readonly<[RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]]> | RelationsBuilderColumnBase = any, TOptional extends boolean = true>(config?: OneConfig<TTables, TSourceColumns, TTargetTableName, TOptional>): One<TSourceColumns extends [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]] ? TSourceColumns[number]['_']['tableName'] : Assume<TSourceColumns, RelationsBuilderColumnBase>['_']['tableName'], TTargetTableName, TOptional>;
294
303
  }
295
- export interface ManyFn<TTables extends Record<string, Table>, TTargetTableName extends string> {
304
+ export interface ManyFn<TTables extends Record<string, Table | View>, TTargetTableName extends string> {
296
305
  <TSourceColumns extends Readonly<[RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]]> | RelationsBuilderColumnBase = any>(config?: ManyConfig<TTables, TSourceColumns, TTargetTableName>): Many<TSourceColumns extends [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]] ? TSourceColumns[number]['_']['tableName'] : Assume<TSourceColumns, RelationsBuilderColumnBase>['_']['tableName'], TTargetTableName>;
297
306
  }
298
- export declare class RelationsHelperStatic<TTables extends Record<string, Table>> {
307
+ export declare class RelationsHelperStatic<TTables extends Record<string, Table | View>> {
299
308
  static readonly [entityKind]: string;
300
309
  readonly $brand: 'RelationsHelperStatic';
301
310
  readonly _: {
@@ -312,37 +321,37 @@ export declare class RelationsHelperStatic<TTables extends Record<string, Table>
312
321
  count(): Count;
313
322
  };
314
323
  }
315
- export type RelationsBuilder<TSchema extends Record<string, Table>> = {
324
+ export type RelationsBuilder<TSchema extends Record<string, Table | View>> = {
316
325
  [TTableName in keyof TSchema & string]: {
317
- [TColumnName in keyof TSchema[TTableName]['_']['columns']]: RelationsBuilderColumn<TTableName, TSchema[TTableName]['_']['columns'][TColumnName]['_']['data']>;
326
+ [TColumnName in keyof (TSchema[TTableName] extends Table ? TSchema[TTableName]['_']['columns'] : Assume<TSchema[TTableName], View>['_']['selectedFields'])]: RelationsBuilderColumn<TTableName, (TSchema[TTableName] extends Table ? TSchema[TTableName]['_']['columns'] : Assume<Assume<TSchema[TTableName], View>['_']['selectedFields'], FieldSelection>)[TColumnName] extends infer Field ? Field extends Column ? Field['_']['data'] : Field extends SQLWrapper<infer Data> | SQL<infer Data> | SQL.Aliased<infer Data> ? Data : never : never>;
318
327
  } & RelationsBuilderTable<TTableName>;
319
328
  } & RelationsHelperStatic<TSchema>;
320
- export type RelationsBuilderConfig<TTables extends Record<string, Table>> = {
329
+ export type RelationsBuilderConfig<TTables extends Record<string, Table | View>> = {
321
330
  [TTableName in keyof TTables & string]?: Record<string, RelationsBuilderEntry<TTables, TTableName>>;
322
331
  };
323
- export type RelationsBuilderEntry<TTables extends Record<string, Table> = Record<string, Table>, TSourceTableName extends string = string> = Relation<TSourceTableName, keyof TTables & string> | AggregatedField<any>;
332
+ export type RelationsBuilderEntry<TTables extends Record<string, Table | View> = Record<string, Table | View>, TSourceTableName extends string = string> = Relation<TSourceTableName, keyof TTables & string> | AggregatedField<any>;
324
333
  export type ExtractTablesFromSchema<TSchema extends Record<string, unknown>> = {
325
- [K in keyof TSchema as TSchema[K] extends Table ? K : never]: TSchema[K] extends Table ? TSchema[K] : never;
334
+ [K in keyof TSchema as TSchema[K] extends Table | View ? K : never]: TSchema[K] extends Table | View ? TSchema[K] : never;
326
335
  };
327
- export declare function createRelationsHelper<TSchema extends Record<string, unknown>, TTables extends Record<string, Table>>(schema: TSchema): RelationsBuilder<TTables>;
328
- export declare function defineRelations<TSchema extends Record<string, unknown>, TConfig extends RelationsBuilderConfig<TTables>, TTables extends Record<string, Table> = ExtractTablesFromSchema<TSchema>>(schema: TSchema, relations: (helpers: RelationsBuilder<TTables>) => TConfig): Relations<TSchema, TTables, TConfig>;
336
+ export declare function createRelationsHelper<TSchema extends Record<string, unknown>, TTables extends Record<string, Table | View>>(schema: TSchema): RelationsBuilder<TTables>;
337
+ export declare function defineRelations<TSchema extends Record<string, unknown>, TConfig extends RelationsBuilderConfig<TTables>, TTables extends Record<string, Table | View> = ExtractTablesFromSchema<TSchema>>(schema: TSchema, relations: (helpers: RelationsBuilder<TTables>) => TConfig): Relations<TSchema, TTables, TConfig>;
329
338
  export type WithContainer<TRelatedTables extends Record<string, Table> = Record<string, Table>> = {
330
339
  with?: {
331
340
  [K in keyof TRelatedTables]?: boolean | DBQueryConfig;
332
341
  };
333
342
  };
334
343
  export type ColumnWithTSName = {
335
- column: Column;
344
+ column: Column | SQL | SQLWrapper | SQL.Aliased;
336
345
  tsName: string;
337
346
  };
338
- export type RelationsOrder<TColumns extends Record<string, Column>> = {
347
+ export type RelationsOrder<TColumns extends FieldSelection> = {
339
348
  [K in keyof TColumns]?: 'asc' | 'desc';
340
349
  };
341
350
  export type OrderBy = Exclude<DBQueryConfig['orderBy'], undefined>;
342
351
  export type Extras = Exclude<DBQueryConfig['extras'], undefined>;
343
- export declare function relationsFilterToSQL(table: Table, filter: RelationsFilter<Record<string, Column>>): SQL | undefined;
344
- export declare function relationsOrderToSQL(table: Table, orders: OrderBy): SQL | undefined;
345
- export declare function relationExtrasToSQL(table: Table, extras: Extras): {
352
+ export declare function relationsFilterToSQL(table: Table | View, filter: RelationsFilter): SQL | undefined;
353
+ export declare function relationsOrderToSQL(table: Table | View, orders: OrderBy): SQL | undefined;
354
+ export declare function relationExtrasToSQL(table: Table | View, extras: Extras): {
346
355
  sql: SQL<unknown> | undefined;
347
356
  selection: {
348
357
  key: string;
@@ -356,5 +365,6 @@ export type BuiltRelationFilters = {
356
365
  filter?: SQL;
357
366
  joinCondition?: SQL;
358
367
  };
359
- export declare function relationToSQL(relation: Relation, sourceTable: Table, targetTable: Table, throughTable?: Table): BuiltRelationFilters;
368
+ export declare function relationToSQL(relation: Relation, sourceTable: Table | View, targetTable: Table | View, throughTable?: Table | View): BuiltRelationFilters;
369
+ export declare function getTableAsAliasSQL(table: Table | View): SQL<unknown>;
360
370
  export {};