Skip to content

enumAsString generating Column.integer migration for SQLite #597

@stefanorumi7

Description

@stefanorumi7

I followed the discussion on #531 to implement my that comes from supabase as string, to be stored locally also as string.

Using

  brick_core: ^2.0.0
  brick_offline_first_with_supabase: ^2.0.0
  brick_supabase: ^2.0.0
  brick_sqlite: ^4.0.2
  sqflite: ^2.4.2
  dart_mappable: ^4.5.0

With an enum like this

@MappableEnum(mode: ValuesMode.named)
enum OperatingSystem {
  @MappableValue('ios')
  ios._('ios'),
  @MappableValue('android')
  android._('android');

  const OperatingSystem._(this.supabaseValue);

  final String supabaseValue;

  factory OperatingSystem.fromSupabase(String? value) {
    return OperatingSystem.values.firstWhere((v) => v.supabaseValue == value);
  }

  String toSupabase() {
    return supabaseValue;
  }
}

And a model like this

@MappableClass(ignoreNull: true)
@ConnectOfflineFirstWithSupabase(
  supabaseConfig: SupabaseSerializable(tableName: 'devices'),
  sqliteConfig: SqliteSerializable.defaults,
)
class DeviceEntity extends OfflineFirstWithSupabaseModel
    with DeviceEntityMappable {
  @Supabase(unique: true)
  @Sqlite(index: true, unique: true, nullable: false)
  final String id;
  @Supabase(enumAsString: true)
  @Sqlite(enumAsString: true)
  final OperatingSystem operatingSystem;

  DeviceEntity({
    String? id,
    required this.operatingSystem,
  }) : id = id ?? const Uuid().v4();
}

I get a proper adapter to and from Sqlite:

operatingSystem: OperatingSystem.values.byName(
      data['operating_system'] as String,
'operating_system': instance.operatingSystem.name,

The sqlite column definition looks like this

'operatingSystem': const RuntimeSqliteColumnDefinition(
      association: false,
      columnName: 'operating_system',
      iterable: false,
      type: OperatingSystem,
    ),

But the migration has wrongly the integer type

  InsertColumn('operating_system', Column.integer, onTable: 'DeviceEntity'),

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions