Upgrade drift

This commit is contained in:
Ming Ming 2023-07-11 01:30:56 +08:00
parent 24f1281478
commit 18f5a49db0
18 changed files with 1829 additions and 1645 deletions

View file

@ -1,13 +1,6 @@
targets: targets:
$default: $default:
builders: builders:
drift_dev:
options:
apply_converters_on_variables: true
generate_values_in_copy_with: true
new_sql_code_generation: true
scoped_dart_components: true
generate_connect_constructor: true
to_string_build: to_string_build:
options: options:
formatStringNameMapping: formatStringNameMapping:

View file

@ -216,7 +216,7 @@ class AlbumSqliteDbDataSource2 implements AlbumDataSource2 {
await db.into(db.albums).insertReturning(insert.album); await db.into(db.albums).insertReturning(insert.album);
rowId = insertedAlbum.rowId; rowId = insertedAlbum.rowId;
} else { } else {
await (db.delete(db.albumShares)..where((t) => t.album.equals(rowId))) await (db.delete(db.albumShares)..where((t) => t.album.equals(rowId!)))
.go(); .go();
} }
if (insert.albumShares.isNotEmpty) { if (insert.albumShares.isNotEmpty) {

View file

@ -416,7 +416,7 @@ class FileSqliteDbDataSource implements FileDataSource {
} }
return q.build(); return q.build();
}); });
final dateTime = db.accountFiles.bestDateTime.secondsSinceEpoch; final dateTime = db.accountFiles.bestDateTime.unixepoch;
query query
..where(dateTime.isBetweenValues( ..where(dateTime.isBetweenValues(
fromEpochMs ~/ 1000, (toEpochMs ~/ 1000) - 1)) fromEpochMs ~/ 1000, (toEpochMs ~/ 1000) - 1))

View file

@ -133,7 +133,7 @@ class FileSqliteCacheUpdater {
} }
final dirFileQuery = db.select(db.dirFiles) final dirFileQuery = db.select(db.dirFiles)
..where((t) => t.dir.equals(_dirRowId)) ..where((t) => t.dir.equals(_dirRowId!))
..orderBy([(t) => sql.OrderingTerm.asc(t.rowId)]); ..orderBy([(t) => sql.OrderingTerm.asc(t.rowId)]);
final dirFiles = await dirFileQuery.get(); final dirFiles = await dirFileQuery.get();
final diff = list_util.diff(dirFiles.map((e) => e.child), final diff = list_util.diff(dirFiles.map((e) => e.child),
@ -151,7 +151,7 @@ class FileSqliteCacheUpdater {
final deleteQuery = db.delete(db.dirFiles) final deleteQuery = db.delete(db.dirFiles)
..where((t) => t.child.isIn(sublist)) ..where((t) => t.child.isIn(sublist))
..where((t) => ..where((t) =>
t.dir.equals(_dirRowId) | t.dir.equalsExp(db.dirFiles.child)); t.dir.equals(_dirRowId!) | t.dir.equalsExp(db.dirFiles.child));
await deleteQuery.go(); await deleteQuery.go();
}, sql.maxByFileIdsSize); }, sql.maxByFileIdsSize);

View file

@ -46,8 +46,6 @@ class SqliteDb extends _$SqliteDb {
QueryExecutor? executor, QueryExecutor? executor,
}) : super(executor ?? platform.openSqliteConnection()); }) : super(executor ?? platform.openSqliteConnection());
SqliteDb.connect(DatabaseConnection connection) : super.connect(connection);
@override @override
get schemaVersion => 5; get schemaVersion => 5;

File diff suppressed because it is too large Load diff

View file

@ -618,7 +618,7 @@ extension SqliteDbExtension on SqliteDb {
query query
..where(files.fileId.isIn(sublist)) ..where(files.fileId.isIn(sublist))
..where(whereFileIsSupportedImageMime()); ..where(whereFileIsSupportedImageMime());
return [await query.map((r) => r.read(count)).getSingle()]; return [await query.map((r) => r.read(count)!).getSingle()];
}, maxByFileIdsSize); }, maxByFileIdsSize);
return counts.reduce((value, element) => value + element); return counts.reduce((value, element) => value + element);
} }
@ -645,15 +645,15 @@ extension SqliteDbExtension on SqliteDb {
await customStatement("UPDATE sqlite_sequence SET seq=0;"); await customStatement("UPDATE sqlite_sequence SET seq=0;");
} }
Expression<bool?> whereFileIsSupportedMime() { Expression<bool> whereFileIsSupportedMime() {
return file_util.supportedFormatMimes return file_util.supportedFormatMimes
.map<Expression<bool?>>((m) => files.contentType.equals(m)) .map<Expression<bool>>((m) => files.contentType.equals(m))
.reduce((value, element) => value | element); .reduce((value, element) => value | element);
} }
Expression<bool?> whereFileIsSupportedImageMime() { Expression<bool> whereFileIsSupportedImageMime() {
return file_util.supportedImageFormatMimes return file_util.supportedImageFormatMimes
.map<Expression<bool?>>((m) => files.contentType.equals(m)) .map<Expression<bool>>((m) => files.contentType.equals(m))
.reduce((value, element) => value | element); .reduce((value, element) => value | element);
} }
} }

