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

View File

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

View File

@ -136,7 +136,7 @@ void main() {
contains( contains(
isA<NestedResult>() isA<NestedResult>()
.having((e) => e.defaults, 'defaults', first) .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( contains(
isA<NestedResult>() isA<NestedResult>()
.having((e) => e.defaults, 'defaults', second) .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; final result = results.single;
expect(result.defaults, defaults); 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'); 'This query (${query.name}) does not have a result set');
} }
addResultSetRowType(resultSet, resultSet.resultClassName!); addResultSetRowType(resultSet, () => query.resultClassName);
} }
void addResultSetRowType( void addResultSetRowType(
InferredResultSet resultSet, String resultClassName) { InferredResultSet resultSet, String Function() resultClassName) {
if (resultSet.existingRowType != null) { if (resultSet.existingRowType != null) {
return addCode(resultSet.existingRowType!.rowType); return addCode(resultSet.existingRowType!.rowType);
} }
@ -188,13 +188,13 @@ class AnnotatedDartCodeBuilder {
return addDriftType(resultSet.scalarColumns.single); return addDriftType(resultSet.scalarColumns.single);
} }
return addText(resultClassName); return addText(resultClassName());
} }
void addTypeOfNestedResult(NestedResult nested) { void addTypeOfNestedResult(NestedResult nested) {
if (nested is NestedResultTable) { if (nested is NestedResultTable) {
return addResultSetRowType( return addResultSetRowType(
nested.innerResultSet, nested.nameForGeneratedRowClass); nested.innerResultSet, () => nested.nameForGeneratedRowClass);
} else if (nested is NestedResultQuery) { } else if (nested is NestedResultQuery) {
addSymbol('List', AnnotatedDartCode.dartCore); addSymbol('List', AnnotatedDartCode.dartCore);
addText('<'); addText('<');

View File

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

View File

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