toQuery method
Generates a SQL WHERE clause from the filter constraint.
Implementation
String toQuery(ColumnDefinition columnDefinition) {
assert(columnDefinition.name == column);
var columnType = columnDefinition.columnType;
String formattedValue;
if (columnType == ColumnType.integer ||
columnType == ColumnType.bigint ||
columnType == ColumnType.doublePrecision ||
columnType == ColumnType.boolean) {
formattedValue = value;
} else if (columnType == ColumnType.text) {
formattedValue = ValueEncoder.instance.convert(value);
} else if (columnType == ColumnType.timestampWithoutTimeZone) {
if (type == FilterConstraintType.inThePast) {
formattedValue = _microsecondsToInterval(int.parse(value));
} else {
var dateTime = DateTime.tryParse(value);
if (dateTime != null) {
formattedValue = ValueEncoder.instance.convert(dateTime);
} else {
formattedValue = 'NULL';
}
}
} else {
throw Exception(
'Unsupported column type ${columnDefinition.columnType} for column "${columnDefinition.name}".',
);
}
switch (type) {
case FilterConstraintType.equals:
return '"$column" = $formattedValue';
case FilterConstraintType.notEquals:
return '"$column" != $formattedValue';
case FilterConstraintType.greaterThan:
return '"$column" > $formattedValue';
case FilterConstraintType.greaterThanOrEquals:
return '"$column" >= $formattedValue';
case FilterConstraintType.lessThan:
return '"$column" < $formattedValue';
case FilterConstraintType.lessThanOrEquals:
return '"$column" <= $formattedValue';
case FilterConstraintType.like:
return '"$column" LIKE $formattedValue';
case FilterConstraintType.notLike:
return '"$column" NOT LIKE $formattedValue';
case FilterConstraintType.iLike:
return '"$column" ILIKE $formattedValue';
case FilterConstraintType.notILike:
return '"$column" NOT ILIKE $formattedValue';
case FilterConstraintType.between:
return '"$column" BETWEEN $formattedValue AND $value2';
case FilterConstraintType.inThePast:
return '"$column" > (NOW() - $formattedValue)';
case FilterConstraintType.isNull:
return '"$column" IS NULL';
case FilterConstraintType.isNotNull:
return '"$column" IS NOT NULL';
}
}