Skip to content

Commit fcb7d78

Browse files
committed
Include all getters row class -> insertable
Closes #3319
1 parent 91106e9 commit fcb7d78

File tree

8 files changed

+413
-6
lines changed

8 files changed

+413
-6
lines changed

drift/example/repro.dart

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import 'package:drift/drift.dart';
2+
3+
part 'repro.g.dart';
4+
5+
@UseRowClass(User, generateInsertable: true)
6+
class Users extends Table {
7+
IntColumn get id => integer().autoIncrement()();
8+
TextColumn get some => text()();
9+
TextColumn get some2 => text()();
10+
}
11+
12+
class User implements Insertable<User> {
13+
User({required this.id, required this.some, String? some2})
14+
: some2 = some2 ?? some;
15+
16+
final int id;
17+
final String some;
18+
final String some2;
19+
20+
@override
21+
Map<String, Expression> toColumns(bool nullToAbsent) {
22+
return toInsertable().toColumns(nullToAbsent);
23+
}
24+
}
25+
26+
@DriftDatabase(tables: [Users])
27+
class Database {}

drift/example/repro.g.dart

Lines changed: 305 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

drift/test/generated/todos.g.dart

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

drift_dev/lib/src/analysis/resolver/shared/dart_types.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,13 @@ ExistingRowClass? validateExistingClass(
164164
}
165165
}
166166

167+
final getters = <String, String>{};
168+
for (final column in columns) {
169+
if (instantiation.getGetter(column.nameInDart) != null) {
170+
getters[column.nameInSql] = column.nameInDart;
171+
}
172+
}
173+
167174
return ExistingRowClass(
168175
targetClass: AnnotatedDartCode.topLevelElement(desiredClass),
169176
targetType: instantiation,
@@ -175,6 +182,7 @@ ExistingRowClass? validateExistingClass(
175182
for (final named in namedColumns.entries)
176183
named.key.name: named.value.nameInSql,
177184
},
185+
columnGetters: getters,
178186
generateInsertable: generateInsertable,
179187
isAsyncFactory: isAsyncFactory,
180188
);
@@ -195,11 +203,13 @@ ExistingRowClass validateRowClassFromRecordType(
195203
};
196204

197205
final namedColumns = <String, String>{};
206+
final columnGetters = <String, String>{};
198207

199208
for (final parameter in dartType.namedFields) {
200209
final column = unmatchedColumnsByName.remove(parameter.name);
201210
if (column != null) {
202211
namedColumns[parameter.name] = column.nameInSql;
212+
columnGetters[column.nameInSql] = parameter.name;
203213

204214
checkType(
205215
column.sqlType,
@@ -234,6 +244,7 @@ ExistingRowClass validateRowClassFromRecordType(
234244
positionalColumns: const [],
235245
namedColumns: namedColumns,
236246
generateInsertable: generateInsertable,
247+
columnGetters: columnGetters,
237248
);
238249
}
239250

@@ -261,6 +272,9 @@ ExistingRowClass defaultRecordRowClass({
261272
namedColumns: {
262273
for (final column in columns) column.nameInDart: column.nameInSql,
263274
},
275+
columnGetters: {
276+
for (final column in columns) column.nameInSql: column.nameInDart,
277+
},
264278
);
265279
}
266280

0 commit comments

Comments
 (0)