getWhereParameters static method

String? getWhereParameters(
  1. List<Column> columns,
  2. List<QueryFilter>? filters
)

Implementation

static String? getWhereParameters(
    List<Column> columns, List<QueryFilter>? filters) {
  if (filters == null) {
    return null;
  }

  final whereParams = filters.map((filter) {
    final Column attributeColumn = columns
        .lastWhere((column) => column.attributeName == filter.attribute);

    switch (filter.condition) {
      case QueryCondition.In:
        final List<String> values =
            filter.value is List ? filter.value : [filter.value];
        return '${filter.attribute} IN (${values.map((value) => '${QueryFilter.getTypedValue(attributeColumn, value)}').join(',')})';

      case QueryCondition.Equal:
        return '${filter.attribute} = ${QueryFilter.getTypedValue(attributeColumn, filter.value)}';

      case QueryCondition.Like:
        return '${filter.attribute} LIKE ${QueryFilter.getTypedValue(attributeColumn, filter.value)}';

      case QueryCondition.Ilike:
        return '${filter.attribute} LIKE ${QueryFilter.getTypedValue(attributeColumn, filter.value, isLikeFilter: true, filterCondition: filter.filterCondition, key: filter.key, keyValue: filter.keyValue)}';

      case QueryCondition.LessThan:
        return '${filter.attribute} < ${QueryFilter.getTypedValue(attributeColumn, filter.value)}';

      case QueryCondition.LessThanOrEqualTo:
        return '${filter.attribute} <= ${QueryFilter.getTypedValue(attributeColumn, filter.value)}';
      case QueryCondition.GreaterThan:
        return '${filter.attribute} > ${QueryFilter.getTypedValue(attributeColumn, filter.value)}';

      case QueryCondition.GreaterThanOrEqualTo:
        return '${filter.attribute} >= ${QueryFilter.getTypedValue(attributeColumn, filter.value)}';
      default:
        return null;
    }
  }).where((filter) => filter != null);

  return whereParams.length > 0 ? whereParams.join(' AND ') : null;
}