跳到主要内容

rxdb-adapter-sqlite-core

@aiao/rxdb 的 SQLite 适配器共享内核。它把「实体 → SQL」的映射、表名解析、规则组构建、基础 Repository 与变更事件等能力抽象为后端无关的基类,供各具体 SQLite 适配器复用。

本包一般不直接安装,而是作为 @aiao/rxdb-adapter-sqlite@aiao/rxdb-adapter-sqlite-wasm@aiao/rxdb-adapter-sqliteai 等适配器的依赖被间接引入。

提供的能力

  • RxDBAdapterSqliteBase:SQLite 适配器基类,封装事务、建表与变更钩子
  • SqliteRepository:基于 SQLite 的类型安全 Repository 实现
  • buildRuleGroup:将查询规则编译为 SQL 条件
  • sqliteGetTableName / sqliteGetTableNameByMetadata:实体 → 表名解析
  • 后端契约类型:SqliteBackendSqliteChangeEventSQLiteChangeType

具体后端只需实现 SqliteBackend 契约即可接入。

文档

License

MIT

Enumerations

EnumerationDescription
SQLiteChangeTypeSQLite change type constants matching C API values

Classes

ClassDescription
Oo1ClientBaseShared base class for SQLite clients that wrap an oo1.DB-style runtime (@sqlite.org/sqlite-wasm, @sqliteai/sqlite-wasm, ...).
RxDBAdapterSqliteBaseBackend-agnostic base class for SQLite adapters.
RxDBAdapterSqliteErrorRxDB SQLite 适配器错误类
SqliteCoreKeyringStoragePersists the keyring singleton row in the adapter's own SQLite database via adapter.internalQuery. Used by both wa-sqlite and sqliteai inheritors.
SqliteRepository操作 entity 仓库
SqliteRepositoryBase操作 entity 仓库
SqliteTreeRepository树形实体仓库

Interfaces

InterfaceDescription
AdapterEncryptionFacadeDeveloper-facing facade exposed at adapter.encryption. Forwards to the internal Keyring. If no encrypted columns are declared anywhere in the database, every method throws EncryptedConfigurationError(code: 'no_encrypted_columns').
ChangeRecordEventSQLite update_hook 派发的单行变更事件载荷。 由各 backend SqliteClient 收集后批量分发给 RxDB 上层。
CreateSqliteClientOptionsOptions for creating a SQLite client with Worker support
EncryptionContext-
FtsFieldFTS5 字段描述符
GenerateSqlResult-
InsertSqlOptions操作上下文
IRxDBAdapterDataChangeRxDB adapter data change interface
JoinContext-
Oo1Capi-
Oo1ClientEventsOo1ClientBase 派发的事件签名表,供 EventDispatcher 类型推断。
Oo1ClientLoadOptionsOo1ClientBase.init 接受的运行期选项。 子类可通过泛型扩展(如 WaSqliteLoadOptions extends Oo1ClientLoadOptions)。
Oo1Database-
Oo1LoadOptionsoo1 WASM 加载选项,所有 sqlite/sqliteai 适配器共享。
Oo1PreparedStatementStructural type aliases for the oo1 API surface shared by @sqlite.org/sqlite-wasm and @sqliteai/sqlite-wasm.
Oo1Static-
RelationPair-
SqliteBackendAbstract interface for SQLite WASM backend implementations.
SqliteBackendOptionsOptions for opening a SQLite backend
SqliteBaseOptionsBase options for SQLite adapters (backend-agnostic).
SqliteChangeEventSQLite change event interface
SqliteClientLikeMinimal client interface for SQLite adapters. Both wa-sqlite's SqliteClient and sqliteai's SqliteaiClient satisfy this contract.
SqliteDataA single result set with column names and row data
SqliteExecResultResult from executing SQL via a backend
SqliteStatement-
SqliteSuccessResultSQLite query result with timing information
SwitchVersionSqlItem-
SwitchVersionSqlResult-

Type Aliases

Type AliasDescription
OpfsFallbackBehaviour when an OPFS-backed database cannot be opened (e.g. browser without Atomics.wait, missing crossOriginIsolated, etc.).
RowIdSQLite row ID type (bigint)
SQLiteCompatibleTypeSQLite compatible data types for parameter binding
SqliteDataTypeSQLite data type names
SqliteResultAlias for SqliteSuccessResult
TransactionFun-
UpdateHookCallbackCallback for SQLite update_hook notifications

Variables

VariableDescription
BATCH_TIMEOUT变更事件批处理超时档位(毫秒)。 越短延迟越低但 CPU 唤醒越频繁;越长越省电但 UI 响应延后。 - IMMEDIATE (0): 同步派发,仅在测试场景使用 - FAST (4): 约一帧内合并 - BALANCED (16): 默认值,约一帧(60fps) - POWER_SAVE (50): 移动端 / 后台场景
DEFAULT_BATCH_TIMEOUT默认批处理超时(毫秒),约一帧 60fps。
DEFAULT_CACHE_SIZE_KB默认 SQLite page cache 大小(KB),50 MB。
deserializeFromEnvelope-
envelopePlaintextPatchesWalk top-level keys of a plaintext patch; for each key present in entity.encryptedPropertyMap, replace the value with an envelope string produced by keyring.encrypt. Non-encrypted keys are copied through.
MAIN_TABLE_ALIAS主表别名
ROWIDsqlite 行 id 列名
serializeForEnvelope-
unenvelopePlaintextPatchesInverse of envelopePlaintextPatches: decrypt top-level envelope strings back to plaintext. Used when applying undo/redo inversePatch.
WAL_AUTOCHECKPOINT_PAGESWAL 模式下自动 checkpoint 的页阈值。
WATCH_TABLES触发实体事件派发的系统表集合。 仅这三张表的 update_hook 事件会被上抛为 RxDBChange / RxDBBranch / RxDBMigration 事件。

Functions

