requiredQueryCacheColumns()
function requiredQueryCacheColumns(metadata): ReadonlyMap<string, string>;
Defined in: packages/rxdb-adapter-sqlite-core/src/query-cache-row-contract.ts:51
算出「远端行必须自带」的列:本地表上 NOT NULL 且建表时拿不到默认值的那些。
Parameters
| Parameter | Type | Description |
|---|---|---|
metadata | EntityMetadata | 实体元数据 |
Returns
ReadonlyMap<string, string>
属性名(或关系名)→ 物理列名;行里带其中任一个都算带齐
Remarks
判据逐条对齐 create_table_sql.ts 的 create_table_column_sql —— 那里怎么建,
这里就怎么判,两处必须同改:
nullable为真 → 建出来没有NOT NULL,缺了无所谓;- uuid 主键 → DDL 给了
DEFAULT (lower(hex(randomblob(16)))); - integer 主键 →
PRIMARY KEY AUTOINCREMENT,省略即自增; - 字面量
default→ 进 DDL 的DEFAULT子句(binary 除外,DDL 明确跳过它); - 函数
default→ 一个字都不进 DDL。EntityBase.createdAt的default: () => new Date()正是这一支:它是仓储层的东西,而 QueryCache 的落地 是绕开仓储的裸 SQL,于是列建成 NOT NULL、远端又不带,INSERT 必然被拒。
关系列走 relation.nullable / SET NULL 两道豁免;字面量 default 只对 MANY_TO_ONE
豁免 —— DDL 的 DEFAULT 子句只发给这一种,ONE_TO_ONE 的默认值一个字都不进建表语句。