MCPcopy Create free account
hub / github.com/chatmail/core / test_query_only

Function test_query_only

src/sql/sql_tests.rs:304–359  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

302
303#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
304async fn test_query_only() -> Result<()> {
305 let t = TestContext::new().await;
306
307 // `query_row` does not acquire write lock
308 // and operates on read-only connection.
309 // Using it to `INSERT` should fail.
310 let res = t
311 .sql
312 .query_row(
313 "INSERT INTO config (keyname, value) VALUES (?, ?) RETURNING 1",
314 ("xyz", "ijk"),
315 |row| {
316 let res: u32 = row.get(0)?;
317 Ok(res)
318 },
319 )
320 .await;
321 assert!(res.is_err());
322
323 // If you want to `INSERT` and get value via `RETURNING`,
324 // use `call_write` or `transaction`.
325
326 let res: Result<u32> = t
327 .sql
328 .call_write(|conn| {
329 let val = conn.query_row(
330 "INSERT INTO config (keyname, value) VALUES (?, ?) RETURNING 2",
331 ("foo", "bar"),
332 |row| {
333 let res: u32 = row.get(0)?;
334 Ok(res)
335 },
336 )?;
337 Ok(val)
338 })
339 .await;
340 assert_eq!(res.unwrap(), 2);
341
342 let res = t
343 .sql
344 .transaction(|t| {
345 let val = t.query_row(
346 "INSERT INTO config (keyname, value) VALUES (?, ?) RETURNING 3",
347 ("abc", "def"),
348 |row| {
349 let res: u32 = row.get(0)?;
350 Ok(res)
351 },
352 )?;
353 Ok(val)
354 })
355 .await;
356 assert_eq!(res.unwrap(), 3);
357
358 Ok(())
359}
360
361/// Tests that incremental_vacuum does not fail.

Callers

nothing calls this directly

Calls 4

query_rowMethod · 0.80
call_writeMethod · 0.80
transactionMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected