From 13ca9d1b0adf894359efd14d21da7da2308f1917 Mon Sep 17 00:00:00 2001 From: Yaniv Shaked Date: Sun, 26 Dec 2021 21:59:25 +0200 Subject: [PATCH 1/4] Fix for reading blob mapFromDatabaseResponse fixed for BlobType --- drift/lib/src/runtime/types/sql_types.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drift/lib/src/runtime/types/sql_types.dart b/drift/lib/src/runtime/types/sql_types.dart index a1bca73f..981cc938 100644 --- a/drift/lib/src/runtime/types/sql_types.dart +++ b/drift/lib/src/runtime/types/sql_types.dart @@ -168,7 +168,8 @@ class BlobType extends SqlType { @override Uint8List? mapFromDatabaseResponse(dynamic response) { - return response as Uint8List?; + var list = response.codeUnits; + return Uint8List.fromList(list); } @override From 8b3d0bd370c67b8a95ca2223e265a262382202e8 Mon Sep 17 00:00:00 2001 From: Yaniv Shaked Date: Mon, 27 Dec 2021 08:54:51 +0200 Subject: [PATCH 2/4] Robust approach --- drift/lib/src/runtime/types/sql_types.dart | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drift/lib/src/runtime/types/sql_types.dart b/drift/lib/src/runtime/types/sql_types.dart index 981cc938..5f953eb8 100644 --- a/drift/lib/src/runtime/types/sql_types.dart +++ b/drift/lib/src/runtime/types/sql_types.dart @@ -168,8 +168,11 @@ class BlobType extends SqlType { @override Uint8List? mapFromDatabaseResponse(dynamic response) { - var list = response.codeUnits; - return Uint8List.fromList(list); + if (response is String) { + var list = response.codeUnits; + return Uint8List.fromList(list); + } + return response as Uint8List?; } @override From 39da7ee2e20157b9fd52619c9485b9bfca85154b Mon Sep 17 00:00:00 2001 From: Yaniv Shaked Date: Mon, 27 Dec 2021 15:50:09 +0200 Subject: [PATCH 3/4] Update sql_types.dart prefer final --- drift/lib/src/runtime/types/sql_types.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drift/lib/src/runtime/types/sql_types.dart b/drift/lib/src/runtime/types/sql_types.dart index 5f953eb8..14c2f16f 100644 --- a/drift/lib/src/runtime/types/sql_types.dart +++ b/drift/lib/src/runtime/types/sql_types.dart @@ -169,7 +169,7 @@ class BlobType extends SqlType { @override Uint8List? mapFromDatabaseResponse(dynamic response) { if (response is String) { - var list = response.codeUnits; + final list = response.codeUnits; return Uint8List.fromList(list); } return response as Uint8List?; From c21a4bbc397144655d09c278c1ac635762dc3fd2 Mon Sep 17 00:00:00 2001 From: Yaniv Shaked Date: Mon, 27 Dec 2021 20:24:17 +0200 Subject: [PATCH 4/4] Test for blob by string --- drift/test/types/blob_test.dart | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drift/test/types/blob_test.dart b/drift/test/types/blob_test.dart index 7310d8ac..06dd9754 100644 --- a/drift/test/types/blob_test.dart +++ b/drift/test/types/blob_test.dart @@ -4,7 +4,7 @@ import 'package:drift/drift.dart'; import 'package:test/test.dart'; void main() { - test('maps without transormation', () { + test('maps without transformation', () { const type = BlobType(); final data = Uint8List.fromList(List.generate(256, (i) => i)); @@ -19,4 +19,14 @@ void main() { expect(type.mapToSqlConstant(data), equalsIgnoringCase("x'$hex'")); }); + + test('maps of string', () { + const chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'; + const type = BlobType(); + final data = List.generate(256, (i) => chars[i % chars.length]); + final dataString = data.join(); + final dataInt = data.map((e) => e.codeUnits[0]).toList(); + final dataUint8 = Uint8List.fromList(dataInt); + expect(type.mapFromDatabaseResponse(dataString), dataUint8); + }); }