FunctionDescription
build_order_by构建排序 SQL
build_rule生成 rule sql 查询条件
build_rule_group_join计算查询需要的 JOIN 字符串
buildCreateFtsTableSql生成单个 collection 的 FTS5 外部内容虚拟表 DDL。
buildFtsTriggersSql生成 FTS5 同步 trigger 三件套(_ai / _ad / _au)。
buildOo1InitOptionsOo1LoadOptions 构造 Emscripten 模块初始化对象(喂给 sqlite3InitModule)。
buildRuleGroup生成 ruleGroup sql 查询条件
convertSwitchResultToSql-
count_sql生成 count 查询
create_table_sql计算创建表的 sql
create_tables_sql生成多张创建表的 SQL
defaultPrintErr默认 printErr 实现:过滤掉已知噪音后转发到 console.error
defaultWarn默认 warn 实现:过滤掉已知噪音后转发到 console.warn
dispatch_switch_events发送 switch 操作对应的本地事件
execute_switch_actions执行 SwitchVersionSqlResult 中的 SQL 操作并发送事件
executeOo1HelperShared SQL execution helper for any oo1.DB-shaped runtime.
find_by_row_ids_sql生成 findByRowIds 查询
find_sql生成 find 查询
format_table_alias格式化表别名
generate_entity_count_ancestors_sql查询祖先节点数量
generate_entity_count_descendants_sql查询子孙节点数量
generate_entity_delete_sql生成删除实体的 sql 语句
generate_entity_deletes_sql生成批量删除实体的 SQL 语句
generate_entity_find_ancestors_sql查询祖先节点
generate_entity_find_descendants_sql查询子孙节点
generate_entity_insert_sql生成创建实体的 sql 语句
generate_entity_inserts_sql生成批量创建实体的参数化 SQL
generate_sql生成 SQL 查询语句
generate_table_trigger_sql生成表的触发器
generate_tree_sql生成树查询
generateSwitchBranchSql生成切换分支的 SQL 语句
get_cached_regexp带 LRU-ish 缓存的 RegExp 工厂,供 SQLite regexp / regexp_replace 自定义函数复用。
get_field_sql获取字段的 SQL 表示
get_init_sql生成数据库连接初始化 PRAGMA SQL。
get_or_create_relation_alias获取或创建关系别名
get_persistent_db_file_name标准化数据库名为持久化文件路径。
get_relation_key获取关系键
get_rule_value获取规则值的 SQL 表示
get_sql_operator获取SQL操作符
get_sql_value获取 SQL 值表示
get_sql_with_params将 SQL 模板和参数合并为完整 SQL
get_table_name获取表名
get_table_name_by_entity_type通过实体类型获取表名
get_table_name_by_metadata通过元数据获取表名
get_table_name_info解析表名信息
getEntityObjectFromResult从查询结果行创建实体对象
getRxDBChangeEventTypeGet RxDB change event type string from SQLite change type
getTableColumnIndexName获取表列索引名称
handle_array_in处理数组字段的 in/notIn 查询
handle_exists处理 EXISTS/NOT EXISTS 操作符
handle_flatmap_contains处理 keyValue 字段的 contains/notContains 查询
handle_rxdb_change处理 SQLite 变更事件,将 update_hook 触发的行变更转换为 RxDB 实体事件。
isSqlResultEmpty检查 sqlite 结果是否为空
isTableExistedSql检查 sqlite 表是否存在
normalizeCreateEntity规范化创建时的实体数据
normalizeSingleStatementSql去除末尾分号与空白,便于后续判断是否为单语句。
normalizeUpdateEntity规范化更新时的实体数据,过滤掉只读字段
process_relation_joins处理关系字段的 JOIN
quote_sql_identifier将标识符(表名、列名、触发器名等)转义为双引号引用的 SQL 标识符。 内部双引号使用 "" 转义,防止 SQL 注入。
remove_all_triggers_sql-
remove_entity_ids_from_cache从缓存中移除已删除实体(按 id),并将其状态标记为 removed
resolve_column_name将 JS 属性名解析为数据库列名 如果 entityMetadata 存在,优先使用 columnName 支持嵌套路径,如 keyValue.string
resolveLocateFile解析 Emscripten locateFile 钩子。
rewriteOpfsProxyWorkerUrl把 sqlite3 内置的 OPFS proxy worker URL 重写到用户提供的路径。
rxdb_adapter_mutations批量修改实体(创建/更新/删除)
rxDBColumnTypeToSqliteType将 RxDB 属性类型转换为 SQLite 数据类型
shouldIgnoreSqliteMessage判断 SQLite 输出是否属于已知可忽略噪音(如 OPFS 主线程降级提示)。
shouldUsePreparedStatementPath判断是否应当走 prepared statement 路径(而非批量 exec)。
switch_branch切换当前活跃分支并应用所需的数据迁移。
switch_transaction_id切换分支版本
transaction_sqlite_result处理 SQLite 事务结果,返回实体数组
transformEntityValueSqliteToJs将 SQLite 实体值转换为 JS 对象值
transformEntityValueToSql将实体值转换为 SQLite 格式
transformValueJsToSqlite将 JS 类型值转换为 SQLite 兼容类型
transformValueSqliteToJs将 SQLite 类型值转换为 JS 类型
try_process_relation_flatmap处理关系上的 keyValue 字段
try_resolve_relation_path尝试解析关系路径
update_entity_from_sqlite_result更新实体缓存 只更新已有的实体,委托给 transaction_sqlite_result
update_sql-
validateSqliteNumericOption校验 SQLite 客户端的整数数值选项。
withGlobalOo1LoadLock将一次完整的 oo1 模块加载串行化到全局唯一通道。
withPatchedOpfsProxyWorker用 Proxy 临时替换 globalThis.Worker,把 OPFS proxy worker 的脚本 URL 重写到 opfsProxyPath
withSqliteApiConfig临时设置 globalThis.sqlite3ApiConfig,执行 run 后恢复原值。
wrapWithComlinkWrap a client with Comlink if Worker/SharedWorker options are provided. Otherwise return the direct client.

References

SQliteChangeType

Renames and re-exports SQLiteChangeType