test_exceptions.cxx 994 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include <pqxx/except>
  2. #include <pqxx/transaction>
  3. #include "../test_helpers.hxx"
  4. namespace
  5. {
  6. void test_exceptions()
  7. {
  8. std::string const broken_query{"SELECT HORRIBLE ERROR"},
  9. err{"Error message"};
  10. try
  11. {
  12. throw pqxx::sql_error{err, broken_query};
  13. }
  14. catch (std::exception const &e)
  15. {
  16. PQXX_CHECK_EQUAL(e.what(), err, "Exception contains wrong message.");
  17. auto downcast{dynamic_cast<pqxx::sql_error const *>(&e)};
  18. PQXX_CHECK(
  19. downcast != nullptr, "exception-to-sql_error downcast is broken.");
  20. PQXX_CHECK_EQUAL(
  21. downcast->query(), broken_query,
  22. "Getting query from pqxx exception is broken.");
  23. }
  24. pqxx::connection conn;
  25. pqxx::work tx{conn};
  26. try
  27. {
  28. tx.exec("INVALID QUERY HERE");
  29. }
  30. catch (pqxx::syntax_error const &e)
  31. {
  32. // SQL syntax error has sqlstate error 42601.
  33. PQXX_CHECK_EQUAL(
  34. e.sqlstate(), "42601", "Unexpected sqlstate on syntax error.");
  35. }
  36. }
  37. PQXX_REGISTER_TEST(test_exceptions);
  38. } // namespace