drizzle-orm 0.39.0-19ccabb → 0.39.0-563f370
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/alias.cjs.map +1 -1
- package/alias.d.cts +1 -1
- package/alias.d.ts +1 -1
- package/alias.js.map +1 -1
- package/mysql-core/dialect.cjs +22 -19
- package/mysql-core/dialect.cjs.map +1 -1
- package/mysql-core/dialect.d.cts +5 -2
- package/mysql-core/dialect.d.ts +5 -2
- package/mysql-core/dialect.js +25 -21
- package/mysql-core/dialect.js.map +1 -1
- package/package.json +1 -1
- package/pg-core/dialect.cjs +19 -7
- package/pg-core/dialect.cjs.map +1 -1
- package/pg-core/dialect.d.cts +5 -3
- package/pg-core/dialect.d.ts +5 -3
- package/pg-core/dialect.js +22 -9
- package/pg-core/dialect.js.map +1 -1
- package/relations.cjs +69 -71
- package/relations.cjs.map +1 -1
- package/relations.d.cts +79 -69
- package/relations.d.ts +79 -69
- package/relations.js +69 -73
- package/relations.js.map +1 -1
- package/sql/expressions/conditions.cjs.map +1 -1
- package/sql/expressions/conditions.d.cts +4 -4
- package/sql/expressions/conditions.d.ts +4 -4
- package/sql/expressions/conditions.js.map +1 -1
- package/sql/sql.cjs +22 -1
- package/sql/sql.cjs.map +1 -1
- package/sql/sql.js +23 -2
- package/sql/sql.js.map +1 -1
- package/sqlite-core/dialect.cjs +21 -18
- package/sqlite-core/dialect.cjs.map +1 -1
- package/sqlite-core/dialect.d.cts +5 -2
- package/sqlite-core/dialect.d.ts +5 -2
- package/sqlite-core/dialect.js +24 -20
- package/sqlite-core/dialect.js.map +1 -1
- package/table.cjs.map +1 -1
- package/table.d.cts +2 -2
- package/table.d.ts +2 -2
- package/table.js.map +1 -1
- package/version.cjs +1 -1
- package/version.d.cts +1 -1
- package/version.d.ts +1 -1
- 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 {
|
|
7
|
-
export
|
|
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
|
|
36
|
+
where: RelationsFilter | undefined;
|
|
35
37
|
sourceTable: AnyTable<{
|
|
36
38
|
name: TSourceTableName;
|
|
37
|
-
}>;
|
|
39
|
+
}> | View<TSourceTableName>;
|
|
38
40
|
through?: {
|
|
39
|
-
source:
|
|
40
|
-
target:
|
|
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:
|
|
134
|
-
|
|
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
|
-
} | ((
|
|
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
|
-
|
|
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
|
|
182
|
-
[K in
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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
|
|
264
|
-
export type RelationsFilter<TColumns extends
|
|
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:
|
|
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']]
|
|
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']]
|
|
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
|
|
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
|
|
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 {};
|