From a7db65827959eeef51accf84acaf1507770b82bb Mon Sep 17 00:00:00 2001 From: Philipp Korber Date: Tue, 25 Sep 2018 15:21:31 +0200 Subject: [PATCH] Test partial rollback of nested commits. Related to #371. --- postgres/tests/test.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/postgres/tests/test.rs b/postgres/tests/test.rs index 13ef53e7..753d9d9a 100644 --- a/postgres/tests/test.rs +++ b/postgres/tests/test.rs @@ -331,6 +331,41 @@ fn test_nested_transactions_finish() { ); } +#[test] +fn test_nested_transactions_partial_rollback() { + let conn = or_panic!(Connection::connect( + "postgres://postgres@localhost:5433", + TlsMode::None, + )); + or_panic!(conn.execute("CREATE TEMPORARY TABLE foo (id INT PRIMARY KEY)", &[])); + + or_panic!(conn.execute("INSERT INTO foo (id) VALUES ($1)", &[&1i32])); + + { + let trans = or_panic!(conn.transaction()); + or_panic!(trans.execute("INSERT INTO foo (id) VALUES ($1)", &[&2i32])); + { + let trans = or_panic!(trans.transaction()); + or_panic!(trans.execute("INSERT INTO foo (id) VALUES ($1)", &[&3i32])); + { + let trans = or_panic!(trans.transaction()); + or_panic!(trans.execute("INSERT INTO foo (id) VALUES ($1)", &[&4i32])); + drop(trans); + } + drop(trans); + } + or_panic!(trans.commit()); + } + + let stmt = or_panic!(conn.prepare("SELECT * FROM foo ORDER BY id")); + let result = or_panic!(stmt.query(&[])); + + assert_eq!( + vec![1i32, 2], + result.iter().map(|row| row.get(0)).collect::>() + ); +} + #[test] #[should_panic(expected = "active transaction")] fn test_conn_trans_when_nested() {