8 #include <mysql_connection.h>
9 #include <cppconn/driver.h>
10 #include <cppconn/exception.h>
11 #include <cppconn/resultset.h>
12 #include <cppconn/prepared_statement.h>
14 #include "../logging.h"
20 std::unique_ptr<sql::Connection>
conn;
23 for (std::size_t i = 0; i < 10; i++) {
24 std::string pat =
"%" + std::to_string(i) +
"q";
26 std::size_t p = res.find(pat);
27 if (p == std::string::npos)
break;
28 res = res.replace(p, pat.size(),
"?");
37 using Statement = std::unique_ptr<sql::PreparedStatement>;
39 using Results = std::unique_ptr<sql::ResultSet>;
42 bool connect(
const std::string& db,
const std::string& host,
const std::string& user,
const std::string& password) {
44 driver = get_driver_instance();
45 conn =
driver->connect(
"tcp://" + host +
":3306", user, password);
48 }
catch (sql::SQLException &e) {
58 return Results(stmt->executeQuery());
62 stmt->setString(1, a1);
63 return Results(stmt->executeQuery());
67 stmt->setString(1, a1);
68 stmt->setUInt64(2, a2);
69 return Results(stmt->executeQuery());
73 stmt->setString(1, a1);
74 stmt->setString(2, a2);
75 stmt->setUInt64(3, a3);
76 return Results(stmt->executeQuery());
81 stmt->setUInt64(2, a2);
82 stmt->setUInt64(3, a3);
83 stmt->setUInt64(4, a4);
84 stmt->setUInt64(5, a5);
85 stmt->setUInt64(6, a6);
86 return Results(stmt->executeQuery());
89 template<
typename... Args>
94 std::unique_ptr<sql::Statement> stmt(
conn->createStatement());
95 Results res(stmt->executeQuery(
"SELECT @@identity AS id"));
97 return res->getUInt64(
"id");
100 template<
typename... Args>
107 return res->rowsCount();
112 return res->getUInt64(name.c_str());
std::size_t size(const Results &res)
Return the size of the results.
bool connect(const std::string &db, const std::string &host, const std::string &user, const std::string &password)
Connect to the given database.
std::unique_ptr< sql::Driver > driver
std::unique_ptr< sql::ResultSet > Results
Results type.
Statement prepare(const std::string &query)
Prepare a statement.
std::unique_ptr< sql::Connection > conn
Results execute(Statement &stmt, const std::string &a1, std::size_t a2)
Execute a statement with a string and a number.
std::unique_ptr< sql::PreparedStatement > Statement
Statement type.
Results execute(Statement &stmt)
Execute a statement without arguments.
std::size_t Index
Indec type.
std::string replacePlaceholders(const std::string &s)
Results execute(Statement &stmt, int a1, std::size_t a2, std::size_t a3, const Index &a4, const Index &a5, const Index &a6)
Execute a statement with an int, two numbers and three indices.
Index getIndex(const Results &res, const std::string &name)
Get the index of some name within the results.
Index insert(const std::string &query, const Args &... args)
Insert some data and return the new index.
Results execute(Statement &stmt, const std::string &a1, const std::string &a2, const Index &a3)
Execute a statement with two strings and an index.
Results execute(Statement &stmt, const std::string &a1)
Execute a statement with a single string.
Results select(const std::string &query, const Args &... args)
Select some data.