From 389c16c951f6b08bce095082c752f260c8052eca Mon Sep 17 00:00:00 2001 From: Stefano Rumi Date: Tue, 14 Apr 2026 11:32:41 +0200 Subject: [PATCH] fix(sqlite_generators): phantom migrations generated when fields use @Sqlite(defaultValue:) --- .../sqlite_schema_generator.dart | 5 ++ .../sqlite_schema/test_default_value.dart | 47 +++++++++++++++++++ .../test/sqlite_schema_generator_test.dart | 6 +++ 3 files changed, 58 insertions(+) create mode 100644 packages/brick_sqlite_generators/test/sqlite_schema/test_default_value.dart diff --git a/packages/brick_sqlite_generators/lib/src/sqlite_schema/sqlite_schema_generator.dart b/packages/brick_sqlite_generators/lib/src/sqlite_schema/sqlite_schema_generator.dart index b566d58e..8521fe45 100644 --- a/packages/brick_sqlite_generators/lib/src/sqlite_schema/sqlite_schema_generator.dart +++ b/packages/brick_sqlite_generators/lib/src/sqlite_schema/sqlite_schema_generator.dart @@ -219,6 +219,7 @@ class SqliteSchemaGenerator { return SchemaColumn( column.name!, column.columnType!, + defaultValue: column.defaultValue, nullable: column.nullable, unique: column.unique, ); @@ -228,6 +229,7 @@ class SqliteSchemaGenerator { return SchemaColumn( column.name!, Column.fromDartPrimitive(checker.asPrimitive), + defaultValue: column.defaultValue, nullable: column.nullable, unique: column.unique, ); @@ -235,6 +237,7 @@ class SqliteSchemaGenerator { return SchemaColumn( column.name!, column.enumAsString ? Column.varchar : Column.integer, + defaultValue: column.defaultValue, nullable: column.nullable, unique: column.unique, ); @@ -256,6 +259,7 @@ class SqliteSchemaGenerator { return SchemaColumn( column.name!, Column.varchar, + defaultValue: column.defaultValue, nullable: column.nullable, unique: column.unique, ); @@ -263,6 +267,7 @@ class SqliteSchemaGenerator { return SchemaColumn( column.name!, Column.varchar, + defaultValue: column.defaultValue, nullable: column.nullable, unique: column.unique, ); diff --git a/packages/brick_sqlite_generators/test/sqlite_schema/test_default_value.dart b/packages/brick_sqlite_generators/test/sqlite_schema/test_default_value.dart new file mode 100644 index 00000000..39ff7ba2 --- /dev/null +++ b/packages/brick_sqlite_generators/test/sqlite_schema/test_default_value.dart @@ -0,0 +1,47 @@ +import 'package:brick_sqlite/brick_sqlite.dart'; + +const output = ''' +// GENERATED CODE DO NOT EDIT +// This file should be version controlled +import 'package:brick_sqlite/db.dart'; + +/// All intelligently-generated migrations from all `@Migratable` classes on disk +final migrations = {}; + +/// A consumable database structure including the latest generated migration. +final schema = Schema( + 0, + generatorVersion: 1, + tables: { + SchemaTable( + 'DefaultValue', + columns: { + SchemaColumn( + '_brick_id', + Column.integer, + autoincrement: true, + nullable: false, + isPrimaryKey: true, + ), + SchemaColumn('name', Column.varchar), + SchemaColumn('version', Column.integer, defaultValue: 1), + }, + indices: {}, + ), + }, +); +'''; + +/// [SqliteSerializable] **does not** produce code. +/// A `const` class is required from an non-relative import, +/// and [SqliteSerializable] was arbitrarily chosen for this test. +/// This will do nothing outside of this exact test suite. +@SqliteSerializable() +class DefaultValue { + final String? name; + + @Sqlite(defaultValue: '1') + final int? version; + + DefaultValue({this.name, this.version}); +} diff --git a/packages/brick_sqlite_generators/test/sqlite_schema_generator_test.dart b/packages/brick_sqlite_generators/test/sqlite_schema_generator_test.dart index 416c70d1..28893f9a 100644 --- a/packages/brick_sqlite_generators/test/sqlite_schema_generator_test.dart +++ b/packages/brick_sqlite_generators/test/sqlite_schema_generator_test.dart @@ -7,6 +7,7 @@ import 'package:source_gen/source_gen.dart'; import 'package:test/test.dart'; import 'sqlite_schema/test_all_field_types.dart' as all_field_types; +import 'sqlite_schema/test_default_value.dart' as default_value; import 'sqlite_schema/test_enum_as_string.dart' as enum_as_string; import 'sqlite_schema/test_from_to_json.dart' as from_to_json; import 'sqlite_schema/test_index_annotation.dart' as index_annotation; @@ -66,6 +67,11 @@ void main() { final input = await generateInput('from_to_json'); expect(input, from_to_json.output); }); + + test('DefaultValue', () async { + final input = await generateInput('default_value'); + expect(input, default_value.output); + }); }); test('#createMigration', () async {