跳到主要内容

QueryManager<T>

Defined in: packages/rxdb/src/repository/QueryManager.ts:128

查询缓存管理器

用于管理查询任务的缓存和执行

  • 需要根据查询条件记录观察表的依赖关系
  • 统一计算何时 js 计算,何时重新执行 sql,减少适配器的开发难度
  • 未来配置 Repository 里的规则,与远程进行 pull/push

核心功能:

  1. 查询结果缓存:相同查询条件复用缓存结果
  2. 订阅管理:管理多个观察者的订阅和取消订阅
  3. 自动清理:当没有观察者时自动清理缓存
  4. 响应式刷新:支持手动刷新和自动刷新查询结果

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 ParameterDefault type
RTunknown

Parameters​

ParameterTypeDescription
taskOptionsCreateTaskOptions<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​

ParameterTypeDescription
entityTypeEntityType待判定的实体类型

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​

ParameterTypeDescription
entityTypesReadonlySet<EntityType>被上报失效的实体类型集合

Returns​

void

Remarks​

按任务粒度匹配而不是一刀切全表重跑:QueryTask.relationEntityTypes 是该任务 自己的依赖集(构造期必含自身实体类型),与入参有交集才重跑。同一个仓储上 where 各不相同的查询,只有真的引用了被上报实体的那些才回远端。

内部接口:给 Repository 的失效监听器调用,不属于公开 API。


registerMergeCreateFn()​

registerMergeCreateFn(taskType, fn): void;

Defined in: packages/rxdb/src/repository/QueryManager.ts:228

Parameters​

ParameterType
taskTypestring
fnMergeQueryTaskCreateFn<T>

Returns​

void


registerMergeRemoveFn()​

registerMergeRemoveFn(taskType, fn): void;

Defined in: packages/rxdb/src/repository/QueryManager.ts:236

Parameters​

ParameterType
taskTypestring
fnMergeQueryTaskRemoveFn<T>

Returns​

void


registerMergeUpdateFn()​

registerMergeUpdateFn(taskType, fn): void;

Defined in: packages/rxdb/src/repository/QueryManager.ts:232

Parameters​

ParameterType
taskTypestring
fnMergeQueryTaskUpdateFn<T>

Returns​

void