Fix resolving Dart code in drift files

This commit is contained in:
Simon Binder 2021-10-10 22:01:59 +02:00
parent 348ac2e910
commit 331d600df3
No known key found for this signature in database
GPG Key ID: 7891917E4147B8C0
9 changed files with 47 additions and 48 deletions

View File

@ -44,12 +44,12 @@ jobs:
retention-days: 1 retention-days: 1
moor: moor:
name: "moor package" name: "drift package"
needs: [compile_sqlite3] needs: [compile_sqlite3]
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
defaults: defaults:
run: run:
working-directory: moor working-directory: drift
steps: steps:
# setup # setup
- uses: actions/checkout@v2 - uses: actions/checkout@v2
@ -82,11 +82,11 @@ jobs:
# moor/.dart_tool/package_config.json # moor/.dart_tool/package_config.json
# retention-days: 1 # retention-days: 1
moor_generator: drift_dev:
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
defaults: defaults:
run: run:
working-directory: moor_generator working-directory: drift_dev
steps: steps:
# setup # setup
- uses: actions/checkout@v2 - uses: actions/checkout@v2

View File

@ -17,8 +17,7 @@ class Config extends DataClass implements Insertable<Config> {
this.configValue, this.configValue,
this.syncState, this.syncState,
this.syncStateImplicit}); this.syncStateImplicit});
factory Config.fromData(Map<String, dynamic> data, GeneratedDatabase db, factory Config.fromData(Map<String, dynamic> data, {String? prefix}) {
{String? prefix}) {
final effectivePrefix = prefix ?? ''; final effectivePrefix = prefix ?? '';
return Config( return Config(
configKey: const StringType() configKey: const StringType()
@ -270,7 +269,7 @@ class ConfigTable extends Table with TableInfo<ConfigTable, Config> {
Set<GeneratedColumn> get $primaryKey => {configKey}; Set<GeneratedColumn> get $primaryKey => {configKey};
@override @override
Config map(Map<String, dynamic> data, {String? tablePrefix}) { Config map(Map<String, dynamic> data, {String? tablePrefix}) {
return Config.fromData(data, _db, return Config.fromData(data,
prefix: tablePrefix != null ? '$tablePrefix.' : null); prefix: tablePrefix != null ? '$tablePrefix.' : null);
} }
@ -290,8 +289,7 @@ class WithDefault extends DataClass implements Insertable<WithDefault> {
final String? a; final String? a;
final int? b; final int? b;
WithDefault({this.a, this.b}); WithDefault({this.a, this.b});
factory WithDefault.fromData(Map<String, dynamic> data, GeneratedDatabase db, factory WithDefault.fromData(Map<String, dynamic> data, {String? prefix}) {
{String? prefix}) {
final effectivePrefix = prefix ?? ''; final effectivePrefix = prefix ?? '';
return WithDefault( return WithDefault(
a: const StringType() a: const StringType()
@ -455,7 +453,7 @@ class WithDefaults extends Table with TableInfo<WithDefaults, WithDefault> {
Set<GeneratedColumn> get $primaryKey => <GeneratedColumn>{}; Set<GeneratedColumn> get $primaryKey => <GeneratedColumn>{};
@override @override
WithDefault map(Map<String, dynamic> data, {String? tablePrefix}) { WithDefault map(Map<String, dynamic> data, {String? tablePrefix}) {
return WithDefault.fromData(data, _db, return WithDefault.fromData(data,
prefix: tablePrefix != null ? '$tablePrefix.' : null); prefix: tablePrefix != null ? '$tablePrefix.' : null);
} }
@ -565,9 +563,7 @@ class WithConstraint extends DataClass implements Insertable<WithConstraint> {
final int b; final int b;
final double? c; final double? c;
WithConstraint({this.a, required this.b, this.c}); WithConstraint({this.a, required this.b, this.c});
factory WithConstraint.fromData( factory WithConstraint.fromData(Map<String, dynamic> data, {String? prefix}) {
Map<String, dynamic> data, GeneratedDatabase db,
{String? prefix}) {
final effectivePrefix = prefix ?? ''; final effectivePrefix = prefix ?? '';
return WithConstraint( return WithConstraint(
a: const StringType() a: const StringType()
@ -760,7 +756,7 @@ class WithConstraints extends Table
Set<GeneratedColumn> get $primaryKey => <GeneratedColumn>{}; Set<GeneratedColumn> get $primaryKey => <GeneratedColumn>{};
@override @override
WithConstraint map(Map<String, dynamic> data, {String? tablePrefix}) { WithConstraint map(Map<String, dynamic> data, {String? tablePrefix}) {
return WithConstraint.fromData(data, _db, return WithConstraint.fromData(data,
prefix: tablePrefix != null ? '$tablePrefix.' : null); prefix: tablePrefix != null ? '$tablePrefix.' : null);
} }
@ -783,8 +779,7 @@ class MytableData extends DataClass implements Insertable<MytableData> {
final DateTime? somedate; final DateTime? somedate;
MytableData( MytableData(
{required this.someid, this.sometext, this.isInserting, this.somedate}); {required this.someid, this.sometext, this.isInserting, this.somedate});
factory MytableData.fromData(Map<String, dynamic> data, GeneratedDatabase db, factory MytableData.fromData(Map<String, dynamic> data, {String? prefix}) {
{String? prefix}) {
final effectivePrefix = prefix ?? ''; final effectivePrefix = prefix ?? '';
return MytableData( return MytableData(
someid: const IntType() someid: const IntType()
@ -1023,7 +1018,7 @@ class Mytable extends Table with TableInfo<Mytable, MytableData> {
Set<GeneratedColumn> get $primaryKey => {someid}; Set<GeneratedColumn> get $primaryKey => {someid};
@override @override
MytableData map(Map<String, dynamic> data, {String? tablePrefix}) { MytableData map(Map<String, dynamic> data, {String? tablePrefix}) {
return MytableData.fromData(data, _db, return MytableData.fromData(data,
prefix: tablePrefix != null ? '$tablePrefix.' : null); prefix: tablePrefix != null ? '$tablePrefix.' : null);
} }
@ -1043,8 +1038,7 @@ class EMail extends DataClass implements Insertable<EMail> {
final String title; final String title;
final String body; final String body;
EMail({required this.sender, required this.title, required this.body}); EMail({required this.sender, required this.title, required this.body});
factory EMail.fromData(Map<String, dynamic> data, GeneratedDatabase db, factory EMail.fromData(Map<String, dynamic> data, {String? prefix}) {
{String? prefix}) {
final effectivePrefix = prefix ?? ''; final effectivePrefix = prefix ?? '';
return EMail( return EMail(
sender: const StringType() sender: const StringType()
@ -1237,7 +1231,7 @@ class Email extends Table
Set<GeneratedColumn> get $primaryKey => <GeneratedColumn>{}; Set<GeneratedColumn> get $primaryKey => <GeneratedColumn>{};
@override @override
EMail map(Map<String, dynamic> data, {String? tablePrefix}) { EMail map(Map<String, dynamic> data, {String? tablePrefix}) {
return EMail.fromData(data, _db, return EMail.fromData(data,
prefix: tablePrefix != null ? '$tablePrefix.' : null); prefix: tablePrefix != null ? '$tablePrefix.' : null);
} }
@ -1256,8 +1250,7 @@ class WeirdData extends DataClass implements Insertable<WeirdData> {
final int sqlClass; final int sqlClass;
final String textColumn; final String textColumn;
WeirdData({required this.sqlClass, required this.textColumn}); WeirdData({required this.sqlClass, required this.textColumn});
factory WeirdData.fromData(Map<String, dynamic> data, GeneratedDatabase db, factory WeirdData.fromData(Map<String, dynamic> data, {String? prefix}) {
{String? prefix}) {
final effectivePrefix = prefix ?? ''; final effectivePrefix = prefix ?? '';
return WeirdData( return WeirdData(
sqlClass: const IntType() sqlClass: const IntType()
@ -1424,7 +1417,7 @@ class WeirdTable extends Table with TableInfo<WeirdTable, WeirdData> {
Set<GeneratedColumn> get $primaryKey => <GeneratedColumn>{}; Set<GeneratedColumn> get $primaryKey => <GeneratedColumn>{};
@override @override
WeirdData map(Map<String, dynamic> data, {String? tablePrefix}) { WeirdData map(Map<String, dynamic> data, {String? tablePrefix}) {
return WeirdData.fromData(data, _db, return WeirdData.fromData(data,
prefix: tablePrefix != null ? '$tablePrefix.' : null); prefix: tablePrefix != null ? '$tablePrefix.' : null);
} }

View File

@ -19,8 +19,7 @@ class TodoEntry extends DataClass implements Insertable<TodoEntry> {
required this.content, required this.content,
this.targetDate, this.targetDate,
this.category}); this.category});
factory TodoEntry.fromData(Map<String, dynamic> data, GeneratedDatabase db, factory TodoEntry.fromData(Map<String, dynamic> data, {String? prefix}) {
{String? prefix}) {
final effectivePrefix = prefix ?? ''; final effectivePrefix = prefix ?? '';
return TodoEntry( return TodoEntry(
id: const IntType() id: const IntType()
@ -290,7 +289,7 @@ class $TodosTableTable extends TodosTable
Set<GeneratedColumn> get $primaryKey => {id}; Set<GeneratedColumn> get $primaryKey => {id};
@override @override
TodoEntry map(Map<String, dynamic> data, {String? tablePrefix}) { TodoEntry map(Map<String, dynamic> data, {String? tablePrefix}) {
return TodoEntry.fromData(data, _db, return TodoEntry.fromData(data,
prefix: tablePrefix != null ? '$tablePrefix.' : null); prefix: tablePrefix != null ? '$tablePrefix.' : null);
} }
@ -306,8 +305,7 @@ class Category extends DataClass implements Insertable<Category> {
final CategoryPriority priority; final CategoryPriority priority;
Category( Category(
{required this.id, required this.description, required this.priority}); {required this.id, required this.description, required this.priority});
factory Category.fromData(Map<String, dynamic> data, GeneratedDatabase db, factory Category.fromData(Map<String, dynamic> data, {String? prefix}) {
{String? prefix}) {
final effectivePrefix = prefix ?? ''; final effectivePrefix = prefix ?? '';
return Category( return Category(
id: const IntType() id: const IntType()
@ -507,7 +505,7 @@ class $CategoriesTable extends Categories
Set<GeneratedColumn> get $primaryKey => {id}; Set<GeneratedColumn> get $primaryKey => {id};
@override @override
Category map(Map<String, dynamic> data, {String? tablePrefix}) { Category map(Map<String, dynamic> data, {String? tablePrefix}) {
return Category.fromData(data, _db, return Category.fromData(data,
prefix: tablePrefix != null ? '$tablePrefix.' : null); prefix: tablePrefix != null ? '$tablePrefix.' : null);
} }
@ -532,8 +530,7 @@ class User extends DataClass implements Insertable<User> {
required this.isAwesome, required this.isAwesome,
required this.profilePicture, required this.profilePicture,
required this.creationTime}); required this.creationTime});
factory User.fromData(Map<String, dynamic> data, GeneratedDatabase db, factory User.fromData(Map<String, dynamic> data, {String? prefix}) {
{String? prefix}) {
final effectivePrefix = prefix ?? ''; final effectivePrefix = prefix ?? '';
return User( return User(
id: const IntType() id: const IntType()
@ -803,7 +800,7 @@ class $UsersTable extends Users with TableInfo<$UsersTable, User> {
Set<GeneratedColumn> get $primaryKey => {id}; Set<GeneratedColumn> get $primaryKey => {id};
@override @override
User map(Map<String, dynamic> data, {String? tablePrefix}) { User map(Map<String, dynamic> data, {String? tablePrefix}) {
return User.fromData(data, _db, return User.fromData(data,
prefix: tablePrefix != null ? '$tablePrefix.' : null); prefix: tablePrefix != null ? '$tablePrefix.' : null);
} }
@ -817,8 +814,7 @@ class SharedTodo extends DataClass implements Insertable<SharedTodo> {
final int todo; final int todo;
final int user; final int user;
SharedTodo({required this.todo, required this.user}); SharedTodo({required this.todo, required this.user});
factory SharedTodo.fromData(Map<String, dynamic> data, GeneratedDatabase db, factory SharedTodo.fromData(Map<String, dynamic> data, {String? prefix}) {
{String? prefix}) {
final effectivePrefix = prefix ?? ''; final effectivePrefix = prefix ?? '';
return SharedTodo( return SharedTodo(
todo: const IntType() todo: const IntType()
@ -981,7 +977,7 @@ class $SharedTodosTable extends SharedTodos
Set<GeneratedColumn> get $primaryKey => {todo, user}; Set<GeneratedColumn> get $primaryKey => {todo, user};
@override @override
SharedTodo map(Map<String, dynamic> data, {String? tablePrefix}) { SharedTodo map(Map<String, dynamic> data, {String? tablePrefix}) {
return SharedTodo.fromData(data, _db, return SharedTodo.fromData(data,
prefix: tablePrefix != null ? '$tablePrefix.' : null); prefix: tablePrefix != null ? '$tablePrefix.' : null);
} }
@ -1133,8 +1129,7 @@ class $TableWithoutPKTable extends TableWithoutPK
class PureDefault extends DataClass implements Insertable<PureDefault> { class PureDefault extends DataClass implements Insertable<PureDefault> {
final String? txt; final String? txt;
PureDefault({this.txt}); PureDefault({this.txt});
factory PureDefault.fromData(Map<String, dynamic> data, GeneratedDatabase db, factory PureDefault.fromData(Map<String, dynamic> data, {String? prefix}) {
{String? prefix}) {
final effectivePrefix = prefix ?? ''; final effectivePrefix = prefix ?? '';
return PureDefault( return PureDefault(
txt: const StringType() txt: const StringType()
@ -1266,7 +1261,7 @@ class $PureDefaultsTable extends PureDefaults
Set<GeneratedColumn> get $primaryKey => {txt}; Set<GeneratedColumn> get $primaryKey => {txt};
@override @override
PureDefault map(Map<String, dynamic> data, {String? tablePrefix}) { PureDefault map(Map<String, dynamic> data, {String? tablePrefix}) {
return PureDefault.fromData(data, _db, return PureDefault.fromData(data,
prefix: tablePrefix != null ? '$tablePrefix.' : null); prefix: tablePrefix != null ? '$tablePrefix.' : null);
} }

View File

@ -14,7 +14,9 @@ builders:
preparing_builder: preparing_builder:
import: "package:drift_dev/integrations/build.dart" import: "package:drift_dev/integrations/build.dart"
builder_factories: ["preparingBuilder"] builder_factories: ["preparingBuilder"]
build_extensions: {".moor": [".temp.dart", ".dart_in_moor"]} build_extensions:
".moor": [".temp.dart", ".dart_in_moor"]
".drift": [".temp.dart", ".dart_in_moor"]
build_to: cache build_to: cache
auto_apply: dependents auto_apply: dependents
applies_builders: ["drift_dev|cleanup"] applies_builders: ["drift_dev|cleanup"]

View File

@ -8,7 +8,8 @@ Builder moorBuilder(BuilderOptions options) =>
Builder moorBuilderNotShared(BuilderOptions options) => Builder moorBuilderNotShared(BuilderOptions options) =>
MoorPartBuilder(options, isForNewDriftPackage: true); MoorPartBuilder(options, isForNewDriftPackage: true);
Builder preparingBuilder(BuilderOptions options) => PreprocessBuilder(); Builder preparingBuilder(BuilderOptions options) =>
PreprocessBuilder(isForNewDriftPackage: true);
PostProcessBuilder moorCleanup(BuilderOptions options) { PostProcessBuilder moorCleanup(BuilderOptions options) {
return const FileDeletingBuilder(['.temp.dart']); return const FileDeletingBuilder(['.temp.dart']);

View File

@ -24,9 +24,16 @@ import 'package:sqlparser/sqlparser.dart';
/// moor file. The main generator can then read the `.dart_in_moor` file to /// moor file. The main generator can then read the `.dart_in_moor` file to
/// resolve those expressions. /// resolve those expressions.
class PreprocessBuilder extends Builder { class PreprocessBuilder extends Builder {
static const _outputs = ['.temp.dart', '.dart_in_moor'];
final bool isForNewDriftPackage;
PreprocessBuilder({this.isForNewDriftPackage = false});
@override @override
final Map<String, List<String>> buildExtensions = const { late final Map<String, List<String>> buildExtensions = {
'.moor': ['.temp.dart', '.dart_in_moor'], '.moor': _outputs,
if (isForNewDriftPackage) '.drift': _outputs
}; };
@override @override
@ -61,7 +68,7 @@ class PreprocessBuilder extends Builder {
if (!seenFiles.contains(asset)) { if (!seenFiles.contains(asset)) {
seenFiles.add(asset); seenFiles.add(asset);
if (asset.extension == '.moor') { if (asset.extension == '.moor' || asset.extension == '.drift') {
final parsed = asset == input final parsed = asset == input
? parsedInput ? parsedInput
: engine.parseMoorFile(await buildStep.readAsString(asset)); : engine.parseMoorFile(await buildStep.readAsString(asset));

View File

@ -85,7 +85,8 @@ class DataClassWriter {
final dataClassName = table.dartTypeName; final dataClassName = table.dartTypeName;
// The GeneratedDatabase db parameter is not actually used, but we need to // The GeneratedDatabase db parameter is not actually used, but we need to
// keep it on tables for backwards compatibility. // keep it on tables for backwards compatibility.
final includeUnusedDbColumn = table is MoorTable; final includeUnusedDbColumn =
scope.generationOptions.writeForMoorPackage && table is MoorTable;
_buffer _buffer
..write('factory $dataClassName.fromData') ..write('factory $dataClassName.fromData')

View File

@ -185,7 +185,8 @@ abstract class TableOrViewWriter {
buffer.write(';\n'); buffer.write(';\n');
} else { } else {
// Use default .fromData constructor in the moor-generated data class // Use default .fromData constructor in the moor-generated data class
final hasDbParameter = tableOrView is MoorTable; final hasDbParameter = scope.generationOptions.writeForMoorPackage &&
tableOrView is MoorTable;
if (hasDbParameter) { if (hasDbParameter) {
buffer.write('return $dataClassName.fromData(data, _db, ' buffer.write('return $dataClassName.fromData(data, _db, '
"prefix: tablePrefix != null ? '\$tablePrefix.' : null);\n"); "prefix: tablePrefix != null ? '\$tablePrefix.' : null);\n");

View File

@ -11,8 +11,7 @@ class User extends DataClass implements Insertable<User> {
final int id; final int id;
final String name; final String name;
User({@required this.id, @required this.name}); User({@required this.id, @required this.name});
factory User.fromData(Map<String, dynamic> data, GeneratedDatabase db, factory User.fromData(Map<String, dynamic> data, {String prefix}) {
{String prefix}) {
final effectivePrefix = prefix ?? ''; final effectivePrefix = prefix ?? '';
return User( return User(
id: const IntType().mapFromDatabaseResponse(data['${effectivePrefix}id']), id: const IntType().mapFromDatabaseResponse(data['${effectivePrefix}id']),
@ -172,7 +171,7 @@ class Users extends Table with TableInfo<Users, User> {
Set<GeneratedColumn> get $primaryKey => {id}; Set<GeneratedColumn> get $primaryKey => {id};
@override @override
User map(Map<String, dynamic> data, {String tablePrefix}) { User map(Map<String, dynamic> data, {String tablePrefix}) {
return User.fromData(data, _db, return User.fromData(data,
prefix: tablePrefix != null ? '$tablePrefix.' : null); prefix: tablePrefix != null ? '$tablePrefix.' : null);
} }