orchid-orm 1.59.3 → 1.59.5
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 +89 -97
- package/dist/index.js +20 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +20 -8
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Column, TableData, ColumnsShape, Query, SelectableFromShape, CreateManyMethodsNames,
|
|
1
|
+
import { Column, TableData, ColumnsShape, Query, SelectableFromShape, CreateManyMethodsNames, QueryHasWhere, RelationConfigBase, QueryManyTake, QueryManyTakeOptional, EmptyObject, CreateData, UpdateData, WhereArg, CreateMethodsNames, MaybeArray, JoinQueryMethod, DeleteMethodsNames, Db, IsolationLevel, TransactionOptions, AfterCommitStandaloneHook, AdapterBase, FromArg, FromResult, DbSharedOptions, ShapeColumnPrimaryKeys, ShapeUniqueColumns, TableDataItemsUniqueColumns, TableDataItemsUniqueColumnTuples, UniqueConstraints, TableDataItemsUniqueConstraints, ComputedColumnsFromOptions, MapTableScopesOption, TableDataItem, ComputedOptionsFactory, RecordUnknown, ShallowSimplify, ComputedOptionsConfig, QueryOrExpression, QueryData, IsQuery, TableDataFn, DbTableOptionScopes, QueryScopes, ColumnSchemaConfig, StaticSQLArgs, RawSql, DynamicSQLArg, DynamicRawSQL, DefaultSchemaConfig, DefaultColumnTypes, QueryBeforeHookInternal, QueryAfterHook, AfterHook, MergeQuery, QueryReturnType } from 'pqb';
|
|
2
2
|
export * from 'pqb';
|
|
3
3
|
|
|
4
4
|
interface RelationRefsOptions<Column extends PropertyKey = string, Shape extends Column.Shape.QueryInit = Column.Shape.QueryInit> {
|
|
@@ -20,36 +20,27 @@ interface HasOne extends RelationThunkBase {
|
|
|
20
20
|
interface RelationHasOneThroughOptions<Through extends string, Source extends string> extends RelationThroughOptions<Through, Source> {
|
|
21
21
|
required?: boolean;
|
|
22
22
|
}
|
|
23
|
-
type HasOneOptions<Columns extends Column.Shape.QueryInit = Column.Shape.QueryInit, Related extends
|
|
24
|
-
type HasOneParams<T extends RelationConfigSelf,
|
|
25
|
-
[Name in
|
|
26
|
-
} :
|
|
27
|
-
type
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
type HasOneQuery<T extends RelationConfigSelf, Name extends string, TableQuery extends Query> = T['relations'][Name]['options'] extends RelationThroughOptions ? HasOneQueryThrough<T, Name, TableQuery> : {
|
|
37
|
-
[K in keyof TableQuery]: K extends 'meta' ? Omit<TableQuery['meta'], 'selectable'> & {
|
|
38
|
-
as: Name;
|
|
39
|
-
defaults: HasOnePopulate<T, Name>;
|
|
40
|
-
hasWhere: true;
|
|
41
|
-
selectable: SelectableFromShape<TableQuery['shape'], Name>;
|
|
42
|
-
} : K extends 'join' ? RelJoin : K extends CreateManyMethodsNames ? never : TableQuery[K];
|
|
43
|
-
};
|
|
44
|
-
interface HasOneInfo<T extends RelationConfigSelf, Name extends string, Rel extends HasOne, Q extends Query, CD = T['relations'][Name]['options'] extends RelationThroughOptions ? CreateData<Q> : CreateData<AddQueryDefaults<Q, HasOnePopulate<T, Name>>>> extends RelationConfigBase {
|
|
23
|
+
type HasOneOptions<Columns extends Column.Shape.QueryInit = Column.Shape.QueryInit, Related extends ORMTableInput = ORMTableInput, Through extends string = string, Source extends string = string> = RelationRefsOptions<keyof Columns, Related['columns']['shape']> | RelationHasOneThroughOptions<Through, Source>;
|
|
24
|
+
type HasOneParams<T extends RelationConfigSelf, Options> = Options extends RelationRefsOptions ? {
|
|
25
|
+
[Name in Options['columns'][number]]: T['columns']['shape'][Name]['type'];
|
|
26
|
+
} : Options extends RelationThroughOptions ? RelationConfigParams<T, T['relations'][Options['through']]> : never;
|
|
27
|
+
type HasOneQueryThrough<Name extends string, TableQuery extends Query> = {
|
|
28
|
+
[K in keyof TableQuery]: K extends '__selectable' ? SelectableFromShape<TableQuery['shape'], Name> : K extends '__as' ? Name : K extends CreateMethodsNames ? never : TableQuery[K];
|
|
29
|
+
} & QueryHasWhere & HasRelJoin;
|
|
30
|
+
type HasOneQuery<T extends RelationConfigSelf, Name extends string, TableQuery extends Query> = T['relations'][Name]['options'] extends RelationRefsOptions ? {
|
|
31
|
+
[K in keyof TableQuery]: K extends '__defaults' ? {
|
|
32
|
+
[K in keyof TableQuery['__defaults'] | T['relations'][Name]['options']['references'][number]]: true;
|
|
33
|
+
} : K extends '__selectable' ? SelectableFromShape<TableQuery['shape'], Name> : K extends '__as' ? Name : K extends CreateManyMethodsNames ? never : TableQuery[K];
|
|
34
|
+
} & QueryHasWhere & HasRelJoin : HasOneQueryThrough<Name, TableQuery>;
|
|
35
|
+
interface HasOneInfo<T extends RelationConfigSelf, Name extends string, Rel extends HasOne, Q extends Query> extends RelationConfigBase {
|
|
45
36
|
returnsOne: true;
|
|
46
37
|
query: Q;
|
|
47
|
-
params: HasOneParams<T, Rel>;
|
|
48
|
-
maybeSingle: T['relations'][Name]['options']['required'] extends true ?
|
|
38
|
+
params: HasOneParams<T, Rel['options']>;
|
|
39
|
+
maybeSingle: T['relations'][Name]['options']['required'] extends true ? QueryManyTake<Q> : QueryManyTakeOptional<Q>;
|
|
49
40
|
omitForeignKeyInCreate: never;
|
|
50
41
|
optionalDataForCreate: T['relations'][Name]['options'] extends RelationThroughOptions ? EmptyObject : {
|
|
51
42
|
[P in Name]?: RelationToOneDataForCreate<{
|
|
52
|
-
nestedCreateQuery:
|
|
43
|
+
nestedCreateQuery: CreateData<Q>;
|
|
53
44
|
table: Q;
|
|
54
45
|
}>;
|
|
55
46
|
};
|
|
@@ -72,10 +63,10 @@ interface HasOneInfo<T extends RelationConfigSelf, Name extends string, Rel exte
|
|
|
72
63
|
} | {
|
|
73
64
|
upsert: {
|
|
74
65
|
update: UpdateData<Q>;
|
|
75
|
-
create:
|
|
66
|
+
create: CreateData<Q> | (() => CreateData<Q>);
|
|
76
67
|
};
|
|
77
68
|
} | {
|
|
78
|
-
create:
|
|
69
|
+
create: CreateData<Q>;
|
|
79
70
|
};
|
|
80
71
|
}
|
|
81
72
|
|
|
@@ -83,27 +74,24 @@ interface HasMany extends RelationThunkBase {
|
|
|
83
74
|
type: 'hasMany';
|
|
84
75
|
options: HasOneOptions;
|
|
85
76
|
}
|
|
86
|
-
type HasManyQuery<T extends RelationConfigSelf, Name extends string, TableQuery extends Query> = T['relations'][Name]['options'] extends
|
|
87
|
-
[K in keyof TableQuery]: K extends '
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
selectable: SelectableFromShape<TableQuery['shape'], Name>;
|
|
92
|
-
} : K extends 'join' ? RelJoin : TableQuery[K];
|
|
93
|
-
};
|
|
77
|
+
type HasManyQuery<T extends RelationConfigSelf, Name extends string, TableQuery extends Query> = T['relations'][Name]['options'] extends RelationRefsOptions ? {
|
|
78
|
+
[K in keyof TableQuery]: K extends '__defaults' ? {
|
|
79
|
+
[K in keyof TableQuery['__defaults'] | T['relations'][Name]['options']['references'][number]]: true;
|
|
80
|
+
} : K extends '__selectable' ? SelectableFromShape<TableQuery['shape'], Name> : K extends '__as' ? Name : TableQuery[K];
|
|
81
|
+
} & QueryHasWhere & HasRelJoin : HasOneQueryThrough<Name, TableQuery>;
|
|
94
82
|
interface HasManyInfo<T extends RelationConfigSelf, Name extends string, Rel extends HasMany, Q extends Query> extends RelationConfigBase {
|
|
95
83
|
returnsOne: false;
|
|
96
84
|
query: Q;
|
|
97
|
-
params: HasOneParams<T, Rel>;
|
|
85
|
+
params: HasOneParams<T, Rel['options']>;
|
|
98
86
|
maybeSingle: Q;
|
|
99
87
|
omitForeignKeyInCreate: never;
|
|
100
88
|
optionalDataForCreate: {
|
|
101
89
|
[P in Name]?: T['relations'][Name]['options'] extends RelationThroughOptions ? EmptyObject : {
|
|
102
|
-
create?: CreateData<
|
|
90
|
+
create?: CreateData<Q>[];
|
|
103
91
|
connect?: WhereArg<Q>[];
|
|
104
92
|
connectOrCreate?: {
|
|
105
93
|
where: WhereArg<Q>;
|
|
106
|
-
create: CreateData<
|
|
94
|
+
create: CreateData<Q>;
|
|
107
95
|
}[];
|
|
108
96
|
};
|
|
109
97
|
};
|
|
@@ -125,42 +113,39 @@ interface HasManyInfo<T extends RelationConfigSelf, Name extends string, Rel ext
|
|
|
125
113
|
};
|
|
126
114
|
set?: MaybeArray<WhereArg<Q>>;
|
|
127
115
|
add?: MaybeArray<WhereArg<Q>>;
|
|
128
|
-
create?: CreateData<
|
|
116
|
+
create?: CreateData<Q>[];
|
|
129
117
|
};
|
|
130
118
|
}
|
|
131
119
|
|
|
132
120
|
interface RelJoin extends JoinQueryMethod {
|
|
133
121
|
<T extends Query>(this: T): T;
|
|
134
122
|
}
|
|
123
|
+
interface HasRelJoin {
|
|
124
|
+
join: RelJoin;
|
|
125
|
+
}
|
|
135
126
|
|
|
136
127
|
interface BelongsTo extends RelationThunkBase {
|
|
137
128
|
type: 'belongsTo';
|
|
138
129
|
options: BelongsToOptions;
|
|
139
130
|
}
|
|
140
|
-
interface BelongsToOptions<Columns extends Column.Shape.QueryInit = Column.Shape.QueryInit, Related extends
|
|
131
|
+
interface BelongsToOptions<Columns extends Column.Shape.QueryInit = Column.Shape.QueryInit, Related extends ORMTableInput = ORMTableInput> {
|
|
141
132
|
required?: boolean;
|
|
142
133
|
columns: (keyof Columns)[];
|
|
143
|
-
references: (keyof
|
|
134
|
+
references: (keyof Related['columns']['shape'])[];
|
|
144
135
|
foreignKey?: boolean | TableData.References.Options;
|
|
145
|
-
on?: ColumnsShape.InputPartial<
|
|
136
|
+
on?: ColumnsShape.InputPartial<Related['columns']['shape']>;
|
|
146
137
|
}
|
|
147
|
-
type
|
|
148
|
-
|
|
149
|
-
[Name in BelongsToFKey<Relation>]: T['columns']['shape'][Name]['type'];
|
|
138
|
+
type BelongsToParams<T extends RelationConfigSelf, FK extends string> = {
|
|
139
|
+
[Name in FK]: T['columns']['shape'][Name]['type'];
|
|
150
140
|
};
|
|
151
141
|
type BelongsToQuery<T extends Query, Name extends string> = {
|
|
152
|
-
[P in keyof T]: P extends '
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
hasWhere: true;
|
|
156
|
-
selectable: SelectableFromShape<T['shape'], Name>;
|
|
157
|
-
} : P extends 'join' ? RelJoin : P extends CreateMethodsNames | DeleteMethodsNames ? never : T[P];
|
|
158
|
-
};
|
|
159
|
-
interface BelongsToInfo<T extends RelationConfigSelf, Name extends string, Rel extends BelongsTo, FK extends string, Required, Q extends Query> extends RelationConfigBase {
|
|
142
|
+
[P in keyof T]: P extends '__selectable' ? SelectableFromShape<T['shape'], Name> : P extends '__as' ? Name : P extends CreateMethodsNames | DeleteMethodsNames ? never : T[P];
|
|
143
|
+
} & QueryHasWhere & HasRelJoin;
|
|
144
|
+
interface BelongsToInfo<T extends RelationConfigSelf, Name extends string, FK extends string, Required, Q extends Query> extends RelationConfigBase {
|
|
160
145
|
returnsOne: true;
|
|
161
146
|
query: Q;
|
|
162
|
-
params: BelongsToParams<T,
|
|
163
|
-
maybeSingle: Required extends true ?
|
|
147
|
+
params: BelongsToParams<T, FK>;
|
|
148
|
+
maybeSingle: Required extends true ? QueryManyTake<Q> : QueryManyTakeOptional<Q>;
|
|
164
149
|
omitForeignKeyInCreate: FK;
|
|
165
150
|
dataForCreate: {
|
|
166
151
|
columns: FK;
|
|
@@ -220,8 +205,11 @@ interface FromQuery extends Query {
|
|
|
220
205
|
returnType: 'all';
|
|
221
206
|
}
|
|
222
207
|
type OrchidORM<T extends TableClasses = TableClasses> = {
|
|
223
|
-
[K in keyof T]:
|
|
224
|
-
|
|
208
|
+
[K in keyof T]: T[K] extends {
|
|
209
|
+
new (): infer R extends ORMTableInput;
|
|
210
|
+
} ? TableToDb<R> : never;
|
|
211
|
+
} & OrchidORMMethods;
|
|
212
|
+
interface OrchidORMMethods {
|
|
225
213
|
/**
|
|
226
214
|
* @see import('pqb').Transaction.prototype.transaction
|
|
227
215
|
*/
|
|
@@ -302,7 +290,7 @@ type OrchidORM<T extends TableClasses = TableClasses> = {
|
|
|
302
290
|
*/
|
|
303
291
|
$from<Arg extends MaybeArray<FromArg<Query>>>(arg: Arg): FromResult<FromQuery, Arg>;
|
|
304
292
|
$close(): Promise<void>;
|
|
305
|
-
}
|
|
293
|
+
}
|
|
306
294
|
type OrchidOrmParam<Options> = true | null extends true ? 'Set strict: true to tsconfig' : Options;
|
|
307
295
|
declare const orchidORMWithAdapter: <T extends TableClasses>({ log, logger, autoPreparedStatements, noPrimaryKey, ...options }: OrchidOrmParam<({
|
|
308
296
|
db: Query;
|
|
@@ -314,7 +302,7 @@ interface HasAndBelongsToMany extends RelationThunkBase {
|
|
|
314
302
|
type: 'hasAndBelongsToMany';
|
|
315
303
|
options: HasAndBelongsToManyOptions;
|
|
316
304
|
}
|
|
317
|
-
interface HasAndBelongsToManyOptions<Columns extends Column.Shape.QueryInit = Column.Shape.QueryInit, Related extends
|
|
305
|
+
interface HasAndBelongsToManyOptions<Columns extends Column.Shape.QueryInit = Column.Shape.QueryInit, Related extends ORMTableInput = ORMTableInput> {
|
|
318
306
|
required?: boolean;
|
|
319
307
|
columns: (keyof Columns)[];
|
|
320
308
|
references: string[];
|
|
@@ -322,25 +310,21 @@ interface HasAndBelongsToManyOptions<Columns extends Column.Shape.QueryInit = Co
|
|
|
322
310
|
through: {
|
|
323
311
|
table: string;
|
|
324
312
|
columns: string[];
|
|
325
|
-
references: (keyof
|
|
313
|
+
references: (keyof Related['columns']['shape'])[];
|
|
326
314
|
foreignKey?: boolean | TableData.References.Options;
|
|
327
315
|
};
|
|
328
|
-
on?: ColumnsShape.InputPartial<
|
|
316
|
+
on?: ColumnsShape.InputPartial<Related['columns']['shape']>;
|
|
329
317
|
}
|
|
330
|
-
type HasAndBelongsToManyParams<T extends RelationConfigSelf,
|
|
331
|
-
[Name in
|
|
318
|
+
type HasAndBelongsToManyParams<T extends RelationConfigSelf, FK extends string> = {
|
|
319
|
+
[Name in FK]: T['columns']['shape'][Name]['type'];
|
|
332
320
|
};
|
|
333
321
|
type HasAndBelongsToManyQuery<Name extends string, TableQuery extends Query> = {
|
|
334
|
-
[K in keyof TableQuery]: K extends '
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
selectable: SelectableFromShape<TableQuery['shape'], Name>;
|
|
338
|
-
} : K extends 'join' ? RelJoin : TableQuery[K];
|
|
339
|
-
};
|
|
340
|
-
interface HasAndBelongsToManyInfo<T extends RelationConfigSelf, Name extends string, Rel extends HasAndBelongsToMany, Q extends Query> extends RelationConfigBase {
|
|
322
|
+
[K in keyof TableQuery]: K extends '__selectable' ? SelectableFromShape<TableQuery['shape'], Name> : K extends '__as' ? Name : TableQuery[K];
|
|
323
|
+
} & QueryHasWhere & HasRelJoin;
|
|
324
|
+
interface HasAndBelongsToManyInfo<T extends RelationConfigSelf, Name extends string, FK extends string, Q extends Query> extends RelationConfigBase {
|
|
341
325
|
returnsOne: false;
|
|
342
326
|
query: Q;
|
|
343
|
-
params: HasAndBelongsToManyParams<T,
|
|
327
|
+
params: HasAndBelongsToManyParams<T, FK>;
|
|
344
328
|
maybeSingle: Q;
|
|
345
329
|
omitForeignKeyInCreate: never;
|
|
346
330
|
optionalDataForCreate: {
|
|
@@ -415,25 +399,26 @@ type RelationToOneDataForCreateSameQuery<Q extends Query> = {
|
|
|
415
399
|
};
|
|
416
400
|
interface RelationThunkBase {
|
|
417
401
|
type: string;
|
|
418
|
-
|
|
402
|
+
related: ORMTableInput;
|
|
419
403
|
options: unknown;
|
|
420
404
|
}
|
|
421
405
|
type RelationThunk = BelongsTo | HasOne | HasMany | HasAndBelongsToMany;
|
|
422
406
|
interface RelationThunks {
|
|
423
407
|
[K: string]: RelationThunk;
|
|
424
408
|
}
|
|
425
|
-
type RelationTableToQuery<Relation
|
|
409
|
+
type RelationTableToQuery<Relation> = Relation extends {
|
|
410
|
+
related: infer R extends ORMTableInput;
|
|
411
|
+
} ? TableToDb<R> : never;
|
|
426
412
|
interface RelationConfigSelf {
|
|
427
413
|
columns: {
|
|
428
414
|
shape: Column.Shape.QueryInit;
|
|
429
415
|
};
|
|
430
416
|
relations: RelationThunks;
|
|
431
417
|
}
|
|
432
|
-
type RelationConfigParams<T extends RelationConfigSelf, Relation extends RelationThunk> = Relation extends BelongsTo ? BelongsToParams<T, Relation> : Relation extends HasOne | HasMany ? HasOneParams<T, Relation> : Relation extends HasAndBelongsToMany ? HasAndBelongsToManyParams<T, Relation> : never;
|
|
418
|
+
type RelationConfigParams<T extends RelationConfigSelf, Relation extends RelationThunk> = Relation extends BelongsTo ? BelongsToParams<T, Relation['options']['columns'][number] & string> : Relation extends HasOne | HasMany ? HasOneParams<T, Relation['options']> : Relation extends HasAndBelongsToMany ? HasAndBelongsToManyParams<T, Relation['options']['columns'][number] & string> : never;
|
|
433
419
|
|
|
434
420
|
interface TableClass<T extends ORMTableInput = ORMTableInput> {
|
|
435
421
|
new (): T;
|
|
436
|
-
instance(): T;
|
|
437
422
|
}
|
|
438
423
|
interface TableClasses {
|
|
439
424
|
[K: string]: TableClass;
|
|
@@ -446,12 +431,11 @@ interface TableInfo {
|
|
|
446
431
|
}
|
|
447
432
|
interface Table extends Query, TableInfo {
|
|
448
433
|
}
|
|
449
|
-
interface TableToDb<T extends ORMTableInput
|
|
450
|
-
relations:
|
|
434
|
+
interface TableToDb<T extends ORMTableInput> extends TableInfo, Db<T['table'], T['columns']['shape'], keyof ShapeColumnPrimaryKeys<T['columns']['shape']> extends never ? never : ShapeColumnPrimaryKeys<T['columns']['shape']>, ShapeUniqueColumns<T['columns']['shape']> | TableDataItemsUniqueColumns<T['columns']['shape'], T['columns']['data']>, TableDataItemsUniqueColumnTuples<T['columns']['shape'], T['columns']['data']>, UniqueConstraints<T['columns']['shape']> | TableDataItemsUniqueConstraints<T['columns']['data']>, T['types'], T['columns']['shape'] & ComputedColumnsFromOptions<T['computed']>, MapTableScopesOption<T>, ColumnsShape.DefaultSelectKeys<T['columns']['shape']>> {
|
|
435
|
+
relations: T extends RelationConfigSelf ? {
|
|
436
|
+
[K in keyof T['relations'] & string]: T['relations'][K] extends BelongsTo ? BelongsToInfo<T, K, T['relations'][K]['options']['columns'][number] & string, T['relations'][K]['options']['required'], BelongsToQuery<RelationTableToQuery<T['relations'][K]>, 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;
|
|
437
|
+
} : EmptyObject;
|
|
451
438
|
}
|
|
452
|
-
type ORMTableInputToQueryBuilder<T extends ORMTableInput> = T extends RelationConfigSelf ? TableToDb<T, T extends RelationConfigSelf ? {
|
|
453
|
-
[K in keyof T['relations'] & string]: T['relations'][K] extends BelongsTo ? BelongsToInfo<T, K, T['relations'][K], T['relations'][K]['options']['columns'][number] & string, T['relations'][K]['options']['required'], BelongsToQuery<RelationTableToQuery<T['relations'][K]>, 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], HasAndBelongsToManyQuery<K, RelationTableToQuery<T['relations'][K]>>> : never;
|
|
454
|
-
} : EmptyObject> : TableToDb<T, EmptyObject>;
|
|
455
439
|
interface ORMTableInput {
|
|
456
440
|
table: string;
|
|
457
441
|
columns: {
|
|
@@ -617,40 +601,48 @@ interface BaseTableInstance<ColumnTypes> {
|
|
|
617
601
|
shape: Shape;
|
|
618
602
|
};
|
|
619
603
|
}, scopes: DbTableOptionScopes<Table, Shape, Keys>): QueryScopes<Keys>;
|
|
620
|
-
belongsTo<Columns extends Column.Shape.QueryInit, Related extends
|
|
604
|
+
belongsTo<Columns extends Column.Shape.QueryInit, Related extends ORMTableInput, Options extends BelongsToOptions<Columns, Related>>(this: {
|
|
621
605
|
columns: {
|
|
622
606
|
shape: Columns;
|
|
623
607
|
};
|
|
624
|
-
}, fn: () =>
|
|
608
|
+
}, fn: () => {
|
|
609
|
+
new (): Related;
|
|
610
|
+
}, options: Options): {
|
|
625
611
|
type: 'belongsTo';
|
|
626
|
-
|
|
612
|
+
related: Related;
|
|
627
613
|
options: Options;
|
|
628
614
|
};
|
|
629
|
-
hasOne<Columns extends Column.Shape.QueryInit, Related extends
|
|
615
|
+
hasOne<Columns extends Column.Shape.QueryInit, Related extends ORMTableInput, Through extends string, Source extends string, Options extends HasOneOptions<Columns, Related, Through, Source>>(this: {
|
|
630
616
|
columns: {
|
|
631
617
|
shape: Columns;
|
|
632
618
|
};
|
|
633
|
-
}, fn: () =>
|
|
619
|
+
}, fn: () => {
|
|
620
|
+
new (): Related;
|
|
621
|
+
}, options: Options): {
|
|
634
622
|
type: 'hasOne';
|
|
635
|
-
|
|
623
|
+
related: Related;
|
|
636
624
|
options: Options;
|
|
637
625
|
};
|
|
638
|
-
hasMany<Columns extends Column.Shape.QueryInit, Related extends
|
|
626
|
+
hasMany<Columns extends Column.Shape.QueryInit, Related extends ORMTableInput, Through extends string, Source extends string, Options extends HasOneOptions<Columns, Related, Through, Source>>(this: {
|
|
639
627
|
columns: {
|
|
640
628
|
shape: Columns;
|
|
641
629
|
};
|
|
642
|
-
}, fn: () =>
|
|
630
|
+
}, fn: () => {
|
|
631
|
+
new (): Related;
|
|
632
|
+
}, options: Options): {
|
|
643
633
|
type: 'hasMany';
|
|
644
|
-
|
|
634
|
+
related: Related;
|
|
645
635
|
options: Options;
|
|
646
636
|
};
|
|
647
|
-
hasAndBelongsToMany<Columns extends Column.Shape.QueryInit, Related extends
|
|
637
|
+
hasAndBelongsToMany<Columns extends Column.Shape.QueryInit, Related extends ORMTableInput, Options extends HasAndBelongsToManyOptions<Columns, Related>>(this: {
|
|
648
638
|
columns: {
|
|
649
639
|
shape: Columns;
|
|
650
640
|
};
|
|
651
|
-
}, fn: () =>
|
|
641
|
+
}, fn: () => {
|
|
642
|
+
new (): Related;
|
|
643
|
+
}, options: Options): {
|
|
652
644
|
type: 'hasAndBelongsToMany';
|
|
653
|
-
|
|
645
|
+
related: Related;
|
|
654
646
|
options: Options;
|
|
655
647
|
};
|
|
656
648
|
beforeQuery: BeforeHookMethod;
|
|
@@ -722,13 +714,13 @@ type QueryOne<T extends Query> = {
|
|
|
722
714
|
interface MethodsBase<T extends Query> {
|
|
723
715
|
queryMethods?: QueryMethods<T>;
|
|
724
716
|
queryOneMethods?: QueryMethods<QueryOne<T>>;
|
|
725
|
-
queryWithWhereMethods?: QueryMethods<
|
|
726
|
-
queryOneWithWhereMethods?: QueryMethods<QueryOne<
|
|
717
|
+
queryWithWhereMethods?: QueryMethods<T & QueryHasWhere>;
|
|
718
|
+
queryOneWithWhereMethods?: QueryMethods<QueryOne<T & QueryHasWhere>>;
|
|
727
719
|
methods?: RecordUnknown;
|
|
728
720
|
}
|
|
729
721
|
type MapQueryMethods<BaseQuery extends Query, Method> = Method extends (q: any, ...args: infer Args) => infer Result ? <T extends BaseQuery>(this: T, ...args: Args) => Result extends Query ? MergeQuery<T, Result> : Result : never;
|
|
730
722
|
type MapMethods<T extends Query, Methods extends MethodsBase<T>> = {
|
|
731
|
-
[K in keyof Methods['queryMethods'] | keyof Methods['queryOneMethods'] | keyof Methods['queryWithWhereMethods'] | keyof Methods['queryOneWithWhereMethods'] | keyof Methods['methods']]: K extends keyof Methods['methods'] ? Methods['methods'][K] : K extends keyof Methods['queryOneWithWhereMethods'] ? MapQueryMethods<QueryOne<
|
|
723
|
+
[K in keyof Methods['queryMethods'] | keyof Methods['queryOneMethods'] | keyof Methods['queryWithWhereMethods'] | keyof Methods['queryOneWithWhereMethods'] | keyof Methods['methods']]: K extends keyof Methods['methods'] ? Methods['methods'][K] : K extends keyof Methods['queryOneWithWhereMethods'] ? MapQueryMethods<QueryOne<Query & QueryHasWhere>, Methods['queryOneWithWhereMethods'][K]> : K extends keyof Methods['queryWithWhereMethods'] ? MapQueryMethods<Query & QueryHasWhere, Methods['queryWithWhereMethods'][K]> : K extends keyof Methods['queryOneMethods'] ? MapQueryMethods<QueryOne<Query>, Methods['queryOneMethods'][K]> : K extends keyof Methods['queryMethods'] ? MapQueryMethods<Query, Methods['queryMethods'][K]> : never;
|
|
732
724
|
};
|
|
733
725
|
type Repo<T extends Query, Methods extends MethodsBase<T>> = T & MapMethods<T, Methods>;
|
|
734
726
|
declare const createRepo: <T extends Query, Methods extends MethodsBase<T>>(table: T, methods: Methods) => Repo<(<Q extends {
|
|
@@ -736,4 +728,4 @@ declare const createRepo: <T extends Query, Methods extends MethodsBase<T>>(tabl
|
|
|
736
728
|
shape: T['shape'];
|
|
737
729
|
}>(q: Q) => Query & Q & MapMethods<T, Methods>) & T, Methods>;
|
|
738
730
|
|
|
739
|
-
export { type BaseTableClass, type BaseTableInstance, type DefaultSelect, type Insertable, type MapMethods, type MapQueryMethods, type MethodsBase, type ORMTableInput, type
|
|
731
|
+
export { type BaseTableClass, type BaseTableInstance, type DefaultSelect, type Insertable, type MapMethods, type MapQueryMethods, type MethodsBase, type ORMTableInput, type OrchidORM, type OrchidOrmParam, type Queryable, type Repo, type Selectable, type SetColumnsResult, type Table, type TableClass, type TableClasses, type TableInfo, type TableToDb, type Updatable, createBaseTable, createRepo, orchidORMWithAdapter };
|
package/dist/index.js
CHANGED
|
@@ -422,7 +422,10 @@ class BelongsToVirtualColumn extends pqb.VirtualColumn {
|
|
|
422
422
|
q,
|
|
423
423
|
(as) => {
|
|
424
424
|
foreignKeys.forEach((foreignKey, i) => {
|
|
425
|
-
item[foreignKey]._sql =
|
|
425
|
+
item[foreignKey]._sql = selectCteColumnSql(
|
|
426
|
+
as,
|
|
427
|
+
primaryKeys[i]
|
|
428
|
+
);
|
|
426
429
|
});
|
|
427
430
|
},
|
|
428
431
|
"create" in value ? pqb._queryCreate(selectPKeys, value.create) : pqb._orCreate(
|
|
@@ -437,9 +440,8 @@ class BelongsToVirtualColumn extends pqb.VirtualColumn {
|
|
|
437
440
|
const as = pqb.getFreeAlias(q.q.withShapes, "q");
|
|
438
441
|
pqb._with(q, as, query.select(...primaryKeys).findBy(value.connect));
|
|
439
442
|
foreignKeys.map((foreignKey, i) => {
|
|
440
|
-
const selectColumn = `(SELECT "${as}"."${primaryKeys[i]}" FROM "${as}")`;
|
|
441
443
|
item[foreignKey] = new pqb.RawSql(
|
|
442
|
-
i
|
|
444
|
+
selectCteColumnMustExistSql(i, as, primaryKeys[i])
|
|
443
445
|
);
|
|
444
446
|
});
|
|
445
447
|
return;
|
|
@@ -543,13 +545,18 @@ const nestedUpdate$3 = ({ query, primaryKeys, foreignKeys, len }) => {
|
|
|
543
545
|
}
|
|
544
546
|
}
|
|
545
547
|
if (loadPrimaryKeys) {
|
|
546
|
-
const record = await pqb._queryFindBy(
|
|
547
|
-
query.select(...loadPrimaryKeys),
|
|
548
|
-
params.set
|
|
549
|
-
);
|
|
550
548
|
for (let i = 0, len2 = loadPrimaryKeys.length; i < len2; i++) {
|
|
551
|
-
update[loadForeignKeys[i]] =
|
|
549
|
+
update[loadForeignKeys[i]] = new pqb.RawSql("");
|
|
552
550
|
}
|
|
551
|
+
pqb._with(
|
|
552
|
+
q2,
|
|
553
|
+
(as) => {
|
|
554
|
+
for (let i = 0, len2 = loadPrimaryKeys.length; i < len2; i++) {
|
|
555
|
+
update[loadForeignKeys[i]]._sql = selectCteColumnMustExistSql(i, as, loadPrimaryKeys[i]);
|
|
556
|
+
}
|
|
557
|
+
},
|
|
558
|
+
pqb._queryFindBy(query.select(...loadPrimaryKeys), params.set)
|
|
559
|
+
);
|
|
553
560
|
}
|
|
554
561
|
} else if (params.create) {
|
|
555
562
|
const q3 = query.clone();
|
|
@@ -646,6 +653,11 @@ const nestedUpdate$3 = ({ query, primaryKeys, foreignKeys, len }) => {
|
|
|
646
653
|
}
|
|
647
654
|
};
|
|
648
655
|
};
|
|
656
|
+
const selectCteColumnSql = (cteAs, column) => `(SELECT "${cteAs}"."${column}" FROM "${cteAs}")`;
|
|
657
|
+
const selectCteColumnMustExistSql = (i, cteAs, column) => {
|
|
658
|
+
const selectColumn = selectCteColumnSql(cteAs, column);
|
|
659
|
+
return i === 0 ? `CASE WHEN (SELECT count(*) FROM "${cteAs}") = 0 AND (SELECT 'not-found')::int = 0 THEN NULL ELSE ${selectColumn} END` : selectColumn;
|
|
660
|
+
};
|
|
649
661
|
|
|
650
662
|
class HasOneVirtualColumn extends pqb.VirtualColumn {
|
|
651
663
|
constructor(schema, key, state) {
|