跳到主要内容

SqliteTreeRepository<T>

Defined in: packages/rxdb-adapter-sqlite-core/src/repository/SqliteTreeRepository.ts:27

树形实体仓库

findDescendants / findAncestors 一律 addQueryCache(result, true)(forcedUpdate)。

这不只是为了刷新 hasChildren 等计算属性——非 forced 路径已经会刷新计算属性。 forcedUpdate 同时把 state.origin 重置为数据库行,从而抵消 P0-004: 迟到的本 tab CREATE/UPDATE 事件经 QueryManager#serialize → createEntityRef → EntityStatus.replace 会把活实体与 origin 一起回写成旧值, 之后的 save() 因 patch === {} 静默丢写。

代价:会覆盖调用方未保存的本地编辑。P0-004 修好之前不要改回非 forced, 否则 findAncestors 订阅在父级二次变更时不再发射 (见 shared-tree.suite.ts 「findAncestors 订阅:父级变更应触发增量更新」)。 与 PGliteTreeRepository 保持一致。

Extends​

Type Parameters​

Type Parameter
T extends EntityType

Implements​

Constructors​

Constructor​

new SqliteTreeRepository<T>(adapter, EntityType): SqliteTreeRepository<T>;

Defined in: packages/rxdb-adapter-sqlite-core/src/repository/SqliteRepositoryBase.ts:21

Parameters​

ParameterType
adapterRxDBAdapterSqliteBase
EntityTypeT

Returns​

SqliteTreeRepository<T>

Inherited from​

SqliteRepository.constructor

Properties​

adapter​

protected adapter: RxDBAdapterSqliteBase;

Defined in: packages/rxdb-adapter-sqlite-core/src/repository/SqliteRepositoryBase.ts:22

Inherited from​

SqliteRepository.adapter


EntityType​

readonly EntityType: T;

Defined in: packages/rxdb/dist/repository/RepositoryBase.d.ts:20

Inherited from​

SqliteRepository.EntityType


metadata​

readonly metadata: EntityMetadata;

Defined in: packages/rxdb-adapter-sqlite-core/src/repository/SqliteRepositoryBase.ts:19

Inherited from​

SqliteRepository.metadata


rxdb​

protected readonly rxdb: RxDB;

Defined in: packages/rxdb/dist/repository/RepositoryBase.d.ts:19

Inherited from​

SqliteRepository.rxdb


_STATIC_METHODS​

protected static _STATIC_METHODS: string[];

Defined in: packages/rxdb/dist/repository/RepositoryBase.d.ts:29

子类声明的"静态方法名"清单,用于把 User.findOne(...) 这样的方法 注入到实体类上(EntityManager.init 时挂)。

Remarks​

用类字段 static 而非构造器里赋值 —— 字段初始化在 extends 链上是自底向上 合并的,所以子类定义的 _STATIC_METHODS 不会丢;运行时反射取的是当前类的字段。

Inherited from​

SqliteRepository._STATIC_METHODS

Accessors​

staticMethods​

Get Signature​

get static staticMethods(): string[];

Defined in: packages/rxdb/dist/repository/RepositoryBase.d.ts:37

当前类(含继承链上各层)声明的全部静态方法名

Remarks​

没有沿原型链累加:每个子类自己写一份 _STATIC_METHODS,避免运行时 反射出祖先的 get / findOne 这类名字后,再被后代意外覆盖一次。

Returns​

string[]

Inherited from​

SqliteRepository.staticMethods

Methods​

addQueryCache()​

addQueryCache(sqliteSuccessResult, forcedUpdate?): Promise<InstanceType<T>[]>;

Defined in: packages/rxdb-adapter-sqlite-core/src/repository/SqliteRepositoryBase.ts:69

添加缓存

Parameters​

ParameterTypeDefault valueDescription
sqliteSuccessResultSqliteSuccessResultundefined-
forcedUpdatebooleanfalse强制刷新,在数据有的情况下也会更新数据,在修改数据的情况下需要

Returns​

Promise<InstanceType<T>[]>

Inherited from​

SqliteRepository.addQueryCache


count()​

count(options): Promise<number>;

Defined in: packages/rxdb-adapter-sqlite-core/src/repository/SqliteRepository.ts:55

查询实体数量

Parameters​

ParameterTypeDescription
optionsEntityStaticType<T, "countOptions">查询选项(详见 CountOptions)

Returns​

Promise<number>

满足条件的行数

Implementation of​

ITreeRepository.count

Inherited from​

SqliteRepository.count


countAncestors()​

countAncestors(options): Promise<number>;

Defined in: packages/rxdb-adapter-sqlite-core/src/repository/SqliteTreeRepository.ts:46

查询祖先节点数量

