Fix generation in drift package

This commit is contained in:
Simon Binder 2023-07-24 00:14:40 +02:00
parent 3f74d65e69
commit 5b7e011021
No known key found for this signature in database
GPG Key ID: 7891917E4147B8C0
7 changed files with 85 additions and 94 deletions

View File

@ -1678,7 +1678,8 @@ abstract class _$CustomTablesDb extends GeneratedDatabase {
],
readsFrom: {
config,
}).asyncMap((QueryRow row) => config.mapFromRowWithAlias(row, const {
}).asyncMap(
(QueryRow row) async => config.mapFromRowWithAlias(row, const {
'ck': 'config_key',
'cf': 'config_value',
'cs1': 'sync_state',
@ -1754,26 +1755,20 @@ abstract class _$CustomTablesDb extends GeneratedDatabase {
variables: [],
readsFrom: {
config,
}).map((QueryRow row) {
return JsonResult(
row: row,
}).map((QueryRow row) => JsonResult(
raw: row,
key: row.read<String>('key'),
value: row.readNullable<String>('value'),
);
});
));
}
Selectable<JsonResult> another() {
return customSelect(
'SELECT \'one\' AS "key", NULLIF(\'two\', \'another\') AS value',
variables: [],
readsFrom: {}).map((QueryRow row) {
return JsonResult(
row: row,
return customSelect('SELECT \'one\' AS "key", NULLIF(\'two\', \'another\') AS value', variables: [], readsFrom: {})
.map((QueryRow row) => JsonResult(
raw: row,
key: row.read<String>('key'),
value: row.readNullable<String>('value'),
);
});
));
}
Selectable<MultipleResult> multiple({required Multiple$predicate predicate}) {
@ -1793,14 +1788,12 @@ abstract class _$CustomTablesDb extends GeneratedDatabase {
withDefaults,
withConstraints,
...generatedpredicate.watchedTables,
}).asyncMap((QueryRow row) async {
return MultipleResult(
row: row,
}).asyncMap((QueryRow row) async => MultipleResult(
raw: row,
a: row.readNullable<String>('a'),
b: row.readNullable<int>('b'),
c: await withConstraints.mapFromRowOrNull(row, tablePrefix: 'nested_0'),
);
});
c: withConstraints.mapFromRow(row),
));
}
Selectable<EMail> searchEmails({required String? term}) {
@ -1827,9 +1820,8 @@ abstract class _$CustomTablesDb extends GeneratedDatabase {
readsFrom: {
config,
...generatedexpr.watchedTables,
}).map((QueryRow row) {
return ReadRowIdResult(
row: row,
}).map((QueryRow row) => ReadRowIdResult(
raw: row,
rowid: row.read<int>('rowid'),
configKey: row.read<String>('config_key'),
configValue: row.readNullable<DriftAny>('config_value'),
@ -1839,8 +1831,7 @@ abstract class _$CustomTablesDb extends GeneratedDatabase {
syncStateImplicit: NullAwareTypeConverter.wrapFromSql(
ConfigTable.$convertersyncStateImplicit,
row.readNullable<int>('sync_state_implicit')),
);
});
));
}
Selectable<MyViewData> readView({ReadView$where? where}) {
@ -1895,11 +1886,10 @@ abstract class _$CustomTablesDb extends GeneratedDatabase {
readsFrom: {
withConstraints,
withDefaults,
}).asyncMap((QueryRow row) async {
return NestedResult(
row: row,
defaults: await withDefaults.mapFromRow(row, tablePrefix: 'nested_0'),
nestedQuery0: await customSelect(
}).asyncMap((QueryRow row) async => NestedResult(
raw: row,
defaults: withDefaults.mapFromRow(row),
nestedQuery1: await customSelect(
'SELECT * FROM with_constraints AS c WHERE c.b = ?1',
variables: [
Variable<int>(row.read('\$n_0'))
@ -1907,9 +1897,8 @@ abstract class _$CustomTablesDb extends GeneratedDatabase {
readsFrom: {
withConstraints,
withDefaults,
}).asyncMap(withConstraints.mapFromRow).get(),
);
});
}).map((QueryRow row) => withConstraints.mapFromRow(row)).get(),
));
}
Selectable<MyCustomResultClass> customResult() {
@ -1925,8 +1914,8 @@ abstract class _$CustomTablesDb extends GeneratedDatabase {
syncState: NullAwareTypeConverter.wrapFromSql(
ConfigTable.$convertersyncState,
row.readNullable<int>('sync_state')),
config: await config.mapFromRow(row, tablePrefix: 'nested_0'),
noIds: await noIds.mapFromRow(row, tablePrefix: 'nested_1'),
config: config.mapFromRow(row, tablePrefix: 'nested_0'),
noIds: noIds.mapFromRow(row, tablePrefix: 'nested_1'),
nested: await customSelect('SELECT * FROM no_ids',
variables: [],
readsFrom: {
@ -2081,25 +2070,25 @@ typedef ReadView$where = Expression<bool> Function(MyView my_view);
class NestedResult extends CustomResultSet {
final WithDefault defaults;
final List<WithConstraint> nestedQuery0;
final List<WithConstraint> nestedQuery1;
NestedResult({
required QueryRow row,
required this.defaults,
required this.nestedQuery0,
required this.nestedQuery1,
}) : super(row);
@override
int get hashCode => Object.hash(defaults, nestedQuery0);
int get hashCode => Object.hash(defaults, nestedQuery1);
@override
bool operator ==(Object other) =>
identical(this, other) ||
(other is NestedResult &&
other.defaults == this.defaults &&
other.nestedQuery0 == this.nestedQuery0);
other.nestedQuery1 == this.nestedQuery1);
@override
String toString() {
return (StringBuffer('NestedResult(')
..write('defaults: $defaults, ')
..write('nestedQuery0: $nestedQuery0')
..write('nestedQuery1: $nestedQuery1')
..write(')'))
.toString();
}

View File

@ -1714,9 +1714,8 @@ abstract class _$TodoDb extends GeneratedDatabase {
readsFrom: {
categories,
todosTable,
}).map((QueryRow row) {
return AllTodosWithCategoryResult(
row: row,
}).map((QueryRow row) => AllTodosWithCategoryResult(
raw: row,
id: row.read<int>('id'),
title: row.readNullable<String>('title'),
content: row.read<String>('content'),
@ -1727,8 +1726,7 @@ abstract class _$TodoDb extends GeneratedDatabase {
row.readNullable<String>('status')),
catId: row.read<int>('catId'),
catDesc: row.read<String>('catDesc'),
);
});
));
}
Future<int> deleteTodoById(int var1) {

View File

@ -136,7 +136,7 @@ void main() {
contains(
isA<NestedResult>()
.having((e) => e.defaults, 'defaults', first)
.having((e) => e.nestedQuery0, 'nested', hasLength(2)),
.having((e) => e.nestedQuery1, 'nested', hasLength(2)),
),
);
@ -145,7 +145,7 @@ void main() {
contains(
isA<NestedResult>()
.having((e) => e.defaults, 'defaults', second)
.having((e) => e.nestedQuery0, 'nested', hasLength(1)),
.having((e) => e.nestedQuery1, 'nested', hasLength(1)),
),
);
});

