bun-query-builder 0.2.25 → 0.2.27
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/README.md +25 -1
- package/dist/actions/explain.d.ts +1 -1
- package/dist/actions/file.d.ts +1 -1
- package/dist/actions/inspect.d.ts +1 -1
- package/dist/actions/introspect.d.ts +4 -1
- package/dist/actions/migrate.d.ts +0 -2
- package/dist/actions/ping.d.ts +1 -1
- package/dist/actions/sql.d.ts +5 -1
- package/dist/actions/unsafe.d.ts +1 -1
- package/dist/actions/wait-ready.d.ts +1 -1
- package/dist/bin/cli.js +546 -362
- package/dist/browser.d.ts +14 -8
- package/dist/client.d.ts +147 -101
- package/dist/config.d.ts +102 -2
- package/dist/db.d.ts +5 -0
- package/dist/model.d.ts +1 -1
- package/dist/orm.d.ts +4 -3
- package/dist/schema.d.ts +1 -1
- package/dist/src/index.js +394 -244
- package/dist/type-inference.d.ts +11 -3
- package/dist/types.d.ts +92 -0
- package/package.json +4 -4
package/dist/browser.d.ts
CHANGED
|
@@ -14,6 +14,14 @@ export declare function getBrowserConfig(): BrowserConfig;
|
|
|
14
14
|
* Check if we're in a browser environment
|
|
15
15
|
*/
|
|
16
16
|
export declare function isBrowser(): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Get the current auth token
|
|
19
|
+
*/
|
|
20
|
+
declare function getAuthToken(): Promise<string | null>;
|
|
21
|
+
/**
|
|
22
|
+
* Build fetch headers with auth
|
|
23
|
+
*/
|
|
24
|
+
declare function buildHeaders(): Promise<HeadersInit>;
|
|
17
25
|
/**
|
|
18
26
|
* Create a browser query builder for a table
|
|
19
27
|
*/
|
|
@@ -53,19 +61,17 @@ export declare function createBrowserDb<Tables extends Record<string, any>>(): {
|
|
|
53
61
|
* // type: ('admin' | 'user' | 'moderator')[]
|
|
54
62
|
* ```
|
|
55
63
|
*/
|
|
56
|
-
export declare function createBrowserModel<const TDef extends BrowserModelDefinition>(definition: TDef):
|
|
64
|
+
export declare function createBrowserModel<const TDef extends BrowserModelDefinition>(definition: TDef): unknown;
|
|
57
65
|
/**
|
|
58
66
|
* Auth helpers for browser
|
|
59
67
|
* @defaultValue
|
|
60
68
|
* ```ts
|
|
61
69
|
* {
|
|
62
|
-
* login: (credentials
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* user: () => unknown,
|
|
68
|
-
* check: () => unknown
|
|
70
|
+
* login: (credentials: { email: string, password: string }) => Promise<{ user: Record<string, unknown>, token: string }>,
|
|
71
|
+
* register: (data: { name: string, email: string, password: string }) => Promise<{ user: Record<string, unknown>, token: string }>,
|
|
72
|
+
* logout: () => Promise<void>,
|
|
73
|
+
* user: () => Promise<Record<string, unknown> | null>,
|
|
74
|
+
* check: () => Promise<boolean>
|
|
69
75
|
* }
|
|
70
76
|
* ```
|
|
71
77
|
*/
|
package/dist/client.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { config } from './config';
|
|
2
2
|
import { resetConnection } from './db';
|
|
3
3
|
import type { DatabaseSchema } from './schema';
|
|
4
|
+
import type { DriverConnection } from './db';
|
|
5
|
+
import type { QueryHooks } from './types';
|
|
4
6
|
import type { SchemaMeta } from './meta';
|
|
5
7
|
/**
|
|
6
8
|
* # `raw`
|
|
@@ -58,20 +60,24 @@ declare interface RawExpression {
|
|
|
58
60
|
raw: string
|
|
59
61
|
}
|
|
60
62
|
export declare interface WhereRaw {
|
|
61
|
-
raw:
|
|
63
|
+
raw: SqlFragment
|
|
62
64
|
}
|
|
63
65
|
export declare interface BaseSelectQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string, TSelected, TJoined extends string = TTable,> {
|
|
64
66
|
distinct: () => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
65
67
|
distinctOn: (...columns: (keyof DB[TTable]['columns'] & string | string)[]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
66
68
|
selectRaw: (fragment: SqlFragment) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
67
|
-
where:
|
|
69
|
+
where: <K extends keyof DB[TTable]['columns'] & string>(
|
|
70
|
+
expr: WhereExpression<DB[TTable]['columns']> | K,
|
|
71
|
+
op?: WhereOperator,
|
|
72
|
+
value?: WhereValue<DB[TTable]['columns'][K]>,
|
|
73
|
+
) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
68
74
|
whereRaw: (fragment: SqlFragment) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
69
75
|
whereColumn: (left: string, op: WhereOperator, right: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
70
76
|
orWhereColumn: (left: string, op: WhereOperator, right: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
71
|
-
whereIn:
|
|
72
|
-
orWhereIn:
|
|
73
|
-
whereNotIn:
|
|
74
|
-
orWhereNotIn:
|
|
77
|
+
whereIn: <K extends keyof DB[TTable]['columns'] & string>(column: K, values: DB[TTable]['columns'][K][] | { toSQL: () => string }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
78
|
+
orWhereIn: <K extends keyof DB[TTable]['columns'] & string>(column: K, values: DB[TTable]['columns'][K][] | { toSQL: () => string }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
79
|
+
whereNotIn: <K extends keyof DB[TTable]['columns'] & string>(column: K, values: DB[TTable]['columns'][K][] | { toSQL: () => string }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
80
|
+
orWhereNotIn: <K extends keyof DB[TTable]['columns'] & string>(column: K, values: DB[TTable]['columns'][K][] | { toSQL: () => string }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
75
81
|
whereLike: (column: keyof DB[TTable]['columns'] & string, pattern: string, caseSensitive?: boolean) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
76
82
|
whereILike?: (column: keyof DB[TTable]['columns'] & string, pattern: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
77
83
|
orWhereLike: (column: keyof DB[TTable]['columns'] & string, pattern: string, caseSensitive?: boolean) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
@@ -80,18 +86,26 @@ export declare interface BaseSelectQueryBuilder<DB extends DatabaseSchema<any>,
|
|
|
80
86
|
whereNotILike?: (column: keyof DB[TTable]['columns'] & string, pattern: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
81
87
|
orWhereNotLike: (column: keyof DB[TTable]['columns'] & string, pattern: string, caseSensitive?: boolean) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
82
88
|
orWhereNotILike?: (column: keyof DB[TTable]['columns'] & string, pattern: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
83
|
-
whereAny:
|
|
84
|
-
whereAll:
|
|
85
|
-
whereNone:
|
|
86
|
-
whereNested: (fragment:
|
|
87
|
-
orWhereNested: (fragment:
|
|
89
|
+
whereAny: <K extends keyof DB[TTable]['columns'] & string>(columns: K[], op: WhereOperator, value: DB[TTable]['columns'][K]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
90
|
+
whereAll: <K extends keyof DB[TTable]['columns'] & string>(columns: K[], op: WhereOperator, value: DB[TTable]['columns'][K]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
91
|
+
whereNone: <K extends keyof DB[TTable]['columns'] & string>(columns: K[], op: WhereOperator, value: DB[TTable]['columns'][K]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
92
|
+
whereNested: (fragment: { toSQL: () => string } | SqlFragment) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
93
|
+
orWhereNested: (fragment: { toSQL: () => string } | SqlFragment) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
88
94
|
whereDate: (column: string, op: WhereOperator, date: string | Date) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
89
|
-
whereBetween: (column:
|
|
90
|
-
whereNotBetween: (column:
|
|
95
|
+
whereBetween: <K extends keyof DB[TTable]['columns'] & string>(column: K, start: DB[TTable]['columns'][K], end: DB[TTable]['columns'][K]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
96
|
+
whereNotBetween: <K extends keyof DB[TTable]['columns'] & string>(column: K, start: DB[TTable]['columns'][K], end: DB[TTable]['columns'][K]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
91
97
|
whereJsonContains: (column: string, json: unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
92
98
|
whereJsonPath?: (path: string, op: WhereOperator, value: unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
93
|
-
andWhere:
|
|
94
|
-
|
|
99
|
+
andWhere: <K extends keyof DB[TTable]['columns'] & string>(
|
|
100
|
+
expr: WhereExpression<DB[TTable]['columns']> | K,
|
|
101
|
+
op?: WhereOperator,
|
|
102
|
+
value?: WhereValue<DB[TTable]['columns'][K]>,
|
|
103
|
+
) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
104
|
+
orWhere: <K extends keyof DB[TTable]['columns'] & string>(
|
|
105
|
+
expr: WhereExpression<DB[TTable]['columns']> | K,
|
|
106
|
+
op?: WhereOperator,
|
|
107
|
+
value?: WhereValue<DB[TTable]['columns'][K]>,
|
|
108
|
+
) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
95
109
|
orderBy: (column: ColumnName<DB, TTable>, direction?: SortDirection) => SelectQueryBuilder<DB, TTable, TSelected>
|
|
96
110
|
orderByDesc: (column: ColumnName<DB, TTable>) => SelectQueryBuilder<DB, TTable, TSelected>
|
|
97
111
|
inRandomOrder: () => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
@@ -101,14 +115,14 @@ export declare interface BaseSelectQueryBuilder<DB extends DatabaseSchema<any>,
|
|
|
101
115
|
limit: (n: number) => SelectQueryBuilder<DB, TTable, TSelected>
|
|
102
116
|
offset: (n: number) => SelectQueryBuilder<DB, TTable, TSelected>
|
|
103
117
|
withTimeout?: (ms: number) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
104
|
-
abort?: (signal:
|
|
118
|
+
abort?: (signal: AbortSignal) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
105
119
|
join: <T2 extends keyof DB & string>(
|
|
106
120
|
table: T2,
|
|
107
121
|
onLeft: JoinColumn<DB, TJoined | T2>,
|
|
108
122
|
operator: '=' | '!=' | '<' | '>' | '<=' | '>=' | 'like',
|
|
109
123
|
onRight: JoinColumn<DB, TJoined | T2>,
|
|
110
124
|
) => SelectQueryBuilder<DB, TTable, TSelected, TJoined | T2>
|
|
111
|
-
joinSub: (sub: { toSQL: () =>
|
|
125
|
+
joinSub: (sub: { toSQL: () => string }, alias: string, onLeft: string, operator: WhereOperator, onRight: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
112
126
|
innerJoin: <T2 extends keyof DB & string>(
|
|
113
127
|
table: T2,
|
|
114
128
|
onLeft: JoinColumn<DB, TJoined | T2>,
|
|
@@ -121,7 +135,7 @@ export declare interface BaseSelectQueryBuilder<DB extends DatabaseSchema<any>,
|
|
|
121
135
|
operator: '=' | '!=' | '<' | '>' | '<=' | '>=' | 'like',
|
|
122
136
|
onRight: JoinColumn<DB, TJoined | T2>,
|
|
123
137
|
) => SelectQueryBuilder<DB, TTable, TSelected, TJoined | T2>
|
|
124
|
-
leftJoinSub: (sub: { toSQL: () =>
|
|
138
|
+
leftJoinSub: (sub: { toSQL: () => string }, alias: string, onLeft: string, operator: WhereOperator, onRight: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
125
139
|
rightJoin: <T2 extends keyof DB & string>(
|
|
126
140
|
table: T2,
|
|
127
141
|
onLeft: JoinColumn<DB, TJoined | T2>,
|
|
@@ -129,10 +143,10 @@ export declare interface BaseSelectQueryBuilder<DB extends DatabaseSchema<any>,
|
|
|
129
143
|
onRight: JoinColumn<DB, TJoined | T2>,
|
|
130
144
|
) => SelectQueryBuilder<DB, TTable, TSelected, TJoined | T2>
|
|
131
145
|
crossJoin: <T2 extends keyof DB & string>(table: T2) => SelectQueryBuilder<DB, TTable, TSelected, TJoined | T2>
|
|
132
|
-
crossJoinSub: (sub: { toSQL: () =>
|
|
146
|
+
crossJoinSub: (sub: { toSQL: () => string }, alias: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
133
147
|
groupBy: (...columns: (keyof DB[TTable]['columns'] & string | string)[]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
134
148
|
groupByRaw: (fragment: SqlFragment) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
135
|
-
having: (expr: WhereExpression<
|
|
149
|
+
having: (expr: WhereExpression<TSelected>) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
136
150
|
havingRaw: (fragment: SqlFragment) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
137
151
|
addSelect: (...columns: ((keyof DB[TTable]['columns'] & string) | string | SqlFragment)[]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
138
152
|
select?: {
|
|
@@ -141,38 +155,38 @@ export declare interface BaseSelectQueryBuilder<DB extends DatabaseSchema<any>,
|
|
|
141
155
|
}
|
|
142
156
|
selectAll?: () => SelectQueryBuilder<DB, TTable, DB[TTable]['columns'], TJoined>
|
|
143
157
|
orderByRaw: (fragment: SqlFragment) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
144
|
-
union: (other: { toSQL: () =>
|
|
145
|
-
unionAll: (other: { toSQL: () =>
|
|
158
|
+
union: (other: { toSQL: () => string }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
159
|
+
unionAll: (other: { toSQL: () => string }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
146
160
|
forPage: (page: number, perPage: number) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
147
|
-
selectAllRelations?: () => SelectQueryBuilder<DB, TTable,
|
|
161
|
+
selectAllRelations?: () => SelectQueryBuilder<DB, TTable, TSelected & Record<string, unknown>, TJoined>
|
|
148
162
|
whereNull?: (column: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
149
163
|
whereNotNull?: (column: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
150
|
-
whereExists?: (subquery: { toSQL: () =>
|
|
164
|
+
whereExists?: (subquery: { toSQL: () => string }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
151
165
|
whereJsonDoesntContain?: (column: string, json: unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
152
166
|
whereJsonContainsKey?: (path: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
153
167
|
whereJsonDoesntContainKey?: (path: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
154
168
|
whereJsonLength?: (path: string, opOrLen: WhereOperator | number, len?: number) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
155
|
-
with?: (...relations: WithRelationArg<DB, TTable>[]) => SelectQueryBuilder<DB, TTable, TSelected,
|
|
156
|
-
whereHas?:
|
|
157
|
-
whereDoesntHave?:
|
|
158
|
-
has?: (relation: TableRelationName<DB, TTable>) => SelectQueryBuilder<DB, TTable, TSelected,
|
|
159
|
-
doesntHave?: (relation: TableRelationName<DB, TTable>) => SelectQueryBuilder<DB, TTable, TSelected,
|
|
160
|
-
withCount?:
|
|
161
|
-
withSum?:
|
|
162
|
-
withAvg?:
|
|
163
|
-
withMax?:
|
|
164
|
-
withMin?:
|
|
165
|
-
withPivot?: (relation: TableRelationName<DB, TTable>, ...columns: string[]) => SelectQueryBuilder<DB, TTable, TSelected,
|
|
166
|
-
wherePivot?: (relation: TableRelationName<DB, TTable>, column: string, opOrValue:
|
|
167
|
-
wherePivotIn?: (relation: TableRelationName<DB, TTable>, column: string, values:
|
|
168
|
-
wherePivotNotIn?: (relation: TableRelationName<DB, TTable>, column: string, values:
|
|
169
|
-
wherePivotNull?: (relation: TableRelationName<DB, TTable>, column: string) => SelectQueryBuilder<DB, TTable, TSelected,
|
|
170
|
-
wherePivotNotNull?: (relation: TableRelationName<DB, TTable>, column: string) => SelectQueryBuilder<DB, TTable, TSelected,
|
|
171
|
-
applyPivotColumns?: () => SelectQueryBuilder<DB, TTable, TSelected,
|
|
169
|
+
with?: (...relations: WithRelationArg<DB, TTable>[]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
170
|
+
whereHas?: <R extends TableRelationName<DB, TTable>>(relation: R, callback?: (qb: RelationQueryBuilder<DB, TTable, R>) => unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
171
|
+
whereDoesntHave?: <R extends TableRelationName<DB, TTable>>(relation: R, callback?: (qb: RelationQueryBuilder<DB, TTable, R>) => unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
172
|
+
has?: (relation: TableRelationName<DB, TTable>) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
173
|
+
doesntHave?: (relation: TableRelationName<DB, TTable>) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
174
|
+
withCount?: <R extends TableRelationName<DB, TTable>>(...relations: R[]) => SelectQueryBuilder<DB, TTable, TSelected & { [K in `${R}_count`]: number }, TJoined>
|
|
175
|
+
withSum?: <R extends TableRelationName<DB, TTable>, K extends keyof DB[RelatedTableName<DB, TTable, R>]['columns'] & string>(relation: R, column: K) => SelectQueryBuilder<DB, TTable, TSelected & { [P in `${R}_sum_${K}`]: number }, TJoined>
|
|
176
|
+
withAvg?: <R extends TableRelationName<DB, TTable>, K extends keyof DB[RelatedTableName<DB, TTable, R>]['columns'] & string>(relation: R, column: K) => SelectQueryBuilder<DB, TTable, TSelected & { [P in `${R}_avg_${K}`]: number }, TJoined>
|
|
177
|
+
withMax?: <R extends TableRelationName<DB, TTable>, K extends keyof DB[RelatedTableName<DB, TTable, R>]['columns'] & string>(relation: R, column: K) => SelectQueryBuilder<DB, TTable, TSelected & { [P in `${R}_max_${K}`]: DB[RelatedTableName<DB, TTable, R>]['columns'][K] | null }, TJoined>
|
|
178
|
+
withMin?: <R extends TableRelationName<DB, TTable>, K extends keyof DB[RelatedTableName<DB, TTable, R>]['columns'] & string>(relation: R, column: K) => SelectQueryBuilder<DB, TTable, TSelected & { [P in `${R}_min_${K}`]: DB[RelatedTableName<DB, TTable, R>]['columns'][K] | null }, TJoined>
|
|
179
|
+
withPivot?: (relation: TableRelationName<DB, TTable>, ...columns: string[]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
180
|
+
wherePivot?: (relation: TableRelationName<DB, TTable>, column: string, opOrValue: unknown, value?: unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
181
|
+
wherePivotIn?: (relation: TableRelationName<DB, TTable>, column: string, values: unknown[]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
182
|
+
wherePivotNotIn?: (relation: TableRelationName<DB, TTable>, column: string, values: unknown[]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
183
|
+
wherePivotNull?: (relation: TableRelationName<DB, TTable>, column: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
184
|
+
wherePivotNotNull?: (relation: TableRelationName<DB, TTable>, column: string) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
185
|
+
applyPivotColumns?: () => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
172
186
|
lockForUpdate: () => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
173
187
|
sharedLock: () => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
174
|
-
withCTE: (name: string, sub: { toSQL: () =>
|
|
175
|
-
withRecursive: (name: string, sub: { toSQL: () =>
|
|
188
|
+
withCTE: (name: string, sub: { toSQL: () => string }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
189
|
+
withRecursive: (name: string, sub: { toSQL: () => string }) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
176
190
|
value: <K extends keyof TSelected & string>(column: K) => Promise<SelectedRow<DB, TTable, TSelected>[K]>
|
|
177
191
|
pluck: {
|
|
178
192
|
<K extends keyof TSelected & string>(column: K): Promise<SelectedRow<DB, TTable, TSelected>[K][]>
|
|
@@ -181,17 +195,17 @@ export declare interface BaseSelectQueryBuilder<DB extends DatabaseSchema<any>,
|
|
|
181
195
|
exists: () => Promise<boolean>
|
|
182
196
|
doesntExist: () => Promise<boolean>
|
|
183
197
|
cursorPaginate: (perPage: number, cursor?: string | number, column?: string, direction?: 'asc' | 'desc') => Promise<{ data: SelectedRow<DB, TTable, TSelected>[], meta: { perPage: number, nextCursor: string | number | null } }>
|
|
184
|
-
chunk: (size: number, handler: (rows:
|
|
185
|
-
chunkById: (size: number, column?: string, handler?: (rows:
|
|
186
|
-
eachById: (size: number, column?: string, handler?: (row:
|
|
187
|
-
when: (condition:
|
|
188
|
-
tap: (fn: (qb:
|
|
198
|
+
chunk: (size: number, handler: (rows: SelectedRow<DB, TTable, TSelected>[]) => Promise<void> | void) => Promise<void>
|
|
199
|
+
chunkById: (size: number, column?: keyof DB[TTable]['columns'] & string, handler?: (rows: SelectedRow<DB, TTable, TSelected>[]) => Promise<void> | void) => Promise<void>
|
|
200
|
+
eachById: (size: number, column?: keyof DB[TTable]['columns'] & string, handler?: (row: SelectedRow<DB, TTable, TSelected>) => Promise<void> | void) => Promise<void>
|
|
201
|
+
when: (condition: unknown, then: (qb: SelectQueryBuilder<DB, TTable, TSelected, TJoined>) => unknown, otherwise?: (qb: SelectQueryBuilder<DB, TTable, TSelected, TJoined>) => unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
202
|
+
tap: (fn: (qb: SelectQueryBuilder<DB, TTable, TSelected, TJoined>) => unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
189
203
|
dump: () => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
190
204
|
dd: () => never
|
|
191
|
-
explain: () => Promise<
|
|
192
|
-
simple: () =>
|
|
205
|
+
explain: () => Promise<Record<string, unknown>[]>
|
|
206
|
+
simple: () => unknown
|
|
193
207
|
toText?: () => string
|
|
194
|
-
paginate: (perPage: number, page?: number, opts?: { tx?: { unsafe: (sql: string, params?:
|
|
208
|
+
paginate: (perPage: number, page?: number, opts?: { tx?: { unsafe: (sql: string, params?: unknown[]) => unknown } }) => Promise<{ data: SelectedRow<DB, TTable, TSelected>[], meta: { perPage: number, page: number, total: number, lastPage: number } }>
|
|
195
209
|
simplePaginate: (perPage: number, page?: number) => Promise<{ data: SelectedRow<DB, TTable, TSelected>[], meta: { perPage: number, page: number, hasMore: boolean } }>
|
|
196
210
|
toSQL: () => string
|
|
197
211
|
execute: () => Promise<SelectedRow<DB, TTable, TSelected>[]>
|
|
@@ -200,26 +214,26 @@ export declare interface BaseSelectQueryBuilder<DB extends DatabaseSchema<any>,
|
|
|
200
214
|
get: () => Promise<SelectedRow<DB, TTable, TSelected>[]>
|
|
201
215
|
first: () => Promise<SelectedRow<DB, TTable, TSelected> | undefined>
|
|
202
216
|
firstOrFail: () => Promise<SelectedRow<DB, TTable, TSelected>>
|
|
203
|
-
find: (id:
|
|
204
|
-
findOrFail: (id:
|
|
205
|
-
findMany: (ids:
|
|
206
|
-
lazy: () => AsyncIterable<TSelected
|
|
207
|
-
lazyById: () => AsyncIterable<TSelected
|
|
217
|
+
find: (id: PrimaryKeyValue<DB, TTable>) => Promise<SelectedRow<DB, TTable, TSelected> | undefined>
|
|
218
|
+
findOrFail: (id: PrimaryKeyValue<DB, TTable>) => Promise<SelectedRow<DB, TTable, TSelected>>
|
|
219
|
+
findMany: (ids: PrimaryKeyValue<DB, TTable>[]) => Promise<SelectedRow<DB, TTable, TSelected>[]>
|
|
220
|
+
lazy: () => AsyncIterable<SelectedRow<DB, TTable, TSelected>>
|
|
221
|
+
lazyById: () => AsyncIterable<SelectedRow<DB, TTable, TSelected>>
|
|
208
222
|
pipe: <R>(fn: (qb: SelectQueryBuilder<DB, TTable, TSelected, TJoined>) => R) => R
|
|
209
223
|
count: () => Promise<number>
|
|
210
|
-
avg: (column:
|
|
211
|
-
sum: (column:
|
|
224
|
+
avg: (column: NumericColumnName<DB[TTable]['columns']>) => Promise<number>
|
|
225
|
+
sum: (column: NumericColumnName<DB[TTable]['columns']>) => Promise<number>
|
|
212
226
|
max: <K extends keyof DB[TTable]['columns'] & string>(column: K) => Promise<DB[TTable]['columns'][K] | null>
|
|
213
227
|
min: <K extends keyof DB[TTable]['columns'] & string>(column: K) => Promise<DB[TTable]['columns'][K] | null>
|
|
214
228
|
readonly rows: TSelected[]
|
|
215
229
|
readonly row: TSelected
|
|
216
|
-
values: () => Promise<
|
|
217
|
-
toParams?: () =>
|
|
218
|
-
raw: () => Promise<
|
|
230
|
+
values: () => Promise<unknown[][]>
|
|
231
|
+
toParams?: () => unknown[]
|
|
232
|
+
raw: () => Promise<unknown[][]>
|
|
219
233
|
cancel: () => void
|
|
220
234
|
withTrashed?: () => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
221
235
|
onlyTrashed?: () => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
222
|
-
scope?: (name: string, value?:
|
|
236
|
+
scope?: (name: string, value?: unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
223
237
|
clone?: () => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
224
238
|
cache?: (ttlMs?: number) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
225
239
|
rowNumber?: (alias?: string, partitionBy?: string | string[], orderBy?: [string, 'asc' | 'desc'][]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
@@ -237,7 +251,11 @@ export declare interface InsertQueryBuilder<DB extends DatabaseSchema<any>, TTab
|
|
|
237
251
|
}
|
|
238
252
|
export declare interface UpdateQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> {
|
|
239
253
|
set: (values: Partial<{ [K in keyof DB[TTable]['columns']]: DB[TTable]['columns'][K] | SqlFragment }>) => UpdateQueryBuilder<DB, TTable>
|
|
240
|
-
where:
|
|
254
|
+
where: <K extends keyof DB[TTable]['columns'] & string>(
|
|
255
|
+
expr: WhereExpression<DB[TTable]['columns']> | K | SqlFragment,
|
|
256
|
+
op?: WhereOperator,
|
|
257
|
+
value?: WhereValue<DB[TTable]['columns'][K]>,
|
|
258
|
+
) => UpdateQueryBuilder<DB, TTable>
|
|
241
259
|
whereNull: <K extends keyof DB[TTable]['columns'] & string>(column: K) => UpdateQueryBuilder<DB, TTable>
|
|
242
260
|
whereNotNull: <K extends keyof DB[TTable]['columns'] & string>(column: K) => UpdateQueryBuilder<DB, TTable>
|
|
243
261
|
returning: <K extends keyof DB[TTable]['columns'] & string>(...cols: K[]) => SelectQueryBuilder<DB, TTable, Pick<DB[TTable]['columns'], K>>
|
|
@@ -248,7 +266,11 @@ export declare interface UpdateQueryBuilder<DB extends DatabaseSchema<any>, TTab
|
|
|
248
266
|
executeTakeFirstOrThrow: () => Promise<{ numUpdatedRows: number }>
|
|
249
267
|
}
|
|
250
268
|
export declare interface DeleteQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> {
|
|
251
|
-
where:
|
|
269
|
+
where: <K extends keyof DB[TTable]['columns'] & string>(
|
|
270
|
+
expr: WhereExpression<DB[TTable]['columns']> | K,
|
|
271
|
+
op?: WhereOperator,
|
|
272
|
+
value?: WhereValue<DB[TTable]['columns'][K]>,
|
|
273
|
+
) => DeleteQueryBuilder<DB, TTable>
|
|
252
274
|
whereNull: <K extends keyof DB[TTable]['columns'] & string>(column: K) => DeleteQueryBuilder<DB, TTable>
|
|
253
275
|
whereNotNull: <K extends keyof DB[TTable]['columns'] & string>(column: K) => DeleteQueryBuilder<DB, TTable>
|
|
254
276
|
returning: <K extends keyof DB[TTable]['columns'] & string>(...cols: K[]) => SelectQueryBuilder<DB, TTable, Pick<DB[TTable]['columns'], K>>
|
|
@@ -273,26 +295,26 @@ export declare interface QueryBuilder<DB extends DatabaseSchema<any>> {
|
|
|
273
295
|
<TTable extends keyof DB & string>(
|
|
274
296
|
table: TTable,
|
|
275
297
|
...columns: ((keyof DB[TTable]['columns'] & string) | `${string} as ${string}`)[]
|
|
276
|
-
): SelectQueryBuilder<DB, TTable,
|
|
298
|
+
): SelectQueryBuilder<DB, TTable, Record<string, unknown>>
|
|
277
299
|
}
|
|
278
300
|
selectFrom: <TTable extends keyof DB & string>(table: TTable) => TypedSelectQueryBuilder<DB, TTable, DB[TTable]['columns'], TTable, `SELECT * FROM ${TTable}`>
|
|
279
301
|
insertInto: <TTable extends keyof DB & string>(table: TTable) => TypedInsertQueryBuilder<DB, TTable>
|
|
280
302
|
updateTable: <TTable extends keyof DB & string>(table: TTable) => UpdateQueryBuilder<DB, TTable>
|
|
281
303
|
deleteFrom: <TTable extends keyof DB & string>(table: TTable) => DeleteQueryBuilder<DB, TTable>
|
|
282
304
|
table: <TTable extends keyof DB & string>(table: TTable) => TableQueryBuilder<DB, TTable>
|
|
283
|
-
selectFromSub: (sub: { toSQL: () =>
|
|
284
|
-
sql:
|
|
285
|
-
raw: (strings: TemplateStringsArray, ...values:
|
|
286
|
-
simple: (strings: TemplateStringsArray, ...values:
|
|
287
|
-
unsafe: (query: string, params?:
|
|
288
|
-
file: (path: string, params?:
|
|
305
|
+
selectFromSub: (sub: { toSQL: () => string }, alias: string) => SelectQueryBuilder<DB, keyof DB & string, Record<string, unknown>>
|
|
306
|
+
sql: DriverConnection
|
|
307
|
+
raw: (strings: TemplateStringsArray, ...values: unknown[]) => SqlFragment
|
|
308
|
+
simple: (strings: TemplateStringsArray, ...values: unknown[]) => unknown
|
|
309
|
+
unsafe: <TRow extends Record<string, unknown> = Record<string, unknown>>(query: string, params?: unknown[]) => Promise<TRow[]>
|
|
310
|
+
file: <TRow extends Record<string, unknown> = Record<string, unknown>>(path: string, params?: unknown[]) => Promise<TRow[]>
|
|
289
311
|
reserve: () => Promise<(QueryBuilder<DB> & { release: () => void })>
|
|
290
312
|
close: (opts?: { timeout?: number }) => Promise<void>
|
|
291
|
-
listen: (channel: string, handler?: (payload:
|
|
313
|
+
listen: (channel: string, handler?: (payload: unknown) => void) => Promise<void>
|
|
292
314
|
unlisten: (channel?: string) => Promise<void>
|
|
293
|
-
notify: (channel: string, payload?:
|
|
294
|
-
copyTo: (queryOrTable: string, options?: Record<string,
|
|
295
|
-
copyFrom: (queryOrTable: string, source: AsyncIterable<
|
|
315
|
+
notify: (channel: string, payload?: unknown) => Promise<void>
|
|
316
|
+
copyTo: (queryOrTable: string, options?: Record<string, unknown>) => Promise<unknown>
|
|
317
|
+
copyFrom: (queryOrTable: string, source: AsyncIterable<unknown> | Iterable<unknown>, options?: Record<string, unknown>) => Promise<unknown>
|
|
296
318
|
ping: () => Promise<boolean>
|
|
297
319
|
waitForReady: (opts?: { attempts?: number, delayMs?: number }) => Promise<void>
|
|
298
320
|
transaction: <T>(fn: (tx: QueryBuilder<DB>) => Promise<T> | T, options?: TransactionOptions) => Promise<T>
|
|
@@ -302,16 +324,16 @@ export declare interface QueryBuilder<DB extends DatabaseSchema<any>> {
|
|
|
302
324
|
rollbackDistributed: (name: string) => Promise<void>
|
|
303
325
|
configure: (opts: Partial<typeof config>) => QueryBuilder<DB>
|
|
304
326
|
setTransactionDefaults: (defaults: TransactionOptions) => void
|
|
305
|
-
transactional: <TArgs extends
|
|
327
|
+
transactional: <TArgs extends unknown[], R>(fn: (tx: QueryBuilder<DB>, ...args: TArgs) => Promise<R> | R, options?: TransactionOptions) => (...args: TArgs) => Promise<R>
|
|
306
328
|
count: <TTable extends keyof DB & string>(table: TTable, column?: keyof DB[TTable]['columns'] & string) => Promise<number>
|
|
307
329
|
sum: <TTable extends keyof DB & string>(table: TTable, column: keyof DB[TTable]['columns'] & string) => Promise<number>
|
|
308
330
|
avg: <TTable extends keyof DB & string>(table: TTable, column: keyof DB[TTable]['columns'] & string) => Promise<number>
|
|
309
|
-
min: <TTable extends keyof DB & string
|
|
310
|
-
max: <TTable extends keyof DB & string
|
|
311
|
-
insertOrIgnore: <TTable extends keyof DB & string>(table: TTable, values: Partial<DB[TTable]['columns']> | Partial<DB[TTable]['columns']>[]) => Promise<
|
|
312
|
-
insertGetId: <TTable extends keyof DB & string>(table: TTable, values: Partial<DB[TTable]['columns']>, idColumn?:
|
|
331
|
+
min: <TTable extends keyof DB & string, K extends keyof DB[TTable]['columns'] & string>(table: TTable, column: K) => Promise<DB[TTable]['columns'][K] | null>
|
|
332
|
+
max: <TTable extends keyof DB & string, K extends keyof DB[TTable]['columns'] & string>(table: TTable, column: K) => Promise<DB[TTable]['columns'][K] | null>
|
|
333
|
+
insertOrIgnore: <TTable extends keyof DB & string>(table: TTable, values: Partial<DB[TTable]['columns']> | Partial<DB[TTable]['columns']>[]) => Promise<number>
|
|
334
|
+
insertGetId: <TTable extends keyof DB & string, K extends keyof DB[TTable]['columns'] & string = DB[TTable]['primaryKey'] & keyof DB[TTable]['columns'] & string>(table: TTable, values: Partial<DB[TTable]['columns']>, idColumn?: K) => Promise<DB[TTable]['columns'][K]>
|
|
313
335
|
updateOrInsert: <TTable extends keyof DB & string>(table: TTable, match: Partial<DB[TTable]['columns']>, values: Partial<DB[TTable]['columns']>) => Promise<boolean>
|
|
314
|
-
upsert: <TTable extends keyof DB & string>(table: TTable, rows: Partial<DB[TTable]['columns']>[], conflictColumns: (keyof DB[TTable]['columns'] & string)[], mergeColumns?: (keyof DB[TTable]['columns'] & string)[]) => Promise<
|
|
336
|
+
upsert: <TTable extends keyof DB & string>(table: TTable, rows: Partial<DB[TTable]['columns']>[], conflictColumns: (keyof DB[TTable]['columns'] & string)[], mergeColumns?: (keyof DB[TTable]['columns'] & string)[]) => Promise<number>
|
|
315
337
|
create: <TTable extends keyof DB & string>(
|
|
316
338
|
table: TTable,
|
|
317
339
|
values: Partial<DB[TTable]['columns']>,
|
|
@@ -331,7 +353,7 @@ export declare interface QueryBuilder<DB extends DatabaseSchema<any>> {
|
|
|
331
353
|
) => Promise<number>
|
|
332
354
|
deleteMany: <TTable extends keyof DB & string>(
|
|
333
355
|
table: TTable,
|
|
334
|
-
ids:
|
|
356
|
+
ids: PrimaryKeyValue<DB, TTable>[],
|
|
335
357
|
) => Promise<number>
|
|
336
358
|
firstOrCreate: <TTable extends keyof DB & string>(
|
|
337
359
|
table: TTable,
|
|
@@ -349,19 +371,19 @@ export declare interface QueryBuilder<DB extends DatabaseSchema<any>> {
|
|
|
349
371
|
) => Promise<DB[TTable]['columns']>
|
|
350
372
|
remove: <TTable extends keyof DB & string>(
|
|
351
373
|
table: TTable,
|
|
352
|
-
id: DB
|
|
353
|
-
) => Promise<
|
|
374
|
+
id: PrimaryKeyValue<DB, TTable>,
|
|
375
|
+
) => Promise<unknown>
|
|
354
376
|
find: <TTable extends keyof DB & string>(
|
|
355
377
|
table: TTable,
|
|
356
|
-
id: DB
|
|
378
|
+
id: PrimaryKeyValue<DB, TTable>,
|
|
357
379
|
) => Promise<DB[TTable]['columns'] | undefined>
|
|
358
380
|
findOrFail: <TTable extends keyof DB & string>(
|
|
359
381
|
table: TTable,
|
|
360
|
-
id: DB
|
|
382
|
+
id: PrimaryKeyValue<DB, TTable>,
|
|
361
383
|
) => Promise<DB[TTable]['columns']>
|
|
362
384
|
findMany: <TTable extends keyof DB & string>(
|
|
363
385
|
table: TTable,
|
|
364
|
-
ids:
|
|
386
|
+
ids: PrimaryKeyValue<DB, TTable>[],
|
|
365
387
|
) => Promise<DB[TTable]['columns'][]>
|
|
366
388
|
latest: <TTable extends keyof DB & string>(
|
|
367
389
|
table: TTable,
|
|
@@ -375,12 +397,13 @@ export declare interface QueryBuilder<DB extends DatabaseSchema<any>> {
|
|
|
375
397
|
table: TTable,
|
|
376
398
|
count: number,
|
|
377
399
|
) => SelectQueryBuilder<DB, TTable, DB[TTable]['columns'], TTable>
|
|
378
|
-
rawQuery: (query: string) => Promise<
|
|
379
|
-
id?: (name: string) =>
|
|
380
|
-
ids?: (...names: string[]) =>
|
|
400
|
+
rawQuery: (query: string) => Promise<Record<string, unknown>[]>
|
|
401
|
+
id?: (name: string) => SqlFragment
|
|
402
|
+
ids?: (...names: string[]) => SqlFragment
|
|
381
403
|
advisoryLock?: (key: number | string) => Promise<void>
|
|
382
404
|
tryAdvisoryLock?: (key: number | string) => Promise<boolean>
|
|
383
|
-
|
|
405
|
+
advisoryUnlock?: (key: number | string) => Promise<boolean>
|
|
406
|
+
getRelationships?: (table: string) => Record<string, unknown>
|
|
384
407
|
hasRelationship?: (table: string, relationName: string) => boolean
|
|
385
408
|
getRelationshipType?: (table: string, relationName: string) => string | null
|
|
386
409
|
getRelationshipTarget?: (table: string, relationName: string) => string | null
|
|
@@ -390,6 +413,7 @@ declare interface InternalState {
|
|
|
390
413
|
meta?: SchemaMeta
|
|
391
414
|
schema?: any
|
|
392
415
|
txDefaults?: TransactionOptions
|
|
416
|
+
hooks?: QueryHooks
|
|
393
417
|
inTransaction?: boolean
|
|
394
418
|
}
|
|
395
419
|
declare interface TxBackoff { baseMs?: number, maxMs?: number, factor?: number, jitter?: boolean }
|
|
@@ -432,10 +456,11 @@ export type WhereOperator = '=' | '!=' | '<' | '>' | '<=' | '>=' | 'like' | 'in'
|
|
|
432
456
|
* See stacksjs/stacks#1858 Q-3.
|
|
433
457
|
*/
|
|
434
458
|
export type SqlFragment = object;
|
|
435
|
-
|
|
436
|
-
|
|
459
|
+
declare type WhereValue<T> = T | T[] | SqlFragment;
|
|
460
|
+
export type WhereExpression<TableColumns> = | Partial<{ [K in keyof TableColumns & string]: WhereValue<TableColumns[K]> }>
|
|
461
|
+
| { [K in keyof TableColumns & string]: [key: K, op: WhereOperator, value: WhereValue<TableColumns[K]>] }[keyof TableColumns & string]
|
|
437
462
|
| WhereRaw;
|
|
438
|
-
export type QueryResult =
|
|
463
|
+
export type QueryResult = unknown;
|
|
439
464
|
/**
|
|
440
465
|
* # `SortDirection`
|
|
441
466
|
*
|
|
@@ -450,6 +475,14 @@ export type SortDirection = 'asc' | 'desc';
|
|
|
450
475
|
export type ColumnName<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> = keyof DB[TTable]['columns'] & string;
|
|
451
476
|
// Named row alias to improve IDE hover readability
|
|
452
477
|
export type SelectedRow<DB extends DatabaseSchema<any>, _TTable extends keyof DB & string, TSelected,> = Readonly<TSelected>;
|
|
478
|
+
declare type PrimaryKeyValue<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> = DB[TTable]['primaryKey'] extends keyof DB[TTable]['columns']
|
|
479
|
+
? DB[TTable]['columns'][DB[TTable]['primaryKey']]
|
|
480
|
+
: unknown;
|
|
481
|
+
declare type NumericColumnName<Columns> = {
|
|
482
|
+
[K in keyof Columns & string]: unknown extends Columns[K]
|
|
483
|
+
? K
|
|
484
|
+
: Exclude<Columns[K], null | undefined> extends number ? K : never
|
|
485
|
+
}[keyof Columns & string];
|
|
453
486
|
declare type JoinColumn<DB extends DatabaseSchema<any>, TTables extends string> = TTables extends any
|
|
454
487
|
? `${TTables}.${keyof DB[TTables]['columns'] & string}`
|
|
455
488
|
: never;
|
|
@@ -466,6 +499,19 @@ declare type JoinColumn<DB extends DatabaseSchema<any>, TTables extends string>
|
|
|
466
499
|
export type TableRelationName<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> = DB[TTable] extends { relations?: infer R }
|
|
467
500
|
? unknown extends R ? string : keyof NonNullable<R> & string
|
|
468
501
|
: string;
|
|
502
|
+
declare type RelatedTableName<DB extends DatabaseSchema<any>, TTable extends keyof DB & string, TRelation extends TableRelationName<DB, TTable>,> = DB[TTable] extends { relations?: infer Relations }
|
|
503
|
+
? TRelation extends keyof NonNullable<Relations>
|
|
504
|
+
? Extract<NonNullable<Relations>[TRelation], keyof DB & string>
|
|
505
|
+
: keyof DB & string
|
|
506
|
+
: keyof DB & string;
|
|
507
|
+
declare type RelationQueryBuilder<DB extends DatabaseSchema<any>, TTable extends keyof DB & string, TRelation extends TableRelationName<DB, TTable>,> = SelectQueryBuilder<
|
|
508
|
+
DB,
|
|
509
|
+
RelatedTableName<DB, TTable, TRelation>,
|
|
510
|
+
DB[RelatedTableName<DB, TTable, TRelation>]['columns']
|
|
511
|
+
>;
|
|
512
|
+
declare type RelationConstraintRecord<DB extends DatabaseSchema<any>, TTable extends keyof DB & string> = {
|
|
513
|
+
[R in TableRelationName<DB, TTable>]: Partial<Record<R, (qb: RelationQueryBuilder<DB, TTable, R>) => unknown>>
|
|
514
|
+
}[TableRelationName<DB, TTable>];
|
|
469
515
|
/**
|
|
470
516
|
* # `WithRelationArg<DB, TTable>`
|
|
471
517
|
*
|
|
@@ -480,7 +526,7 @@ export type WithRelationArg<DB extends DatabaseSchema<any>, TTable extends keyof
|
|
|
480
526
|
:
|
|
481
527
|
| TableRelationName<DB, TTable>
|
|
482
528
|
| `${TableRelationName<DB, TTable>}.${string}`
|
|
483
|
-
|
|
|
529
|
+
| RelationConstraintRecord<DB, TTable>;
|
|
484
530
|
// Convert snake_case to PascalCase at the type level (e.g. created_at -> CreatedAt)
|
|
485
531
|
declare type SnakeToPascal<S extends string> = S extends `${infer H}_${infer T}`
|
|
486
532
|
? `${Capitalize<H>}${SnakeToPascal<T>}`
|
|
@@ -515,29 +561,29 @@ export type TypedSelectQueryBuilder<DB extends DatabaseSchema<any>, TTable exten
|
|
|
515
561
|
where: (<K extends keyof DB[TTable]['columns'] & string>(
|
|
516
562
|
expr: Record<K, DB[TTable]['columns'][K]>,
|
|
517
563
|
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${K} = ?`>) & (<K extends keyof DB[TTable]['columns'] & string, OP extends WhereOperator>(
|
|
518
|
-
expr: [K, OP,
|
|
564
|
+
expr: [K, OP, WhereValue<DB[TTable]['columns'][K]>],
|
|
519
565
|
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${K} ${Uppercase<OP>} ${OP extends 'in' | 'not in' ? '(?)' : '?'}`>) & ((
|
|
520
566
|
expr: WhereExpression<DB[TTable]['columns']> | string,
|
|
521
567
|
op?: WhereOperator,
|
|
522
|
-
value?:
|
|
568
|
+
value?: WhereValue<DB[TTable]['columns'][keyof DB[TTable]['columns'] & string]>,
|
|
523
569
|
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${string}`>)
|
|
524
570
|
andWhere: (<K extends keyof DB[TTable]['columns'] & string>(
|
|
525
571
|
expr: Record<K, DB[TTable]['columns'][K]>,
|
|
526
572
|
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${K} = ?`>) & (<K extends keyof DB[TTable]['columns'] & string, OP extends WhereOperator>(
|
|
527
|
-
expr: [K, OP,
|
|
573
|
+
expr: [K, OP, WhereValue<DB[TTable]['columns'][K]>],
|
|
528
574
|
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${K} ${Uppercase<OP>} ${OP extends 'in' | 'not in' ? '(?)' : '?'}`>) & ((
|
|
529
575
|
expr: WhereExpression<DB[TTable]['columns']> | string,
|
|
530
576
|
op?: WhereOperator,
|
|
531
|
-
value?:
|
|
577
|
+
value?: WhereValue<DB[TTable]['columns'][keyof DB[TTable]['columns'] & string]>,
|
|
532
578
|
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${string}`>)
|
|
533
579
|
orWhere: (<K extends keyof DB[TTable]['columns'] & string>(
|
|
534
580
|
expr: Record<K, DB[TTable]['columns'][K]>,
|
|
535
581
|
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${K} = ?`>) & (<K extends keyof DB[TTable]['columns'] & string, OP extends WhereOperator>(
|
|
536
|
-
expr: [K, OP,
|
|
582
|
+
expr: [K, OP, WhereValue<DB[TTable]['columns'][K]>],
|
|
537
583
|
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${K} ${Uppercase<OP>} ${OP extends 'in' | 'not in' ? '(?)' : '?'}`>) & ((
|
|
538
584
|
expr: WhereExpression<DB[TTable]['columns']> | string,
|
|
539
585
|
op?: WhereOperator,
|
|
540
|
-
value?:
|
|
586
|
+
value?: WhereValue<DB[TTable]['columns'][keyof DB[TTable]['columns'] & string]>,
|
|
541
587
|
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${string}`>)
|
|
542
588
|
orderBy: <C extends keyof DB[TTable]['columns'] & string, D extends 'asc' | 'desc' = 'asc'>(
|
|
543
589
|
column: C,
|