@grest-ts/sql 0.0.6 → 0.0.7

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.
@@ -1,31 +1,31 @@
1
- import {ExecMethods} from "./S7Exec";
2
- import {OrderByStructure} from "../../Types";
3
-
4
-
5
- export interface GatewayWhereMethods<Entity, Result> {
6
-
7
- where(where: Partial<Entity>): GatewaySelectGroupByMethods<Entity, Result> & GatewaySelectOrderByMethods<Entity, Result> & GatewaySelectLimitMethods<Result> & ExecMethods<Result>
8
-
9
- }
10
-
11
- export interface GatewaySelectGroupByMethods<Entity, Result> extends GatewaySelectLimitMethods<Result> {
12
-
13
- groupBy(...fields: (keyof Entity)[]): GatewaySelectOrderByMethods<Entity, Result> & GatewaySelectLimitMethods<Result> & ExecMethods<Result>
14
-
15
- }
16
-
17
- export interface GatewaySelectOrderByMethods<Entity, Result> extends GatewaySelectLimitMethods<Result> {
18
-
19
- orderBy(...fields: OrderByStructure<keyof Entity>): GatewaySelectLimitMethods<Result> & ExecMethods<Result>
20
-
21
- }
22
-
23
- export interface GatewaySelectLimitMethods<Result> {
24
-
25
- noLimit(): ExecMethods<Result>
26
-
27
- limit(limit: number | [number, number]): ExecMethods<Result>
28
-
29
- limit1(): ExecMethods<Result>
30
-
1
+ import {ExecMethods} from "./S7Exec";
2
+ import {OrderByStructure} from "../../Types";
3
+
4
+
5
+ export interface GatewayWhereMethods<Entity, Result> {
6
+
7
+ where(where: Partial<Entity>): GatewaySelectGroupByMethods<Entity, Result> & GatewaySelectOrderByMethods<Entity, Result> & GatewaySelectLimitMethods<Result> & ExecMethods<Result>
8
+
9
+ }
10
+
11
+ export interface GatewaySelectGroupByMethods<Entity, Result> extends GatewaySelectLimitMethods<Result> {
12
+
13
+ groupBy(...fields: (keyof Entity)[]): GatewaySelectOrderByMethods<Entity, Result> & GatewaySelectLimitMethods<Result> & ExecMethods<Result>
14
+
15
+ }
16
+
17
+ export interface GatewaySelectOrderByMethods<Entity, Result> extends GatewaySelectLimitMethods<Result> {
18
+
19
+ orderBy(...fields: OrderByStructure<keyof Entity>): GatewaySelectLimitMethods<Result> & ExecMethods<Result>
20
+
21
+ }
22
+
23
+ export interface GatewaySelectLimitMethods<Result> {
24
+
25
+ noLimit(): ExecMethods<Result>
26
+
27
+ limit(limit: number | [number, number]): ExecMethods<Result>
28
+
29
+ limit1(): ExecMethods<Result>
30
+
31
31
  }
@@ -1,43 +1,43 @@
1
- import {ExecMethods} from "./S7Exec";
2
- import {GroupByMethods} from "./S3GroupBy";
3
-
4
- export interface UnionMethods<Result> {
5
-
6
- union<Exec, MergedResult = Merge<Result, Exec>>(
7
- table: Check<Result, Exec> & Exec
8
- ): UnionMethods<MergedResult> & GroupByMethods<MergedResult, {}>
9
-
10
-
11
- unionAll<Exec, MergedResult = Merge<Result, Exec>>(
12
- table: Check<Result, Exec> & Exec
13
- ): UnionMethods<MergedResult> & GroupByMethods<MergedResult, {}>
14
- }
15
-
16
- type Check<Result1, Exec> = Exec extends ExecMethods<infer Result2>
17
- ? Key1Checker<Result1, Result2> extends never
18
- ? Key2Checker<Result1, Result2> extends never
19
- ? Exec
20
- : Key2Checker<Result1, Result2>
21
- : Key1Checker<Result1, Result2>
22
- : never
23
-
24
- type Key1Checker<Result1, Result2> = {
25
- [K in keyof Result1]: K extends keyof Result2
26
- ? never
27
- : `Missing column '${K extends string ? K : "???"}' on added union table! (...,${K extends string ? K : "???"}) UNION (..., ${K extends string ? K : "???"} <- Missing!)
28
- `
29
- // Empty line is intentional to have only this message as an Error and no obejct comparison.
30
- }[keyof Result1]
31
-
32
- type Key2Checker<Result1, Result2> = {
33
- [K in keyof Result2]: K extends keyof Result1
34
- ? never
35
- : `Column '${K extends string ? K : "???"}' does not exist in previous queries! (...) UNION (...,'${K extends string ? K : "???"}' <--- is a mistake (or add it to previous queries)!)
36
- `
37
- // Empty line is intentional to have only this message as an Error and no obejct comparison.
38
- }[keyof Result2]
39
-
40
-
41
- type Merge<Result, Exec> = Exec extends ExecMethods<infer Result2> ? {
42
- [K in keyof Result]: K extends keyof Result2 ? Result[K] | Result2[K] : never
43
- } : never;
1
+ import {ExecMethods} from "./S7Exec";
2
+ import {GroupByMethods} from "./S3GroupBy";
3
+
4
+ export interface UnionMethods<Result> {
5
+
6
+ union<Exec, MergedResult = Merge<Result, Exec>>(
7
+ table: Check<Result, Exec> & Exec
8
+ ): UnionMethods<MergedResult> & GroupByMethods<MergedResult, {}>
9
+
10
+
11
+ unionAll<Exec, MergedResult = Merge<Result, Exec>>(
12
+ table: Check<Result, Exec> & Exec
13
+ ): UnionMethods<MergedResult> & GroupByMethods<MergedResult, {}>
14
+ }
15
+
16
+ type Check<Result1, Exec> = Exec extends ExecMethods<infer Result2>
17
+ ? Key1Checker<Result1, Result2> extends never
18
+ ? Key2Checker<Result1, Result2> extends never
19
+ ? Exec
20
+ : Key2Checker<Result1, Result2>
21
+ : Key1Checker<Result1, Result2>
22
+ : never
23
+
24
+ type Key1Checker<Result1, Result2> = {
25
+ [K in keyof Result1]: K extends keyof Result2
26
+ ? never
27
+ : `Missing column '${K extends string ? K : "???"}' on added union table! (...,${K extends string ? K : "???"}) UNION (..., ${K extends string ? K : "???"} <- Missing!)
28
+ `
29
+ // Empty line is intentional to have only this message as an Error and no obejct comparison.
30
+ }[keyof Result1]
31
+
32
+ type Key2Checker<Result1, Result2> = {
33
+ [K in keyof Result2]: K extends keyof Result1
34
+ ? never
35
+ : `Column '${K extends string ? K : "???"}' does not exist in previous queries! (...) UNION (...,'${K extends string ? K : "???"}' <--- is a mistake (or add it to previous queries)!)
36
+ `
37
+ // Empty line is intentional to have only this message as an Error and no obejct comparison.
38
+ }[keyof Result2]
39
+
40
+
41
+ type Merge<Result, Exec> = Exec extends ExecMethods<infer Result2> ? {
42
+ [K in keyof Result]: K extends keyof Result2 ? Result[K] | Result2[K] : never
43
+ } : never;
@@ -1,21 +1,21 @@
1
- import {AliasedTable, Key, NotUsingWithPart} from "../../Types";
2
- import {JoinMethods} from "./S1Join";
3
-
4
- export interface UsesMethods<Aliases, Tables> {
5
-
6
- // uses<
7
- // Alias extends string,
8
- // TableRef extends `${string} as ${Alias}`
9
- // >(
10
- // table: isAliasAlreadyUsed<Aliases, Alias, AliasedTable<Alias, TableRef, any, NotUsingWithPart>>
11
- // ): UsesMethods<Aliases & Key<Alias>, Tables & Key<TableRef>>
12
-
13
-
14
- selectFrom<
15
- Alias extends string,
16
- TableRef extends `${string} as ${Alias}`
17
- >(
18
- table: AliasedTable<Alias, TableRef, object, object, string | NotUsingWithPart>
19
- ): JoinMethods<Aliases & Key<Alias>, {}, Tables & Key<TableRef>>
20
-
21
- }
1
+ import {AliasedTable, Key, NotUsingWithPart} from "../../Types";
2
+ import {JoinMethods} from "./S1Join";
3
+
4
+ export interface UsesMethods<Aliases, Tables> {
5
+
6
+ // uses<
7
+ // Alias extends string,
8
+ // TableRef extends `${string} as ${Alias}`
9
+ // >(
10
+ // table: isAliasAlreadyUsed<Aliases, Alias, AliasedTable<Alias, TableRef, any, NotUsingWithPart>>
11
+ // ): UsesMethods<Aliases & Key<Alias>, Tables & Key<TableRef>>
12
+
13
+
14
+ selectFrom<
15
+ Alias extends string,
16
+ TableRef extends `${string} as ${Alias}`
17
+ >(
18
+ table: AliasedTable<Alias, TableRef, object, object, string | NotUsingWithPart>
19
+ ): JoinMethods<Aliases & Key<Alias>, {}, Tables & Key<TableRef>>
20
+
21
+ }
@@ -1,21 +1,21 @@
1
- import {AliasedTable, Key, NotUsingWithPart} from "../../Types";
2
- import {JoinMethods} from "./S1Join";
3
-
4
- export interface WithMethods<AliasesFromWith> {
5
-
6
- // with<
7
- // Alias extends string,
8
- // TableRef extends `${string} as ${Alias}`
9
- // >(
10
- // table: isAliasAlreadyUsed<AliasesFromWith, Alias, AliasedTable<Alias, TableRef, object, NotUsingWithPart>>
11
- // ): WithMethods<AliasesFromWith & Key<Alias>>
12
-
13
- selectFrom<
14
- Alias extends string,
15
- TableRef extends `${string} as ${Alias}`
16
- >(
17
- table: AliasedTable<Alias, TableRef, object, object, string | NotUsingWithPart>
18
- ): JoinMethods<Key<Alias>, AliasesFromWith, Key<TableRef>>
19
-
20
- }
21
-
1
+ import {AliasedTable, Key, NotUsingWithPart} from "../../Types";
2
+ import {JoinMethods} from "./S1Join";
3
+
4
+ export interface WithMethods<AliasesFromWith> {
5
+
6
+ // with<
7
+ // Alias extends string,
8
+ // TableRef extends `${string} as ${Alias}`
9
+ // >(
10
+ // table: isAliasAlreadyUsed<AliasesFromWith, Alias, AliasedTable<Alias, TableRef, object, NotUsingWithPart>>
11
+ // ): WithMethods<AliasesFromWith & Key<Alias>>
12
+
13
+ selectFrom<
14
+ Alias extends string,
15
+ TableRef extends `${string} as ${Alias}`
16
+ >(
17
+ table: AliasedTable<Alias, TableRef, object, object, string | NotUsingWithPart>
18
+ ): JoinMethods<Key<Alias>, AliasesFromWith, Key<TableRef>>
19
+
20
+ }
21
+
@@ -1,39 +1,39 @@
1
- import {AliasedTable, isAliasAlreadyUsed, isTableReferenced, Key, NotUsingWithPart, SQL_BOOL} from "../../Types";
2
- import {Expr, Over} from "../../SqlExpression";
3
- import {ColumnsMethods} from "./S2Columns";
4
-
5
- export interface JoinMethods<Aliases, AliasesFromWith, Tables> extends ColumnsMethods<{}, Tables> {
6
-
7
- join<
8
- Alias extends string,
9
- TableRef extends `${string} as ${Alias}`,
10
- RefAlias extends NotUsingWithPart | string,
11
- ColTableRef extends string
12
- >(
13
- table: isRefAliasInAliasesFromWith<AliasesFromWith, RefAlias, isAliasAlreadyUsed<Aliases & AliasesFromWith, Alias, AliasedTable<Alias, TableRef, object, object, RefAlias>>>,
14
- condition: isConditionUsingJoinedTable<TableRef, ColTableRef, isTableReferenced<Tables & Key<TableRef>, Key<ColTableRef>, Expr<ColTableRef, unknown, SQL_BOOL>>>
15
- ): JoinMethods<Aliases & Key<Alias>, AliasesFromWith, Tables & Key<TableRef>>
16
-
17
- leftJoin<
18
- Alias extends string,
19
- TableRef extends `${string} as ${Alias}`,
20
- RefAlias extends NotUsingWithPart | string,
21
- ColTableRef extends string
22
- >(
23
- table: isRefAliasInAliasesFromWith<AliasesFromWith, RefAlias, isAliasAlreadyUsed<Aliases & AliasesFromWith, Alias, AliasedTable<Alias, TableRef, object, object, RefAlias>>>,
24
- condition: isConditionUsingJoinedTable<TableRef, ColTableRef, isTableReferenced<Tables & Key<TableRef>, Key<ColTableRef>, Expr<ColTableRef, unknown, SQL_BOOL>>>
25
- ): JoinMethods<Aliases & Key<Alias>, AliasesFromWith, Tables & Key<TableRef>>
26
-
27
- window<
28
- WindowName extends string,
29
- UsedTablesRef extends string
30
- >(
31
- name: isAliasAlreadyUsed<Aliases & AliasesFromWith, WindowName, WindowName>,
32
- func: (builder: Over<never>) => Over<UsedTablesRef>
33
- ): JoinMethods<Aliases & Key<WindowName>, AliasesFromWith, Tables & Key<`(window) as ${WindowName}`>>
34
-
35
- }
36
-
37
- type isConditionUsingJoinedTable<TableRef, ColTableRef, OUT> = TableRef extends ColTableRef ? OUT : "Join condition should use columns from the joined table!"
38
-
1
+ import {AliasedTable, isAliasAlreadyUsed, isTableReferenced, Key, NotUsingWithPart, SQL_BOOL} from "../../Types";
2
+ import {Expr, Over} from "../../SqlExpression";
3
+ import {ColumnsMethods} from "./S2Columns";
4
+
5
+ export interface JoinMethods<Aliases, AliasesFromWith, Tables> extends ColumnsMethods<{}, Tables> {
6
+
7
+ join<
8
+ Alias extends string,
9
+ TableRef extends `${string} as ${Alias}`,
10
+ RefAlias extends NotUsingWithPart | string,
11
+ ColTableRef extends string
12
+ >(
13
+ table: isRefAliasInAliasesFromWith<AliasesFromWith, RefAlias, isAliasAlreadyUsed<Aliases & AliasesFromWith, Alias, AliasedTable<Alias, TableRef, object, object, RefAlias>>>,
14
+ condition: isConditionUsingJoinedTable<TableRef, ColTableRef, isTableReferenced<Tables & Key<TableRef>, Key<ColTableRef>, Expr<ColTableRef, unknown, SQL_BOOL>>>
15
+ ): JoinMethods<Aliases & Key<Alias>, AliasesFromWith, Tables & Key<TableRef>>
16
+
17
+ leftJoin<
18
+ Alias extends string,
19
+ TableRef extends `${string} as ${Alias}`,
20
+ RefAlias extends NotUsingWithPart | string,
21
+ ColTableRef extends string
22
+ >(
23
+ table: isRefAliasInAliasesFromWith<AliasesFromWith, RefAlias, isAliasAlreadyUsed<Aliases & AliasesFromWith, Alias, AliasedTable<Alias, TableRef, object, object, RefAlias>>>,
24
+ condition: isConditionUsingJoinedTable<TableRef, ColTableRef, isTableReferenced<Tables & Key<TableRef>, Key<ColTableRef>, Expr<ColTableRef, unknown, SQL_BOOL>>>
25
+ ): JoinMethods<Aliases & Key<Alias>, AliasesFromWith, Tables & Key<TableRef>>
26
+
27
+ window<
28
+ WindowName extends string,
29
+ UsedTablesRef extends string
30
+ >(
31
+ name: isAliasAlreadyUsed<Aliases & AliasesFromWith, WindowName, WindowName>,
32
+ func: (builder: Over<never>) => Over<UsedTablesRef>
33
+ ): JoinMethods<Aliases & Key<WindowName>, AliasesFromWith, Tables & Key<`(window) as ${WindowName}`>>
34
+
35
+ }
36
+
37
+ type isConditionUsingJoinedTable<TableRef, ColTableRef, OUT> = TableRef extends ColTableRef ? OUT : "Join condition should use columns from the joined table!"
38
+
39
39
  type isRefAliasInAliasesFromWith<AliasesFromWith, RefAlias, OUT> = RefAlias extends NotUsingWithPart | string & keyof AliasesFromWith ? OUT : `Alias '${RefAlias extends string ? RefAlias : RefAlias extends NotUsingWithPart ? "NOT_REFERENCED" : "???"}' is not defined by any of the with queries!`
@@ -1,68 +1,68 @@
1
- import {WhereMethods} from "./S2Where";
2
- import {Expr} from "../../SqlExpression";
3
- import {AliasedTable, NotUsingWithPart} from "../../Types";
4
-
5
- export interface ColumnsMethods<Result, Tables> {
6
-
7
- distinct(): ColumnsMethods<Result, Tables>
8
-
9
- allColumnsFrom<TableRef, Entity, Result2 = Result & Entity>(table: AliasedTable<string, TableRef, Entity, any, NotUsingWithPart>): ColumnsMethods<Result2, Tables> & WhereMethods<Result2, Tables>
10
-
11
- one(): WhereMethods<Result & { one: 1 }, Tables>
12
-
13
- columns<
14
- TableRef,
15
- Columns extends Expr<TableRef, string, any>[]
16
- >(
17
- //...columns: Columns - this will enable seeing sources of Result object properties.
18
- ...columns: isColumnOkToAdd<Result, Tables, Columns>
19
- ): WhereMethods<Result & ExtractObj<Columns>, Tables>
20
-
21
- }
22
-
23
- // --------------------------------------------------------------------
24
-
25
- /**
26
- * Take array of Col-s and convert to Record<key, value> & ... object.
27
- */
28
- export type ExtractObj<Columns extends Expr<any, string, any>[]> = {
29
- [K in Columns[number]['nameAs']]: Extract<Columns[number], { nameAs: K }>['type']
30
- }
31
-
32
-
33
- // --------------------------------------------------------------------
34
-
35
- type _checkIfExistsInOtherFields<Rest extends any[], Expr> =
36
- Rest extends []
37
- ? Expr
38
- : Expr extends { nameAs: string } ?
39
- Expr["nameAs"] extends (Rest extends { nameAs: infer A }[] ? A : never)
40
- ? `'${Expr["nameAs"]}' already exists in columns!`
41
- : Expr
42
- : Expr extends { nameAs: unknown } ?
43
- `Is missing column name. Add .as('name')`
44
- : Expr
45
-
46
- type _checkIfExistsInResult<Result, Expr> =
47
- Expr extends { nameAs: string } ?
48
- Expr["nameAs"] extends keyof Result
49
- ? `'${Expr["nameAs"]}' already exists in result columns!`
50
- : Expr
51
- : Expr
52
-
53
- type _checkThatTableIsReferenced<Tables, Expr> =
54
- Expr extends { tableRef: string } ?
55
- Expr["tableRef"] extends keyof Tables
56
- ? Expr
57
- : `'${Expr["tableRef"]}' is not used in this query!`
58
- : Expr
59
-
60
- type isColumnOkToAdd<Result, Tables, ColumnExpressions> =
61
- ColumnExpressions extends []
62
- ? ColumnExpressions
63
- : ColumnExpressions extends [...(infer Rest), infer A]
64
- ? [...isColumnOkToAdd<Result, Tables, Rest>, _checkIfExistsInOtherFields<Rest, _checkIfExistsInResult<Result, _checkThatTableIsReferenced<Tables, A>>>]
65
- : ColumnExpressions;
66
-
67
-
68
- // --------------------------------------------------------------------
1
+ import {WhereMethods} from "./S2Where";
2
+ import {Expr} from "../../SqlExpression";
3
+ import {AliasedTable, NotUsingWithPart} from "../../Types";
4
+
5
+ export interface ColumnsMethods<Result, Tables> {
6
+
7
+ distinct(): ColumnsMethods<Result, Tables>
8
+
9
+ allColumnsFrom<TableRef, Entity, Result2 = Result & Entity>(table: AliasedTable<string, TableRef, Entity, any, NotUsingWithPart>): ColumnsMethods<Result2, Tables> & WhereMethods<Result2, Tables>
10
+
11
+ one(): WhereMethods<Result & { one: 1 }, Tables>
12
+
13
+ columns<
14
+ TableRef,
15
+ Columns extends Expr<TableRef, string, any>[]
16
+ >(
17
+ //...columns: Columns - this will enable seeing sources of Result object properties.
18
+ ...columns: isColumnOkToAdd<Result, Tables, Columns>
19
+ ): WhereMethods<Result & ExtractObj<Columns>, Tables>
20
+
21
+ }
22
+
23
+ // --------------------------------------------------------------------
24
+
25
+ /**
26
+ * Take array of Col-s and convert to Record<key, value> & ... object.
27
+ */
28
+ export type ExtractObj<Columns extends Expr<any, string, any>[]> = {
29
+ [K in Columns[number]['nameAs']]: Extract<Columns[number], { nameAs: K }>['type']
30
+ }
31
+
32
+
33
+ // --------------------------------------------------------------------
34
+
35
+ type _checkIfExistsInOtherFields<Rest extends any[], Expr> =
36
+ Rest extends []
37
+ ? Expr
38
+ : Expr extends { nameAs: string } ?
39
+ Expr["nameAs"] extends (Rest extends { nameAs: infer A }[] ? A : never)
40
+ ? `'${Expr["nameAs"]}' already exists in columns!`
41
+ : Expr
42
+ : Expr extends { nameAs: unknown } ?
43
+ `Is missing column name. Add .as('name')`
44
+ : Expr
45
+
46
+ type _checkIfExistsInResult<Result, Expr> =
47
+ Expr extends { nameAs: string } ?
48
+ Expr["nameAs"] extends keyof Result
49
+ ? `'${Expr["nameAs"]}' already exists in result columns!`
50
+ : Expr
51
+ : Expr
52
+
53
+ type _checkThatTableIsReferenced<Tables, Expr> =
54
+ Expr extends { tableRef: string } ?
55
+ Expr["tableRef"] extends keyof Tables
56
+ ? Expr
57
+ : `'${Expr["tableRef"]}' is not used in this query!`
58
+ : Expr
59
+
60
+ type isColumnOkToAdd<Result, Tables, ColumnExpressions> =
61
+ ColumnExpressions extends []
62
+ ? ColumnExpressions
63
+ : ColumnExpressions extends [...(infer Rest), infer A]
64
+ ? [...isColumnOkToAdd<Result, Tables, Rest>, _checkIfExistsInOtherFields<Rest, _checkIfExistsInResult<Result, _checkThatTableIsReferenced<Tables, A>>>]
65
+ : ColumnExpressions;
66
+
67
+
68
+ // --------------------------------------------------------------------
@@ -1,51 +1,51 @@
1
- import {isTableReferenced, Key, SQL_BOOL} from "../../Types";
2
- import {GroupByMethods} from "./S3GroupBy";
3
- import {Expr} from "../../SqlExpression";
4
- import {OrderByMethods} from "./S5OrderBy";
5
- import {LimitMethods} from "./S6Limit";
6
- import {ExecMethods} from "./S7Exec";
7
-
8
- export interface WhereMethods<Result, Tables> {
9
-
10
- noWhere(): GroupByMethods<Result, Tables> & OrderByMethods<Result, Tables> & LimitMethods<Result> & ExecMethods<Result>
11
-
12
- where<
13
- T1 extends string,
14
- T2 extends string = never,
15
- T3 extends string = never,
16
- T4 extends string = never,
17
- T5 extends string = never,
18
- T6 extends string = never,
19
- T7 extends string = never,
20
- T8 extends string = never,
21
- T9 extends string = never,
22
- T10 extends string = never,
23
- T11 extends string = never,
24
- T12 extends string = never,
25
- T13 extends string = never,
26
- T14 extends string = never,
27
- T15 extends string = never,
28
- T = Tables
29
- >(
30
- c1: C<T, T1>,
31
- c2?: C<T, T2>,
32
- c3?: C<T, T3>,
33
- c4?: C<T, T4>,
34
- c5?: C<T, T5>,
35
- c6?: C<T, T6>,
36
- c7?: C<T, T7>,
37
- c8?: C<T, T8>,
38
- c9?: C<T, T9>,
39
- c10?: C<T, T10>,
40
- c11?: C<T, T11>,
41
- c12?: C<T, T12>,
42
- c13?: C<T, T13>,
43
- c14?: C<T, T14>,
44
- c15?: C<T, T15>,
45
- ): GroupByMethods<Result, Tables> & OrderByMethods<Result, Tables> & LimitMethods<Result> & ExecMethods<Result>
46
-
47
- }
48
-
49
- type C<Tables, T extends string> = isTableReferenced<Tables, Key<T>, Expr<T, unknown, SQL_BOOL>>
50
-
51
-
1
+ import {isTableReferenced, Key, SQL_BOOL} from "../../Types";
2
+ import {GroupByMethods} from "./S3GroupBy";
3
+ import {Expr} from "../../SqlExpression";
4
+ import {OrderByMethods} from "./S5OrderBy";
5
+ import {LimitMethods} from "./S6Limit";
6
+ import {ExecMethods} from "./S7Exec";
7
+
8
+ export interface WhereMethods<Result, Tables> {
9
+
10
+ noWhere(): GroupByMethods<Result, Tables> & OrderByMethods<Result, Tables> & LimitMethods<Result> & ExecMethods<Result>
11
+
12
+ where<
13
+ T1 extends string,
14
+ T2 extends string = never,
15
+ T3 extends string = never,
16
+ T4 extends string = never,
17
+ T5 extends string = never,
18
+ T6 extends string = never,
19
+ T7 extends string = never,
20
+ T8 extends string = never,
21
+ T9 extends string = never,
22
+ T10 extends string = never,
23
+ T11 extends string = never,
24
+ T12 extends string = never,
25
+ T13 extends string = never,
26
+ T14 extends string = never,
27
+ T15 extends string = never,
28
+ T = Tables
29
+ >(
30
+ c1: C<T, T1>,
31
+ c2?: C<T, T2>,
32
+ c3?: C<T, T3>,
33
+ c4?: C<T, T4>,
34
+ c5?: C<T, T5>,
35
+ c6?: C<T, T6>,
36
+ c7?: C<T, T7>,
37
+ c8?: C<T, T8>,
38
+ c9?: C<T, T9>,
39
+ c10?: C<T, T10>,
40
+ c11?: C<T, T11>,
41
+ c12?: C<T, T12>,
42
+ c13?: C<T, T13>,
43
+ c14?: C<T, T14>,
44
+ c15?: C<T, T15>,
45
+ ): GroupByMethods<Result, Tables> & OrderByMethods<Result, Tables> & LimitMethods<Result> & ExecMethods<Result>
46
+
47
+ }
48
+
49
+ type C<Tables, T extends string> = isTableReferenced<Tables, Key<T>, Expr<T, unknown, SQL_BOOL>>
50
+
51
+
@@ -1,23 +1,23 @@
1
- import {AliasedTable, isColumnOkToUse, Key, NotUsingWithPart} from "../../Types";
2
- import {HavingMethods} from "./S4Having";
3
- import {Expr} from "../../SqlExpression";
4
- import {OrderByMethods} from "./S5OrderBy";
5
- import {LimitMethods} from "./S6Limit";
6
-
7
- export interface GroupByMethods<Result, Tables> extends OrderByMethods<Result, Tables>, LimitMethods<Result> {
8
- groupBy<
9
- TableRef,
10
- Columns extends Expr<TableRef, string | unknown, any>[]
11
- >(
12
- ...items: isColumnOkToUse<Tables, Columns>
13
- ): HavingMethods<Result, Tables>
14
-
15
- groupByF<
16
- TableRef,
17
- Columns extends Expr<TableRef, string | unknown, any>[]
18
- >(
19
- func: (columnsTable: AliasedTable<"(columns)", "(columns)", Result, object, NotUsingWithPart>) => isColumnOkToUse<Tables & Key<"(columns)">, Columns>
20
- ): HavingMethods<Result, Tables>
21
- }
22
-
23
-
1
+ import {AliasedTable, isColumnOkToUse, Key, NotUsingWithPart} from "../../Types";
2
+ import {HavingMethods} from "./S4Having";
3
+ import {Expr} from "../../SqlExpression";
4
+ import {OrderByMethods} from "./S5OrderBy";
5
+ import {LimitMethods} from "./S6Limit";
6
+
7
+ export interface GroupByMethods<Result, Tables> extends OrderByMethods<Result, Tables>, LimitMethods<Result> {
8
+ groupBy<
9
+ TableRef,
10
+ Columns extends Expr<TableRef, string | unknown, any>[]
11
+ >(
12
+ ...items: isColumnOkToUse<Tables, Columns>
13
+ ): HavingMethods<Result, Tables>
14
+
15
+ groupByF<
16
+ TableRef,
17
+ Columns extends Expr<TableRef, string | unknown, any>[]
18
+ >(
19
+ func: (columnsTable: AliasedTable<"(columns)", "(columns)", Result, object, NotUsingWithPart>) => isColumnOkToUse<Tables & Key<"(columns)">, Columns>
20
+ ): HavingMethods<Result, Tables>
21
+ }
22
+
23
+