add filters for custom objects

This commit is contained in:
Moshe Dicker 2024-03-29 11:55:18 -04:00
parent 83b04e7073
commit c22935cd7a
1 changed files with 24 additions and 6 deletions

View File

@ -1,7 +1,7 @@
part of 'manager.dart';
/// Defines a class which is used to wrap a column to only expose filter functions
class ColumnFilters<T extends Object> {
class ColumnFilters<T extends Object, C extends GeneratedColumn<T>> {
/// This class is a wrapper on top of the generated column class
///
/// It's used to expose filter functions for a column type
@ -16,7 +16,7 @@ class ColumnFilters<T extends Object> {
ColumnFilters(this.column);
/// Column that this [ColumnFilters] wraps
GeneratedColumn<T> column;
C column;
/// Create a filter that checks if the column is null.
ComposableFilter isNull() => ComposableFilter.simple(column.isNull());
@ -28,13 +28,13 @@ class ColumnFilters<T extends Object> {
ComposableFilter equals(T value) =>
ComposableFilter.simple(column.equals(value));
/// Create a filter that checks if the column equals a value.
/// Shortcut for [equals]
ComposableFilter call(T value) =>
ComposableFilter.simple(column.equals(value));
}
/// Built in filters for int/double columns
extension NumFilters<T extends num> on ColumnFilters<T> {
extension NumFilters<T extends num> on ColumnFilters<T, GeneratedColumn<T>> {
/// Create a filter to check if the column is bigger than a value
ComposableFilter isBiggerThan(T value) =>
ComposableFilter.simple(column.isBiggerThanValue(value));
@ -61,7 +61,8 @@ extension NumFilters<T extends num> on ColumnFilters<T> {
}
/// Built in filters for BigInt columns
extension BigIntFilters<T extends BigInt> on ColumnFilters<T> {
extension BigIntFilters<T extends BigInt>
on ColumnFilters<T, GeneratedColumn<T>> {
/// Create a filter to check if the column is bigger than a value
ComposableFilter isBiggerThan(T value) =>
ComposableFilter.simple(column.isBiggerThanValue(value));
@ -88,7 +89,8 @@ extension BigIntFilters<T extends BigInt> on ColumnFilters<T> {
}
/// Built in filters for String columns
extension DateFilters<T extends DateTime> on ColumnFilters<T> {
extension DateFilters<T extends DateTime>
on ColumnFilters<T, GeneratedColumn<T>> {
/// Create a filter to check if the column is after a [DateTime]
ComposableFilter isAfter(T value) =>
ComposableFilter.simple(column.isBiggerThanValue(value));
@ -115,6 +117,22 @@ extension DateFilters<T extends DateTime> on ColumnFilters<T> {
isBetween(lower, higher)._reversed();
}
extension CustomFilters<CUSTOM, T extends Object,
C extends GeneratedColumnWithTypeConverter<CUSTOM, T>>
on ColumnFilters<T, C> {
/// Create a filter that checks if the column equals the columns custom type
ComposableFilter equals(CUSTOM value) =>
ComposableFilter.simple(column.equalsValue(value));
/// Create a filter that checks if the column equals the value of the columns custom type
ComposableFilter equalsValue(T value) =>
ComposableFilter.simple(column.equals(value));
/// Shortcut for [equals]
ComposableFilter call(CUSTOM value) =>
ComposableFilter.simple(column.equalsValue(value));
}
/// Defines a class that can be used to compose filters for a column
class ComposableFilter implements HasJoinBuilders {
@override