Skip to content

Commit 331ddef

Browse files
authored
fix(sqlite) : nullable maps are not cast to default values #531 (#532)
1 parent 9a41b95 commit 331ddef

File tree

7 files changed

+47
-13
lines changed

7 files changed

+47
-13
lines changed

packages/brick_offline_first_build/test/offline_first_generator/test_primitive_fields.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,8 @@ Future<Map<String, dynamic>> _$PrimitiveFieldsToSqlite(PrimitiveFields instance,
175175
'nullable_set': instance.nullableSet == null
176176
? null
177177
: jsonEncode(instance.nullableSet.toList()),
178-
'nullable_map': jsonEncode(instance.nullableMap ?? {}),
178+
'nullable_map':
179+
instance.nullableMap != null ? jsonEncode(instance.nullableMap) : null,
179180
'nullable_longer_camelized_variable':
180181
instance.nullableLongerCamelizedVariable,
181182
'nullable_casing': instance.nullableCasing != null

packages/brick_sqlite/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
## Unreleased
22

3+
## 3.2.2
4+
5+
- Fix: nullable maps are not cast to a default value on serialization (#531)
6+
37
## 3.2.1
48

59
- Remove `dart:io` dependency

packages/brick_sqlite/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ homepage: https://github.com/GetDutchie/brick/tree/main/packages/brick_sqlite
44
issue_tracker: https://github.com/GetDutchie/brick/issues
55
repository: https://github.com/GetDutchie/brick
66

7-
version: 3.2.1
7+
version: 3.2.2
88

99
environment:
1010
sdk: ">=2.18.0 <4.0.0"

packages/brick_sqlite_generators/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
## Unreleased
22

3+
## 3.3.1
4+
5+
- Fix: nullable maps are not cast to a default value on serialization (#531)
6+
37
## 3.3.0
48

59
- Upgrade `brick_core` to `1.3.0`

packages/brick_sqlite_generators/lib/src/sqlite_serialize.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,10 @@ class SqliteSerialize<_Model extends SqliteModel> extends SqliteSerdesGenerator<
205205

206206
// Map
207207
} else if (checker.isMap) {
208-
final nullableSuffix = checker.isNullable ? ' ?? {}' : '';
209-
return 'jsonEncode($fieldValue$nullableSuffix)';
208+
if (checker.isNullable) {
209+
return '$fieldValue != null ? jsonEncode($fieldValue) : null';
210+
}
211+
return 'jsonEncode($fieldValue)';
210212
} else if (checker.toJsonMethod != null) {
211213
final nullableSuffix = checker.isNullable ? '!' : '';
212214
final output = 'jsonEncode($fieldValue$nullableSuffix.toJson())';

packages/brick_sqlite_generators/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ homepage: https://github.com/GetDutchie/brick/tree/main/packages/brick_sqlite_ge
44
issue_tracker: https://github.com/GetDutchie/brick/issues
55
repository: https://github.com/GetDutchie/brick
66

7-
version: 3.3.0+1
7+
version: 3.3.1
88

99
environment:
1010
sdk: ">=2.18.0 <4.0.0"

packages/brick_sqlite_generators/test/sqlite_model_serdes_generator/test_all_field_types.dart

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,16 @@ Future<AllFieldTypes> _$AllFieldTypesFromSqlite(Map<String, dynamic> data,
2323
.whereType<Casing>()
2424
.toList()
2525
.cast<Casing>(),
26+
longerCamelizedVariable: data['longer_camelized_variable'] == null
27+
? null
28+
: data['longer_camelized_variable'] as String?,
29+
map: jsonDecode(data['map']),
2630
nullableList: data['nullable_list'] == null
2731
? null
2832
: jsonDecode(data['nullable_list']).toList().cast<int>(),
29-
longerCamelizedVariable: data['longer_camelized_variable'] == null
33+
nullableMap: data['nullable_map'] == null
3034
? null
31-
: data['longer_camelized_variable'] as String?,
35+
: jsonDecode(data['nullable_map']),
3236
string: data['string'] == null ? null : data['string'] as String?,
3337
stringSet: jsonDecode(data['string_set']).toSet().cast<String>())
3438
..primaryKey = data['_brick_id'] as int;
@@ -46,10 +50,13 @@ Future<Map<String, dynamic>> _$AllFieldTypesToSqlite(AllFieldTypes instance,
4650
: null,
4751
'enum_list': jsonEncode(
4852
instance.enumList.map((s) => Casing.values.indexOf(s)).toList()),
53+
'longer_camelized_variable': instance.longerCamelizedVariable,
54+
'map': jsonEncode(instance.map),
4955
'nullable_list': instance.nullableList == null
5056
? null
5157
: jsonEncode(instance.nullableList),
52-
'longer_camelized_variable': instance.longerCamelizedVariable,
58+
'nullable_map':
59+
instance.nullableMap != null ? jsonEncode(instance.nullableMap) : null,
5360
'string': instance.string,
5461
'string_set': jsonEncode(instance.stringSet.toList())
5562
};
@@ -97,17 +104,29 @@ class AllFieldTypesAdapter extends SqliteAdapter<AllFieldTypes> {
97104
iterable: true,
98105
type: Casing,
99106
),
107+
'longerCamelizedVariable': const RuntimeSqliteColumnDefinition(
108+
association: false,
109+
columnName: 'longer_camelized_variable',
110+
iterable: false,
111+
type: String,
112+
),
113+
'map': const RuntimeSqliteColumnDefinition(
114+
association: false,
115+
columnName: 'map',
116+
iterable: false,
117+
type: Map,
118+
),
100119
'nullableList': const RuntimeSqliteColumnDefinition(
101120
association: false,
102121
columnName: 'nullable_list',
103122
iterable: true,
104123
type: int,
105124
),
106-
'longerCamelizedVariable': const RuntimeSqliteColumnDefinition(
125+
'nullableMap': const RuntimeSqliteColumnDefinition(
107126
association: false,
108-
columnName: 'longer_camelized_variable',
127+
columnName: 'nullable_map',
109128
iterable: false,
110-
type: String,
129+
type: Map,
111130
),
112131
'string': const RuntimeSqliteColumnDefinition(
113132
association: false,
@@ -154,8 +173,10 @@ class AllFieldTypes {
154173
this.dub,
155174
this.enumField,
156175
required this.enumList,
157-
this.nullableList,
158176
this.longerCamelizedVariable,
177+
this.nullableList,
178+
this.nullableMap,
179+
required this.map,
159180
this.string,
160181
required this.stringSet,
161182
});
@@ -165,8 +186,10 @@ class AllFieldTypes {
165186
final double? dub;
166187
final Casing? enumField;
167188
final List<Casing> enumList;
168-
final List<int>? nullableList;
169189
final String? longerCamelizedVariable;
190+
final Map<String, dynamic> map;
191+
final List<int>? nullableList;
192+
final Map<String, dynamic>? nullableMap;
170193
final String? string;
171194
final Set<String> stringSet;
172195
}

0 commit comments

Comments
 (0)