requiredQueryCacheColumns()
function requiredQueryCacheColumns(metadata): ReadonlyMap<string, string>;
Defined in: packages/rxdb-adapter-pglite/src/query-cache/query_cache_row_contract.ts:116
算出「远端行必须自带」的列:本地表上 NOT NULL 且建表时拿不到默认值的那些。
Parameters
| Parameter | Type | Description |
|---|---|---|
metadata | EntityMetadata | 实体元数据 |
Returns
ReadonlyMap<string, string>
属性名(或关系名)→ 物理列名;行里带其中任一个都算带齐
Remarks
判据逐条对齐 table/create_table_sql.ts 的 _create_table_column_sql 与
_create_table_relations_sql —— 那里怎么建,这里就怎么判,两处必须同改。
属性列:
nullable为真 → 建出来没有NOT NULL,缺了无所谓;integer主键 →serial PRIMARY KEY,serial隐含nextval(),省略即自增;- 其余主键(
uuid/string/bigint)仍是必填:PG 侧的 DDL 只发"id" uuid PRIMARY KEY,不像 sqlite 那样补DEFAULT (lower(hex(randomblob(16)))); 照 sqlite 豁免会让缺 id 的行走到 PostgreSQL 才报错。这是两个后端的第一处分歧。 - 字面量
default→ 进 DDL 的DEFAULT子句(三条例外见 hasUsableDefault)。
关系列(只有 ONE_TO_ONE / MANY_TO_ONE 才占一个物理列):
relation.nullable→ DDL 不发NOT NULL,豁免;SET NULL不豁免:_create_table_relations_sql只看relation.nullable, 非空关系列即使带ON DELETE SET NULL也照发NOT NULL(sqlite 侧有mustBeNullable把它降级为可空)。这是两个后端的第二处分歧,且是本后端建表的已知缺陷而非设计差异 —— 见本文件@fileoverview。- 字面量
default只对MANY_TO_ONE豁免 —— DDL 的DEFAULT子句嵌在kind === MANY_TO_ONE里,ONE_TO_ONE的默认值一个字都不进建表语句。