diff --git a/drift_dev/lib/src/analysis/results/column.dart b/drift_dev/lib/src/analysis/results/column.dart index 58052b39..d4975eab 100644 --- a/drift_dev/lib/src/analysis/results/column.dart +++ b/drift_dev/lib/src/analysis/results/column.dart @@ -265,3 +265,9 @@ class LimitingTextLength extends DriftColumnConstraint { typedOther.maxLength == maxLength; } } + +class DefaultConstraintsFromSchemaFile extends DriftColumnConstraint { + final String constraints; + + DefaultConstraintsFromSchemaFile(this.constraints); +} diff --git a/drift_dev/lib/src/cli/cli.dart b/drift_dev/lib/src/cli/cli.dart index 4e477ad6..3b281f4f 100644 --- a/drift_dev/lib/src/cli/cli.dart +++ b/drift_dev/lib/src/cli/cli.dart @@ -8,8 +8,8 @@ import 'package:logging/logging.dart'; import '../backends/analyzer_context_backend.dart'; import 'commands/analyze.dart'; import 'commands/identify_databases.dart'; -//import 'commands/migrate.dart'; -//import 'commands/schema.dart'; +import 'commands/migrate.dart'; +import 'commands/schema.dart'; import 'logging.dart'; Future run(List args) async { @@ -35,9 +35,9 @@ class MoorCli { usageLineLength: 80, ) ..addCommand(AnalyzeCommand(this)) - ..addCommand(IdentifyDatabases(this)); -// ..addCommand(SchemaCommand(this)) -// ..addCommand(MigrateCommand(this)); + ..addCommand(IdentifyDatabases(this)) + ..addCommand(SchemaCommand(this)) + ..addCommand(MigrateCommand(this)); _runner.argParser .addFlag('verbose', abbr: 'v', defaultsTo: false, negatable: false); diff --git a/drift_dev/lib/src/cli/commands/schema.dart b/drift_dev/lib/src/cli/commands/schema.dart index 10a7285b..a190df2c 100644 --- a/drift_dev/lib/src/cli/commands/schema.dart +++ b/drift_dev/lib/src/cli/commands/schema.dart @@ -1,6 +1,7 @@ import 'package:args/command_runner.dart'; -import 'package:drift_dev/src/cli/commands/schema/dump.dart'; -import 'package:drift_dev/src/cli/commands/schema/generate_utils.dart'; + +import 'schema/dump.dart'; +import 'schema/generate_utils.dart'; import '../cli.dart'; diff --git a/drift_dev/lib/src/cli/commands/schema/dump.dart b/drift_dev/lib/src/cli/commands/schema/dump.dart index e7d07781..5b896ae5 100644 --- a/drift_dev/lib/src/cli/commands/schema/dump.dart +++ b/drift_dev/lib/src/cli/commands/schema/dump.dart @@ -2,10 +2,10 @@ import 'dart:convert'; import 'dart:io'; import 'package:args/command_runner.dart'; -import 'package:drift_dev/src/analyzer/runner/results.dart'; -import 'package:drift_dev/src/services/schema/schema_files.dart'; import 'package:path/path.dart'; +import '../../../analysis/results/results.dart'; +import '../../../services/schema/schema_files.dart'; import '../../cli.dart'; class DumpSchemaCommand extends Command { @@ -45,10 +45,19 @@ class DumpSchemaCommand extends Command { cli.exit('Unexpected error: The input file could not be analyzed'); } - final result = input.fileAnalysis; + final databases = + input.analysis.values.map((e) => e.result).whereType(); - final db = result.declaredDatabases.single; - final writer = SchemaWriter(db, options: cli.project.moorOptions); + if (databases.length != 1) { + cli.exit('Expected the input file to contain exactly one database.'); + } + + final result = input.fileAnalysis!; + final databaseElement = databases.single; + final db = result.resolvedDatabases[databaseElement]!; + + final writer = + SchemaWriter(db.availableElements, options: cli.project.moorOptions); var target = rest[1]; // This command is most commonly used to write into @@ -56,7 +65,7 @@ class DumpSchemaCommand extends Command { // try to infer the file name. if (await FileSystemEntity.isDirectory(target) || !target.endsWith('.json')) { - final version = db.schemaVersion; + final version = databaseElement.schemaVersion; if (version == null) { // Couldn't read schema from database, so fail. diff --git a/drift_dev/lib/src/cli/commands/schema/generate_utils.dart b/drift_dev/lib/src/cli/commands/schema/generate_utils.dart index 167d80c7..0ec199ee 100644 --- a/drift_dev/lib/src/cli/commands/schema/generate_utils.dart +++ b/drift_dev/lib/src/cli/commands/schema/generate_utils.dart @@ -3,13 +3,16 @@ import 'dart:io'; import 'package:args/command_runner.dart'; import 'package:dart_style/dart_style.dart'; -import 'package:drift_dev/moor_generator.dart'; -import 'package:drift_dev/src/cli/cli.dart'; -import 'package:drift_dev/src/services/schema/schema_files.dart'; -import 'package:drift_dev/writer.dart'; import 'package:path/path.dart' as p; +import '../../../analysis/results/file_results.dart'; +import '../../../analysis/results/results.dart'; import '../../../analyzer/options.dart'; +import '../../../services/schema/schema_files.dart'; +import '../../../writer/database_writer.dart'; +import '../../../writer/import_manager.dart'; +import '../../../writer/writer.dart'; +import '../../cli.dart'; class GenerateUtilsCommand extends Command { final MoorCli cli; @@ -117,6 +120,7 @@ class GenerateUtilsCommand extends Command { forSchema: version, writeCompanions: companions, writeDataClasses: dataClasses, + imports: ImportManagerForPartFiles(), ), ); final file = File(p.join(output.path, _filenameForVersion(version))); @@ -126,12 +130,19 @@ class GenerateUtilsCommand extends Command { ..writeln('//@dart=2.12') ..writeln("import 'package:drift/drift.dart';"); - final db = Database( - declaredQueries: const [], + final database = DriftDatabase( + id: DriftElementId(SchemaReader.elementUri, 'database'), + declaration: DriftDeclaration(SchemaReader.elementUri, 0, 'database'), declaredIncludes: const [], + declaredQueries: const [], declaredTables: const [], - )..entities = schema.schema; - DatabaseWriter(db, writer.child()).write(); + declaredViews: const [], + ); + final resolved = + ResolvedDatabaseAccessor(const {}, const [], schema.schema); + final input = DatabaseGenerationInput(database, resolved, const {}); + + DatabaseWriter(input, writer.child()).write(); return file.writeAsString(_dartfmt.format(writer.writeGenerated())); } @@ -178,7 +189,7 @@ class GenerateUtilsCommand extends Command { } class _ExportedSchema { - final List schema; + final List schema; final Map options; _ExportedSchema(this.schema, this.options); diff --git a/drift_dev/lib/src/generated/analysis/results/table.g.dart b/drift_dev/lib/src/generated/analysis/results/table.g.dart deleted file mode 100644 index 9766543b..00000000 --- a/drift_dev/lib/src/generated/analysis/results/table.g.dart +++ /dev/null @@ -1,20 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of '../../../analysis/results/table.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -VirtualTableData _$VirtualTableDataFromJson(Map json) => VirtualTableData( - json['module'] as String, - (json['module_arguments'] as List) - .map((e) => e as String) - .toList(), - ); - -Map _$VirtualTableDataToJson(VirtualTableData instance) => - { - 'module': instance.module, - 'module_arguments': instance.moduleArguments, - }; diff --git a/drift_dev/lib/src/services/schema/schema_files.dart b/drift_dev/lib/src/services/schema/schema_files.dart index 41673e6e..230e15f0 100644 --- a/drift_dev/lib/src/services/schema/schema_files.dart +++ b/drift_dev/lib/src/services/schema/schema_files.dart @@ -176,7 +176,7 @@ class SchemaWriter { /// Reads files generated by [SchemaWriter]. class SchemaReader { - static final Uri _elementUri = Uri.parse('drift:hidden'); + static final Uri elementUri = Uri.parse('drift:hidden'); final Map _entitiesById = {}; final Map> _rawById = {}; @@ -218,10 +218,10 @@ class SchemaReader { return _entitiesById[id as int] as T; } - DriftElementId _id(String name) => DriftElementId(_elementUri, name); + DriftElementId _id(String name) => DriftElementId(elementUri, name); DriftDeclaration get _declaration => - DriftDeclaration(_elementUri, -1, ''); + DriftDeclaration(elementUri, -1, ''); void _processById(int id) { if (_entitiesById.containsKey(id)) return;