@@ -9,6 +9,7 @@ import { SpecialFields } from "../typings/SpecialFields";
9
9
import { BelongsAccessorBase } from "../decorators/base/BelongsAccessorBase" ;
10
10
import { findRepository } from "./findRepository" ;
11
11
import { get_column_name_tuple } from "./internal/get_column_name_tuple" ;
12
+ import { WhereColumnType } from "../typings/WhereColumnType" ;
12
13
13
14
/**
14
15
* Get arguments for the where-equal query.
@@ -39,7 +40,7 @@ export function getWhereArguments<
39
40
Literal extends SpecialFields < T , Field > >
40
41
(
41
42
creator : Creator < T > ,
42
- fieldLike : `${Literal } ` | `${string } .${Literal } `,
43
+ fieldLike : WhereColumnType < `${Literal } ` | `${string } .${Literal } `> ,
43
44
param : Field . MemberType < T , Literal > | null
44
45
) : [ string , Record < string , Field . ValueType < T [ Literal ] > > ] ;
45
46
@@ -69,12 +70,12 @@ export function getWhereArguments<
69
70
* never can be the runtime error
70
71
*/
71
72
export function getWhereArguments <
72
- T extends { [ P in Literal ] : Field ; } ,
73
- Literal extends SpecialFields < T , Field > ,
73
+ T extends { [ P in Literal ] : Field ; } ,
74
+ Literal extends SpecialFields < T , Field > ,
74
75
OperatorType extends Operator >
75
76
(
76
77
creator : Creator < T > ,
77
- fieldLike : `${Literal } ` | `${string } .${Literal } `,
78
+ fieldLike : WhereColumnType < `${Literal } ` | `${string } .${Literal } `> ,
78
79
operator : OperatorType ,
79
80
param : OperatorType extends "=" | "!=" | "<>"
80
81
? Field . MemberType < T , Literal > | null
@@ -111,7 +112,7 @@ export function getWhereArguments<
111
112
Literal extends SpecialFields < T , Field > >
112
113
(
113
114
creator : Creator < T > ,
114
- fieldLike : `${Literal } ` | `${string } .${Literal } `,
115
+ fieldLike : WhereColumnType < `${Literal } ` | `${string } .${Literal } `> ,
115
116
operator : "IN" | "NOT IN" ,
116
117
parameters : Array < Field . MemberType < T , Literal > >
117
118
) : [ string , Record < string , [ Field . ValueType < T [ Literal ] > , Field . ValueType < T [ Literal ] > ] > ] ;
@@ -147,7 +148,7 @@ export function getWhereArguments<
147
148
Literal extends SpecialFields < T , Field > >
148
149
(
149
150
creator : Creator < T > ,
150
- fieldLike : `${Literal } ` | `${string } .${Literal } `,
151
+ fieldLike : WhereColumnType < `${Literal } ` | `${string } .${Literal } `> ,
151
152
operator : "BETWEEN" ,
152
153
minimum : Field . MemberType < T , Literal > ,
153
154
maximum : Field . MemberType < T , Literal >
@@ -158,14 +159,23 @@ export function getWhereArguments<
158
159
Literal extends SpecialFields < T , Field > >
159
160
(
160
161
creator : Creator < T > ,
161
- fieldLike : `${Literal } ` | `${string } .${Literal } `,
162
+ fieldLike : WhereColumnType < `${Literal } ` | `${string } .${Literal } `> ,
162
163
...rest : any [ ]
163
164
) : [ string , any ]
164
165
{
165
- const tuple : [ string , string ] = get_column_name_tuple ( creator , fieldLike ) ;
166
+ const tuple : [ string , string ] = get_column_name_tuple
167
+ (
168
+ creator ,
169
+ typeof fieldLike === "string"
170
+ ? fieldLike
171
+ : fieldLike [ 0 ]
172
+ ) ;
166
173
const column : string = tuple [ 0 ]
167
174
? `${ tuple [ 0 ] } .${ tuple [ 1 ] } `
168
175
: tuple [ 1 ] ;
176
+ const left : string = typeof fieldLike === "string"
177
+ ? column
178
+ : fieldLike [ 1 ] ( column ) ;
169
179
170
180
// MOST OPERATORS
171
181
if ( rest . length <= 2 )
@@ -190,9 +200,9 @@ export function getWhereArguments<
190
200
if ( param === null )
191
201
{
192
202
if ( operator === "=" )
193
- return [ `${ column } IS NULL` ] as any ;
203
+ return [ `${ left } IS NULL` ] as any ;
194
204
else if ( operator === "!=" || operator === "<>" )
195
- return [ `${ column } IS NOT NULL` ] as any ;
205
+ return [ `${ left } IS NOT NULL` ] as any ;
196
206
else
197
207
throw new InvalidArgument ( `Error on ${ creator . name } .getColumn(): unable to bind null value for the ${ operator } operator.` ) ;
198
208
}
@@ -202,7 +212,7 @@ export function getWhereArguments<
202
212
const binding : string = ( operator === "IN" || operator === "NOT IN" )
203
213
? `(:...${ uuid } )`
204
214
: `:${ uuid } ` ;
205
- return [ `${ column } ${ operator } ${ binding } ` , { [ uuid ] : param } ] ;
215
+ return [ `${ left } ${ operator } ${ binding } ` , { [ uuid ] : param } ] ;
206
216
}
207
217
208
218
// BETWEEN OPERATOR
@@ -211,7 +221,7 @@ export function getWhereArguments<
211
221
const minimum : Field . ValueType < T [ Literal ] > = _Decompose_entity ( rest [ 1 ] ) ;
212
222
const maximum : Field . ValueType < T [ Literal ] > = _Decompose_entity ( rest [ 2 ] ) ;
213
223
214
- return [ `${ column } BETWEEN :${ from } AND :${ to } ` ,
224
+ return [ `${ left } BETWEEN :${ from } AND :${ to } ` ,
215
225
{
216
226
[ from ] : minimum ,
217
227
[ to ] : maximum
0 commit comments