MCPcopy Create free account
hub / github.com/erans/pgsqlite / test_jsonb_delete_function

Function test_jsonb_delete_function

src/functions/json_functions.rs:2050–2166  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

2048
2049 #[test]
2050 fn test_jsonb_delete_function() {
2051 let conn = Connection::open_in_memory().unwrap();
2052 register_json_functions(&conn).unwrap();
2053
2054 // Test deleting from object
2055 let test_json = r#"{"name": "John", "age": 30, "email": "john@example.com"}"#;
2056 let result: Option<String> = conn.query_row(
2057 "SELECT jsonb_delete(?, ?)",
2058 [test_json, "{email}"],
2059 |row| row.get(0)
2060 ).unwrap();
2061
2062 assert!(result.is_some());
2063 let parsed: JsonValue = serde_json::from_str(&result.unwrap()).unwrap();
2064 match parsed {
2065 JsonValue::Object(map) => {
2066 assert_eq!(map.get("name"), Some(&JsonValue::String("John".to_string())));
2067 assert_eq!(map.get("age"), Some(&JsonValue::Number(serde_json::Number::from(30))));
2068 assert_eq!(map.get("email"), None); // Should be deleted
2069 assert_eq!(map.len(), 2); // Only 2 keys remaining
2070 }
2071 _ => panic!("Expected JSON object"),
2072 }
2073
2074 // Test deleting from nested object
2075 let nested_json = r#"{"user": {"name": "Alice", "email": "alice@example.com"}, "active": true}"#;
2076 let result: Option<String> = conn.query_row(
2077 "SELECT jsonb_delete(?, ?)",
2078 [nested_json, "{user,email}"],
2079 |row| row.get(0)
2080 ).unwrap();
2081
2082 assert!(result.is_some());
2083 let parsed: JsonValue = serde_json::from_str(&result.unwrap()).unwrap();
2084 match parsed {
2085 JsonValue::Object(map) => {
2086 if let Some(JsonValue::Object(user_map)) = map.get("user") {
2087 assert_eq!(user_map.get("name"), Some(&JsonValue::String("Alice".to_string())));
2088 assert_eq!(user_map.get("email"), None); // Should be deleted
2089 assert_eq!(user_map.len(), 1); // Only name remaining
2090 } else {
2091 panic!("Expected nested user object");
2092 }
2093 }
2094 _ => panic!("Expected JSON object"),
2095 }
2096
2097 // Test deleting from array
2098 let array_json = r#"["apple", "banana", "cherry", "date"]"#;
2099 let result: Option<String> = conn.query_row(
2100 "SELECT jsonb_delete(?, ?)",
2101 [array_json, "{1}"],
2102 |row| row.get(0)
2103 ).unwrap();
2104
2105 assert!(result.is_some());
2106 let parsed: JsonValue = serde_json::from_str(&result.unwrap()).unwrap();
2107 match parsed {

Callers

nothing calls this directly

Calls 2

register_json_functionsFunction · 0.85
getMethod · 0.45

Tested by

no test coverage detected