Parameters​

ParameterType
optionsFindTreeOptions<T>

Returns​

Promise<number>

Remarks​

指定 entityId 时:不包含当前节点,只统计祖先数量

Implementation of​

ITreeRepository.countAncestors


countDescendants()​

countDescendants(options): Promise<number>;

Defined in: packages/rxdb-adapter-sqlite-core/src/repository/SqliteTreeRepository.ts:34

查询子孙实体数量

Parameters​

ParameterType
optionsFindTreeOptions<T>

Returns​

Promise<number>

Remarks​

  • 指定 entityId 时:不包含当前节点,只统计后代数量
  • 不指定 entityId 时:统计所有根节点及其后代的总数

Implementation of​

ITreeRepository.countDescendants


create()​

create(entity): Promise<InstanceType<T>>;

Defined in: packages/rxdb-adapter-sqlite-core/src/repository/SqliteRepository.ts:61

创建实体

Parameters​

ParameterTypeDescription
entityInstanceType<T>实体实例(通常由 EntityManager.instantiate 创建)

Returns​

Promise<InstanceType<T>>

持久化完成后的实体;与入参不是同一引用(实现可换新实例)

Implementation of​

ITreeRepository.create

Inherited from​

SqliteRepository.create


createEntityRef()​

createEntityRef(data): EntityInstanceType<T>;

Defined in: packages/rxdb/dist/repository/RepositoryBase.d.ts:50

创建(或复用)一个实体引用

Parameters​

ParameterTypeDescription
dataEntityUpdateData<T>字段初始值;其中 id 缺省时会自动生成

Returns​

EntityInstanceType<T>

已挂到 EntityManager 缓存里的实体实例

Remarks​

不管入参 id 是否已存在于缓存,都会优先返回缓存里的实例(覆盖式刷新); 走 rxdb.entityManager.createEntityRef 是为了复用同一份引用语义,避免 不同调用栈里拿到的是两个状态不同步的克隆。

Inherited from​

SqliteRepository.createEntityRef


find()​

find(options): Promise<InstanceType<T>[]>;

Defined in: packages/rxdb-adapter-sqlite-core/src/repository/SqliteRepository.ts:48

按查询条件读实体,并把结果行合进身份映射。

Parameters​

ParameterTypeDescription
optionsEntityStaticType<T, "findOptions">查询条件

Returns​

Promise<InstanceType<T>[]>

结果行对应的实体(命中缓存的返回同一引用)

Remarks​

回填走 SqliteRepositoryBase.mergeQueryCache 而不是 addQueryCache(result): 后者在 forcedUpdate = false 下只建新实体、不碰已缓存的,于是任何绕过 ORM 的写 (提交图的 HEAD CAS、启用提交能力的 CAS)落库之后,本进程再怎么 find() 都只读得到 缓存里那份旧值——CAS 明明把 headRevision 推到了 1,读回来还是 0,下一次提交因此 永远撞 head_revision_conflict。PGlite 那一端每次读都回填,同一段代码在两个后端上 结果不同。

