()
| 1624 | // Verify we don't return rows on DML |
| 1625 | #[test] |
| 1626 | fn test_row_dml() -> ResultTest<()> { |
| 1627 | let db = TestDB::durable()?; |
| 1628 | |
| 1629 | let table_id = db.create_table_for_test("T", &[("a", AlgebraicType::U8)], &[])?; |
| 1630 | with_auto_commit(&db, |tx| -> Result<_, DBError> { |
| 1631 | for i in 0..4u8 { |
| 1632 | insert(&db, tx, table_id, &product!(i))?; |
| 1633 | } |
| 1634 | Ok(()) |
| 1635 | })?; |
| 1636 | |
| 1637 | let rt = db.runtime().expect("runtime should be there"); |
| 1638 | |
| 1639 | let server = Identity::from_claims("issuer", "server"); |
| 1640 | |
| 1641 | let internal_auth = AuthCtx::new(server, server); |
| 1642 | |
| 1643 | let tmp_vec = Vec::new(); |
| 1644 | let run = |db, sql: &str, auth, subs, mut tmp_vec| { |
| 1645 | let sql = sql.to_string(); |
| 1646 | async move { run(db, sql, auth, subs, None, &mut tmp_vec).await } |
| 1647 | }; |
| 1648 | |
| 1649 | let check = |db, sql, auth, metrics: ExecutionMetrics| { |
| 1650 | let result = rt.block_on(run(db, sql, auth, None, tmp_vec.clone()))?; |
| 1651 | assert_eq!(result.rows, vec![]); |
| 1652 | assert_eq!(result.metrics.rows_inserted, metrics.rows_inserted); |
| 1653 | assert_eq!(result.metrics.rows_deleted, metrics.rows_deleted); |
| 1654 | assert_eq!(result.metrics.rows_updated, metrics.rows_updated); |
| 1655 | |
| 1656 | Ok::<(), DBError>(()) |
| 1657 | }; |
| 1658 | |
| 1659 | let ins = ExecutionMetrics { |
| 1660 | rows_inserted: 1, |
| 1661 | ..ExecutionMetrics::default() |
| 1662 | }; |
| 1663 | let upd = ExecutionMetrics { |
| 1664 | rows_updated: 5, |
| 1665 | ..ExecutionMetrics::default() |
| 1666 | }; |
| 1667 | let del = ExecutionMetrics { |
| 1668 | rows_deleted: 1, |
| 1669 | ..ExecutionMetrics::default() |
| 1670 | }; |
| 1671 | |
| 1672 | check(db.clone(), "INSERT INTO T (a) VALUES (5)", internal_auth.clone(), ins)?; |
| 1673 | check(db.clone(), "UPDATE T SET a = 2", internal_auth.clone(), upd)?; |
| 1674 | assert_eq!( |
| 1675 | rt.block_on(run( |
| 1676 | db.clone(), |
| 1677 | "SELECT * FROM T", |
| 1678 | internal_auth.clone(), |
| 1679 | None, |
| 1680 | tmp_vec.clone() |
| 1681 | ))? |
| 1682 | .rows, |
| 1683 | vec![product!(2u8)] |
nothing calls this directly
no test coverage detected
searching dependent graphs…