Skip to content

Commit a6c3d72

Browse files
committed
Add length extension for blob expressions
Closes #3778
1 parent 5464174 commit a6c3d72

7 files changed

Lines changed: 37 additions & 0 deletions

File tree

drift/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 2.33.0-dev
2+
3+
- Add `length` extension for blob expressions.
4+
15
## 2.32.1
26

37
- DevTools extension: Make error messages selectable.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import 'dart:typed_data';
2+
3+
import '../query_builder.dart';
4+
5+
/// Defines methods that operate on a column storing [Uint8List] values.
6+
extension BlobExpressionOperators on Expression<Uint8List> {
7+
/// The length of this blob, in bytes.
8+
Expression<int> get length {
9+
return FunctionCallExpression('LENGTH', [this]);
10+
}
11+
}

drift/lib/src/runtime/query_builder/query_builder.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import 'expressions/internal.dart';
3030
import 'helpers.dart';
3131

3232
export 'components/table_valued_function.dart';
33+
export 'expressions/binary.dart';
3334
export 'expressions/bitwise.dart';
3435
export 'expressions/case_when.dart';
3536
export 'on_table.dart';

drift/test/database/expressions/expressions_integration_test.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,11 @@ void main() {
188188
});
189189
});
190190

191+
test('blob length', () async {
192+
expect(await eval(Constant(Uint8List(0)).length), 0);
193+
expect(await eval(Variable(Uint8List(12)).length), 12);
194+
});
195+
191196
test('coalesce', () async {
192197
final expr = coalesce<int>([const Constant(null), const Constant(3)]);
193198

future/drift3/lib/src/query_builder.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export 'query_builder/clauses/where.dart';
99
export 'query_builder/expressions/aggregate.dart';
1010
export 'query_builder/expressions/algebra.dart';
1111
export 'query_builder/expressions/bitwise.dart';
12+
export 'query_builder/expressions/blob.dart';
1213
export 'query_builder/expressions/boolean.dart';
1314
export 'query_builder/expressions/case_when.dart';
1415
export 'query_builder/expressions/comparable.dart';
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import 'dart:typed_data';
2+
3+
import 'expression.dart';
4+
import 'functions.dart';
5+
6+
/// Defines operations on blob ([Uint8List]) values.
7+
extension BlobExpressionOperators on Expression<Uint8List> {
8+
/// The length of this blob, in bytes.
9+
Expression<int> get length => FunctionCallExpression('LENGTH', [this]);
10+
}

future/drift3/test/query_builder/expressions/expressions_integration_test.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,11 @@ void main() {
236236
});
237237
});
238238

239+
test('blob length', () async {
240+
expect(await eval(Literal(Uint8List(0)).length), 0);
241+
expect(await eval(Variable(Uint8List(12)).length), 12);
242+
});
243+
239244
test('coalesce', () async {
240245
final expr = coalesce<int>([const Literal(null), const Literal(3)]);
241246

0 commit comments

Comments
 (0)