跳到主要内容

SqliteTransactionExecutor

Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:79

SQLite 侧的 TransactionExecutor 实现。

Remarks​

持有它 = 有权在该事务内执行;未持有的调用一律重新排队。事务身份由对象标识表示, 不再由适配器实例上的 #transaction_lock 布尔环境态推断 (设计见 code-reviews/transaction-executor-design.md §4)。

Implements​

Constructors​

Constructor​

new SqliteTransactionExecutor(
adapter,
client,
id
): SqliteTransactionExecutor;

Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:101

Parameters​

ParameterType
adapterRxDBAdapterSqliteBase
clientSqliteClientLike
idstring

Returns​

SqliteTransactionExecutor

Properties​

id​

readonly id: string;

Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:86

事务标识,用于日志与断言。

Remarks​

不要用它判断两个 executor 是否同一个事务 —— 用对象标识(a === b)。

Implementation of​

TransactionExecutor.id

Accessors​

adapter​

Get Signature​

get adapter(): RxDBAdapterSqliteBase;

Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:97

Internal

事务作用域内的适配器门面:把它交给内部 helper,helper 的每次 query() 都落在本事务里。

Returns​

RxDBAdapterSqliteBase


state​

Get Signature​

get state(): TransactionExecutorState;

Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:88

生命周期状态。

Returns​

TransactionExecutorState

生命周期状态。

Implementation of​

TransactionExecutor.state

Methods​

execute()​

execute(sql, bindings?): Promise<SqliteSuccessResult>;

Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:115

直接在本事务的连接上执行语句。

Parameters​

ParameterType
sqlstring
bindings?SQLiteCompatibleType[]

Returns​

Promise<SqliteSuccessResult>

Remarks​

SQLite 侧特有的透传入口,与既有的 transaction(async tx => tx.execute(sql)) 写法保持兼容。 跨适配器可移植的入口是 query。


getRepository()​

getRepository<T>(EntityType): IRepository<T>;

Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:147

在本事务内取仓库。

Type Parameters​

Type Parameter
T extends EntityType

Parameters​

ParameterTypeDescription
EntityTypeT实体类型

Returns​

IRepository<T>

Remarks​

由该仓库发出的读写一律归属本事务,读也一样 —— 事务体内经普通 adapter.query() 的读会排在自己这个事务后面,造成挂起(队列并发度为 1)。

该仓库创建或加载出的实体会被登记到本 executor 名下,因此这些实体的 entity.save() / entity.remove() 也自动走本事务;用 new X() 直接建的实体 不带这个身份,会走普通队列。

Implementation of​

TransactionExecutor.getRepository


mergeChanges()​

mergeChanges(
actions,
localChanges?,
disableTriggers?
): Promise<void>;

Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:167

在本事务内应用压缩后的变更。

Parameters​

ParameterTypeDefault valueDescription
actionsSwitchVersionActionsundefined压缩后的变更操作集合
localChanges?Omit<RxDBChange, "id">[]undefined需要一并写入本地 RxDBChange 表的记录
disableTriggers?booleanfalse是否禁用变更触发器(pull 等场景)

Returns​

Promise<void>

Remarks​

之所以放在 executor 上而不是给 adapter.mergeChanges() 加一个 executor 形参: 「持有 executor 才算在本事务内」这条判据必须只有一处。散成两处之后, 「传了 executor 形参」与「调的是 executor 的方法」会各自演化出不同的边界。

同步链路里 4 个事务体的主力写就是它(merge-branch / cleanup-expired / pull-batch / pull-repository)。

Implementation of​

TransactionExecutor.mergeChanges


mutations()​

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

Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:142

在本事务内执行实体变更。

Type Parameters​

Type Parameter
T extends EntityType

Parameters​

ParameterTypeDescription
optionsRxDBMutationsMap<T>批量变更集合

Returns​

Promise<InstanceType<T>[]>

Implementation of​

TransactionExecutor.mutations


query()​

query(sql, params?): Promise<RawQueryResult>;

Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:121

在本事务内执行原始查询,不再入队。

Parameters​

ParameterTypeDescription
sqlstringSQL 语句
params?readonly unknown[]绑定参数

Returns​

Promise<RawQueryResult>

Implementation of​

TransactionExecutor.query


removeMany()​

removeMany<T>(entities): Promise<InstanceType<T>[]>;

Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:162

在本事务内删除多个实体。

Type Parameters​

Type Parameter
T extends EntityType

Parameters​

ParameterTypeDescription
entitiesInstanceType<T>[]待删除的实体

Returns​

Promise<InstanceType<T>[]>

Implementation of​

TransactionExecutor.removeMany


run()​

run<T>(fun): Promise<T>;

Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:181

嵌套内层工作:复用本事务,不新开,也不入队。

Type Parameters​

Type Parameter
T

Parameters​

ParameterTypeDescription
fun(executor) => Promise<T>内层工作,参数是同一个事务的 executor

Returns​

Promise<T>

Remarks​

取代旧的 runInTransaction() —— 后者靠环境态判断「是否已在事务中」, 拿它开一个语义上独立的并发事务会被静默并进当前事务。

Implementation of​

TransactionExecutor.run


saveMany()​

saveMany<T>(entities): Promise<InstanceType<T>[]>;

Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:157

在本事务内保存多个实体。

Type Parameters​

Type Parameter
T extends EntityType

Parameters​

ParameterTypeDescription
entitiesInstanceType<T>[]待保存的实体

Returns​

Promise<InstanceType<T>[]>

Remarks​

与 adapter.saveMany() 同语义,区别只在归属:这一份属于本事务。 事务体内调 adapter.saveMany() 是外部调用,会重新排队并排在本事务之后。

Implementation of​

TransactionExecutor.saveMany


settle()​

settle(state): void;

Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:191

Internal

把 executor 推入终态。只允许适配器的事务执行体调用。

Parameters​

ParameterType
state"committed" | "rolled-back"

Returns​

void


tableRef()​

tableRef(EntityType): string;

Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:138

SQLite 家族的物理表引用:namespace 是表名前缀,拼成 "rxdb$rxdb_change"。

Parameters​

ParameterType
EntityTypeEntityType

Returns​

string

Remarks​

与建表路径(table/create_table_sql.ts)取同一对 get_table_name_by_metadata 与 quote_sql_identifier,不另写一份拼法 —— 两份拼法一旦分叉,CAS 会打在一张 不存在的表上。$ 在未加引号的标识符里不是合法字符,引号不能省。

Implementation of​

TransactionExecutor.tableRef