summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Jamroot.jam13
-rw-r--r--libmysqlpp/my-connection.cpp12
-rw-r--r--libmysqlpp/my-connection.h4
-rw-r--r--libmysqlpp/my-mock.cpp9
-rw-r--r--libmysqlpp/my-mock.h3
-rw-r--r--libmysqlpp/my-selectcommand.cpp12
-rw-r--r--libmysqlpp/unittests/Jamfile.jam1
-rw-r--r--libmysqlpp/unittests/testmysql.cpp33
8 files changed, 33 insertions, 54 deletions
diff --git a/Jamroot.jam b/Jamroot.jam
index 44534b6..c7f2d40 100644
--- a/Jamroot.jam
+++ b/Jamroot.jam
@@ -6,12 +6,13 @@ variant coverage : debug ;
project
: requirements
- <variant>release:<cxxflags>"-std=c++1y -fvisibility=hidden"
- <variant>release:<linkflags>"-Wl,-z,defs,--warn-once,--gc-sections"
- <variant>debug:<cxxflags>"-W -Wall -Werror -Wwrite-strings -std=c++1y -fvisibility=hidden"
- <variant>debug:<linkflags>"-Wl,-z,defs,--warn-once"
- <variant>coverage:<cxxflags>"-W -Wall -Werror -Wwrite-strings -std=c++1y --coverage -fvisibility=hidden"
- <variant>coverage:<linkflags>"-Wl,-z,defs,--warn-once --coverage"
+ <cxxflags>"-std=c++17 -fvisibility=hidden -fvisibility-inlines-hidden"
+ <linkflags>"-Wl,-z,defs,--warn-once,--gc-sections"
+ <variant>release:<cxxflags>"-flto=2"
+ <variant>release:<linkflags>"-flto=2"
+ <variant>debug:<cxxflags>"-W -Wall -Werror -Wextra"
+ <variant>coverage:<cxxflags>"--coverage"
+ <variant>coverage:<linkflags>"--coverage"
;
build-project libmysqlpp ;
diff --git a/libmysqlpp/my-connection.cpp b/libmysqlpp/my-connection.cpp
index acc89cd..da3f3c6 100644
--- a/libmysqlpp/my-connection.cpp
+++ b/libmysqlpp/my-connection.cpp
@@ -127,16 +127,16 @@ MySQL::Connection::ping() const
}
-DB::SelectCommand *
-MySQL::Connection::newSelectCommand(const std::string & sql, const DB::CommandOptions *)
+DB::SelectCommandPtr
+MySQL::Connection::select(const std::string & sql, const DB::CommandOptionsCPtr &)
{
- return new SelectCommand(this, sql);
+ return std::make_shared<SelectCommand>(this, sql);
}
-DB::ModifyCommand *
-MySQL::Connection::newModifyCommand(const std::string & sql, const DB::CommandOptions *)
+DB::ModifyCommandPtr
+MySQL::Connection::modify(const std::string & sql, const DB::CommandOptionsCPtr &)
{
- return new ModifyCommand(this, sql);
+ return std::make_shared<ModifyCommand>(this, sql);
}
namespace MySQL {
diff --git a/libmysqlpp/my-connection.h b/libmysqlpp/my-connection.h
index f6acb39..0065579 100644
--- a/libmysqlpp/my-connection.h
+++ b/libmysqlpp/my-connection.h
@@ -26,8 +26,8 @@ namespace MySQL {
DB::BulkDeleteStyle bulkDeleteStyle() const override;
DB::BulkUpdateStyle bulkUpdateStyle() const override;
- DB::SelectCommand * newSelectCommand(const std::string & sql, const DB::CommandOptions *) override;
- DB::ModifyCommand * newModifyCommand(const std::string & sql, const DB::CommandOptions *) override;
+ DB::SelectCommandPtr select(const std::string & sql, const DB::CommandOptionsCPtr &) override;
+ DB::ModifyCommandPtr modify(const std::string & sql, const DB::CommandOptionsCPtr &) override;
void beginBulkUpload(const char *, const char *) override;
void endBulkUpload(const char *) override;
diff --git a/libmysqlpp/my-mock.cpp b/libmysqlpp/my-mock.cpp
index 8cf3057..fb00ef5 100644
--- a/libmysqlpp/my-mock.cpp
+++ b/libmysqlpp/my-mock.cpp
@@ -13,16 +13,11 @@ Mock::Mock(const std::string & master, const std::string & name, const std::vect
PlaySchemaScripts(ss);
}
-Mock::Mock(const std::string & name, const std::vector<boost::filesystem::path> & ss) :
- Mock("options=p2testmysql", name, ss)
-{
-}
-
AdHocFormatter(MockConnStr, "options=p2testmysql;database=%?");
-DB::Connection *
+DB::ConnectionPtr
Mock::openConnection() const
{
- return new Connection(MockConnStr::get(testDbName));
+ return std::make_shared<Connection>(MockConnStr::get(testDbName));
}
Mock::~Mock()
diff --git a/libmysqlpp/my-mock.h b/libmysqlpp/my-mock.h
index 0855015..a1dd770 100644
--- a/libmysqlpp/my-mock.h
+++ b/libmysqlpp/my-mock.h
@@ -10,11 +10,10 @@ namespace MySQL {
class DLL_PUBLIC Mock : public DB::MockServerDatabase {
public:
Mock(const std::string & master, const std::string & name, const std::vector<boost::filesystem::path> & ss);
- Mock(const std::string & name, const std::vector<boost::filesystem::path> & ss);
~Mock();
private:
- DB::Connection * openConnection() const override;
+ DB::ConnectionPtr openConnection() const override;
};
}
diff --git a/libmysqlpp/my-selectcommand.cpp b/libmysqlpp/my-selectcommand.cpp
index 5be6bf0..248e714 100644
--- a/libmysqlpp/my-selectcommand.cpp
+++ b/libmysqlpp/my-selectcommand.cpp
@@ -32,28 +32,28 @@ MySQL::SelectCommand::execute()
case MYSQL_TYPE_INT24:
case MYSQL_TYPE_LONGLONG:
case MYSQL_TYPE_YEAR:
- insertColumn(boost::shared_ptr<ColumnBase>(new Column<int64_t, MYSQL_TYPE_LONGLONG>(fieldDefs[i].name, i, &fields[i])));
+ insertColumn(std::make_shared<Column<int64_t, MYSQL_TYPE_LONGLONG>>(fieldDefs[i].name, i, &fields[i]));
break;
case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_NEWDECIMAL:
case MYSQL_TYPE_FLOAT:
case MYSQL_TYPE_DOUBLE:
- insertColumn(boost::shared_ptr<ColumnBase>(new Column<double, MYSQL_TYPE_DOUBLE>(fieldDefs[i].name, i, &fields[i])));
+ insertColumn(std::make_shared<Column<double, MYSQL_TYPE_DOUBLE>>(fieldDefs[i].name, i, &fields[i]));
break;
case MYSQL_TYPE_TIMESTAMP:
case MYSQL_TYPE_DATE:
case MYSQL_TYPE_DATETIME:
- insertColumn(boost::shared_ptr<ColumnBase>(new Column<MYSQL_TIME, MYSQL_TYPE_DATETIME>(fieldDefs[i].name, i, &fields[i])));
+ insertColumn(std::make_shared<Column<MYSQL_TIME, MYSQL_TYPE_DATETIME>>(fieldDefs[i].name, i, &fields[i]));
break;
case MYSQL_TYPE_TIME:
- insertColumn(boost::shared_ptr<ColumnBase>(new Column<MYSQL_TIME, MYSQL_TYPE_TIME>(fieldDefs[i].name, i, &fields[i])));
+ insertColumn(std::make_shared<Column<MYSQL_TIME, MYSQL_TYPE_TIME>>(fieldDefs[i].name, i, &fields[i]));
break;
case MYSQL_TYPE_STRING:
case MYSQL_TYPE_VAR_STRING:
- insertColumn(boost::shared_ptr<ColumnBase>(new StringColumn(fieldDefs[i].name, i, &fields[i], fieldDefs[i].length)));
+ insertColumn(std::make_shared<StringColumn>(fieldDefs[i].name, i, &fields[i], fieldDefs[i].length));
break;
case MYSQL_TYPE_NULL:
- insertColumn(boost::shared_ptr<ColumnBase>(new NullColumn(fieldDefs[i].name, i, &fields[i])));
+ insertColumn(std::make_shared<NullColumn>(fieldDefs[i].name, i, &fields[i]));
break;
case MYSQL_TYPE_BIT:
case MYSQL_TYPE_BLOB:
diff --git a/libmysqlpp/unittests/Jamfile.jam b/libmysqlpp/unittests/Jamfile.jam
index 167939a..89f3182 100644
--- a/libmysqlpp/unittests/Jamfile.jam
+++ b/libmysqlpp/unittests/Jamfile.jam
@@ -14,6 +14,7 @@ run
<define>BOOST_TEST_DYN_LINK
<library>..//dbpp-mysql
<library>dbpptestcore
+ <library>..//adhocutil
<library>boost_utf
<library>boost_system
<library>boost_filesystem
diff --git a/libmysqlpp/unittests/testmysql.cpp b/libmysqlpp/unittests/testmysql.cpp
index 00c15aa..b2e8175 100644
--- a/libmysqlpp/unittests/testmysql.cpp
+++ b/libmysqlpp/unittests/testmysql.cpp
@@ -12,9 +12,9 @@
#include <fstream>
#include <boost/date_time/posix_time/posix_time.hpp>
-class StandardMockDatabase : public MySQL::Mock {
+class StandardMockDatabase : public DB::PluginMock<MySQL::Mock> {
public:
- StandardMockDatabase() : MySQL::Mock("mysqlmock", {
+ StandardMockDatabase() : DB::PluginMock<MySQL::Mock>("options=p2testmysql", "mysqlmock", {
rootDir / "mysqlschema.sql" })
{
}
@@ -38,15 +38,13 @@ BOOST_AUTO_TEST_CASE( transactions )
BOOST_REQUIRE_EQUAL(true, ro->inTx());
ro->commitTx();
BOOST_REQUIRE_EQUAL(false, ro->inTx());
-
- delete ro;
}
BOOST_AUTO_TEST_CASE( bindAndSend )
{
auto rw = DB::MockDatabase::openConnectionTo("mysqlmock");
- auto mod = rw->newModifyCommand("INSERT INTO test VALUES(?, ?, ?, ?, ?, ?)");
+ auto mod = rw->modify("INSERT INTO test VALUES(?, ?, ?, ?, ?, ?)");
mod->bindParamI(0, testInt);
mod->bindParamF(1, testDouble);
mod->bindParamS(2, testString);
@@ -54,15 +52,13 @@ BOOST_AUTO_TEST_CASE( bindAndSend )
mod->bindParamT(4, testDateTime);
mod->bindParamT(5, testInterval);
mod->execute();
- delete mod;
- delete rw;
}
BOOST_AUTO_TEST_CASE( bindAndSelect )
{
auto ro = DB::MockDatabase::openConnectionTo("mysqlmock");
- auto select = ro->newSelectCommand("SELECT * FROM test WHERE id = ?");
+ auto select = ro->select("SELECT * FROM test WHERE id = ?");
select->bindParamI(0, testInt);
select->execute();
int rows = 0;
@@ -75,16 +71,14 @@ BOOST_AUTO_TEST_CASE( bindAndSelect )
assertColumnValueHelper(*select, 5, testInterval);
rows += 1;
}
- delete select;
BOOST_REQUIRE_EQUAL(1, rows);
- delete ro;
}
BOOST_AUTO_TEST_CASE( bindAndSelectOther )
{
auto ro = DB::MockDatabase::openConnectionTo("mysqlmock");
- auto select = ro->newSelectCommand("SELECT * FROM test WHERE id != ?");
+ auto select = ro->select("SELECT * FROM test WHERE id != ?");
select->bindParamI(0, testInt);
select->execute();
int rows = 0;
@@ -97,16 +91,14 @@ BOOST_AUTO_TEST_CASE( bindAndSelectOther )
assertColumnValueHelper(*select, 5, boost::posix_time::time_duration(38, 13, 12));
rows += 1;
}
- delete select;
BOOST_REQUIRE_EQUAL(1, rows);
- delete ro;
}
BOOST_AUTO_TEST_CASE( bulkload )
{
auto ro = DB::MockDatabase::openConnectionTo("mysqlmock");
- auto count = ro->newSelectCommand("SELECT COUNT(*) FROM bulktest");
+ auto count = ro->select("SELECT COUNT(*) FROM bulktest");
// Test empty
ro->beginBulkUpload("bulktest", "");
ro->endBulkUpload(NULL);
@@ -121,30 +113,24 @@ BOOST_AUTO_TEST_CASE( bulkload )
}
ro->endBulkUpload(NULL);
assertScalarValueHelper(*count, 800);
-
- delete count;
- delete ro;
}
BOOST_AUTO_TEST_CASE( bigIterate )
{
auto ro = DB::MockDatabase::openConnectionTo("mysqlmock");
- auto count = ro->newSelectCommand("SELECT * FROM bulktest");
+ auto count = ro->select("SELECT * FROM bulktest");
unsigned int rows = 0;
while (count->fetch()) {
rows += 1;
}
BOOST_REQUIRE_EQUAL(800, rows);
-
- delete count;
- delete ro;
}
BOOST_AUTO_TEST_CASE( insertId )
{
auto ro = DB::MockDatabase::openConnectionTo("mysqlmock");
- auto ins = ro->newModifyCommand("INSERT INTO inserts(num) VALUES(?)");
+ auto ins = ro->modify("INSERT INTO inserts(num) VALUES(?)");
ins->bindParamI(0, 4);
ins->execute();
BOOST_REQUIRE_EQUAL(1, ro->insertId());
@@ -154,15 +140,12 @@ BOOST_AUTO_TEST_CASE( insertId )
ins->bindParamI(0, -4);
ins->execute();
BOOST_REQUIRE_EQUAL(3, ro->insertId());
- delete ins;
- delete ro;
}
BOOST_AUTO_TEST_CASE( errors )
{
auto ro = DB::MockDatabase::openConnectionTo("mysqlmock");
BOOST_REQUIRE_THROW(ro->execute("nonsense"), DB::Error);
- delete ro;
BOOST_REQUIRE_THROW(DB::ConnectionFactory::createNew("mysql", "server=nohost"), DB::ConnectionError);
}