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;
};
function enumPredicates<C extends keyof EnumColumn>(
type EnumValue = EnumColumn[keyof EnumColumn];
function enumPredicates(
eb: AssetExpressionBuilder,
column: C,
filter: { eq?: EnumColumn[C]; ne?: EnumColumn[C]; in?: EnumColumn[C][]; notIn?: EnumColumn[C][] } = {},
column: keyof EnumColumn,
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>[] = [];
if (filter.eq !== undefined) {
predicates.push(eb(column, '=', filter.eq as never));
predicates.push(eb(column, '=', filter.eq));
}
if (filter.ne !== undefined) {
predicates.push(eb(column, '<>', filter.ne as never));
predicates.push(eb(column, '<>', filter.ne));
}
if (filter.in !== undefined) {
predicates.push(eb(column, 'in', filter.in as never));
predicates.push(eb(column, 'in', filter.in));
}
if (filter.notIn !== undefined) {
predicates.push(eb(column, 'not in', filter.notIn as never));
predicates.push(eb(column, 'not in', filter.notIn));
}
return predicates;
}