rust_store_core/federation/mod.rs
1//! 跨库联邦查询(Phase 5)
2//!
3//! 核心难点:Mongo 的 `$lookup` 与 SQL 的 `JOIN` **都只能在同一数据源内**,
4//! 跨源无法下推为一条命令。故本模块把一条 GQL 拆成:
5//!
6//! ```text
7//! plan_federated → 各源命令序列 + join 边(纯逻辑,无 IO)
8//! Host → 逐源执行(Mongo 原生 / SQL translate→exec)
9//! merge_federated → 内存哈希 join + 嵌套还原
10//! Host → prepare_query / strip_query(与单库同一套尾处理)
11//! ```
12//!
13//! 契约(对齐执行文档第七节):
14//! - `postprocess` 与单库 `plan_query` 的 `postprocess` **同形状**(`{ast, inject}`),
15//! 从而直接复用 [`crate::command::finalize_query`] / `strip_query`,无第二套实现;
16//! - `sources[].source` 只取自 `Registry` 的 schema `datasource` 名(缺省 `default`),
17//! 禁止 Host 自造名;
18//! - 跨源关系必须能确定 `cardinality`(`one` / `many`),否则早失败;
19//! - 无法安全下推的组合一律进 `degraded` + warning,**绝不静默产生错误结果**。
20//!
21//! 子模块划分:
22//! - [`plan`]:拆源(哪些关系同源可下推、哪些跨源要拆成 join 边)
23//! - [`merge`]:按 join 边做内存哈希 join 与数组/对象还原
24
25mod merge;
26mod plan;
27
28pub use merge::{merge_federated, MAX_FEDERATION_ROWS};
29pub use plan::{plan_federated, FEDERATION_VERSION};