From ae321006e7ccd4db92beed2d0e525d20cee922fa Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sun, 24 Feb 2019 14:15:34 +0000 Subject: Update to new libdbpp interface --- libodbcpp/Jamfile.jam | 1 - libodbcpp/odbc-column.cpp | 2 +- libodbcpp/odbc-command.h | 1 + libodbcpp/odbc-mock.cpp | 2 +- libodbcpp/odbc-mock.h | 4 ++-- libodbcpp/odbc-param.cpp | 18 ++++++++++++++++-- libodbcpp/odbc-param.h | 11 ++++++----- libodbcpp/odbc-selectcommand.cpp | 20 ++++++++++---------- libodbcpp/odbc-selectcommand.h | 2 +- libodbcpp/unittests/Jamfile.jam | 6 ++---- libodbcpp/unittests/testodbc.cpp | 2 +- 11 files changed, 41 insertions(+), 28 deletions(-) (limited to 'libodbcpp') diff --git a/libodbcpp/Jamfile.jam b/libodbcpp/Jamfile.jam index af25db4..2b54e33 100644 --- a/libodbcpp/Jamfile.jam +++ b/libodbcpp/Jamfile.jam @@ -13,7 +13,6 @@ lib dbpp-odbc : adhocutil dbppcore boost_date_time - boost_system : : . ..//glibmm diff --git a/libodbcpp/odbc-column.cpp b/libodbcpp/odbc-column.cpp index 18926f5..f51aad5 100644 --- a/libodbcpp/odbc-column.cpp +++ b/libodbcpp/odbc-column.cpp @@ -82,7 +82,7 @@ void ODBC::CharArrayColumn::apply(DB::HandleField & h) const { if (isNull()) return h.null(); - h.string(&data.front(), bindLen); + h.string({ data.data(), (std::size_t)bindLen }); } void ODBC::TimeStampColumn::apply(DB::HandleField & h) const diff --git a/libodbcpp/odbc-command.h b/libodbcpp/odbc-command.h index ab3f65b..a3a4338 100644 --- a/libodbcpp/odbc-command.h +++ b/libodbcpp/odbc-command.h @@ -27,6 +27,7 @@ namespace ODBC { void bindParamF(unsigned int i, float val) override; void bindParamS(unsigned int i, const Glib::ustring &) override; + void bindParamS(unsigned int i, const std::string_view &) override; void bindParamT(unsigned int i, const boost::posix_time::time_duration &) override; void bindParamT(unsigned int i, const boost::posix_time::ptime &) override; diff --git a/libodbcpp/odbc-mock.cpp b/libodbcpp/odbc-mock.cpp index cf28570..f8386e7 100644 --- a/libodbcpp/odbc-mock.cpp +++ b/libodbcpp/odbc-mock.cpp @@ -4,7 +4,7 @@ namespace ODBC { -Mock::Mock(const std::string & b, const std::string & masterdb, const std::string & name, const std::vector & ss) : +Mock::Mock(const std::string & b, const std::string & masterdb, const std::string & name, const std::vector & ss) : MockServerDatabase(b + ";" + masterdb, name, "odbc"), base(b) { diff --git a/libodbcpp/odbc-mock.h b/libodbcpp/odbc-mock.h index 442e3d7..8fc2974 100644 --- a/libodbcpp/odbc-mock.h +++ b/libodbcpp/odbc-mock.h @@ -2,14 +2,14 @@ #define MOCKODBCDATASOURCE_H #include -#include +#include #include namespace ODBC { class DLL_PUBLIC Mock : public DB::MockServerDatabase { public: - Mock(const std::string & base, const std::string & master, const std::string & name, const std::vector & ss); + Mock(const std::string & base, const std::string & master, const std::string & name, const std::vector & ss); ~Mock(); const std::string base; diff --git a/libodbcpp/odbc-param.cpp b/libodbcpp/odbc-param.cpp index f165d60..120703e 100644 --- a/libodbcpp/odbc-param.cpp +++ b/libodbcpp/odbc-param.cpp @@ -74,7 +74,8 @@ SIMPLEBINDER(bool, BooleanParam, B); SIMPLEBINDER(double, FloatingPointParam, F); SIMPLEBINDER(float, FloatingPointParam, F); -SIMPLEBINDER(const Glib::ustring &, GlibUstringParam, S); +SIMPLEBINDER(const Glib::ustring &, StdStringParam, S); +SIMPLEBINDER(const std::string_view &, StdStringParam, S); SIMPLEBINDER(const boost::posix_time::ptime &, TimeStampParam, T); SIMPLEBINDER(const boost::posix_time::time_duration &, IntervalParam, T); @@ -86,7 +87,7 @@ ODBC::Command::bindNull(unsigned int i) } void -ODBC::GlibUstringParam::operator=(Glib::ustring const & d) +ODBC::StdStringParam::operator=(Glib::ustring const & d) { const char * addr = data.data(); data = d; @@ -98,6 +99,19 @@ ODBC::GlibUstringParam::operator=(Glib::ustring const & d) } } +void +ODBC::StdStringParam::operator=(std::string_view const & d) +{ + const char * addr = data.data(); + data = d; + bindLen = d.length(); + paramBound &= (addr == data.data()); + if (!paramBound) { + paramBound = false; + bind(); + } +} + void ODBC::TimeStampParam::operator=(const boost::posix_time::ptime & d) { diff --git a/libodbcpp/odbc-param.h b/libodbcpp/odbc-param.h index 96ab7f3..0981fe9 100644 --- a/libodbcpp/odbc-param.h +++ b/libodbcpp/odbc-param.h @@ -80,18 +80,19 @@ namespace ODBC { protected: SQLDOUBLE data; }; - class GlibUstringParam : public Param { + class StdStringParam : public Param { public: - GlibUstringParam() : Param() { } - GlibUstringParam(Command * c, unsigned int i) : Param(c, i) { bindLen = size(); } + StdStringParam() : Param() { } + StdStringParam(Command * c, unsigned int i) : Param(c, i) { bindLen = size(); } virtual SQLSMALLINT ctype() const override { return SQL_C_CHAR; } virtual SQLSMALLINT stype() const override { return SQL_CHAR; } - virtual SQLULEN size() const override { return data.bytes(); } + virtual SQLULEN size() const override { return data.length(); } virtual SQLINTEGER dp() const override { return 0; } virtual const void * dataAddress() const override { return data.data(); } + void operator=(const std::string_view & d); void operator=(const Glib::ustring & d); protected: - Glib::ustring data; + std::string data; }; class IntervalParam : public Param { public: diff --git a/libodbcpp/odbc-selectcommand.cpp b/libodbcpp/odbc-selectcommand.cpp index 5e26053..01da513 100644 --- a/libodbcpp/odbc-selectcommand.cpp +++ b/libodbcpp/odbc-selectcommand.cpp @@ -50,7 +50,7 @@ ODBC::SelectCommand::fetch(SQLSMALLINT orientation, SQLLEN offset) fprintf(stderr, "truncation\n"); } } - // fall-through + [[ fallthrough ]]; case SQL_SUCCESS: { bool resized = false; @@ -88,20 +88,20 @@ ODBC::SelectCommand::execute() throw Error(rc, SQL_HANDLE_STMT, hStmt); } Glib::ustring colName((const char *)_colName, nameLen); - DB::ColumnPtr ncol; + DB::Column * ncol; switch (bindType) { case SQL_DECIMAL: case SQL_NUMERIC: case SQL_REAL: case SQL_FLOAT: case SQL_DOUBLE: - ncol = insertColumn(std::make_shared(this, colName, col)); + ncol = insertColumn(std::make_unique(this, colName, col)).get(); break; case SQL_SMALLINT: case SQL_INTEGER: case SQL_TINYINT: case SQL_BIGINT: - ncol = insertColumn(std::make_shared(this, colName, col)); + ncol = insertColumn(std::make_unique(this, colName, col)).get(); break; case SQL_TYPE_TIME: case SQL_INTERVAL_YEAR: @@ -117,13 +117,13 @@ ODBC::SelectCommand::execute() case SQL_INTERVAL_HOUR_TO_MINUTE: case SQL_INTERVAL_HOUR_TO_SECOND: case SQL_INTERVAL_MINUTE_TO_SECOND: - ncol = insertColumn(std::make_shared(this, colName, col)); + ncol = insertColumn(std::make_unique(this, colName, col)).get(); break; case SQL_TIMESTAMP: case SQL_DATETIME: case SQL_TYPE_DATE: case SQL_TYPE_TIMESTAMP: - ncol = insertColumn(std::make_shared(this, colName, col)); + ncol = insertColumn(std::make_unique(this, colName, col)).get(); break; case SQL_UNKNOWN_TYPE: throw DB::ColumnTypeNotSupported(); @@ -133,12 +133,12 @@ ODBC::SelectCommand::execute() throw Error(rc, SQL_HANDLE_STMT, hStmt); } bindSize = octetSize; - auto lc = std::make_shared(this, colName, col, bindSize); - ncol = insertColumn(lc); - largeColumns.insert(lc); + auto lc = std::make_unique(this, colName, col, bindSize); + largeColumns.insert(lc.get()); + ncol = insertColumn(std::move(lc)).get(); break; }; - std::dynamic_pointer_cast(ncol)->bind(); + dynamic_cast(ncol)->bind(); } } diff --git a/libodbcpp/odbc-selectcommand.h b/libodbcpp/odbc-selectcommand.h index 1c71d57..efa584e 100644 --- a/libodbcpp/odbc-selectcommand.h +++ b/libodbcpp/odbc-selectcommand.h @@ -16,7 +16,7 @@ namespace ODBC { private: bool fetch(SQLSMALLINT orientation = SQL_FETCH_NEXT, SQLLEN offset = 0); typedef std::shared_ptr ColumnPtr; - typedef std::set Columns; + typedef std::set Columns; Columns largeColumns; }; } diff --git a/libodbcpp/unittests/Jamfile.jam b/libodbcpp/unittests/Jamfile.jam index 523c64a..1d9233d 100644 --- a/libodbcpp/unittests/Jamfile.jam +++ b/libodbcpp/unittests/Jamfile.jam @@ -3,8 +3,7 @@ import testing ; path-constant me : . ; lib boost_utf : : boost_unit_test_framework ; -lib boost_filesystem ; -lib boost_system ; +lib stdc++fs ; lib dbpptestcore : : : : /usr/include/dbpp ; run @@ -16,8 +15,7 @@ run ..//adhocutil dbpptestcore boost_utf - boost_filesystem - boost_system + stdc++fs : testodbc ; diff --git a/libodbcpp/unittests/testodbc.cpp b/libodbcpp/unittests/testodbc.cpp index 9a810c7..d0373a7 100644 --- a/libodbcpp/unittests/testodbc.cpp +++ b/libodbcpp/unittests/testodbc.cpp @@ -83,7 +83,7 @@ BOOST_AUTO_TEST_CASE( bindAndSelectOther ) while (select->fetch()) { assertColumnValueHelper(*select, 0, 4); assertColumnValueHelper(*select, 1, 123.45); - assertColumnValueHelper(*select, 2, std::string("some text")); + assertColumnValueHelper(*select, 2, std::string_view("some text")); // assertColumnValueHelper(*select, 3, true); assertColumnValueHelper(*select, 4, boost::posix_time::ptime_from_tm({ 3, 6, 23, 27, 3, 115, 0, 0, 0, 0, 0})); rows += 1; -- cgit v1.2.3