kmp-adapter-embedded 0.18.3

Embedded SQLite storage adapters for every KMP persistence port
Documentation
use super::{Ops, create_tables};
use crate::adapter::engine::{Key, Table};
use rusqlite::Connection;

#[test]
fn json_headers_return_only_selected_fields_independent_of_discarded_source_size() {
    let connection = Connection::open_in_memory().expect("fixture operation succeeds");
    create_tables(&connection).expect("fixture operation succeeds");
    let ops = Ops {
        connection: &connection,
    };
    assert_eq!(
        ops.project_str_json(Table::Nodes, "absent", &["node_id"])
            .expect("fixture operation succeeds"),
        None
    );
    for size in [1024, 1024 * 1024] {
        let value = serde_json::json!({"node_id":"n", "summary":"áλ".repeat(size), "labels":["evidence"],
            "properties":{"placeholder":"true", "canonical":"B".repeat(size)}});
        ops.insert(
            Table::Nodes,
            Key::Str("n"),
            &serde_json::to_vec(&value).expect("fixture operation succeeds"),
        )
        .expect("fixture operation succeeds");
        let header = ops
            .project_str_json(
                Table::Nodes,
                "n",
                &["node_id", "labels", "properties.placeholder", "missing"],
            )
            .expect("fixture operation succeeds")
            .expect("fixture operation succeeds");
        let actual: serde_json::Value =
            serde_json::from_slice(&header).expect("fixture operation succeeds");
        assert_eq!(
            actual,
            serde_json::json!({"node_id":"n", "labels":["evidence"], "properties.placeholder":"true", "missing":null})
        );
        assert!(
            header.len() < 128,
            "only the declared header crosses the engine seam"
        );
        println!(
            "discarded source scale {size}: {} header bytes returned",
            header.len()
        );
    }
    ops.insert(Table::Nodes, Key::Str("bad"), b"not-json")
        .expect("fixture operation succeeds");
    assert!(
        ops.project_str_json(Table::Nodes, "bad", &["node_id"])
            .is_err()
    );
    assert!(
        ops.project_str_json(Table::Relations, "n", &["node_id"])
            .is_err()
    );
}