test_transaction_focus.cxx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include <pqxx/stream_from>
  2. #include <pqxx/transaction>
  3. #include "../test_helpers.hxx"
  4. namespace
  5. {
  6. auto make_focus(pqxx::dbtransaction &tx)
  7. {
  8. return pqxx::stream_from::query(tx, "SELECT * from generate_series(1, 10)");
  9. }
  10. void test_cannot_run_statement_during_focus()
  11. {
  12. pqxx::connection conn;
  13. pqxx::transaction tx{conn};
  14. tx.exec("SELECT 1");
  15. auto focus{make_focus(tx)};
  16. PQXX_CHECK_THROWS(
  17. tx.exec("SELECT 1"), pqxx::usage_error,
  18. "Command during focus did not throw expected error.");
  19. }
  20. void test_cannot_run_prepared_statement_during_focus()
  21. {
  22. pqxx::connection conn;
  23. conn.prepare("foo", "SELECT 1");
  24. pqxx::transaction tx{conn};
  25. tx.exec_prepared("foo");
  26. auto focus{make_focus(tx)};
  27. PQXX_CHECK_THROWS(
  28. tx.exec_prepared("foo"), pqxx::usage_error,
  29. "Prepared statement during focus did not throw expected error.");
  30. }
  31. void test_cannot_run_params_statement_during_focus()
  32. {
  33. pqxx::connection conn;
  34. pqxx::transaction tx{conn};
  35. tx.exec_params("select $1", 10);
  36. auto focus{make_focus(tx)};
  37. PQXX_CHECK_THROWS(
  38. tx.exec_params("select $1", 10), pqxx::usage_error,
  39. "Parameterized statement during focus did not throw expected error.");
  40. }
  41. PQXX_REGISTER_TEST(test_cannot_run_statement_during_focus);
  42. PQXX_REGISTER_TEST(test_cannot_run_prepared_statement_during_focus);
  43. PQXX_REGISTER_TEST(test_cannot_run_params_statement_during_focus);
  44. } // namespace