RxDBAdapterSqliteai
Defined in: packages/rxdb-adapter-sqliteai/src/RxDBAdapterSqliteai.ts:13
基于 @sqliteai/sqlite-wasm 的 RxDB 本地存储适配器。
与 rxdb-adapter-sqlite(官方 sqlite-wasm 绑定)API 对齐,差异:
- WASM 二进制来自 SqliteAI 的发行版(OPFS / Worker 配置一致)
- 客户端实现继承
Oo1ClientBase,复用 sqlite-core 的队列与事件批处理
Extends
Constructors
Constructor
new RxDBAdapterSqliteai(rxdb, options): RxDBAdapterSqliteai;
Defined in: packages/rxdb-adapter-sqliteai/src/RxDBAdapterSqliteai.ts:17
Parameters
| Parameter | Type |
|---|---|
rxdb | RxDB |
options | SqliteaiOptions |
Returns
RxDBAdapterSqliteai
Overrides
RxDBAdapterSqliteBase.constructor
Properties
name
readonly name: string = ADAPTER_NAME;
Defined in: packages/rxdb-adapter-sqliteai/src/RxDBAdapterSqliteai.ts:15
适配器名,与 RxDB.adapter() 登记时用的键同值;错误消息与 getAdapter() 都按它认人
Overrides
options
readonly options: SqliteaiOptions;
Defined in: packages/rxdb-adapter-sqliteai/src/RxDBAdapterSqliteai.ts:19
repository_cache
protected readonly repository_cache: Map<EntityType, RepositoryInstance<EntityType>>;
Defined in: packages/rxdb/dist/rxdb-adapter.d.ts:300
Inherited from
RxDBAdapterSqliteBase.repository_cache
repository_map
protected readonly repository_map: Map<string, AdapterRepositoryConstructor<RxDBAdapterSqliteai, RepositoryInstance<EntityType>>>;
Defined in: packages/rxdb/dist/rxdb-adapter.d.ts:299
Inherited from
RxDBAdapterSqliteBase.repository_map
rxdb
readonly rxdb: RxDB;
Defined in: packages/rxdb/dist/rxdb-adapter.d.ts:298
Inherited from
Accessors
encryption
Get Signature
get encryption(): AdapterEncryptionFacade;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:34
Returns
Inherited from
RxDBAdapterSqliteBase.encryption
encryptionContext
Get Signature
get encryptionContext(): EncryptionContext;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:33
Returns
Inherited from
RxDBAdapterSqliteBase.encryptionContext
workingTreeCaptureHook
Get Signature
get workingTreeCaptureHook():
| WorkingTreeCaptureHook
| undefined;
Defined in: packages/rxdb/dist/rxdb-adapter.d.ts:330
Internal
捕获运行时;未启用提交能力的库上恒为 undefined。
Returns
| WorkingTreeCaptureHook
| undefined
Inherited from
RxDBAdapterSqliteBase.workingTreeCaptureHook
workingTreeRawWriteContext
Get Signature
get workingTreeRawWriteContext(): RawWriteContext;
Defined in: packages/rxdb/dist/rxdb-adapter.d.ts:353
Internal
本适配器当前的 raw 写判定上下文(adapter-contract.md §2)
Remarks
rawQuery?() 是这张接口上的可选方法(见上方 IRxDBAdapter),核心包没法像四个挂载点
那样替适配器包住它——判定只能由各适配器自己的 rawQuery 实现调用 gateRawWrite(sql, ctx, …)。
那句调用要的 ctx 由这里交出来,于是六个适配器需要写对的只有「把它转给判定」这一句,
「能力位怎么算」「域从哪来」两个真正容易写歪的问题一次都不会落到它们头上。
能力位直接由捕获运行时装没装上决定,不另存一个布尔:运行时只在能力位为真时被装上
(RxDB.connect() 读到真、或 workingTree.enable() 刚翻开)。再存一份就是第二份真相,
而两份不同步的后果是单向的——门禁以为没开,raw 写全部放行。上下文对象本身在
setWorkingTreeCaptureHook() 里与运行时同一句赋值建好,不是每次取值新建:取值器在每条
raw 语句上都被调用,而它不含 per-call 状态。两个字段只在那一处一起变,「装了新运行时却
交出绑着旧运行时的闭包」因此不是一种可达状态。
交出去的是判定入口本身,不是判定要看的那些东西(域、列集、受信意图)。核心因此不必 复述捕获认什么,也就不存在「拷了一份域出来、插件后续登记的派生索引列只落进其中一份」这类 双份清单——判定自始至终在运行时手上那一份上跑。
Returns
Inherited from
RxDBAdapterSqliteBase.workingTreeRawWriteContext
Methods
addChangeErrorListener()
addChangeErrorListener(listener): void;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:57
订阅变更处理失败。
Parameters
| Parameter | Type | Description |
|---|---|---|
listener | SqliteChangeErrorListener | 收到 SqliteChangeErrorEvent 的回调,异常会被隔离 |
Returns
void
Remarks
只要注册了监听器,默认的 console.error 降级就交给监听器接管(SQLC-012)。
Inherited from
RxDBAdapterSqliteBase.addChangeErrorListener
backup()
backup(sink, options?): Promise<RxDBBackupResult>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:116
把整个数据库写成一份可恢复的归档。
Parameters
| Parameter | Type | Description |
|---|---|---|
sink | WritableStream<Uint8Array<ArrayBufferLike>> | 输出流;成功时被 close,失败时被 abort |
options? | RxDBBackupOptions | 取消信号与排队时限 |
Returns
Promise<RxDBBackupResult>
结束标记(条目数、字节数、SHA-256)与 manifest;输出流 close 已完成
Remarks
归档是逻辑转储:全部结构语句与行字面量,在 adapter 的串行队列里、同一个读事务中取得,所以与某一次
事务提交边界一致,WAL 里已提交的数据都在其中。整个写出过程都占着数据库:输出流有背压时,
这段时间内的读写都会排队。在本 adapter 的事务回调里调用会等待自己,直到 lockTimeoutMs 后报 lock_timeout。
归档包含业务表、系统表、变更历史与 keyring 的密文,加密列保持密文,不需要解锁;
外置文件不在其中(scope.externalFiles === 'excluded')。支持的存储见各 adapter 的 README。
Throws
RxDBBackupError unsupported_combination / lock_timeout / aborted / io_error / storage_full
Example
const handle = await showSaveFilePicker({ suggestedName: 'notes.rxdb-backup' });
const result = await adapter.backup(await handle.createWritable());
console.log(result.sha256);
Inherited from
backupStorage()
protected backupStorage(): SqliteBackupStorage;
Defined in: packages/rxdb-adapter-sqliteai/src/RxDBAdapterSqliteai.ts:29
不开 OPFS 时是内存库;开 OPFS 时是持久化库。
opfsFallback: 'memory' 会在 OPFS 打不开时静默落到内存,恢复目标不确定,报 unsupported_combination。
Returns
Overrides
RxDBAdapterSqliteBase.backupStorage
bootstrapTransaction()
bootstrapTransaction<T>(transactionFun, transactionLog?): Promise<Awaited<ReturnType<T>>>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:220
Internal
引导期事务:与 transaction 相同,但跳过就绪门。
Type Parameters
| Type Parameter |
|---|
T extends TransactionFun |
Parameters
| Parameter | Type | Description |
|---|---|---|
transactionFun | T | 事务工作,参数是当前事务 executor |
transactionLog? | boolean | 是否写事务日志 |
Returns
Promise<Awaited<ReturnType<T>>>
Remarks
仅限 RxDB.connect() 的引导链路(水位线、建表、迁移)与本类内部的引导步骤调用 ——
它们本身就跑在 RxDB.connect() 的 promise 里,等就绪门就是等自己。
表在这一刻可能尚未建出,顺序由引导链路自己保证。事务体内不要调它:门面不改写此方法, 会落到真实适配器上再入队,持槽时二次入队即永久挂起。
Inherited from
RxDBAdapterSqliteBase.bootstrapTransaction
cacheRowIdEntity()
cacheRowIdEntity(rowId, entity): void;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:180
Parameters
| Parameter | Type |
|---|---|
rowId | bigint |
entity | any |
Returns
void
Inherited from
RxDBAdapterSqliteBase.cacheRowIdEntity
cleanAllCache()
cleanAllCache(): void;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:184
Returns
void
Inherited from
RxDBAdapterSqliteBase.cleanAllCache
cleanupIncompleteRestore()
cleanupIncompleteRestore(): Promise<boolean>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:155
清理一次没做完的恢复(页面在恢复中途关闭、或恢复失败后清理本身也失败)。
Returns
Promise<boolean>
确实清理了残留时为 true
Remarks
必须在连接之前调用。拿不到独占锁说明目标正被连接或正在恢复,报 target_busy;
没有未完成标记时什么都不做。内存存储没有残留可言,恒为 false。
Throws
RxDBBackupError target_busy / unsupported_combination / cleanup_pending
Inherited from
RxDBAdapterSqliteBase.cleanupIncompleteRestore
completeBootstrap()
completeBootstrap(): void;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:90
Internal
关闭引导窗:RxDB.connect() 完成建表后调用一次。
Returns
void
Remarks
自带就绪门的适配器(SQLite family / PGlite)在引导窗内让 query() / rawQuery() /
createTables() 跳过就绪门 —— 那道门等的正是尚未 settle 的 RxDB.connect()。
本方法把状态翻到 ready,此后所有入口一律走正常的就绪等待。
没有就绪门的 adapter 保持默认的 no-op 实现。
Inherited from
RxDBAdapterSqliteBase.completeBootstrap
connect()
connect(): Promise<IRxDBAdapter>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:89
建立连接并把系统表补到当前水位。
Returns
Promise<IRxDBAdapter>
自身,便于链式使用
Remarks
建表与系统迁移都在这里发生(见 isCurrentRxDBSystemVersion),因此它可能很慢,
也可能因为库比本进程新而抛 UnsupportedRxDBSystemVersionError。
Inherited from
createClient()
protected createClient(): Promise<SqliteClientLike>;
Defined in: packages/rxdb-adapter-sqliteai/src/RxDBAdapterSqliteai.ts:35
创建或获取 SQLite 客户端。 具体 adapter 用各自后端的逻辑实现此方法。
Returns
Promise<SqliteClientLike>
Overrides
RxDBAdapterSqliteBase.createClient
createRestoreTargetClient()
protected createRestoreTargetClient(): Promise<SqliteClientLike>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:276
打开恢复或清理用的目标连接。
Returns
Promise<SqliteClientLike>
目标库的一条新连接
Remarks
默认就是 createClient:浏览器后端的库只会在同源上下文里被打开,恢复前拿到的独占 Web Lock 已经挡住了其余所有连接。库文件还可能被别的进程打开的后端(桌面 host)覆盖它,在返回前让这条连接 独占底层存储并一直持有到断开,保证从空状态检查到恢复结束都没有别人连得上。
Inherited from
RxDBAdapterSqliteBase.createRestoreTargetClient
createTables()
createTables<T>(EntityTypes, entities?): Promise<boolean>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:160
Type Parameters
| Type Parameter |
|---|
T extends EntityType |
Parameters
| Parameter | Type |
|---|---|
EntityTypes | T[] |
entities? | InstanceType<T>[] |
Returns
Promise<boolean>
Inherited from
RxDBAdapterSqliteBase.createTables
createUncachedRepository()
createUncachedRepository<T>(EntityType, host): IRepository<T>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:88
Internal
新建一个绑定到 host 的仓库,不写入 repository_cache。
Type Parameters
| Type Parameter |
|---|
T extends EntityType |
Parameters
| Parameter | Type | Description |
|---|---|---|
EntityType | T | 实体类型 |
host | RxDBAdapterSqliteBase | 仓库要绑定到的适配器(事务场景下是 executor 的门面) |
Returns
IRepository<T>
Remarks
供 SqliteTransactionExecutor.getRepository 使用。之所以必须绕开缓存:缓存里的仓库 生命周期与适配器一样长,若把事务作用域的仓库写进去,事务结束后它仍留在缓存里指向一个 已提交/已回滚的事务上下文,之后的外部写会打到那上面。
Inherited from
RxDBAdapterSqliteBase.createUncachedRepository
deleteByIds()
deleteByIds(entityName, ids): Observable<void>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:237
按 ID 列表批量删除(QueryCache 专用)
用于清理本地缓存中已被远程删除的数据。
Parameters
| Parameter | Type | Description |
|---|---|---|
entityName | string | 实体名称 |
ids | string[] | 要删除的 ID 列表 |
Returns
Observable<void>
Observable<void>
Example
adapter.deleteByIds('Product', ['p1', 'p2']).subscribe();
Inherited from
RxDBAdapterSqliteBase.deleteByIds
disconnect()
disconnect(): Promise<void>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:91
断开连接并释放底层句柄。
Returns
Promise<void>
Remarks
与 RxDB.destroy() 不同,断开是可逆的:同一个适配器实例之后还能再 connect()。
实现须幂等——未连接时调用是空操作而不是抛错。
Inherited from
RxDBAdapterSqliteBase.disconnect
emitChangeError()
emitChangeError(event): void;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:73
报告一次变更处理失败。
Parameters
| Parameter | Type | Description |
|---|---|---|
event | SqliteChangeErrorEvent | 失败详情 |
Returns
void
Remarks
由变更处理管线(handle_rxdb_change)调用,不面向应用代码。本方法永不抛出:
它所在的路径没有调用方能接住异常,抛出只会变成 unhandled rejection。
Inherited from
RxDBAdapterSqliteBase.emitChangeError
getEntityByRowId()
getEntityByRowId(rowId, EntityType): any;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:182
Parameters
| Parameter | Type |
|---|---|
rowId | bigint |
EntityType | EntityType |
Returns
any
Inherited from
RxDBAdapterSqliteBase.getEntityByRowId
getMetadataByIds()
getMetadataByIds(entityName, ids): Observable<Map<string, string>>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:235
获取指定 ID 列表的元数据(QueryCache 专用)
用于本地缓存新鲜度检查,返回 ID → updatedAt 映射。
Parameters
| Parameter | Type | Description |
|---|---|---|
entityName | string | 实体名称 |
ids | string[] | 实体 ID 列表 |
Returns
Observable<Map<string, string>>
Observable<Map<string, string>> - ID → updatedAt 映射
Example
adapter.getMetadataByIds('Product', ['p1', 'p2'])
.subscribe(map => {
// map: Map `{ 'p1' => '2026-01-12T10:00:00Z', 'p2' => '2026-01-12T09:30:00Z' }`
});
Inherited from
RxDBAdapterSqliteBase.getMetadataByIds
getRepository()
getRepository<T, RT>(EntityType): RT;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:74
Type Parameters
| Type Parameter | Default type |
|---|---|
T extends EntityType | - |
RT | SqliteRepository<T> |
Parameters
| Parameter | Type |
|---|---|
EntityType | T |
Returns
RT
Inherited from
RxDBAdapterSqliteBase.getRepository
getRowIdByEntity()
getRowIdByEntity(entity): bigint | undefined;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:183
Parameters
| Parameter | Type |
|---|---|
entity | any |
Returns
bigint | undefined
Inherited from
RxDBAdapterSqliteBase.getRowIdByEntity
getRxDBChangeSequence()
getRxDBChangeSequence(): Promise<number>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:233
Returns
Promise<number>
Inherited from
RxDBAdapterSqliteBase.getRxDBChangeSequence
internalQuery()
internalQuery(sql, bindings?): Promise<SqliteSuccessResult>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:232
Parameters
| Parameter | Type |
|---|---|
sql | string |
bindings? | SQLiteCompatibleType[] |
Returns
Promise<SqliteSuccessResult>
Inherited from
RxDBAdapterSqliteBase.internalQuery
isEncryptedAtRest()
isEncryptedAtRest(value): boolean;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:48
判定一个落库值是否已处于加密后的 at-rest 形态(FR-038)。
Parameters
| Parameter | Type | Description |
|---|---|---|
value | unknown | 落库列里的值 |
Returns
boolean
是信封串时为 true
Remarks
权威判定器只有一份,就是 @aiao/rxdb-adapter-encrypted 的 isEnvelope——本方法是
核心那个可选槽位(RxDBAdapterLocalBase.isEncryptedAtRest)到它的一句转发,
不在这里另认一套形状。@aiao/rxdb 不能依赖加密包(依赖方向是反的),所以这一句
只能落在适配器侧。
Inherited from
RxDBAdapterSqliteBase.isEncryptedAtRest
isTableExisted()
isTableExisted<T>(EntityType): Promise<boolean>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:159
Type Parameters
| Type Parameter |
|---|
T extends EntityType |
Parameters
| Parameter | Type |
|---|---|
EntityType | T |
Returns
Promise<boolean>
Inherited from
RxDBAdapterSqliteBase.isTableExisted
mergeChanges()
mergeChanges(
actions,
localChanges?,
disableTriggers?
): Promise<void>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:179
应用压缩后的变更到本地实体表
实现策略(SQLite):
- 将 actions 转换为 SQL 操作
- 在事务中: a) 执行 SQL 操作实体表(INSERT/UPDATE/DELETE) b) 批量插入 localChanges 到 RxDBChange 表(用于历史追踪)
- 发送本地事件通知 UI 更新
Parameters
| Parameter | Type | Description |
|---|---|---|
actions | SwitchVersionActions | 压缩后的变更操作集合(从远程 pull 来的) |
localChanges? | Omit<RxDBChange, "id">[] | 需要保存到本地 RxDBChange 表的记录(可选) |
disableTriggers? | boolean | 是否禁用触发器(用于 pull 等操作,避免创建 RxDBChange) |
Returns
Promise<void>
Inherited from
RxDBAdapterSqliteBase.mergeChanges
migrateSystemSchema()
migrateSystemSchema(): Promise<void>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:161
在应用迁移或仓储运行前升级 RxDB 拥有的表。 不需要持久化系统 schema 状态的 adapter 保持默认的 no-op 实现。
Returns
Promise<void>
Inherited from
RxDBAdapterSqliteBase.migrateSystemSchema
mutations()
mutations<T>(options): Promise<InstanceType<T>[]>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:158
批量修改实体(创建/更新/删除)
Type Parameters
| Type Parameter |
|---|
T extends EntityType |
Parameters
| Parameter | Type |
|---|---|
options | RxDBMutationsMap<T> |
Returns
Promise<InstanceType<T>[]>
Inherited from
RxDBAdapterSqliteBase.mutations
persistentBackupStorage()
protected persistentBackupStorage(label): SqliteBackupStorage;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:254
生成持久化存储后端的描述。
Parameters
| Parameter | Type | Description |
|---|---|---|
label | string | 写进 manifest 的存储名,例如 idb / opfs |
Returns
storageKey 为 <adapter>:<label>:<dbName> 的持久化后端
Inherited from
RxDBAdapterSqliteBase.persistentBackupStorage
physicalTableNames()
physicalTableNames(metadata): readonly string[];
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:177
SQLite 家族把命名空间折进表名:public$todos。
Parameters
| Parameter | Type | Description |
|---|---|---|
metadata | EntityMetadata | 实体元数据 |
Returns
readonly string[]
逻辑名(基类那一份)加上本家族真正建出来的那个名字
Remarks
覆写的全部意义是让规则只有一份:名字由 get_table_name_by_metadata 给出,
与建表、查询、触发器用的是同一个函数。在它之前,@aiao/rxdb-plugin-working-tree 的
版本化域按 '$' 自己拼了一份;拼法一改,那份不会报错,只会开始认不出这张表,于是
raw 写门禁对它静默放行。
保留基类给的逻辑名而不是只交折叠名:raw 判定宁可多认一个名字——多认只是多挡下 一条在本后端本来也跑不通的语句;少认的那一个恰好是绕过捕获的写会用的名字。
Inherited from
RxDBAdapterSqliteBase.physicalTableNames
query()
query(sql, bindings?): Promise<SqliteSuccessResult>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:185
Parameters
| Parameter | Type |
|---|---|
sql | string |
bindings? | SQLiteCompatibleType[] |
Returns
Promise<SqliteSuccessResult>
Inherited from
rawQuery()
rawQuery(sql, params?): Promise<RawQueryResult>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:203
原始 SQL。
Parameters
| Parameter | Type |
|---|---|
sql | string |
params? | unknown[] |
Returns
Promise<RawQueryResult>
Remarks
judgment 由核心包出,这里只负责接上(adapter-contract.md §2)。rawQuery?() 在
IRxDBAdapter 上是可选方法,核心包没法像四个捕获挂载点那样替适配器包住它,于是这一句
gateRawWrite 是本类唯一要写对的地方。判定本身一个字都不在这里重写——六份实现里只要有一份
把词法归一化写松,整条防线就有洞,而那个洞不会在任何一个后端自己的测试里现形。
这一句覆盖 5 个 v1 适配器(wa-sqlite / sqlite-wasm / sqlite / sqliteai / electron):
它们都继承本类且都不覆写 rawQuery。在五个子类里各写一遍是 T064「不各写一份」明确排除的
形态;哪天某个子类真的覆写了 rawQuery,它就得自己接上,这一点由 T068 的 6 个一致性调用点兜住。
门禁包在整个方法体外面,两条生命周期分支都在里面:拒绝发生在语句下发之前,连事务都不会开, 业务表零变化——不是写完再回滚。引导窗内捕获运行时还没装上,判定第 1 步放行,行为与接入前逐字一致。
Inherited from
RxDBAdapterSqliteBase.rawQuery
ready()
protected ready(): Promise<void>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:291
就绪门:必须在获取队列槽位之前调用,绝不能在队列任务内部调用。
Returns
Promise<void>
Remarks
队列并发度为 1。在临界区里等 RxDB.connect() 会成环:RxDB.connect() 的首装路径要靠
队列后方的水位线事务才能完成,而那个事务永远拿不到被占住的槽位(实测轨迹见设计文档 §1.2)。
门等的是整个 RxDB.connect(),不是「本适配器的 client 连上了没」。两者之间隔着建表、
系统迁移与水位线;曾经按 client 状态放行,于是这段窗口内到达的外部写直接打在还没建出来的
表上(no such table)。RxDB.connect() 自身按名字缓存 promise,已完成时这里只是多一次
微任务跳转。
引导链路自己不得走这道门(那是等自己),一律经 bootstrapTransaction。
Inherited from
reconcileEntityIndexes()?
optional reconcileEntityIndexes(EntityTypes): Promise<void>;
Defined in: packages/rxdb/dist/rxdb-adapter.d.ts:479
在用户迁移和缺表补建后幂等收敛实体索引。
Parameters
| Parameter | Type |
|---|---|
EntityTypes | EntityType[] |
Returns
Promise<void>
Inherited from
RxDBAdapterSqliteBase.reconcileEntityIndexes
removeCacheEntity()
removeCacheEntity(entity): void;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:181
Parameters
| Parameter | Type |
|---|---|
entity | any |
Returns
void
Inherited from
RxDBAdapterSqliteBase.removeCacheEntity
removeChangeErrorListener()
removeChangeErrorListener(listener): void;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:63
取消 addChangeErrorListener 的订阅。
Parameters
| Parameter | Type | Description |
|---|---|---|
listener | SqliteChangeErrorListener | 注册时传入的同一个函数引用 |
Returns
void
Inherited from
RxDBAdapterSqliteBase.removeChangeErrorListener
removeMany()
removeMany<T>(entities): Promise<InstanceType<T>[]>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:157
批量删除实体。
Type Parameters
| Type Parameter |
|---|
T extends EntityType |
Parameters
| Parameter | Type |
|---|---|
entities | InstanceType<T>[] |
Returns
Promise<InstanceType<T>[]>
被删除的实体
Inherited from
RxDBAdapterSqliteBase.removeMany
repository()
protected repository<RT>(repositoryName, RepositoryClass): void;
Defined in: packages/rxdb/dist/rxdb-adapter.d.ts:303
Type Parameters
| Type Parameter |
|---|
RT extends RepositoryInstance<EntityType> |
Parameters
| Parameter | Type |
|---|---|
repositoryName | string |
RepositoryClass | AdapterRepositoryConstructor<RxDBAdapterSqliteai, RT> |
Returns
void
Inherited from
RxDBAdapterSqliteBase.repository
restore()
restore(source, options?): Promise<RxDBRestoreResult>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:144
把 backup 产出的归档恢复进本 adapter 配置的空存储。
Parameters
| Parameter | Type | Description |
|---|---|---|
source | ReadableStream<Uint8Array<ArrayBufferLike>> | 归档字节流 |
options? | SqliteRestoreOptions | 取消信号与阶段回调 |
Returns
Promise<RxDBRestoreResult>
结束标记与 manifest
Remarks
必须在 rxdb.connect() 之前调用(经 rxdb.getAdapter(name) 拿到尚未连接的实例):已连接或正在恢复时
报 target_busy。只写入空目标,兼容性(adapter、引擎大版本、虚表模块、系统表 / 变更编码版本、
实体结构指纹、加密认证域)在写入第一条语句之前判定,全部核对通过后才提交。
- 持久化存储:恢复完成后正常
rxdb.connect()即可;恢复中途页面被关,之后的连接报restore_incomplete, 需先 cleanupIncompleteRestore。 - 内存存储:恢复出来的库只活在本实例里,由下一次
rxdb.connect()接管;不连接时 disconnect 释放它。
恢复出来的行不产生变更历史;加密库保持锁定。输入流在失败时被取消,成功时只释放读锁。
Throws
RxDBBackupError 见 RxDBBackupErrorCode;cleanup_pending 表示失败后连清理也没做完
Example
rxdb.adapter('wa-sqlite', db => new RxDBAdapterWaSqlite(db, { vfs: 'IDBBatchAtomicVFS' }));
const adapter = await rxdb.getAdapter('wa-sqlite');
await adapter.restore(file.stream());
await rxdb.connect('wa-sqlite');
Inherited from
runInTransaction()
runInTransaction<T>(transactionFun, transactionLog?): Promise<Awaited<ReturnType<T>>>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:231
执行事务工作。
Type Parameters
| Type Parameter |
|---|
T extends TransactionFun |
Parameters
| Parameter | Type | Description |
|---|---|---|
transactionFun | T | 事务工作,参数是当前事务 executor |
transactionLog? | boolean | - |
Returns
Promise<Awaited<ReturnType<T>>>
事务工作的返回值
Remarks
真实适配器入口总是新开事务;executor 门面会把事务内的 runInTransaction() 映射为
executor.run(),复用当前事务且不重新入队。
Inherited from
RxDBAdapterSqliteBase.runInTransaction
saveMany()
saveMany<T>(entities): Promise<InstanceType<T>[]>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:156
批量写入实体(不存在则插入,存在则更新)。
Type Parameters
| Type Parameter |
|---|
T extends EntityType |
Parameters
| Parameter | Type |
|---|---|
entities | InstanceType<T>[] |
Returns
Promise<InstanceType<T>[]>
落库后的实体;主键、数据库端默认值等由库回填的字段在这里才有值
Inherited from
RxDBAdapterSqliteBase.saveMany
setRxDBChangeSequence()
setRxDBChangeSequence(sequence): Promise<void>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:234
Parameters
| Parameter | Type |
|---|---|
sequence | number |
Returns
Promise<void>
Inherited from
RxDBAdapterSqliteBase.setRxDBChangeSequence
setWorkingTreeCaptureHook()
setWorkingTreeCaptureHook(hook): void;
Defined in: packages/rxdb/dist/rxdb-adapter.d.ts:371
Internal
装上或卸下捕获运行时(adapter-contract.md §1 的四个挂载点)。
Parameters
| Parameter | Type | Description |
|---|---|---|
hook | | WorkingTreeCaptureHook | undefined | 接管四个挂载点的运行时;undefined 卸载 |
Returns
void
Remarks
挂载装在这里而不是让六个适配器各自在自己的 transaction() 里插一句:少写一次、
写晚一次(在业务写之后才校验 token)都没有任何东西能发现,而那正是 §2「判定实现只有
一份」要排除的形态。
调用方是 RxDB.connect()(确认能力位为真之后)与 workingTree.enable()(翻位成功
之后)。未启用的库上一次都不会被调用,于是四个写原语连一层转发都没有。
幂等:已经装过就先卸下再装,不会叠成两层。
Inherited from
RxDBAdapterSqliteBase.setWorkingTreeCaptureHook
shadowTablesWritable()
protected shadowTablesWritable(): boolean;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:265
本后端能否写虚表的影子表(FTS5 的 _data、_idx 等)。
Returns
boolean
能写为 true
Remarks
归档按行原样保存影子表,恢复时要整表改写它们。默认可以;以 defensive 模式运行 SQLite 的后端改不了影子表,
覆盖为 false:含影子表的库备份与恢复都报 unsupported_combination,而不是产出一份自己恢复不了的归档,
或写到一半才失败。
Inherited from
RxDBAdapterSqliteBase.shadowTablesWritable
switchBranch()
switchBranch(options): Promise<void>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:178
Parameters
| Parameter | Type |
|---|---|
options | SwitchBranchOptions |
Returns
Promise<void>
Inherited from
RxDBAdapterSqliteBase.switchBranch
transaction()
transaction<T>(transactionFun, transactionLog?): Promise<Awaited<ReturnType<T>>>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:204
Type Parameters
| Type Parameter |
|---|
T extends TransactionFun |
Parameters
| Parameter | Type |
|---|---|
transactionFun | T |
transactionLog? | boolean |
Returns
Promise<Awaited<ReturnType<T>>>
Inherited from
RxDBAdapterSqliteBase.transaction
upsertMany()
upsertMany<T>(entityName, data): Observable<void>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:236
批量 upsert 数据(QueryCache 专用)
执行 INSERT OR REPLACE 语义,用于缓存远程拉取的数据。
Type Parameters
| Type Parameter |
|---|
T |
Parameters
| Parameter | Type | Description |
|---|---|---|
entityName | string | 实体名称 |
data | T[] | 要写入的数据列表 |
Returns
Observable<void>
Observable<void>
Example
adapter.upsertMany('Product', [product1, product2]).subscribe();
Inherited from
RxDBAdapterSqliteBase.upsertMany
version()
version(): Promise<string>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:92
底层数据库引擎的版本号(如 SQLite 的 3.45.0),用于诊断与能力判断。
Returns
Promise<string>
Remarks
与系统表水位号(RXDB_SYSTEM_SCHEMA_VERSION)无关,那是 RxDB 自己的号。
Inherited from
writeQuery()
writeQuery(sql, bindings?): Promise<SqliteSuccessResult>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/RxDBAdapterSqliteBase.d.ts:186
Parameters
| Parameter | Type |
|---|---|
sql | string |
bindings? | SQLiteCompatibleType[] |
Returns
Promise<SqliteSuccessResult>