更新
This commit is contained in:
@@ -56,11 +56,26 @@ abstract class StorageSdkApi {
|
|||||||
factory StorageSdkApi({
|
factory StorageSdkApi({
|
||||||
required GeneratedDatabase Function(QueryExecutor) databaseFactory,
|
required GeneratedDatabase Function(QueryExecutor) databaseFactory,
|
||||||
required Map<Type, TableInfo> Function(GeneratedDatabase) tableRegistry,
|
required Map<Type, TableInfo> Function(GeneratedDatabase) tableRegistry,
|
||||||
}) =>
|
}) => StorageSdkWiring.build(
|
||||||
StorageSdkWiring.build(
|
databaseFactory: databaseFactory,
|
||||||
databaseFactory: databaseFactory,
|
tableRegistry: tableRegistry,
|
||||||
tableRegistry: tableRegistry,
|
);
|
||||||
);
|
|
||||||
|
// ── 事务 ─────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
/// 在单个事务内执行 [action]。
|
||||||
|
///
|
||||||
|
/// - 成功则自动 COMMIT
|
||||||
|
/// - 抛出异常则自动 ROLLBACK,异常会继续向上传递
|
||||||
|
///
|
||||||
|
/// 示例:
|
||||||
|
/// ```dart
|
||||||
|
/// await _storage.transaction(() async {
|
||||||
|
/// await _storage.insertOrReplace(companionA);
|
||||||
|
/// await _storage.updateWhere(companionB, (t) => t.uid.equals(1));
|
||||||
|
/// });
|
||||||
|
/// ```
|
||||||
|
Future<T> transaction<T>(Future<T> Function() action);
|
||||||
|
|
||||||
// ── 插入 ─────────────────────────────────────────────────────────────────
|
// ── 插入 ─────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
@@ -92,16 +107,16 @@ abstract class StorageSdkApi {
|
|||||||
/// );
|
/// );
|
||||||
/// ```
|
/// ```
|
||||||
Future<void> updateWhere<D, T extends Table>(
|
Future<void> updateWhere<D, T extends Table>(
|
||||||
Insertable<D> companion,
|
Insertable<D> companion,
|
||||||
Expression<bool> Function(T) filter,
|
Expression<bool> Function(T) filter,
|
||||||
);
|
);
|
||||||
|
|
||||||
// ── 删除 ─────────────────────────────────────────────────────────────────
|
// ── 删除 ─────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
/// 按条件删除。
|
/// 按条件删除。
|
||||||
Future<void> deleteWhere<D, T extends Table>(
|
Future<void> deleteWhere<D, T extends Table>(
|
||||||
Expression<bool> Function(T) filter,
|
Expression<bool> Function(T) filter,
|
||||||
);
|
);
|
||||||
|
|
||||||
/// 清空整张表。
|
/// 清空整张表。
|
||||||
Future<void> deleteAll<D>();
|
Future<void> deleteAll<D>();
|
||||||
@@ -118,13 +133,13 @@ abstract class StorageSdkApi {
|
|||||||
|
|
||||||
/// 按条件查询。
|
/// 按条件查询。
|
||||||
Future<List<D>> selectWhere<D, T extends Table>(
|
Future<List<D>> selectWhere<D, T extends Table>(
|
||||||
Expression<bool> Function(T) filter,
|
Expression<bool> Function(T) filter,
|
||||||
);
|
);
|
||||||
|
|
||||||
/// 查询第一条匹配记录。
|
/// 查询第一条匹配记录。
|
||||||
Future<D?> selectFirst<D, T extends Table>(
|
Future<D?> selectFirst<D, T extends Table>(
|
||||||
Expression<bool> Function(T) filter,
|
Expression<bool> Function(T) filter,
|
||||||
);
|
);
|
||||||
|
|
||||||
// ── 监听 ─────────────────────────────────────────────────────────────────
|
// ── 监听 ─────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
@@ -133,13 +148,13 @@ abstract class StorageSdkApi {
|
|||||||
|
|
||||||
/// 按条件监听(实时流)。
|
/// 按条件监听(实时流)。
|
||||||
Stream<List<D>> watchWhere<D, T extends Table>(
|
Stream<List<D>> watchWhere<D, T extends Table>(
|
||||||
Expression<bool> Function(T) filter,
|
Expression<bool> Function(T) filter,
|
||||||
);
|
);
|
||||||
|
|
||||||
/// 监听第一条匹配记录(实时流)。
|
/// 监听第一条匹配记录(实时流)。
|
||||||
Stream<D?> watchFirst<D, T extends Table>(
|
Stream<D?> watchFirst<D, T extends Table>(
|
||||||
Expression<bool> Function(T) filter,
|
Expression<bool> Function(T) filter,
|
||||||
);
|
);
|
||||||
|
|
||||||
// ── 原始 SQL ─────────────────────────────────────────────────────────────
|
// ── 原始 SQL ─────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
@@ -152,7 +167,5 @@ abstract class StorageSdkApi {
|
|||||||
// ── 统计 ─────────────────────────────────────────────────────────────────
|
// ── 统计 ─────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
/// 统计记录数。
|
/// 统计记录数。
|
||||||
Future<int> count<D, T extends Table>({
|
Future<int> count<D, T extends Table>({Expression<bool> Function(T)? filter});
|
||||||
Expression<bool> Function(T)? filter,
|
}
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ class StorageSdkApiImpl implements StorageSdkApi, StorageSdkLifecycle {
|
|||||||
StorageSdkApiImpl({
|
StorageSdkApiImpl({
|
||||||
required StorageSdkCore core,
|
required StorageSdkCore core,
|
||||||
required Map<Type, TableInfo> Function(GeneratedDatabase) tableRegistry,
|
required Map<Type, TableInfo> Function(GeneratedDatabase) tableRegistry,
|
||||||
}) : _core = core,
|
}) : _core = core,
|
||||||
_tableRegistry = tableRegistry;
|
_tableRegistry = tableRegistry;
|
||||||
|
|
||||||
// ── 表查找 ───────────────────────────────────────────────────────────────
|
// ── 表查找 ───────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
@@ -25,6 +25,13 @@ class StorageSdkApiImpl implements StorageSdkApi, StorageSdkLifecycle {
|
|||||||
return table as TableInfo<T, D>;
|
return table as TableInfo<T, D>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// 获取当前已开启的数据库实例,未开启则抛出 [StateError]。
|
||||||
|
GeneratedDatabase get _db {
|
||||||
|
final db = _core.dataSource.current;
|
||||||
|
if (db == null) throw StateError('数据库未开启,请先调用 openDatabase()');
|
||||||
|
return db;
|
||||||
|
}
|
||||||
|
|
||||||
// ── 生命周期 ─────────────────────────────────────────────────────────────
|
// ── 生命周期 ─────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -36,6 +43,16 @@ class StorageSdkApiImpl implements StorageSdkApi, StorageSdkLifecycle {
|
|||||||
@override
|
@override
|
||||||
bool get isDatabaseOpen => _core.dataSource.current != null;
|
bool get isDatabaseOpen => _core.dataSource.current != null;
|
||||||
|
|
||||||
|
// ── 事务 ─────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
/// 在单个事务内执行 [action]。
|
||||||
|
///
|
||||||
|
/// - 成功则自动 COMMIT
|
||||||
|
/// - 抛出异常则自动 ROLLBACK,异常会继续向上传递
|
||||||
|
@override
|
||||||
|
Future<T> transaction<T>(Future<T> Function() action) =>
|
||||||
|
_db.transaction(action);
|
||||||
|
|
||||||
// ── 插入 ─────────────────────────────────────────────────────────────────
|
// ── 插入 ─────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -54,64 +71,57 @@ class StorageSdkApiImpl implements StorageSdkApi, StorageSdkLifecycle {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> updateWhere<D, T extends Table>(
|
Future<void> updateWhere<D, T extends Table>(
|
||||||
Insertable<D> companion,
|
Insertable<D> companion,
|
||||||
Expression<bool> Function(T) filter,
|
Expression<bool> Function(T) filter,
|
||||||
) =>
|
) => _core.repo.updateWhere(_tableFor<T, D>(), companion, filter);
|
||||||
_core.repo.updateWhere(_tableFor<T, D>(), companion, filter);
|
|
||||||
|
|
||||||
// ── 删除 ─────────────────────────────────────────────────────────────────
|
// ── 删除 ─────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> deleteWhere<D, T extends Table>(
|
Future<void> deleteWhere<D, T extends Table>(
|
||||||
Expression<bool> Function(T) filter,
|
Expression<bool> Function(T) filter,
|
||||||
) =>
|
) => _core.repo.deleteWhere(_tableFor<T, D>(), filter);
|
||||||
_core.repo.deleteWhere(_tableFor<T, D>(), filter);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> deleteAll<D>() =>
|
Future<void> deleteAll<D>() => _core.repo.deleteAll(_tableFor<Table, D>());
|
||||||
_core.repo.deleteAll(_tableFor<Table, D>());
|
|
||||||
|
|
||||||
// ── 查询 ─────────────────────────────────────────────────────────────────
|
// ── 查询 ─────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<D>> selectAll<D>() =>
|
Future<List<D>> selectAll<D>() => _core.repo.selectAll(_tableFor<Table, D>());
|
||||||
_core.repo.selectAll(_tableFor<Table, D>());
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<D>> selectWhere<D, T extends Table>(
|
Future<List<D>> selectWhere<D, T extends Table>(
|
||||||
Expression<bool> Function(T) filter,
|
Expression<bool> Function(T) filter,
|
||||||
) =>
|
) => _core.repo.selectWhere(_tableFor<T, D>(), filter);
|
||||||
_core.repo.selectWhere(_tableFor<T, D>(), filter);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<D?> selectFirst<D, T extends Table>(
|
Future<D?> selectFirst<D, T extends Table>(
|
||||||
Expression<bool> Function(T) filter,
|
Expression<bool> Function(T) filter,
|
||||||
) =>
|
) => _core.repo.selectFirst(_tableFor<T, D>(), filter);
|
||||||
_core.repo.selectFirst(_tableFor<T, D>(), filter);
|
|
||||||
|
|
||||||
// ── 监听 ─────────────────────────────────────────────────────────────────
|
// ── 监听 ─────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Stream<List<D>> watchAll<D>() =>
|
Stream<List<D>> watchAll<D>() => _core.repo.watchAll(_tableFor<Table, D>());
|
||||||
_core.repo.watchAll(_tableFor<Table, D>());
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Stream<List<D>> watchWhere<D, T extends Table>(
|
Stream<List<D>> watchWhere<D, T extends Table>(
|
||||||
Expression<bool> Function(T) filter,
|
Expression<bool> Function(T) filter,
|
||||||
) =>
|
) => _core.repo.watchWhere(_tableFor<T, D>(), filter);
|
||||||
_core.repo.watchWhere(_tableFor<T, D>(), filter);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Stream<D?> watchFirst<D, T extends Table>(
|
Stream<D?> watchFirst<D, T extends Table>(
|
||||||
Expression<bool> Function(T) filter,
|
Expression<bool> Function(T) filter,
|
||||||
) =>
|
) => _core.repo.watchFirst(_tableFor<T, D>(), filter);
|
||||||
_core.repo.watchFirst(_tableFor<T, D>(), filter);
|
|
||||||
|
|
||||||
// ── 原始 SQL ─────────────────────────────────────────────────────────────
|
// ── 原始 SQL ─────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<QueryRow>> rawQuery(String sql, [List<Object?> args = const []]) =>
|
Future<List<QueryRow>> rawQuery(
|
||||||
_core.repo.rawQuery(sql, args);
|
String sql, [
|
||||||
|
List<Object?> args = const [],
|
||||||
|
]) => _core.repo.rawQuery(sql, args);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> rawExecute(String sql, [List<Object?> args = const []]) =>
|
Future<void> rawExecute(String sql, [List<Object?> args = const []]) =>
|
||||||
@@ -122,6 +132,5 @@ class StorageSdkApiImpl implements StorageSdkApi, StorageSdkLifecycle {
|
|||||||
@override
|
@override
|
||||||
Future<int> count<D, T extends Table>({
|
Future<int> count<D, T extends Table>({
|
||||||
Expression<bool> Function(T)? filter,
|
Expression<bool> Function(T)? filter,
|
||||||
}) =>
|
}) => _core.repo.count(_tableFor<T, D>(), filter: filter);
|
||||||
_core.repo.count(_tableFor<T, D>(), filter: filter);
|
}
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user