Horizon Official Technical Documentation
MySQLTest.cpp File Reference
#include <boost/mysql/error_with_diagnostics.hpp>
#include <boost/mysql/handshake_params.hpp>
#include <boost/mysql/results.hpp>
#include <boost/mysql/static_results.hpp>
#include <boost/mysql/tcp_ssl.hpp>
#include <boost/describe/class.hpp>
#include <boost/asio/io_context.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <boost/asio/ssl/context.hpp>
#include <boost/system/system_error.hpp>
#include <boost/test/unit_test.hpp>
#include <iostream>
#include <string>
+ Include dependency graph for MySQLTest.cpp:

Classes

struct  test
 

Macros

#define BOOST_TEST_MODULE   "MySQLTest"
 

Functions

 BOOST_DESCRIBE_STRUCT (test,(),(idtest, testint, teststring, testbool, testdate, testdatetime)) void test_connection(std
 
 BOOST_AUTO_TEST_CASE (MySQLTest)
 

Macro Definition Documentation

◆ BOOST_TEST_MODULE

#define BOOST_TEST_MODULE   "MySQLTest"

Function Documentation

◆ BOOST_AUTO_TEST_CASE()

BOOST_AUTO_TEST_CASE ( MySQLTest  )
123{
124 try {
125 std::string host = "localhost";
126 int port = 3306;
127 std::string user = "horizon";
128 std::string pass = "horizon";
129 std::string schema = "horizon";
130
131 boost::asio::io_context ctx;
132 boost::asio::ssl::context ssl_ctx(boost::asio::ssl::context::tls_client);
133
134 std::shared_ptr<boost::mysql::tcp_ssl_connection> conn = std::make_shared<boost::mysql::tcp_ssl_connection>(ctx.get_executor(), ssl_ctx);
135
136 boost::asio::ip::tcp::resolver resolver(ctx.get_executor());
137
138 auto endpoints = resolver.resolve(host, boost::mysql::default_port_string);
139
140 boost::mysql::handshake_params params(user, pass, schema);
141
142 conn->connect(*endpoints.begin(), params);
143
144 const char *sql = "SELECT 'Hello World!'";
145 boost::mysql::results result;
146 conn->execute(sql, result);
147
148 std::cout << "Result: " << result.rows().at(0).at(0) << std::endl;
149
150 test_connection(conn);
151
152 conn->close();
153 } catch(boost::mysql::error_with_diagnostics &e) {
154 std::cerr << "Exception caught: " << e.what() << std::endl;
155 } catch(std::exception &e) {
156 std::cerr << "Exception caught: " << e.what() << std::endl;
157 } catch(...) {
158 std::cerr << "Unknown exception caught." << std::endl;
159 }
160}

◆ BOOST_DESCRIBE_STRUCT()

BOOST_DESCRIBE_STRUCT ( test  ,
()  ,
(idtest, testint, teststring, testbool, testdate, testdatetime)   
)
61{
62 boost::mysql::statement stmt;
63 boost::mysql::results results;
64 boost::mysql::static_results<std::tuple<>> empty_result;
65 conn->execute("CREATE DATABASE IF NOT EXISTS `horizon`", results);
66
67 try {
68 conn->execute("CREATE TABLE IF NOT EXISTS `horizon`.`test` ( \
69 `idtest` INT NOT NULL, \
70 `testint` INT NOT NULL, \
71 `teststring` VARCHAR(45) NOT NULL, \
72 `testbool` TINYINT NOT NULL, \
73 `testdate` DATE NOT NULL, \
74 `testdatetime` DATETIME NOT NULL, \
75 PRIMARY KEY(`idtest`)); \
76 ", empty_result);
77 std::cout << "Created Table `horizon`.`test`..." << std::endl;
78
79 stmt = conn->prepare_statement("INSERT INTO `horizon`.`test` (`idtest`, `testint`, `teststring`, `testbool`, `testdate`, `testdatetime`) VALUES (?, ?, ?, ?, ?, ?);");
80 auto b = stmt.bind(1, 100, "test string", true, "1990-10-01", "1990-11-01 01:01:01");
81 conn->execute(b, empty_result);
82
83 std::cout << "Inserted 1 column into `horizon`.`test`..." << std::endl;
84 }
85 catch (boost::mysql::error_with_diagnostics& error) {
86 std::cout << "error:" << error.what() << std::endl;
87 }
88
89 try {
90 std::cout << "Fetching 1 column from `horizon`.`test`..." << std::endl;
91 stmt = conn->prepare_statement("SELECT `idtest`, `testint`, `teststring`, `testbool`, `testdate`, `testdatetime` FROM `horizon`.`test` WHERE `idtest` = ?");
92 auto b1 = stmt.bind(1);
93
94 boost::mysql::static_results<test> test_rows;
95
96 conn->execute(b1, test_rows);
97
98 if (test_rows.rows().empty()) {
99 BOOST_TEST_FAIL("Failed to retrieve rows for test table");
100 }
101
102 const test& t = test_rows.rows()[0];
103
104 BOOST_CHECK_EQUAL(t.idtest, 1);
105 BOOST_CHECK_EQUAL(t.testint, 100);
106 BOOST_CHECK_EQUAL(t.teststring.compare("test string"), 0);
107 BOOST_CHECK_EQUAL(t.testbool, true);
108 BOOST_CHECK_EQUAL(t.testdate.day(), 01);//654719400);
109 BOOST_CHECK_EQUAL(t.testdatetime.minute(), 01); // 657401461);
110
111 std::cout << "Dropping table `horizon`.`test`..." << std::endl;
112
113 conn->execute("DROP TABLE `horizon`.`test`;", empty_result);
114
115 std::cout << "Executed all queries successfully." << std::endl;
116 }
117 catch (boost::mysql::error_with_diagnostics& error) {
118 std::cout << "error:" << error.what() << std::endl;
119 }
120}
Definition: MySQLTest.cpp:50
std::string teststring
Definition: MySQLTest.cpp:53
int testint
Definition: MySQLTest.cpp:52
boost::mysql::date testdate
Definition: MySQLTest.cpp:55
boost::mysql::datetime testdatetime
Definition: MySQLTest.cpp:56
bool testbool
Definition: MySQLTest.cpp:54
int idtest
Definition: MySQLTest.cpp:51

References test::idtest, test::testbool, test::testdate, test::testdatetime, test::testint, and test::teststring.