也不用 addQueryCache(result, true):那是整行覆盖 + modified 归零,会把用户尚未 保存的编辑写进基线后静默清空(见 entity-status.ts#applyExternal)。

Implementation of​

ITreeRepository.find

Inherited from​

SqliteRepository.find


findAncestors()​

findAncestors(options): Promise<InstanceType<T>[]>;

Defined in: packages/rxdb-adapter-sqlite-core/src/repository/SqliteTreeRepository.ts:40

查询祖先节点

Parameters​

ParameterType
optionsFindTreeOptions<T>

Returns​

Promise<InstanceType<T>[]>

Remarks​

指定 entityId 时:包含当前节点 + 祖先节点

Implementation of​

ITreeRepository.findAncestors


findByRowIds()​

findByRowIds(rowIds, forceRefresh?): Promise<InstanceType<T>[]>;

Defined in: packages/rxdb-adapter-sqlite-core/src/repository/SqliteRepositoryBase.ts:29

Parameters​

ParameterTypeDefault value
rowIdsbigint[]undefined
forceRefreshbooleanfalse

Returns​

Promise<InstanceType<T>[]>

Inherited from​

SqliteRepository.findByRowIds


findDescendants()​

findDescendants(options): Promise<InstanceType<T>[]>;

Defined in: packages/rxdb-adapter-sqlite-core/src/repository/SqliteTreeRepository.ts:28

查询子孙实体

Parameters​

ParameterType
optionsFindTreeOptions<T>

Returns​

Promise<InstanceType<T>[]>

Remarks​

  • 指定 entityId 时:包含当前节点 + 子孙节点
  • 不指定 entityId 时:返回所有根节点及其子孙

Implementation of​

ITreeRepository.findDescendants


findOne()​

findOne(options): Promise<InstanceType<T> | undefined>;

Defined in: packages/rxdb-adapter-sqlite-core/src/repository/SqliteRepository.ts:26

Parameters​

ParameterType
optionsEntityStaticType<T, "findOneOptions">

Returns​

Promise<InstanceType<T> | undefined>

Inherited from​

SqliteRepository.findOne


get()​

get(id): Promise<InstanceType<T>>;

Defined in: packages/rxdb-adapter-sqlite-core/src/repository/SqliteRepository.ts:14

Parameters​

ParameterType
idEntityStaticType<T, "idType">

Returns​

Promise<InstanceType<T>>

Inherited from​

SqliteRepository.get


getEntityRef()​

getEntityRef(id):
| EntityInstanceType<T>
| undefined;

Defined in: packages/rxdb/dist/repository/RepositoryBase.d.ts:57

按 ID 在当前进程的实体缓存中查找实体

Parameters​

ParameterTypeDescription
idEntityStaticType<T, "idType">实体主键

Returns​

| EntityInstanceType<T> | undefined

缓存命中则返回实例,未命中返回 undefined(不触发数据库查询)

Inherited from​

SqliteRepository.getEntityRef


hasEntityRef()​

hasEntityRef(id): boolean;

Defined in: packages/rxdb/dist/repository/RepositoryBase.d.ts:68

判定当前进程的实体缓存里是否有指定 ID

Parameters​

ParameterTypeDescription
idEntityStaticType<T, "idType">实体主键

Returns​

boolean

缓存命中返回 true,否则 false

Remarks​

等价于 getEntityRef(id) !== undefined,单独提供是为了让"批量预热"和 "差异同步"等热点路径省掉一次引用创建 / 取状态的开销。

Inherited from​

SqliteRepository.hasEntityRef


mergeQueryCache()​

protected mergeQueryCache(sqliteSuccessResult): Promise<InstanceType<T>[]>;

Defined in: packages/rxdb-adapter-sqlite-core/src/repository/SqliteRepositoryBase.ts:86

把结果行合进身份映射:干净实体整行刷新,脏实体逐字段避让未保存的编辑。

Parameters​

ParameterTypeDescription
sqliteSuccessResultSqliteSuccessResult一次 SELECT 的结果集

Returns​

Promise<InstanceType<T>[]>

结果行对应的实体(命中缓存的返回同一引用)

Remarks​

与 addQueryCache 的分工是「读」与「写」:写路径(create / update)知道自己 刚刚写了什么,用 forcedUpdate 整行盖回去是对的;读路径拿到的是别人写的行,可能 落在一个用户正在编辑的实体上,只能用 state.modified ? mergeExternal : replace 这一对策略——这正是 entity-status.ts#applyExternal 的语义,它把「查询结果回填」 明确列为必须分流的三条路径之一。

Inherited from​

SqliteRepository.mergeQueryCache


remove()​

remove(entity): Promise<InstanceType<T>>;

Defined in: packages/rxdb-adapter-sqlite-core/src/repository/SqliteRepository.ts:82

删除实体

Parameters​

ParameterTypeDescription
entityInstanceType<T>待删除的实体(按 id 定位)

Returns​

Promise<InstanceType<T>>

删除完成后的实体(字段清空、local 置为 false)

Implementation of​

ITreeRepository.remove

Inherited from​

SqliteRepository.remove


update()​

update(entity, patch): Promise<InstanceType<T>>;

Defined in: packages/rxdb-adapter-sqlite-core/src/repository/SqliteRepository.ts:71

更新实体

Parameters​

ParameterTypeDescription
entityInstanceType<T>待更新的实体(提供 id 与最新字段)
patchPartial<InstanceType<T>>字段级 patch;未列出的字段不会被改动

Returns​

Promise<InstanceType<T>>

持久化完成后的实体

Implementation of​

ITreeRepository.update

Inherited from​

SqliteRepository.update


updateEntity()​

updateEntity(entity, update): void;

Defined in: packages/rxdb/dist/repository/RepositoryBase.d.ts:80

用 update 覆盖实体字段

Parameters​

ParameterTypeDescription
entityInstanceType<T>目标实体
updateInstanceType<T>待写入的字段;主键 id 也会被赋值(用于 hydrate 场景)

Returns​

void

Remarks​

走 EntityStatus.applyExternal,保证 dirty tracking 与 patch 生成走的是同一条路径, 且实体有未保存编辑时逐字段避让而不是整行覆盖 —— 活查询整批回填会命中已被用户改过的实体, 无条件 replace 会静默吃掉那些编辑。

Inherited from​

SqliteRepository.updateEntity