MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / encode_decode_json_column

Function encode_decode_json_column

nodedb-strict/src/encode.rs:487–513  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

485
486 #[test]
487 fn encode_decode_json_column() {
488 let schema = StrictSchema::new(vec![
489 ColumnDef::required("id", ColumnType::Int64).with_primary_key(),
490 ColumnDef::nullable("metadata", ColumnType::Json),
491 ])
492 .unwrap();
493 let encoder = TupleEncoder::new(&schema);
494
495 let metadata = Value::Object(std::collections::HashMap::from([
496 ("source".to_string(), Value::String("web".to_string())),
497 ("priority".to_string(), Value::Integer(3)),
498 ]));
499 let values = vec![Value::Integer(1), metadata.clone()];
500 let tuple = encoder.encode(&values).unwrap();
501
502 // Tuple must be longer than just the header + fixed section.
503 // Header: 10 bytes. Fixed: 8 (Int64). Offset table: 8 (2 entries × u32).
504 // Variable data must be non-empty (MessagePack of the object).
505 let min_size = 10 + 8 + 8;
506 assert!(tuple.len() > min_size, "tuple should contain variable data");
507
508 // Decode and verify the value roundtrips correctly.
509 let decoder = crate::decode::TupleDecoder::new(&schema);
510 let decoded = decoder.extract_all(&tuple).unwrap();
511 assert_eq!(decoded[0], Value::Integer(1));
512 assert_eq!(decoded[1], metadata);
513 }
514
515 #[test]
516 fn encode_json_null() {

Callers

nothing calls this directly

Calls 3

to_stringMethod · 0.80
extract_allMethod · 0.80
encodeMethod · 0.45

Tested by

no test coverage detected