mirror of https://github.com/AMT-Cheif/drift.git
Avoid unecessary async in lambda
This commit is contained in:
parent
b048ce44d4
commit
fe8611c5f4
|
@ -7,7 +7,8 @@
|
||||||
- Support two different queries using `LIST()` columns having the same result class name.
|
- Support two different queries using `LIST()` columns having the same result class name.
|
||||||
- Fix table classes not extending defining Dart classes with modular generation.
|
- Fix table classes not extending defining Dart classes with modular generation.
|
||||||
- Fix `@UseDataClass` with `extending` not working with modular generation.
|
- Fix `@UseDataClass` with `extending` not working with modular generation.
|
||||||
- Fix `drift_dev` generating invalid code when using a type converter with a nullable JSON type.
|
- Fix generating invalid code when using a type converter with a nullable JSON type.
|
||||||
|
- Avoid unecessary `async` modifier when mapping queries to existing row classes.
|
||||||
|
|
||||||
## 2.4.1
|
## 2.4.1
|
||||||
|
|
||||||
|
|
|
@ -78,9 +78,10 @@ class QueryWriter {
|
||||||
final resultSet = query.resultSet!;
|
final resultSet = query.resultSet!;
|
||||||
final queryRow = _emitter.drift('QueryRow');
|
final queryRow = _emitter.drift('QueryRow');
|
||||||
final existingRowType = resultSet.existingRowType;
|
final existingRowType = resultSet.existingRowType;
|
||||||
|
final asyncModifier = query.needsAsyncMapping ? 'async' : '';
|
||||||
|
|
||||||
if (existingRowType != null) {
|
if (existingRowType != null) {
|
||||||
_emitter.write('($queryRow row) async => ');
|
_emitter.write('($queryRow row) $asyncModifier => ');
|
||||||
_writeArgumentExpression(existingRowType, resultSet);
|
_writeArgumentExpression(existingRowType, resultSet);
|
||||||
} else if (resultSet.singleColumn) {
|
} else if (resultSet.singleColumn) {
|
||||||
final column = resultSet.scalarColumns.single;
|
final column = resultSet.scalarColumns.single;
|
||||||
|
@ -97,11 +98,9 @@ class QueryWriter {
|
||||||
_writeArgumentExpression(match, resultSet);
|
_writeArgumentExpression(match, resultSet);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
_buffer.write('($queryRow row) ');
|
_buffer
|
||||||
if (query.needsAsyncMapping) {
|
..writeln('($queryRow row) $asyncModifier {')
|
||||||
_buffer.write('async ');
|
..write('return ${query.resultClassName}(');
|
||||||
}
|
|
||||||
_buffer.write('{ return ${query.resultClassName}(');
|
|
||||||
|
|
||||||
if (options.rawResultSetData) {
|
if (options.rawResultSetData) {
|
||||||
_buffer.write('row: row,\n');
|
_buffer.write('row: row,\n');
|
||||||
|
|
|
@ -228,4 +228,63 @@ class MyRow {
|
||||||
result,
|
result,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('can map to existing row class synchronously', () async {
|
||||||
|
// Regression test for https://github.com/simolus3/drift/issues/2282
|
||||||
|
final result = await emulateDriftBuild(
|
||||||
|
inputs: {
|
||||||
|
'a|lib/row.dart': '''
|
||||||
|
class TestCustom {
|
||||||
|
final int testId;
|
||||||
|
final String testOneText;
|
||||||
|
final String testTwoText;
|
||||||
|
TestCustom({
|
||||||
|
required this.testId,
|
||||||
|
required this.testOneText,
|
||||||
|
required this.testTwoText,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
''',
|
||||||
|
'a|lib/a.drift': '''
|
||||||
|
import 'row.dart';
|
||||||
|
|
||||||
|
CREATE TABLE TestOne (
|
||||||
|
test_id INT NOT NULL,
|
||||||
|
test_one_text TEXT NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE TestTwo (
|
||||||
|
test_id INT NOT NULL,
|
||||||
|
test_two_text TEXT NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
getTest WITH TestCustom:
|
||||||
|
SELECT
|
||||||
|
one.*,
|
||||||
|
two.test_two_text
|
||||||
|
FROM TestOne one
|
||||||
|
INNER JOIN TestTwo two
|
||||||
|
ON one.test_id = two.test_id;
|
||||||
|
''',
|
||||||
|
},
|
||||||
|
modularBuild: true,
|
||||||
|
);
|
||||||
|
|
||||||
|
checkOutputs({
|
||||||
|
'a|lib/a.drift.dart': decodedMatches(contains(
|
||||||
|
' i0.Selectable<i3.TestCustom> getTest() {\n'
|
||||||
|
' return customSelect(\n'
|
||||||
|
' \'SELECT one.*, two.test_two_text FROM TestOne AS one INNER JOIN TestTwo AS two ON one.test_id = two.test_id\',\n'
|
||||||
|
' variables: [],\n'
|
||||||
|
' readsFrom: {\n'
|
||||||
|
' testTwo,\n'
|
||||||
|
' testOne,\n'
|
||||||
|
' }).map((i0.QueryRow row) => i3.TestCustom(\n'
|
||||||
|
' testId: row.read<int>(\'test_id\'),\n'
|
||||||
|
' testOneText: row.read<String>(\'test_one_text\'),\n'
|
||||||
|
' testTwoText: row.read<String>(\'test_two_text\'),\n'
|
||||||
|
' ));\n'
|
||||||
|
' }')),
|
||||||
|
}, result.dartOutputs, result);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue