pqb 0.18.22 → 0.18.23
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 +22 -28
- package/dist/index.js +3 -61
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -61
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -3844,7 +3844,7 @@ declare class QueryLog {
|
|
|
3844
3844
|
type MergeQuery<T extends Query, Q extends Query, ReturnType extends QueryReturnType = QueryReturnType extends Q['returnType'] ? T['returnType'] : Q['returnType'], Result extends ColumnsShapeBase = T['meta']['hasSelect'] extends true ? Q['meta']['hasSelect'] extends true ? {
|
|
3845
3845
|
[K in keyof T['result'] | keyof Q['result']]: K extends keyof Q['result'] ? Q['result'][K] : T['result'][K];
|
|
3846
3846
|
} : T['result'] : Q['result'], Data = GetQueryResult<ReturnType, Result>> = {
|
|
3847
|
-
[K in keyof T]: K extends 'meta' ? MergeObjects<T['meta'], Q['meta']> : K extends 'result' ? Result : K extends 'returnType' ? ReturnType : K extends 'then' ? QueryThen<Data> : K extends 'catch' ? QueryCatch<Data> : K extends 'selectable' ? T['selectable']
|
|
3847
|
+
[K in keyof T]: K extends 'meta' ? MergeObjects<T['meta'], Q['meta']> : K extends 'result' ? Result : K extends 'returnType' ? ReturnType : K extends 'then' ? QueryThen<Data> : K extends 'catch' ? QueryCatch<Data> : K extends 'selectable' ? MergeObjects<T['selectable'], Q['selectable']> : K extends 'windows' ? MergeObjects<T['windows'], Q['windows']> : K extends 'withData' ? MergeObjects<T['withData'], Q['withData']> : T[K];
|
|
3848
3848
|
};
|
|
3849
3849
|
declare class MergeQueryMethods {
|
|
3850
3850
|
merge<T extends Query, Q extends Query>(this: T, q: Q): MergeQuery<T, Q>;
|
|
@@ -3864,27 +3864,24 @@ declare function maybeWrappedThen(this: Query, resolve?: Resolve, reject?: Rejec
|
|
|
3864
3864
|
declare const parseResult: (q: Query, parsers: ColumnsParsers | undefined, returnType: QueryReturnType | undefined, result: QueryResult, isSubQuery?: boolean) => unknown;
|
|
3865
3865
|
declare const parseRecord: (parsers: ColumnsParsers, row: any) => any;
|
|
3866
3866
|
|
|
3867
|
-
type SelectArg<T extends Query> = '*' |
|
|
3867
|
+
type SelectArg<T extends Query> = '*' | keyof T['selectable'];
|
|
3868
3868
|
type SelectAsArg<T extends Query> = Record<string, SelectAsValue<T>>;
|
|
3869
3869
|
type SelectAsValue<T extends Query> = StringKey<keyof T['selectable']> | Expression | ((q: T) => QueryBase) | ((q: T) => Expression) | ((q: T) => QueryBase | Expression);
|
|
3870
|
-
type
|
|
3871
|
-
|
|
3872
|
-
|
|
3873
|
-
T
|
|
3874
|
-
|
|
3875
|
-
|
|
3876
|
-
|
|
3877
|
-
|
|
3878
|
-
|
|
3879
|
-
};
|
|
3880
|
-
}) & {
|
|
3881
|
-
[K in keyof T]: K extends 'result' ? Result : K extends 'then' ? QueryThen<Data> : K extends 'catch' ? QueryCatch<Data> : K extends 'selectable' ? SelectAsResult[1] : T[K];
|
|
3870
|
+
type SelectResult<T extends Query, Columns extends SelectArg<T>[], Result extends ColumnsShapeBase = {
|
|
3871
|
+
[K in ('*' extends Columns[number] ? Exclude<Columns[number], '*'> | keyof T['shape'] : Columns[number]) | PrevResultKeys<T> as K extends keyof T['selectable'] ? T['selectable'][K]['as'] : K]: K extends keyof T['selectable'] ? T['selectable'][K]['column'] : K extends keyof T['result'] ? T['result'][K] : never;
|
|
3872
|
+
}, Data = GetQueryResult<T['returnType'], Result>> = {
|
|
3873
|
+
[K in keyof T]: K extends 'meta' ? SetMetaHasSelect<T> : K extends 'result' ? Result : K extends 'then' ? QueryThen<Data> : K extends 'catch' ? QueryCatch<Data> : T[K];
|
|
3874
|
+
};
|
|
3875
|
+
type SelectResultWithObj<T extends Query, Columns extends SelectArg<T>[], Obj extends SelectAsArg<T>, Result extends ColumnsShapeBase = {
|
|
3876
|
+
[K in ('*' extends Columns[number] ? Exclude<Columns[number], '*'> | keyof T['shape'] : Columns[number]) | keyof Obj | PrevResultKeys<T> as K extends keyof T['selectable'] ? T['selectable'][K]['as'] : K]: K extends keyof T['selectable'] ? T['selectable'][K]['column'] : K extends keyof Obj ? SelectAsValueResult<T, Obj[K]> : K extends keyof T['result'] ? T['result'][K] : never;
|
|
3877
|
+
}, Data = GetQueryResult<T['returnType'], Result>> = {
|
|
3878
|
+
[K in keyof T]: K extends 'meta' ? SetMetaHasSelect<T> : K extends 'result' ? Result : K extends 'then' ? QueryThen<Data> : K extends 'catch' ? QueryCatch<Data> : K extends 'selectable' ? SelectAsSelectable<T, Obj> : T[K];
|
|
3882
3879
|
};
|
|
3883
|
-
type
|
|
3884
|
-
|
|
3880
|
+
type PrevResultKeys<T extends Query> = T['meta']['hasSelect'] extends true ? keyof T['result'] : never;
|
|
3881
|
+
type SetMetaHasSelect<T extends Query> = T['meta']['hasSelect'] extends true ? T['meta'] : {
|
|
3882
|
+
[K in keyof T['meta'] | 'hasSelect']: K extends 'hasSelect' ? true : T['meta'][K];
|
|
3885
3883
|
};
|
|
3886
|
-
type
|
|
3887
|
-
type SelectAsResult<T extends Query, Arg, Result extends SelectObjectResultTuple, Shape = Result[0], AddSelectable extends SelectableBase = {
|
|
3884
|
+
type SelectAsSelectable<T extends Query, Arg extends SelectAsArg<T>> = {
|
|
3888
3885
|
[K in keyof Arg]: Arg[K] extends ((q: never) => infer R extends QueryBase) ? (x: {
|
|
3889
3886
|
[C in keyof R['result'] as `${StringKey<K>}.${StringKey<C>}`]: {
|
|
3890
3887
|
as: C;
|
|
@@ -3892,13 +3889,8 @@ type SelectAsResult<T extends Query, Arg, Result extends SelectObjectResultTuple
|
|
|
3892
3889
|
};
|
|
3893
3890
|
}) => void : never;
|
|
3894
3891
|
}[keyof Arg] extends (x: infer I) => void ? {
|
|
3895
|
-
[K in keyof I]: I[K];
|
|
3896
|
-
} : never
|
|
3897
|
-
{
|
|
3898
|
-
[K in keyof Shape | keyof Arg]: K extends keyof Arg ? SelectAsValueResult<T, Arg[K]> : K extends keyof Shape ? Shape[K] : never;
|
|
3899
|
-
},
|
|
3900
|
-
Result[1] & AddSelectable
|
|
3901
|
-
] : Result;
|
|
3892
|
+
[K in keyof T['selectable'] | keyof I]: K extends keyof I ? I[K] : T['selectable'][K];
|
|
3893
|
+
} : never;
|
|
3902
3894
|
type SelectAsValueResult<T extends Query, Arg extends SelectAsValue<T>> = Arg extends keyof T['selectable'] ? T['selectable'][Arg]['column'] : Arg extends Expression ? Arg['_type'] : Arg extends (q: never) => infer R ? R extends QueryBase ? SelectSubQueryResult<R> : R extends Expression ? R['_type'] : R extends QueryBase | Expression ? SelectSubQueryResult<Exclude<R, Expression>> | Exclude<R, QueryBase>['_type'] : never : never;
|
|
3903
3895
|
type SelectSubQueryResult<Arg extends QueryBase> = QueryReturnsAll<Arg['returnType']> extends true ? ArrayOfColumnsObjects<Arg['result']> : Arg['returnType'] extends 'valueOrThrow' ? Arg['result']['value'] : Arg['returnType'] extends 'pluck' ? PluckResultColumnType<Arg['result']['pluck']> : Arg extends {
|
|
3904
3896
|
relationConfig: {
|
|
@@ -3914,7 +3906,7 @@ declare class Select {
|
|
|
3914
3906
|
/**
|
|
3915
3907
|
* Takes a list of columns to be selected, and by default, the query builder will select all columns of the table.
|
|
3916
3908
|
*
|
|
3917
|
-
*
|
|
3909
|
+
* The last argument can be an object. Keys of the object are column aliases, value can be a column name, sub-query, or raw SQL expression.
|
|
3918
3910
|
*
|
|
3919
3911
|
* ```ts
|
|
3920
3912
|
* // select columns of the table:
|
|
@@ -3967,8 +3959,10 @@ declare class Select {
|
|
|
3967
3959
|
* .where({ 'author.isPopular': true });
|
|
3968
3960
|
* ```
|
|
3969
3961
|
*/
|
|
3970
|
-
select<T extends Query,
|
|
3971
|
-
|
|
3962
|
+
select<T extends Query, Columns extends SelectArg<T>[]>(this: T, ...args: Columns): SelectResult<T, Columns>;
|
|
3963
|
+
select<T extends Query, Columns extends SelectArg<T>[], Obj extends SelectAsArg<T>>(this: T, ...args: [...columns: Columns, obj: Obj]): SelectResultWithObj<T, Columns, Obj>;
|
|
3964
|
+
_select<T extends Query, Columns extends SelectArg<T>[]>(this: T, ...args: Columns): SelectResult<T, Columns>;
|
|
3965
|
+
_select<T extends Query, Columns extends SelectArg<T>[], Obj extends SelectAsArg<T>>(this: T, ...args: [...columns: Columns, obj: Obj]): SelectResultWithObj<T, Columns, Obj>;
|
|
3972
3966
|
/**
|
|
3973
3967
|
* When querying the table or creating records, all columns are selected by default,
|
|
3974
3968
|
* but updating and deleting queries are returning affected row counts by default.
|
package/dist/index.js
CHANGED
|
@@ -6013,76 +6013,18 @@ const maybeUnNameColumn = (column, isSubQuery) => {
|
|
|
6013
6013
|
return isSubQuery && column.data.name ? orchidCore.setColumnData(column, "name", void 0) : column;
|
|
6014
6014
|
};
|
|
6015
6015
|
class Select {
|
|
6016
|
-
|
|
6017
|
-
* Takes a list of columns to be selected, and by default, the query builder will select all columns of the table.
|
|
6018
|
-
*
|
|
6019
|
-
* Pass an object to select columns with aliases. Keys of the object are column aliases, value can be a column name, sub-query, or raw expression.
|
|
6020
|
-
*
|
|
6021
|
-
* ```ts
|
|
6022
|
-
* // select columns of the table:
|
|
6023
|
-
* db.table.select('id', 'name', { idAlias: 'id' });
|
|
6024
|
-
*
|
|
6025
|
-
* // accepts columns with table names:
|
|
6026
|
-
* db.table.select('user.id', 'user.name', { nameAlias: 'user.name' });
|
|
6027
|
-
*
|
|
6028
|
-
* // table name may refer to the current table or a joined table:
|
|
6029
|
-
* db.table
|
|
6030
|
-
* .join(Message, 'authorId', 'id')
|
|
6031
|
-
* .select('user.name', 'message.text', { textAlias: 'message.text' });
|
|
6032
|
-
*
|
|
6033
|
-
* // select value from the sub-query,
|
|
6034
|
-
* // this sub-query should return a single record and a single column:
|
|
6035
|
-
* db.table.select({
|
|
6036
|
-
* subQueryResult: Otherdb.table.select('column').take(),
|
|
6037
|
-
* });
|
|
6038
|
-
*
|
|
6039
|
-
* // select raw SQL value, the first argument of `raw` is a column type, it is used for return type of the query
|
|
6040
|
-
* db.table.select({
|
|
6041
|
-
* raw: db.table.sql((t) => t.integer())`1 + 2`,
|
|
6042
|
-
* });
|
|
6043
|
-
*
|
|
6044
|
-
* // same raw SQL query as above, but raw value is returned from a callback
|
|
6045
|
-
* db.table.select({
|
|
6046
|
-
* raw: (q) => q.sql((t) => t.integer())`1 + 2`,
|
|
6047
|
-
* });
|
|
6048
|
-
* ```
|
|
6049
|
-
*
|
|
6050
|
-
* When you use the ORM and defined relations, `select` can also accept callbacks with related table queries:
|
|
6051
|
-
*
|
|
6052
|
-
* ```ts
|
|
6053
|
-
* await db.author.select({
|
|
6054
|
-
* allBooks: (q) => q.books,
|
|
6055
|
-
* firstBook: (q) => q.books.order({ createdAt: 'ASC' }).take(),
|
|
6056
|
-
* booksCount: (q) => q.books.count(),
|
|
6057
|
-
* });
|
|
6058
|
-
* ```
|
|
6059
|
-
*
|
|
6060
|
-
* When you're selecting a relation that's connected via `belongsTo` or `hasOne`, it becomes available to use in `order` or in `where`:
|
|
6061
|
-
*
|
|
6062
|
-
* ```ts
|
|
6063
|
-
* // select books with their authors included, order by author name and filter by author column:
|
|
6064
|
-
* await db.books
|
|
6065
|
-
* .select({
|
|
6066
|
-
* author: (q) => q.author,
|
|
6067
|
-
* })
|
|
6068
|
-
* .order('author.name')
|
|
6069
|
-
* .where({ 'author.isPopular': true });
|
|
6070
|
-
* ```
|
|
6071
|
-
*/
|
|
6016
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
6072
6017
|
select(...args) {
|
|
6073
6018
|
return this.clone()._select(...args);
|
|
6074
6019
|
}
|
|
6020
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
6075
6021
|
_select(...args) {
|
|
6076
6022
|
if (!args.length) {
|
|
6077
6023
|
return this;
|
|
6078
6024
|
}
|
|
6079
6025
|
const as = this.q.as || this.table;
|
|
6080
6026
|
const selectArgs = args.map((item) => processSelectArg(this, as, item));
|
|
6081
|
-
return pushQueryArray(
|
|
6082
|
-
this,
|
|
6083
|
-
"select",
|
|
6084
|
-
selectArgs
|
|
6085
|
-
);
|
|
6027
|
+
return pushQueryArray(this, "select", selectArgs);
|
|
6086
6028
|
}
|
|
6087
6029
|
/**
|
|
6088
6030
|
* When querying the table or creating records, all columns are selected by default,
|