pub fn plan_query(
gql: &str,
params: &Map<String, Value>,
registry: &Registry,
ctx: Option<&Context>,
) -> Result<QueryPlan, String>Expand description
生成读路径命令序列(对应 JS query + _executePipeline 的路径选择)
Examples found in repository?
examples/quickstart.rs (line 36)
14fn main() -> Result<(), String> {
15 // 1. A model is plain JSON — defined once, usable against every backend.
16 let mut registry = Registry::new();
17 registry.register(&json!({
18 "name": "Post",
19 "collection": "posts",
20 "timestamps": true,
21 "fields": {
22 "title": { "type": "string" },
23 "status": { "type": "string", "default": "draft" },
24 "views": { "type": "int" }
25 },
26 "relations": {}
27 }))?;
28
29 // 2. GQL in, MongoDB command JSON out. Values are referenced by `@key`.
30 let gql = "Post($condition:@c0,$sort:@s1,$limit:@l0){title, status, views}";
31 let mut params = Map::new();
32 params.insert("c0".to_string(), json!({ "status": "published" }));
33 params.insert("s1".to_string(), json!({ "views": -1 }));
34 params.insert("l0".to_string(), json!(20));
35
36 let plan = plan_query(gql, ¶ms, ®istry, None)?;
37
38 println!("collection = {}", plan.collection);
39 println!("mode = {}", plan.mode.as_str());
40
41 for cmd in &plan.commands {
42 println!("command = {}", serde_json::to_string(cmd).unwrap());
43
44 // 3. The host runs `cmd` against MongoDB — or, for a SQL backend, asks the
45 // core for parameterized SQL and binds it with its own driver.
46 let sql = translate(Backend::Postgres, cmd, ®istry)?;
47 println!("sql = {}", serde_json::to_string(&sql).unwrap());
48 }
49
50 Ok(())
51}