alternative enum handling

pull/28686/head
timonrieger 2026-06-02 18:00:44 +02:00
parent 35c850ddbc
commit b8b802799e
No known key found for this signature in database
1 changed files with 9 additions and 8 deletions

View File

@ -723,24 +723,25 @@ type EnumColumn = {
'asset.visibility': AssetVisibility; 'asset.visibility': AssetVisibility;
}; };
function enumPredicates<C extends keyof EnumColumn>( type EnumValue = EnumColumn[keyof EnumColumn];
function enumPredicates(
eb: AssetExpressionBuilder, eb: AssetExpressionBuilder,
column: C, column: keyof EnumColumn,
filter: { eq?: EnumColumn[C]; ne?: EnumColumn[C]; in?: EnumColumn[C][]; notIn?: EnumColumn[C][] } = {}, filter: { eq?: EnumValue; ne?: EnumValue; in?: EnumValue[]; notIn?: EnumValue[] } = {},
) { ) {
// casts: kysely's `eb` doesn't distribute its column-value narrowing through the generic
const predicates: Expression<SqlBool>[] = []; const predicates: Expression<SqlBool>[] = [];
if (filter.eq !== undefined) { if (filter.eq !== undefined) {
predicates.push(eb(column, '=', filter.eq as never)); predicates.push(eb(column, '=', filter.eq));
} }
if (filter.ne !== undefined) { if (filter.ne !== undefined) {
predicates.push(eb(column, '<>', filter.ne as never)); predicates.push(eb(column, '<>', filter.ne));
} }
if (filter.in !== undefined) { if (filter.in !== undefined) {
predicates.push(eb(column, 'in', filter.in as never)); predicates.push(eb(column, 'in', filter.in));
} }
if (filter.notIn !== undefined) { if (filter.notIn !== undefined) {
predicates.push(eb(column, 'not in', filter.notIn as never)); predicates.push(eb(column, 'not in', filter.notIn));
} }
return predicates; return predicates;
} }