@@ -223,7 +223,7 @@ export type WhereInput<
223223 : FieldIsArray < Schema , Model , Key > extends true
224224 ? ArrayFilter < GetModelFieldType < Schema , Model , Key > >
225225 : // primitive
226- PrimitiveFilter < GetModelFieldType < Schema , Model , Key > , ModelFieldIsOptional < Schema , Model , Key > > ;
226+ PrimitiveFilter < Schema , GetModelFieldType < Schema , Model , Key > , ModelFieldIsOptional < Schema , Model , Key > > ;
227227} & {
228228 $expr ?: ( eb : ExpressionBuilder < ToKyselySchema < Schema > , Model > ) => OperandExpression < SqlBool > ;
229229} & {
@@ -249,47 +249,52 @@ type ArrayFilter<T extends string> = {
249249 isEmpty ?: boolean ;
250250} ;
251251
252- type PrimitiveFilter < T extends string , Nullable extends boolean > = T extends 'String'
253- ? StringFilter < Nullable >
252+ type PrimitiveFilter < Schema extends SchemaDef , T extends string , Nullable extends boolean > = T extends 'String'
253+ ? StringFilter < Schema , Nullable >
254254 : T extends 'Int' | 'Float' | 'Decimal' | 'BigInt'
255- ? NumberFilter < T , Nullable >
255+ ? NumberFilter < Schema , T , Nullable >
256256 : T extends 'Boolean'
257257 ? BooleanFilter < Nullable >
258258 : T extends 'DateTime'
259- ? DateTimeFilter < Nullable >
259+ ? DateTimeFilter < Schema , Nullable >
260260 : T extends 'Bytes'
261261 ? BytesFilter < Nullable >
262262 : T extends 'Json'
263263 ? 'Not implemented yet' // TODO: Json filter
264264 : never ;
265265
266- type CommonPrimitiveFilter < DataType , T extends BuiltinType , Nullable extends boolean > = {
266+ type CommonPrimitiveFilter < Schema extends SchemaDef , DataType , T extends BuiltinType , Nullable extends boolean > = {
267267 equals ?: NullableIf < DataType , Nullable > ;
268268 in ?: DataType [ ] ;
269269 notIn ?: DataType [ ] ;
270270 lt ?: DataType ;
271271 lte ?: DataType ;
272272 gt ?: DataType ;
273273 gte ?: DataType ;
274- not ?: PrimitiveFilter < T , Nullable > ;
274+ not ?: PrimitiveFilter < Schema , T , Nullable > ;
275275} ;
276276
277- export type StringFilter < Nullable extends boolean > =
277+ export type StringFilter < Schema extends SchemaDef , Nullable extends boolean > =
278278 | NullableIf < string , Nullable >
279- | ( CommonPrimitiveFilter < string , 'String' , Nullable > & {
279+ | ( CommonPrimitiveFilter < Schema , string , 'String' , Nullable > & {
280280 contains ?: string ;
281281 startsWith ?: string ;
282282 endsWith ?: string ;
283- mode ?: 'default' | 'insensitive' ;
284- } ) ;
283+ } & ( ProviderSupportsCaseSensitivity < Schema > extends true
284+ ? {
285+ mode ?: 'default' | 'insensitive' ;
286+ }
287+ : { } ) ) ;
285288
286- export type NumberFilter < T extends 'Int' | 'Float' | 'Decimal' | 'BigInt' , Nullable extends boolean > =
287- | NullableIf < number | bigint , Nullable >
288- | CommonPrimitiveFilter < number , T , Nullable > ;
289+ export type NumberFilter <
290+ Schema extends SchemaDef ,
291+ T extends 'Int' | 'Float' | 'Decimal' | 'BigInt' ,
292+ Nullable extends boolean ,
293+ > = NullableIf < number | bigint , Nullable > | CommonPrimitiveFilter < Schema , number , T , Nullable > ;
289294
290- export type DateTimeFilter < Nullable extends boolean > =
295+ export type DateTimeFilter < Schema extends SchemaDef , Nullable extends boolean > =
291296 | NullableIf < Date | string , Nullable >
292- | CommonPrimitiveFilter < Date | string , 'DateTime' , Nullable > ;
297+ | CommonPrimitiveFilter < Schema , Date | string , 'DateTime' , Nullable > ;
293298
294299export type BytesFilter < Nullable extends boolean > =
295300 | NullableIf < Uint8Array | Buffer , Nullable >
@@ -393,7 +398,12 @@ export type SelectInput<
393398 [ Key in NonRelationFields < Schema , Model > ] ?: true ;
394399} & ( AllowRelation extends true ? IncludeInput < Schema , Model > : { } ) & // relation fields
395400 // relation count
396- ( AllowCount extends true ? { _count ?: SelectCount < Schema , Model > } : { } ) ;
401+ ( AllowCount extends true
402+ ? // _count is only allowed if the model has to-many relations
403+ HasToManyRelations < Schema , Model > extends true
404+ ? { _count ?: SelectCount < Schema , Model > }
405+ : { }
406+ : { } ) ;
397407
398408type SelectCount < Schema extends SchemaDef , Model extends GetModels < Schema > > =
399409 | true
@@ -1181,4 +1191,12 @@ type NonOwnedRelationFields<Schema extends SchemaDef, Model extends GetModels<Sc
11811191 : Key ] : true ;
11821192} ;
11831193
1194+ type HasToManyRelations < Schema extends SchemaDef , Model extends GetModels < Schema > > = keyof {
1195+ [ Key in RelationFields < Schema , Model > as FieldIsArray < Schema , Model , Key > extends true ? Key : never ] : true ;
1196+ } extends never
1197+ ? false
1198+ : true ;
1199+
1200+ type ProviderSupportsCaseSensitivity < Schema extends SchemaDef > = Schema [ 'provider' ] extends 'postgresql' ? true : false ;
1201+
11841202// #endregion
0 commit comments