mirror of
https://github.com/gabehf/Fladder.git
synced 2026-03-07 21:48:14 -08:00
fix: Use both userId and id as primarykeys add first migration
This commit is contained in:
parent
83c38d4042
commit
0f6d24dc5a
2 changed files with 42 additions and 13 deletions
|
|
@ -17,9 +17,9 @@ import 'package:fladder/providers/user_provider.dart';
|
||||||
|
|
||||||
part 'database_item.g.dart';
|
part 'database_item.g.dart';
|
||||||
|
|
||||||
@TableIndex(name: 'database_id', columns: {#id})
|
@TableIndex(name: 'database_id', columns: {#userId, #id})
|
||||||
class DatabaseItems extends Table {
|
class DatabaseItems extends Table {
|
||||||
TextColumn get userId => text()();
|
TextColumn get userId => text().withLength(min: 1)();
|
||||||
TextColumn get id => text().withLength(min: 1)();
|
TextColumn get id => text().withLength(min: 1)();
|
||||||
BoolColumn get syncing => boolean()();
|
BoolColumn get syncing => boolean()();
|
||||||
TextColumn get sortName => text().nullable()();
|
TextColumn get sortName => text().nullable()();
|
||||||
|
|
@ -35,7 +35,7 @@ class DatabaseItems extends Table {
|
||||||
TextColumn get userData => text().nullable()();
|
TextColumn get userData => text().nullable()();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Set<Column<Object>> get primaryKey => {id, userId};
|
Set<Column<Object>> get primaryKey => {userId, id};
|
||||||
}
|
}
|
||||||
|
|
||||||
@DriftDatabase(tables: [DatabaseItems])
|
@DriftDatabase(tables: [DatabaseItems])
|
||||||
|
|
@ -47,7 +47,7 @@ class AppDatabase extends _$AppDatabase {
|
||||||
String get userId => ref.read(userProvider.select((value) => value?.id ?? ""));
|
String get userId => ref.read(userProvider.select((value) => value?.id ?? ""));
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get schemaVersion => 1;
|
int get schemaVersion => 2;
|
||||||
|
|
||||||
Future<void> clearDatabase() {
|
Future<void> clearDatabase() {
|
||||||
return transaction(() async {
|
return transaction(() async {
|
||||||
|
|
@ -129,9 +129,11 @@ class AppDatabase extends _$AppDatabase {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> deleteAllItems(List<SyncedItem> items) async => await batch((batch) {
|
Future<void> deleteAllItems(List<SyncedItem> items) async {
|
||||||
batch.deleteWhere(databaseItems, (tbl) => tbl.id.isIn(items.map((e) => e.id)));
|
await batch((batch) {
|
||||||
});
|
batch.deleteWhere(databaseItems, (tbl) => tbl.id.isIn(items.map((e) => e.id)) & tbl.userId.equals(userId));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
DatabaseItemsCompanion toDataBaseItem(SyncedItem item) {
|
DatabaseItemsCompanion toDataBaseItem(SyncedItem item) {
|
||||||
return DatabaseItemsCompanion(
|
return DatabaseItemsCompanion(
|
||||||
|
|
@ -190,4 +192,27 @@ class AppDatabase extends _$AppDatabase {
|
||||||
// If you need web support, see https://drift.simonbinder.eu/platforms/web/
|
// If you need web support, see https://drift.simonbinder.eu/platforms/web/
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
MigrationStrategy get migration {
|
||||||
|
return MigrationStrategy(
|
||||||
|
onCreate: (Migrator m) {
|
||||||
|
return m.createAll();
|
||||||
|
},
|
||||||
|
onUpgrade: (Migrator m, int from, int to) async {
|
||||||
|
if (from == 1) {
|
||||||
|
final allItems = await select(databaseItems).get();
|
||||||
|
m.deleteTable(databaseItems.actualTableName);
|
||||||
|
m.createAll();
|
||||||
|
await batch((batch) {
|
||||||
|
batch.insertAll(
|
||||||
|
databaseItems,
|
||||||
|
allItems,
|
||||||
|
mode: InsertMode.insertOrReplace,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,13 @@ class $DatabaseItemsTable extends DatabaseItems
|
||||||
$DatabaseItemsTable(this.attachedDatabase, [this._alias]);
|
$DatabaseItemsTable(this.attachedDatabase, [this._alias]);
|
||||||
static const VerificationMeta _userIdMeta = const VerificationMeta('userId');
|
static const VerificationMeta _userIdMeta = const VerificationMeta('userId');
|
||||||
@override
|
@override
|
||||||
late final GeneratedColumn<String> userId = GeneratedColumn<String>(
|
late final GeneratedColumn<String> userId =
|
||||||
'user_id', aliasedName, false,
|
GeneratedColumn<String>('user_id', aliasedName, false,
|
||||||
type: DriftSqlType.string, requiredDuringInsert: true);
|
additionalChecks: GeneratedColumn.checkTextLength(
|
||||||
|
minTextLength: 1,
|
||||||
|
),
|
||||||
|
type: DriftSqlType.string,
|
||||||
|
requiredDuringInsert: true);
|
||||||
static const VerificationMeta _idMeta = const VerificationMeta('id');
|
static const VerificationMeta _idMeta = const VerificationMeta('id');
|
||||||
@override
|
@override
|
||||||
late final GeneratedColumn<String> id =
|
late final GeneratedColumn<String> id =
|
||||||
|
|
@ -194,7 +198,7 @@ class $DatabaseItemsTable extends DatabaseItems
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Set<GeneratedColumn> get $primaryKey => {id, userId};
|
Set<GeneratedColumn> get $primaryKey => {userId, id};
|
||||||
@override
|
@override
|
||||||
DatabaseItem map(Map<String, dynamic> data, {String? tablePrefix}) {
|
DatabaseItem map(Map<String, dynamic> data, {String? tablePrefix}) {
|
||||||
final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : '';
|
final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : '';
|
||||||
|
|
@ -704,8 +708,8 @@ abstract class _$AppDatabase extends GeneratedDatabase {
|
||||||
_$AppDatabase(QueryExecutor e) : super(e);
|
_$AppDatabase(QueryExecutor e) : super(e);
|
||||||
$AppDatabaseManager get managers => $AppDatabaseManager(this);
|
$AppDatabaseManager get managers => $AppDatabaseManager(this);
|
||||||
late final $DatabaseItemsTable databaseItems = $DatabaseItemsTable(this);
|
late final $DatabaseItemsTable databaseItems = $DatabaseItemsTable(this);
|
||||||
late final Index databaseId =
|
late final Index databaseId = Index('database_id',
|
||||||
Index('database_id', 'CREATE INDEX database_id ON database_items (id)');
|
'CREATE INDEX database_id ON database_items (user_id, id)');
|
||||||
@override
|
@override
|
||||||
Iterable<TableInfo<Table, Object?>> get allTables =>
|
Iterable<TableInfo<Table, Object?>> get allTables =>
|
||||||
allSchemaEntities.whereType<TableInfo<Table, Object?>>();
|
allSchemaEntities.whereType<TableInfo<Table, Object?>>();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue