跳到主要内容

handle_array_in()

function handle_array_in(
entityMetadata,
originalField,
rule
): string | null;

Defined in: packages/rxdb-adapter-sqlite-core/src/query/query_sql.utils.ts:473

处理数组字段的 in/notIn 查询

Parameters​

ParameterType
entityMetadataEntityMetadata
originalFieldstring
ruleQueryRuleValue

Returns​

string | null

Remarks​

notIn 分支必须显式排除 NULL 行(SQLC-008)。标量列的取反操作符靠 SQL 三值逻辑天然排除 NULL,JS 增量匹配也据此把 notIn 归入 NULL_EXCLUDED_OPERATORS 直接返回 false (见 packages/rxdb/src/query/query-matching.utils.ts 的设计契约)。但 json_each() 对 NULL 列不产生任何行,裸 NOT EXISTS(...) 恒为真 —— 数组列因此成为唯一会保留 NULL 行的 例外,同一行在首次 SQL 查询与写入后的增量匹配之间结论相反,响应式查询会自行漂移。

生成的两段式条件自带括号:buildRuleGroup 对单条规则不补括号, 否则 a OR tags notIn [...] 会被 AND 的优先级悄悄改写成 (a OR tags IS NOT NULL) AND ...。 in 分支无需守卫:EXISTS(...) 对 NULL 列本就为假。