View file

@ -10,8 +10,8 @@ enum FilesQueryMode {
expression, expression,
} }
typedef FilesQueryRelativePathBuilder = Expression<bool?> Function( typedef FilesQueryRelativePathBuilder = Expression<bool> Function(
GeneratedColumn<String?> relativePath); GeneratedColumn<String> relativePath);
/// Build a Files table query /// Build a Files table query
/// ///
@ -136,28 +136,28 @@ class FilesQueryBuilder {
} }
if (_byRowId != null) { if (_byRowId != null) {
query.where(db.files.rowId.equals(_byRowId)); query.where(db.files.rowId.equals(_byRowId!));
} }
if (_byFileId != null) { if (_byFileId != null) {
query.where(db.files.fileId.equals(_byFileId)); query.where(db.files.fileId.equals(_byFileId!));
} }
if (_byFileIds != null) { if (_byFileIds != null) {
query.where(db.files.fileId.isIn(_byFileIds!)); query.where(db.files.fileId.isIn(_byFileIds!));
} }
if (_byRelativePath != null) { if (_byRelativePath != null) {
query.where(db.accountFiles.relativePath.equals(_byRelativePath)); query.where(db.accountFiles.relativePath.equals(_byRelativePath!));
} }
if (_byOrRelativePathBuilders?.isNotEmpty == true) { if (_byOrRelativePathBuilders?.isNotEmpty == true) {
final expression = _byOrRelativePathBuilders! final expression = _byOrRelativePathBuilders!
.sublist(1) .sublist(1)
.fold<Expression<bool?>>( .fold<Expression<bool>>(
_byOrRelativePathBuilders![0](db.accountFiles.relativePath), _byOrRelativePathBuilders![0](db.accountFiles.relativePath),
(previousValue, builder) => (previousValue, builder) =>
previousValue | builder(db.accountFiles.relativePath)); previousValue | builder(db.accountFiles.relativePath));
query.where(expression); query.where(expression);
} }
if (_byMimePatterns?.isNotEmpty == true) { if (_byMimePatterns?.isNotEmpty == true) {
final expression = _byMimePatterns!.sublist(1).fold<Expression<bool?>>( final expression = _byMimePatterns!.sublist(1).fold<Expression<bool>>(
db.files.contentType.like(_byMimePatterns![0]), db.files.contentType.like(_byMimePatterns![0]),
(previousValue, element) => (previousValue, element) =>
previousValue | db.files.contentType.like(element)); previousValue | db.files.contentType.like(element));
@ -172,10 +172,10 @@ class FilesQueryBuilder {
} }
} }
if (_byDirRowId != null) { if (_byDirRowId != null) {
query.where(db.dirFiles.dir.equals(_byDirRowId)); query.where(db.dirFiles.dir.equals(_byDirRowId!));
} }
if (_byServerRowId != null) { if (_byServerRowId != null) {
query.where(db.files.server.equals(_byServerRowId)); query.where(db.files.server.equals(_byServerRowId!));
} }
if (_byLocation != null) { if (_byLocation != null) {
var clause = db.imageLocations.name.like(_byLocation!) | var clause = db.imageLocations.name.like(_byLocation!) |

View file

@ -21,7 +21,7 @@ Future<SqliteDb> createDb() async {
// see: https://drift.simonbinder.eu/docs/advanced-features/isolates/ // see: https://drift.simonbinder.eu/docs/advanced-features/isolates/
final driftIsolate = await _createDriftIsolate(); final driftIsolate = await _createDriftIsolate();
final connection = await driftIsolate.connect(); final connection = await driftIsolate.connect();
return SqliteDb.connect(connection); return SqliteDb(executor: connection);
} }
Future<U> computeWithDb<T, U>( Future<U> computeWithDb<T, U>(
@ -65,6 +65,7 @@ Future<DriftIsolate> _createDriftIsolate() async {
return await receivePort.first as DriftIsolate; return await receivePort.first as DriftIsolate;
} }
@pragma("vm:entry-point")
void _startBackground(_IsolateStartRequest request) { void _startBackground(_IsolateStartRequest request) {
app_init.initDrift(); app_init.initDrift();
@ -75,7 +76,7 @@ void _startBackground(_IsolateStartRequest request) {
// background isolate. If we used DriftIsolate.spawn, a third isolate would be // background isolate. If we used DriftIsolate.spawn, a third isolate would be
// started which is not what we want! // started which is not what we want!
final driftIsolate = DriftIsolate.inCurrent( final driftIsolate = DriftIsolate.inCurrent(
() => DatabaseConnection.fromExecutor(executor), () => DatabaseConnection(executor),
// this breaks background service! // this breaks background service!
serialize: false, serialize: false,
); );

View file

@ -237,8 +237,8 @@ class SqliteDateTimeConverter extends TypeConverter<DateTime, DateTime> {
const SqliteDateTimeConverter(); const SqliteDateTimeConverter();
@override @override
DateTime? mapToDart(DateTime? fromDb) => fromDb?.toUtc(); DateTime fromSql(DateTime fromDb) => fromDb.toUtc();
@override @override
DateTime? mapToSql(DateTime? value) => value?.toUtc(); DateTime toSql(DateTime value) => value.toUtc();
} }

View file

@ -0,0 +1,3 @@
extension MapEntryListExtension<T, U> on Iterable<MapEntry<T, U>> {
Map<T, U> toMap() => Map.fromEntries(this);
}

View file

@ -62,7 +62,7 @@ class CacheFavorite {
} }
if (removedFildIds.isNotEmpty) { if (removedFildIds.isNotEmpty) {
final counts = final counts =
await removedFildIds.map((id) => cacheMap[id]).withPartition( await removedFildIds.map((id) => cacheMap[id]!).withPartition(
(sublist) async { (sublist) async {
return [ return [
await (db.update(db.accountFiles) await (db.update(db.accountFiles)

View file

@ -18,7 +18,7 @@ class CompatV55 {
return db.use((db) async { return db.use((db) async {
final countExp = db.accountFiles.rowId.count(); final countExp = db.accountFiles.rowId.count();
final countQ = db.selectOnly(db.accountFiles)..addColumns([countExp]); final countQ = db.selectOnly(db.accountFiles)..addColumns([countExp]);
final count = await countQ.map((r) => r.read<int>(countExp)).getSingle(); final count = await countQ.map((r) => r.read(countExp)!).getSingle();
onProgress?.call(0, count); onProgress?.call(0, count);
final dateTimeUpdates = <Tuple2<int, DateTime>>[]; final dateTimeUpdates = <Tuple2<int, DateTime>>[];

View file

@ -85,9 +85,9 @@ class ListLocationGroup {
return LocationGroup( return LocationGroup(
r.read(db.imageLocations.name)!, r.read(db.imageLocations.name)!,
r.read(db.imageLocations.countryCode)!, r.read(db.imageLocations.countryCode)!,
r.read(count), r.read(count)!,
r.read(db.files.fileId)!, r.read(db.files.fileId)!,
r.read(latest).toUtc(), r.read(latest)!.toUtc(),
); );
}).get(), }).get(),
); );
@ -104,9 +104,9 @@ class ListLocationGroup {
.map((r) => LocationGroup( .map((r) => LocationGroup(
r.read(db.imageLocations.admin1)!, r.read(db.imageLocations.admin1)!,
r.read(db.imageLocations.countryCode)!, r.read(db.imageLocations.countryCode)!,
r.read(count), r.read(count)!,
r.read(db.files.fileId)!, r.read(db.files.fileId)!,
r.read(latest).toUtc(), r.read(latest)!.toUtc(),
)) ))
.get(), .get(),
); );
@ -123,9 +123,9 @@ class ListLocationGroup {
.map((r) => LocationGroup( .map((r) => LocationGroup(
r.read(db.imageLocations.admin2)!, r.read(db.imageLocations.admin2)!,
r.read(db.imageLocations.countryCode)!, r.read(db.imageLocations.countryCode)!,
r.read(count), r.read(count)!,
r.read(db.files.fileId)!, r.read(db.files.fileId)!,
r.read(latest).toUtc(), r.read(latest)!.toUtc(),
)) ))
.get(), .get(),
); );
@ -143,9 +143,9 @@ class ListLocationGroup {
return LocationGroup( return LocationGroup(
location_util.alpha2CodeToName(cc) ?? cc, location_util.alpha2CodeToName(cc) ?? cc,
cc, cc,
r.read(count), r.read(count)!,
r.read(db.files.fileId)!, r.read(db.files.fileId)!,
r.read(latest).toUtc(), r.read(latest)!.toUtc(),
); );
}).get(), }).get(),
); );
@ -168,7 +168,7 @@ class ListLocationGroup {
String dir, String dir,
sql.Expression<DateTime> latest, sql.Expression<DateTime> latest,
sql.Expression<int> count, sql.Expression<int> count,
sql.GeneratedColumn<String?> groupColumn, sql.GeneratedColumn<String> groupColumn,
) { ) {
final query = db.selectOnly(db.imageLocations).join([ final query = db.selectOnly(db.imageLocations).join([
sql.innerJoin(db.accountFiles, sql.innerJoin(db.accountFiles,

View file

@ -5,26 +5,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: _fe_analyzer_shared name: _fe_analyzer_shared
sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8" sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "47.0.0" version: "61.0.0"
analyzer: analyzer:
dependency: transitive dependency: transitive
description: description:
name: analyzer name: analyzer
sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80" sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.7.0" version: "5.13.0"
analyzer_plugin: analyzer_plugin:
dependency: transitive dependency: transitive
description: description:
name: analyzer_plugin name: analyzer_plugin
sha256: "02b0046b8b9a4c97a238c66f70acd22eec4263dfc8d9205f9dab5cc8630c5a6f" sha256: c1d5f167683de03d5ab6c3b53fc9aeefc5d59476e7810ba7bbddff50c6f4392d
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.11.1" version: "0.11.2"
android_intent_plus: android_intent_plus:
dependency: "direct main" dependency: "direct main"
description: description:
@ -328,10 +328,18 @@ packages:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: dart_code_metrics name: dart_code_metrics
sha256: dbb719c64661e8d279dc113bc1dc9484e159b805a0d779074cd92ea3856ffa0b sha256: "1dc1fa763b73ed52147bd91b015d81903edc3f227b77b1672fcddba43390ed18"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.18.0" version: "5.7.5"
dart_code_metrics_presets:
dependency: transitive
description:
name: dart_code_metrics_presets
sha256: b71eadf02a3787ebd5c887623f83f6fdc204d45c75a081bd636c4104b3fd8b73
url: "https://pub.dev"
source: hosted
version: "1.8.0"
dart_style: dart_style:
dependency: transitive dependency: transitive
description: description:
@ -393,18 +401,18 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: drift name: drift
sha256: "43ae515270f38ffe47702dc920c04d415894bcc6ebdf3e2b6a292cb207ed8cb7" sha256: "21abd7b1c1a637a264f58f9f05c7b910d29c204aab1cbfcb4d9fada1e98a9303"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.7.1" version: "2.8.0"
drift_dev: drift_dev:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: drift_dev name: drift_dev
sha256: "7d51538da971823a158236823cfb299731f720cd55078c6a478bfa4effb69275" sha256: ac1454f20b4b721bfbde7bd3b05123150bae2196ef992c405c07a63f5976a397
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.7.1" version: "2.8.0"
equatable: equatable:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1137,6 +1145,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.4" version: "2.1.4"
pub_updater:
dependency: transitive
description:
name: pub_updater
sha256: "05ae70703e06f7fdeb05f7f02dd680b8aad810e87c756a618f33e1794635115c"
url: "https://pub.dev"
source: hosted
version: "0.3.0"
pubspec_parse: pubspec_parse:
dependency: transitive dependency: transitive
description: description:
@ -1394,10 +1410,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: sqlparser name: sqlparser
sha256: "9ed8f4a24a2a243e23ad267bb50378cb75c7de0b200b5336229b2d6096e6a5df" sha256: b5b24c2804d39cbd619b424d8c9b1321cc5e813fd0e7b95a2707f596f82d5cd3
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.22.0" version: "0.29.0"
stack_trace: stack_trace:
dependency: transitive dependency: transitive
description: description:

View file

@ -52,7 +52,7 @@ dependencies:
git: git:
url: https://gitlab.com/nc-photos/flutter-draggable-scrollbar url: https://gitlab.com/nc-photos/flutter-draggable-scrollbar
ref: v0.1.0-nc-photos-6 ref: v0.1.0-nc-photos-6
drift: ^1.7.1 drift: 2.8.0
equatable: ^2.0.5 equatable: ^2.0.5
event_bus: ^2.0.0 event_bus: ^2.0.0
exifdart: exifdart:
@ -145,7 +145,7 @@ dev_dependencies:
path: copy_with_build path: copy_with_build
ref: copy_with_build-1.6.0 ref: copy_with_build-1.6.0
dart_code_metrics: any dart_code_metrics: any
drift_dev: ^1.7.0 drift_dev: 2.8.0
flutter_lints: any flutter_lints: any
flutter_test: flutter_test:
sdk: flutter sdk: flutter

View file

@ -39,7 +39,7 @@ Future<void> _insertAccountFirst() async {
expect( expect(
await util.listSqliteDbServerAccounts(c.sqliteDb), await util.listSqliteDbServerAccounts(c.sqliteDb),
{ {
util.SqlAccountWithServer( const util.SqlAccountWithServer(
sql.Server(rowId: 1, address: "http://example.com"), sql.Server(rowId: 1, address: "http://example.com"),
sql.Account(rowId: 1, server: 1, userId: "admin"), sql.Account(rowId: 1, server: 1, userId: "admin"),
), ),
@ -67,11 +67,11 @@ Future<void> _insertAccountSameServer() async {
expect( expect(
await util.listSqliteDbServerAccounts(c.sqliteDb), await util.listSqliteDbServerAccounts(c.sqliteDb),
{ {
util.SqlAccountWithServer( const util.SqlAccountWithServer(
sql.Server(rowId: 1, address: "http://example.com"), sql.Server(rowId: 1, address: "http://example.com"),
sql.Account(rowId: 1, server: 1, userId: "admin"), sql.Account(rowId: 1, server: 1, userId: "admin"),
), ),
util.SqlAccountWithServer( const util.SqlAccountWithServer(
sql.Server(rowId: 1, address: "http://example.com"), sql.Server(rowId: 1, address: "http://example.com"),
sql.Account(rowId: 2, server: 1, userId: "user1"), sql.Account(rowId: 2, server: 1, userId: "user1"),
), ),
@ -99,7 +99,7 @@ Future<void> _insertAccountSameAccount() async {
expect( expect(
await util.listSqliteDbServerAccounts(c.sqliteDb), await util.listSqliteDbServerAccounts(c.sqliteDb),
{ {
util.SqlAccountWithServer( const util.SqlAccountWithServer(
sql.Server(rowId: 1, address: "http://example.com"), sql.Server(rowId: 1, address: "http://example.com"),
sql.Account(rowId: 1, server: 1, userId: "admin"), sql.Account(rowId: 1, server: 1, userId: "admin"),
), ),
@ -177,7 +177,7 @@ Future<void> _deleteAccountSameServer() async {
expect( expect(
await util.listSqliteDbServerAccounts(c.sqliteDb), await util.listSqliteDbServerAccounts(c.sqliteDb),
{ {
util.SqlAccountWithServer( const util.SqlAccountWithServer(
sql.Server(rowId: 1, address: "http://example.com"), sql.Server(rowId: 1, address: "http://example.com"),
sql.Account(rowId: 2, server: 1, userId: "user1"), sql.Account(rowId: 2, server: 1, userId: "user1"),
), ),
@ -228,7 +228,7 @@ Future<void> _deleteAccountSameServerSharedFile() async {
expect( expect(
await util.listSqliteDbServerAccounts(c.sqliteDb), await util.listSqliteDbServerAccounts(c.sqliteDb),
{ {
util.SqlAccountWithServer( const util.SqlAccountWithServer(
sql.Server(rowId: 1, address: "http://example.com"), sql.Server(rowId: 1, address: "http://example.com"),
sql.Account(rowId: 2, server: 1, userId: "user1"), sql.Account(rowId: 2, server: 1, userId: "user1"),
), ),

View file

@ -601,7 +601,7 @@ Future<Set<Album>> listSqliteDbAlbums(sql.SqliteDb db) async {
), ),
); );
return Tuple2( return Tuple2(
r.read(db.albums.rowId), r.read(db.albums.rowId)!,
SqliteAlbumConverter.fromSql(r.readTable(db.albums), albumFile, []), SqliteAlbumConverter.fromSql(r.readTable(db.albums), albumFile, []),
); );
}).get(); }).get();