@grest-ts/sql 0.0.5 → 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,172 +1,172 @@
1
- import {COMPARISON_SIGNS, OrderByStructure, PrepareQueryArgument, SQL_BOOL} from "./Types";
2
- import {COMPARE, CONTAINS, ENDS_WITH, IN, IS_NULL, LIKE, NOT_NULL, orderByStructureToSqlString, STARTS_WITH} from "./SqlFunctions";
3
- import {escapeId} from "./escape";
4
-
5
- export type Expr<TableRef, Name, Type extends string | number | unknown> =
6
- symbol &
7
- { tableRef: TableRef, type: Type } &
8
- SqlExpression<TableRef, Name, Type>
9
-
10
- export type AnyBoolExpr<TableRef> = Expr<TableRef, string | unknown, SQL_BOOL>;
11
-
12
- export type AnyExpr = Expr<string, string | unknown, string | number | unknown>
13
-
14
- export type Transformer<Input, Output> = ((value: Input) => Output) | ((value: Input) => Promise<Output>)
15
-
16
- export class SqlExpression<TableRef, Name extends string | unknown | undefined, Type extends string | number | unknown> {
17
-
18
- public readonly expression: string;
19
- public readonly nameAs: Name | undefined;
20
- public readonly transformer: Transformer<unknown, Type>
21
-
22
- constructor(expression: string, nameAs?: Name, parser?: Transformer<unknown, Type>) {
23
- this.expression = expression;
24
- this.nameAs = nameAs;
25
- this.transformer = parser;
26
- Object.freeze(this);
27
- }
28
-
29
- private asExpr(): Expr<TableRef, string | unknown, any> {
30
- return this as any;
31
- }
32
-
33
- public static create<TableRef, Name, Type>(expression: string, nameAs?: string | unknown | undefined, parser?: Transformer<unknown, Type>): Expr<TableRef, Name, Type> {
34
- return new SqlExpression(expression, nameAs, parser) as any
35
- }
36
-
37
- public cast<CastType extends string | number>(): Expr<TableRef, Name, CastType> {
38
- return this as any;
39
- }
40
-
41
- public as<NewName extends string>(name: NewName): Expr<TableRef, NewName, Type> {
42
- return new SqlExpression<TableRef, NewName, Type>(this.expression, name, this.transformer) as any;
43
- }
44
-
45
- public transform<ResultType>(func: (value: Type) => ResultType): Expr<TableRef, Name, ResultType> {
46
- return new SqlExpression<TableRef, Name, ResultType>(this.expression, this.nameAs, func) as any
47
- }
48
-
49
- public asyncTransform<ResultType>(func: (value: Type) => Promise<ResultType>): Expr<TableRef, Name, ResultType> {
50
- return new SqlExpression<TableRef, Name, ResultType>(this.expression, this.nameAs, func) as any
51
- }
52
-
53
- // -------------------------------------------------------------------
54
- // BOOLEAN CHECKS
55
- // -------------------------------------------------------------------
56
-
57
- public isNull(): Expr<TableRef, unknown, SQL_BOOL> {
58
- return IS_NULL(this.asExpr());
59
- }
60
-
61
- public isNotNull(): Expr<TableRef, unknown, SQL_BOOL> {
62
- return NOT_NULL(this.asExpr());
63
- }
64
-
65
-
66
- public notNull(): Expr<TableRef, unknown, SQL_BOOL> {
67
- return NOT_NULL(this.asExpr());
68
- }
69
-
70
- public in<TableRef2 = never>(values: Type[] | Expr<TableRef2, string | unknown, Type> | PrepareQueryArgument): Expr<TableRef | TableRef2, unknown, SQL_BOOL> {
71
- return IN(this.asExpr(), values);
72
- }
73
-
74
- public notEq<TableRef2 = never>(col2: Type | Expr<TableRef2, string | unknown, Type> | PrepareQueryArgument): Expr<TableRef | TableRef2, unknown, SQL_BOOL> {
75
- return COMPARE(this.asExpr(), "!=", col2);
76
- }
77
-
78
- public eq<TableRef2 = never>(col2: Type | Expr<TableRef2, string | unknown, Type> | PrepareQueryArgument): Expr<TableRef | TableRef2, unknown, SQL_BOOL> {
79
- return COMPARE(this.asExpr(), "=", col2);
80
- }
81
-
82
- public lt<TableRef2 = never>(col2: Type | Expr<TableRef2, string | unknown, Type> | PrepareQueryArgument): Expr<TableRef | TableRef2, unknown, SQL_BOOL> {
83
- return COMPARE(this.asExpr(), "<", col2);
84
- }
85
-
86
- public gt<TableRef2 = never>(col2: Type | Expr<TableRef2, string | unknown, Type> | PrepareQueryArgument): Expr<TableRef | TableRef2, unknown, SQL_BOOL> {
87
- return COMPARE(this.asExpr(), ">", col2);
88
- }
89
-
90
- public lte<TableRef2 = never>(col2: Type | Expr<TableRef2, string | unknown, Type> | PrepareQueryArgument): Expr<TableRef | TableRef2, unknown, SQL_BOOL> {
91
- return COMPARE(this.asExpr(), "<=", col2);
92
- }
93
-
94
- public gte<TableRef2 = never>(col2: Type | Expr<TableRef2, string | unknown, Type> | PrepareQueryArgument): Expr<TableRef | TableRef2, unknown, SQL_BOOL> {
95
- return COMPARE(this.asExpr(), ">=", col2);
96
- }
97
-
98
- public compare<TableRef2 = never>(op: COMPARISON_SIGNS, value: Type | Expr<TableRef2, string | unknown, Type> | PrepareQueryArgument): Expr<TableRef | TableRef2, unknown, SQL_BOOL> {
99
- return COMPARE(this.asExpr(), op, value)
100
- }
101
-
102
- public like(value: string): Expr<TableRef, unknown, SQL_BOOL> {
103
- return LIKE(this.asExpr(), value);
104
- }
105
-
106
- public contains(value: string): Expr<TableRef, unknown, SQL_BOOL> {
107
- return CONTAINS(this.asExpr(), value);
108
- }
109
-
110
- public startsWith(value: string): Expr<TableRef, unknown, SQL_BOOL> {
111
- return STARTS_WITH(this.asExpr(), value);
112
- }
113
-
114
- public endsWith(value: string): Expr<TableRef, unknown, SQL_BOOL> {
115
- return ENDS_WITH(this.asExpr(), value);
116
- }
117
-
118
- }
119
-
120
- export type ExprWithOver<TableRef, Name, Type extends string | number | unknown> =
121
- symbol
122
- & Expr<TableRef, Name, Type>
123
- & SqlExpressionWithOver<TableRef, Name, Type>
124
-
125
- export class SqlExpressionWithOver<TableRef, Name, Type extends string | number | unknown> extends SqlExpression<TableRef, Name, Type> {
126
-
127
- public static create<TableRef, Name, Type>(expression: string, nameAs?: string | unknown | undefined): ExprWithOver<TableRef, Name, Type> {
128
- return new SqlExpressionWithOver(expression, nameAs) as any
129
- }
130
-
131
- public over<TableRef1 extends string>(func: (builder: Over<never>) => Over<TableRef1>): Expr<TableRef | TableRef1, unknown, Type>
132
- //public over<WindowName extends string>(namedWindow: WindowName): Expr<TableRef | `${WINDOW} as ${WindowName}`, unknown, Type>
133
- public over<WindowName extends string, TableRef1>(namedWindow: WindowName, func: (builder: Over<TableRef1>) => void): Expr<TableRef | TableRef1 | `(window) as ${WindowName}`, unknown, Type>
134
- public over(a: any, b?: any): any {
135
- let namedWindow: string = undefined;
136
- let func: (builder: Over<never>) => void = undefined;
137
- if (typeof a === "function") {
138
- func = a
139
- } else if (typeof a === "string") {
140
- namedWindow = a;
141
- if (typeof b === "function") {
142
- func = b
143
- }
144
- }
145
- const builder = new Over<{}>();
146
- func(builder);
147
- return SqlExpression.create(this.expression + " OVER (" + (namedWindow ? escapeId(namedWindow) + " " : "") + builder.toString() + ")");
148
- }
149
-
150
- }
151
-
152
- export class Over<TableRef> {
153
-
154
- private _partitionBy: string[];
155
- private _orderBy: string[];
156
-
157
- public orderBy<TableRef2>(...cols: OrderByStructure<Expr<TableRef2, string, any>>): Over<TableRef | TableRef2> {
158
- this._orderBy = orderByStructureToSqlString(cols)
159
- return this as any;
160
- }
161
-
162
- public partitionBy<TableRef2>(...cols: Expr<TableRef2, string, any>[]): Over<TableRef | TableRef2> {
163
- this._partitionBy = cols.map(e => e.expression)
164
- return this as any;
165
- }
166
-
167
- public toString() {
168
- return (this._partitionBy?.length > 0 ? " PARTITION BY " + this._partitionBy.join(", ") : "") +
169
- (this._orderBy?.length > 0 ? " ORDER BY " + this._orderBy.join(", ") : "")
170
- }
171
-
172
- }
1
+ import {COMPARISON_SIGNS, OrderByStructure, PrepareQueryArgument, SQL_BOOL} from "./Types";
2
+ import {COMPARE, CONTAINS, ENDS_WITH, IN, IS_NULL, LIKE, NOT_NULL, orderByStructureToSqlString, STARTS_WITH} from "./SqlFunctions";
3
+ import {escapeId} from "./escape";
4
+
5
+ export type Expr<TableRef, Name, Type extends string | number | unknown> =
6
+ symbol &
7
+ { tableRef: TableRef, type: Type } &
8
+ SqlExpression<TableRef, Name, Type>
9
+
10
+ export type AnyBoolExpr<TableRef> = Expr<TableRef, string | unknown, SQL_BOOL>;
11
+
12
+ export type AnyExpr = Expr<string, string | unknown, string | number | unknown>
13
+
14
+ export type Transformer<Input, Output> = ((value: Input) => Output) | ((value: Input) => Promise<Output>)
15
+
16
+ export class SqlExpression<TableRef, Name extends string | unknown | undefined, Type extends string | number | unknown> {
17
+
18
+ public readonly expression: string;
19
+ public readonly nameAs: Name | undefined;
20
+ public readonly transformer: Transformer<unknown, Type>
21
+
22
+ constructor(expression: string, nameAs?: Name, parser?: Transformer<unknown, Type>) {
23
+ this.expression = expression;
24
+ this.nameAs = nameAs;
25
+ this.transformer = parser;
26
+ Object.freeze(this);
27
+ }
28
+
29
+ private asExpr(): Expr<TableRef, string | unknown, any> {
30
+ return this as any;
31
+ }
32
+
33
+ public static create<TableRef, Name, Type>(expression: string, nameAs?: string | unknown | undefined, parser?: Transformer<unknown, Type>): Expr<TableRef, Name, Type> {
34
+ return new SqlExpression(expression, nameAs, parser) as any
35
+ }
36
+
37
+ public cast<CastType extends string | number>(): Expr<TableRef, Name, CastType> {
38
+ return this as any;
39
+ }
40
+
41
+ public as<NewName extends string>(name: NewName): Expr<TableRef, NewName, Type> {
42
+ return new SqlExpression<TableRef, NewName, Type>(this.expression, name, this.transformer) as any;
43
+ }
44
+
45
+ public transform<ResultType>(func: (value: Type) => ResultType): Expr<TableRef, Name, ResultType> {
46
+ return new SqlExpression<TableRef, Name, ResultType>(this.expression, this.nameAs, func) as any
47
+ }
48
+
49
+ public asyncTransform<ResultType>(func: (value: Type) => Promise<ResultType>): Expr<TableRef, Name, ResultType> {
50
+ return new SqlExpression<TableRef, Name, ResultType>(this.expression, this.nameAs, func) as any
51
+ }
52
+
53
+ // -------------------------------------------------------------------
54
+ // BOOLEAN CHECKS
55
+ // -------------------------------------------------------------------
56
+
57
+ public isNull(): Expr<TableRef, unknown, SQL_BOOL> {
58
+ return IS_NULL(this.asExpr());
59
+ }
60
+
61
+ public isNotNull(): Expr<TableRef, unknown, SQL_BOOL> {
62
+ return NOT_NULL(this.asExpr());
63
+ }
64
+
65
+
66
+ public notNull(): Expr<TableRef, unknown, SQL_BOOL> {
67
+ return NOT_NULL(this.asExpr());
68
+ }
69
+
70
+ public in<TableRef2 = never>(values: Type[] | Expr<TableRef2, string | unknown, Type> | PrepareQueryArgument): Expr<TableRef | TableRef2, unknown, SQL_BOOL> {
71
+ return IN(this.asExpr(), values);
72
+ }
73
+
74
+ public notEq<TableRef2 = never>(col2: Type | Expr<TableRef2, string | unknown, Type> | PrepareQueryArgument): Expr<TableRef | TableRef2, unknown, SQL_BOOL> {
75
+ return COMPARE(this.asExpr(), "!=", col2);
76
+ }
77
+
78
+ public eq<TableRef2 = never>(col2: Type | Expr<TableRef2, string | unknown, Type> | PrepareQueryArgument): Expr<TableRef | TableRef2, unknown, SQL_BOOL> {
79
+ return COMPARE(this.asExpr(), "=", col2);
80
+ }
81
+
82
+ public lt<TableRef2 = never>(col2: Type | Expr<TableRef2, string | unknown, Type> | PrepareQueryArgument): Expr<TableRef | TableRef2, unknown, SQL_BOOL> {
83
+ return COMPARE(this.asExpr(), "<", col2);
84
+ }
85
+
86
+ public gt<TableRef2 = never>(col2: Type | Expr<TableRef2, string | unknown, Type> | PrepareQueryArgument): Expr<TableRef | TableRef2, unknown, SQL_BOOL> {
87
+ return COMPARE(this.asExpr(), ">", col2);
88
+ }
89
+
90
+ public lte<TableRef2 = never>(col2: Type | Expr<TableRef2, string | unknown, Type> | PrepareQueryArgument): Expr<TableRef | TableRef2, unknown, SQL_BOOL> {
91
+ return COMPARE(this.asExpr(), "<=", col2);
92
+ }
93
+
94
+ public gte<TableRef2 = never>(col2: Type | Expr<TableRef2, string | unknown, Type> | PrepareQueryArgument): Expr<TableRef | TableRef2, unknown, SQL_BOOL> {
95
+ return COMPARE(this.asExpr(), ">=", col2);
96
+ }
97
+
98
+ public compare<TableRef2 = never>(op: COMPARISON_SIGNS, value: Type | Expr<TableRef2, string | unknown, Type> | PrepareQueryArgument): Expr<TableRef | TableRef2, unknown, SQL_BOOL> {
99
+ return COMPARE(this.asExpr(), op, value)
100
+ }
101
+
102
+ public like(value: string): Expr<TableRef, unknown, SQL_BOOL> {
103
+ return LIKE(this.asExpr(), value);
104
+ }
105
+
106
+ public contains(value: string): Expr<TableRef, unknown, SQL_BOOL> {
107
+ return CONTAINS(this.asExpr(), value);
108
+ }
109
+
110
+ public startsWith(value: string): Expr<TableRef, unknown, SQL_BOOL> {
111
+ return STARTS_WITH(this.asExpr(), value);
112
+ }
113
+
114
+ public endsWith(value: string): Expr<TableRef, unknown, SQL_BOOL> {
115
+ return ENDS_WITH(this.asExpr(), value);
116
+ }
117
+
118
+ }
119
+
120
+ export type ExprWithOver<TableRef, Name, Type extends string | number | unknown> =
121
+ symbol
122
+ & Expr<TableRef, Name, Type>
123
+ & SqlExpressionWithOver<TableRef, Name, Type>
124
+
125
+ export class SqlExpressionWithOver<TableRef, Name, Type extends string | number | unknown> extends SqlExpression<TableRef, Name, Type> {
126
+
127
+ public static create<TableRef, Name, Type>(expression: string, nameAs?: string | unknown | undefined): ExprWithOver<TableRef, Name, Type> {
128
+ return new SqlExpressionWithOver(expression, nameAs) as any
129
+ }
130
+
131
+ public over<TableRef1 extends string>(func: (builder: Over<never>) => Over<TableRef1>): Expr<TableRef | TableRef1, unknown, Type>
132
+ //public over<WindowName extends string>(namedWindow: WindowName): Expr<TableRef | `${WINDOW} as ${WindowName}`, unknown, Type>
133
+ public over<WindowName extends string, TableRef1>(namedWindow: WindowName, func: (builder: Over<TableRef1>) => void): Expr<TableRef | TableRef1 | `(window) as ${WindowName}`, unknown, Type>
134
+ public over(a: any, b?: any): any {
135
+ let namedWindow: string = undefined;
136
+ let func: (builder: Over<never>) => void = undefined;
137
+ if (typeof a === "function") {
138
+ func = a
139
+ } else if (typeof a === "string") {
140
+ namedWindow = a;
141
+ if (typeof b === "function") {
142
+ func = b
143
+ }
144
+ }
145
+ const builder = new Over<{}>();
146
+ func(builder);
147
+ return SqlExpression.create(this.expression + " OVER (" + (namedWindow ? escapeId(namedWindow) + " " : "") + builder.toString() + ")");
148
+ }
149
+
150
+ }
151
+
152
+ export class Over<TableRef> {
153
+
154
+ private _partitionBy: string[];
155
+ private _orderBy: string[];
156
+
157
+ public orderBy<TableRef2>(...cols: OrderByStructure<Expr<TableRef2, string, any>>): Over<TableRef | TableRef2> {
158
+ this._orderBy = orderByStructureToSqlString(cols)
159
+ return this as any;
160
+ }
161
+
162
+ public partitionBy<TableRef2>(...cols: Expr<TableRef2, string, any>[]): Over<TableRef | TableRef2> {
163
+ this._partitionBy = cols.map(e => e.expression)
164
+ return this as any;
165
+ }
166
+
167
+ public toString() {
168
+ return (this._partitionBy?.length > 0 ? " PARTITION BY " + this._partitionBy.join(", ") : "") +
169
+ (this._orderBy?.length > 0 ? " ORDER BY " + this._orderBy.join(", ") : "")
170
+ }
171
+
172
+ }