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
| Parameter | Type |
|---|---|
adapter | RxDBAdapterSqliteBase |
client | SqliteClientLike |
id | string |
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
Accessors
adapter
Get Signature
get adapter(): RxDBAdapterSqliteBase;
Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:97
Internal
事务作用域内的适配器门面:把它交给内部 helper,helper 的每次 query() 都落在本事务里。
Returns
state
Get Signature
get state(): TransactionExecutorState;
Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:88
生命周期状态。
Returns
生命周期状态。
Implementation of
Methods
execute()
execute(sql, bindings?): Promise<SqliteSuccessResult>;
Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:115
直接在本事务的连接上执行语句。
Parameters
| Parameter | Type |
|---|---|
sql | string |
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
| Parameter | Type | Description |
|---|---|---|
EntityType | T | 实体类型 |
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
| Parameter | Type | Default value | Description |
|---|---|---|---|
actions | SwitchVersionActions | undefined | 压缩后的变更操作集合 |
localChanges? | Omit<RxDBChange, "id">[] | undefined | 需要一并写入本地 RxDBChange 表的记录 |
disableTriggers? | boolean | false | 是否禁用变更触发器(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
| Parameter | Type | Description |
|---|---|---|
options | RxDBMutationsMap<T> | 批量变更集合 |
Returns
Promise<InstanceType<T>[]>
Implementation of
query()
query(sql, params?): Promise<RawQueryResult>;
Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:121
在本事务内执行原始查询,不再入队。
Parameters
| Parameter | Type | Description |
|---|---|---|
sql | string | SQL 语句 |
params? | readonly unknown[] | 绑定参数 |
Returns
Promise<RawQueryResult>
Implementation of
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
| Parameter | Type | Description |
|---|---|---|
entities | InstanceType<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
| Parameter | Type | Description |
|---|---|---|
fun | (executor) => Promise<T> | 内层工作,参数是同一个事务的 executor |
Returns
Promise<T>
Remarks
取代旧的 runInTransaction() —— 后者靠环境态判断「是否已在事务中」,
拿它开一个语义上独立的并发事务会被静默并进当前事务。
Implementation of
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
| Parameter | Type | Description |
|---|---|---|
entities | InstanceType<T>[] | 待保存的实体 |
Returns
Promise<InstanceType<T>[]>
Remarks
与 adapter.saveMany() 同语义,区别只在归属:这一份属于本事务。
事务体内调 adapter.saveMany() 是外部调用,会重新排队并排在本事务之后。
Implementation of
settle()
settle(state): void;
Defined in: packages/rxdb-adapter-sqlite-core/src/transaction/SqliteTransactionExecutor.ts:191
Internal
把 executor 推入终态。只允许适配器的事务执行体调用。
Parameters
| Parameter | Type |
|---|---|
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
| Parameter | Type |
|---|---|
EntityType | EntityType |
Returns
string
Remarks
与建表路径(table/create_table_sql.ts)取同一对 get_table_name_by_metadata
与 quote_sql_identifier,不另写一份拼法 —— 两份拼法一旦分叉,CAS 会打在一张
不存在的表上。$ 在未加引号的标识符里不是合法字符,引号不能省。