跳到主要内容

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​

ParameterTypeDescription
metadataEntityMetadata实体元数据

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 的默认值一个字都不进建表语句。