QueryManager<T>
Defined in: packages/rxdb/src/repository/QueryManager.ts:128
查询缓存管理器
用于管理查询任务的缓存和执行
- 需要根据查询条件记录观察表的依赖关系
- 统一计算何时 js 计算,何时重新执行 sql,减少适配器的开发难度
- 未来配置 Repository 里的规则,与远程进行 pull/push
核心功能:
- 查询结果缓存:相同查询条件复用缓存结果
- 订阅管理:管理多个观察者的订阅和取消订阅
- 自动清理:当没有观察者时自动清理缓存
- 响应式刷新:支持手动刷新和自动刷新查询结果
Type Parameters
| Type Parameter |
|---|
T extends EntityType |
Properties
EntityType
protected readonly EntityType: T;
Defined in: packages/rxdb/src/repository/QueryManager.ts:148
实体类型,用于标识当前管理的实体
rxdb
protected readonly rxdb: RxDB;
Defined in: packages/rxdb/src/repository/QueryManager.ts:147
RxDB 实例,用于访问数据库和事件系统
Methods
createTask()
createTask<RT>(taskOptions): QueryTask<T, RT>;
Defined in: packages/rxdb/src/repository/QueryManager.ts:179
创建查询任务
此方法根据查询选项创建或复用缓存的查询任务
- 使用查询类型和选项的 hash 值作为缓存 key
- 如果缓存中已存在相同的查询,直接返回缓存的任务
- 每个查询任务管理多个观察者,当最后一个观察者取消订阅时自动清理任务
Type Parameters
| Type Parameter | Default type |
|---|---|
RT | unknown |
Parameters
| Parameter | Type | Description |
|---|---|---|
taskOptions | CreateTaskOptions<T, RT> | 查询任务选项 |
Returns
QueryTask<T, RT>
查询任务对象,包含 result$ 用于订阅查询结果
destroy()
destroy(): void;
Defined in: packages/rxdb/src/repository/QueryManager.ts:155
Returns
void
hasDependency()
hasDependency(entityType): boolean;
Defined in: packages/rxdb/src/repository/QueryManager.ts:201
本管理器当前是否有查询依赖该实体类型(US-023)。
Parameters
| Parameter | Type | Description |
|---|---|---|
entityType | EntityType | 待判定的实体类型 |
Returns
boolean
依赖计数表里存在该键时为 true
Remarks
依赖集由每个任务的 where 推导(见 entity_type_dependencies),因此「A 的查询
引用了 B」在这里表现为 A 的管理器持有 B 的计数。本仓储自身的实体类型在构造期就
计过一次,永远为 true。
内部接口:给 Repository 判断一次失效上报要不要往下走,不属于公开 API。
refreshDependentTasks()
refreshDependentTasks(entityTypes): void;
Defined in: packages/rxdb/src/repository/QueryManager.ts:217
重跑依赖了给定实体类型之一的查询任务(US-023)。
Parameters
| Parameter | Type | Description |
|---|---|---|
entityTypes | ReadonlySet<EntityType> | 被上报失效的实体类型集合 |
Returns
void
Remarks
按任务粒度匹配而不是一刀切全表重跑:QueryTask.relationEntityTypes 是该任务
自己的依赖集(构造期必含自身实体类型),与入参有交集才重跑。同一个仓储上
where 各不相同的查询,只有真的引用了被上报实体的那些才回远端。
内部接口:给 Repository 的失效监听器调用,不属于公开 API。
registerMergeCreateFn()
registerMergeCreateFn(taskType, fn): void;
Defined in: packages/rxdb/src/repository/QueryManager.ts:228
Parameters
| Parameter | Type |
|---|---|
taskType | string |
fn | MergeQueryTaskCreateFn<T> |
Returns
void
registerMergeRemoveFn()
registerMergeRemoveFn(taskType, fn): void;
Defined in: packages/rxdb/src/repository/QueryManager.ts:236
Parameters
| Parameter | Type |
|---|---|
taskType | string |
fn | MergeQueryTaskRemoveFn<T> |
Returns
void
registerMergeUpdateFn()
registerMergeUpdateFn(taskType, fn): void;
Defined in: packages/rxdb/src/repository/QueryManager.ts:232
Parameters
| Parameter | Type |
|---|---|
taskType | string |
fn | MergeQueryTaskUpdateFn<T> |
Returns
void