mirror of https://github.com/AMT-Cheif/drift.git
Add trim() function for text (#1012)
This commit is contained in:
parent
2e2d1b4e6d
commit
362b61a178
|
@ -2,6 +2,7 @@
|
|||
|
||||
- Reverted the `SelectableUtils` extension, its members have been added back to the
|
||||
`Selectable` class.
|
||||
- Add `trim`, `trimLeft()` and `trimRight()` extensions for text expressions
|
||||
|
||||
## 4.0.0-nullsafety.1
|
||||
|
||||
|
|
|
@ -105,6 +105,21 @@ extension StringExpressionOperators on Expression<String?> {
|
|||
Expression<int?> get length {
|
||||
return FunctionCallExpression('LENGTH', [this]);
|
||||
}
|
||||
|
||||
/// Removes spaces from both ends of this string.
|
||||
Expression<String?> trim() {
|
||||
return FunctionCallExpression('TRIM', [this]);
|
||||
}
|
||||
|
||||
/// Removes spaces from the beginning of this string.
|
||||
Expression<String?> trimLeft() {
|
||||
return FunctionCallExpression('LTRIM', [this]);
|
||||
}
|
||||
|
||||
/// Removes spaces from the end of this string.
|
||||
Expression<String?> trimRight() {
|
||||
return FunctionCallExpression('RTRIM', [this]);
|
||||
}
|
||||
}
|
||||
|
||||
/// A `text LIKE pattern` expression that will be true if the first expression
|
||||
|
|
|
@ -19,6 +19,11 @@ void main() {
|
|||
|
||||
tearDown(() => db.close());
|
||||
|
||||
Future<T> eval<T>(Expression<T> expr) {
|
||||
final query = db.selectOnly(db.users)..addColumns([expr]);
|
||||
return query.getSingle().then((row) => row.read(expr));
|
||||
}
|
||||
|
||||
test('plus and minus on DateTimes', () async {
|
||||
const nowExpr = currentDateAndTime;
|
||||
final tomorrow = nowExpr + const Duration(days: 1);
|
||||
|
@ -33,31 +38,40 @@ void main() {
|
|||
const Duration(days: 1).inSeconds);
|
||||
});
|
||||
|
||||
test('datetime.date format', () async {
|
||||
test('datetime.date format', () {
|
||||
final expr = Variable.withDateTime(DateTime(2020, 09, 04, 8, 55));
|
||||
final asDate = expr.date;
|
||||
|
||||
final row =
|
||||
await (db.selectOnly(db.users)..addColumns([asDate])).getSingle();
|
||||
|
||||
expect(row.read(asDate), '2020-09-04');
|
||||
expect(eval(asDate), completion('2020-09-04'));
|
||||
});
|
||||
|
||||
test('text contains', () async {
|
||||
const stringLiteral = Constant('Some sql string literal');
|
||||
final containsSql = stringLiteral.contains('sql');
|
||||
group('text', () {
|
||||
test('contains', () {
|
||||
const stringLiteral = Constant('Some sql string literal');
|
||||
final containsSql = stringLiteral.contains('sql');
|
||||
|
||||
final row =
|
||||
await (db.selectOnly(db.users)..addColumns([containsSql])).getSingle();
|
||||
expect(eval(containsSql), completion(isTrue));
|
||||
});
|
||||
|
||||
expect(row.read(containsSql), isTrue);
|
||||
test('trim()', () {
|
||||
const literal = Constant(' hello world ');
|
||||
expect(eval(literal.trim()), completion('hello world'));
|
||||
});
|
||||
|
||||
test('trimLeft()', () {
|
||||
const literal = Constant(' hello world ');
|
||||
expect(eval(literal.trimLeft()), completion('hello world '));
|
||||
});
|
||||
|
||||
test('trimRight()', () {
|
||||
const literal = Constant(' hello world ');
|
||||
expect(eval(literal.trimRight()), completion(' hello world'));
|
||||
});
|
||||
});
|
||||
|
||||
test('coalesce', () async {
|
||||
final expr = coalesce<int>([const Constant(null), const Constant(3)]);
|
||||
|
||||
final row = await (db.selectOnly(db.users)..addColumns([expr])).getSingle();
|
||||
|
||||
expect(row.read(expr), equals(3));
|
||||
expect(eval(expr), completion(3));
|
||||
});
|
||||
}
|
||||
|
|
|
@ -36,9 +36,20 @@ void main() {
|
|||
expression.contains('foo bar'), generates('col LIKE ?', ['%foo bar%']));
|
||||
});
|
||||
|
||||
test('can use string functions', () {
|
||||
expect(expression.upper(), generates('UPPER(col)'));
|
||||
expect(expression.lower(), generates('LOWER(col)'));
|
||||
expect(expression.length, generates('LENGTH(col)'));
|
||||
group('can use string functions', () {
|
||||
final tests = {
|
||||
expression.upper(): 'UPPER(col)',
|
||||
expression.lower(): 'LOWER(col)',
|
||||
expression.trim(): 'TRIM(col)',
|
||||
expression.trimLeft(): 'LTRIM(col)',
|
||||
expression.trimRight(): 'RTRIM(col)',
|
||||
expression.length: 'LENGTH(col)',
|
||||
};
|
||||
|
||||
tests.forEach((expr, sql) {
|
||||
test(sql, () {
|
||||
expect(expr, generates(sql));
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue