summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--project2/sql/unittests/testCore.cpp7
-rw-r--r--project2/sql/unittests/testCore.h7
-rw-r--r--project2/sql/unittests/testpq.cpp44
3 files changed, 52 insertions, 6 deletions
diff --git a/project2/sql/unittests/testCore.cpp b/project2/sql/unittests/testCore.cpp
index 8af0e43..911eccb 100644
--- a/project2/sql/unittests/testCore.cpp
+++ b/project2/sql/unittests/testCore.cpp
@@ -2,7 +2,12 @@
#include <testOptionsSource.h>
#include <definedDirs.h>
-TestCore::TestCore()
+TestCore::TestCore() :
+ testInt(43),
+ testDouble(3.14),
+ testString("Some C String"),
+ testDateTime(boost::posix_time::from_time_t(time(NULL))),
+ testInterval(boost::posix_time::time_duration(1, 2, 3))
{
TestOptionsSource::LoadTestOptions({
{ "common.datasourceRoot", (RootDir / "datasources").string() },
diff --git a/project2/sql/unittests/testCore.h b/project2/sql/unittests/testCore.h
index e39e9c6..b807922 100644
--- a/project2/sql/unittests/testCore.h
+++ b/project2/sql/unittests/testCore.h
@@ -2,10 +2,17 @@
#define PROJECT2_SQL_UNITTEST_CORE
#include <commonObjects.h>
+#include <variableType.h>
class TestCore : public CommonObjects {
public:
TestCore();
+
+ int testInt;
+ double testDouble;
+ std::string testString;
+ boost::posix_time::ptime testDateTime;
+ boost::posix_time::time_duration testInterval;
};
#endif
diff --git a/project2/sql/unittests/testpq.cpp b/project2/sql/unittests/testpq.cpp
index 434a184..9218612 100644
--- a/project2/sql/unittests/testpq.cpp
+++ b/project2/sql/unittests/testpq.cpp
@@ -4,8 +4,11 @@
#include <mockDatasource.h>
#include <definedDirs.h>
#include <modifycommand.h>
+#include <selectcommand.h>
+#include <column.h>
#include <sql-modPQ.h>
#include "testCore.h"
+#include <sqlHandleAsVariableType.h>
class StandardMockDatabase : public MockPqDatabase {
public:
@@ -44,17 +47,48 @@ BOOST_AUTO_TEST_CASE( bindAndSend )
auto rw = ds->getWritable();
auto mod = rw->newModifyCommand("INSERT INTO test VALUES(?, ?, ?, ?, ?, ?)");
- mod->bindParamI(0, 12);
- mod->bindParamF(1, 3.14);
- mod->bindParamS(2, "C String");
- mod->bindParamT(3, boost::posix_time::from_time_t(time(NULL)));
+ mod->bindParamI(0, testInt);
+ mod->bindParamF(1, testDouble);
+ mod->bindParamS(2, testString);
+ mod->bindParamT(3, testDateTime);
+ mod->bindParamT(5, testInterval);
mod->bindNull(4);
- mod->bindNull(5);
mod->execute();
delete mod;
ds->commit();
ds->close();
}
+template<typename T>
+void
+assertColumnValueHelper(DB::SelectCommand & sel, unsigned int col, const T & t)
+{
+ HandleAsVariableType h;
+ sel[col].apply(h);
+ BOOST_REQUIRE_EQUAL(t, h.variable.as<T>());
+}
+
+BOOST_AUTO_TEST_CASE( bindAndSelect )
+{
+ RdbmsDataSource * ds = CommonObjects::dataSource<RdbmsDataSource>("pqmock");
+ auto ro = ds->getReadonly();
+
+ auto select = ro->newSelectCommand("SELECT * FROM test WHERE id = ?");
+ select->bindParamI(0, testInt);
+ select->execute();
+ int rows = 0;
+ while (select->fetch()) {
+ assertColumnValueHelper(*select, 0, testInt);
+ assertColumnValueHelper(*select, 1, testDouble);
+ assertColumnValueHelper(*select, 2, testString);
+ assertColumnValueHelper(*select, 3, testDateTime);
+ assertColumnValueHelper(*select, 5, testInterval);
+ rows += 1;
+ }
+ delete select;
+ BOOST_REQUIRE_EQUAL(1, rows);
+ ds->close();
+}
+
BOOST_AUTO_TEST_SUITE_END();