View File

@ -30,6 +30,6 @@ void main() {
final result = results.single;
expect(result.defaults, defaults);
expect(result.nestedQuery0, [constraints]);
expect(result.nestedQuery1, [constraints]);
});
}

View File

@ -171,11 +171,11 @@ class AnnotatedDartCodeBuilder {
'This query (${query.name}) does not have a result set');
}
addResultSetRowType(resultSet, resultSet.resultClassName!);
addResultSetRowType(resultSet, () => query.resultClassName);
}
void addResultSetRowType(
InferredResultSet resultSet, String resultClassName) {
InferredResultSet resultSet, String Function() resultClassName) {
if (resultSet.existingRowType != null) {
return addCode(resultSet.existingRowType!.rowType);
}
@ -188,13 +188,13 @@ class AnnotatedDartCodeBuilder {
return addDriftType(resultSet.scalarColumns.single);
}
return addText(resultClassName);
return addText(resultClassName());
}
void addTypeOfNestedResult(NestedResult nested) {
if (nested is NestedResultTable) {
return addResultSetRowType(
nested.innerResultSet, nested.nameForGeneratedRowClass);
nested.innerResultSet, () => nested.nameForGeneratedRowClass);
} else if (nested is NestedResultQuery) {
addSymbol('List', AnnotatedDartCode.dartCore);
addText('<');

View File

@ -172,13 +172,19 @@ abstract class SqlQuery {
return false;
}
bool get _useResultClassName {
final resultSet = this.resultSet!;
return resultSet.matchingTable == null && !resultSet.singleColumn;
}
String get resultClassName {
final resultSet = this.resultSet;
if (resultSet == null) {
throw StateError('This query ($name) does not have a result set');
}
if (resultSet.matchingTable != null || resultSet.singleColumn) {
if (!_useResultClassName) {
throw UnsupportedError('This result set does not introduce a class, '
'either because it has a matching table or because it only returns '
'one column.');
@ -216,7 +222,7 @@ abstract class SqlQuery {
}
return resultSet.mappingToRowClass(
resultSet.needsOwnClass ? resultClassName : null, options);
_useResultClassName ? resultClassName : null, options);
}
}

View File

@ -125,7 +125,7 @@ class QueryWriter {
case StructuredFromNestedColumn():
final prefix = resultSet.nestedPrefixFor(argument.table);
_writeArgumentExpression(
argument,
argument.nestedType,
resultSet,
(sqlPrefix: prefix, isNullable: argument.nullable),
);
@ -251,8 +251,6 @@ class QueryWriter {
..write(', ');
}
_emitter.write('}');
_emitter.write('})');
}
}