From acbcc6bb58a2bdbf19fd0cae26e16b0b21cbeaf6 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Tue, 11 Jun 2019 14:49:45 +0200 Subject: [PATCH] Fix NPE when parsing a real type Fixes #32 --- moor/lib/src/types/sql_types.dart | 9 +++++++-- moor/test/types/real_type_test.dart | 29 +++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 moor/test/types/real_type_test.dart diff --git a/moor/lib/src/types/sql_types.dart b/moor/lib/src/types/sql_types.dart index dd838c89..85e5e9d3 100644 --- a/moor/lib/src/types/sql_types.dart +++ b/moor/lib/src/types/sql_types.dart @@ -116,10 +116,15 @@ class RealType extends SqlType { const RealType(); @override - double mapFromDatabaseResponse(response) => (response as num).toDouble(); + double mapFromDatabaseResponse(response) => (response as num)?.toDouble(); @override - String mapToSqlConstant(num content) => content.toString(); + String mapToSqlConstant(num content) { + if (content == null) { + return 'NULL'; + } + return content.toString(); + } @override mapToSqlVariable(num content) => content; diff --git a/moor/test/types/real_type_test.dart b/moor/test/types/real_type_test.dart new file mode 100644 index 00000000..55a759de --- /dev/null +++ b/moor/test/types/real_type_test.dart @@ -0,0 +1,29 @@ +import 'package:moor/moor.dart' as moor; +import 'package:test_api/test_api.dart'; + +void main() { + final type = const moor.RealType(); + + group('RealType', () { + test('can be read from floating point values returned by sql', () { + expect(type.mapFromDatabaseResponse(3.1234), 3.1234); + }); + + test('can read null value from sql', () { + expect(type.mapFromDatabaseResponse(null), isNull); + }); + + test('can be mapped to sql constants', () { + expect(type.mapToSqlConstant(1.123), '1.123'); + }); + + test('can be mapped to variables', () { + expect(type.mapToSqlVariable(1.123), 1.123); + }); + + test('map null to null', () { + expect(type.mapToSqlConstant(null), 'NULL'); + expect(type.mapToSqlVariable(null), null); + }); + }); +}