# HG changeset patch # User František Kučera # Date 1603666835 -3600 # Node ID cc6ffeba0fe506bed330d1f965170a1335cc5cbf # Parent 656b5aecd4a274d211b16cda30768ad688b9c8a5 fix: support bigger numbers, SQL_BIGINT there was an overflow and some values resulted into negative ones. TODO: there is still a problem with big negative numbers – this needs to be addressed in relpipe-lib-writer/relpipe-lib-reader diff -r 656b5aecd4a2 -r cc6ffeba0fe5 src/PreparedStatement.cpp --- a/src/PreparedStatement.cpp Sat Oct 24 00:08:19 2020 +0200 +++ b/src/PreparedStatement.cpp Mon Oct 26 00:00:35 2020 +0100 @@ -63,8 +63,8 @@ } void PreparedStatement::setInteger(int parameterNumber, relpipe::reader::integer_t value) { - integerParameters.emplace_back(value); - SQLRETURN result = SQLBindParameter(statement, parameterNumber, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &integerParameters.back(), 0, nullptr); + integerParameters.emplace_back(std::to_string(value)); + SQLRETURN result = SQLBindParameter(statement, parameterNumber, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_BIGINT, 0, 0, (void *) integerParameters.back().c_str(), 0, nullptr); if (OdbcCommon::isNotSuccessful(result)) throw SqlException(L"Unable to set integer parameter in prepared statement", result, SQL_HANDLE_STMT, statement); } diff -r 656b5aecd4a2 -r cc6ffeba0fe5 src/PreparedStatement.h --- a/src/PreparedStatement.h Sat Oct 24 00:08:19 2020 +0200 +++ b/src/PreparedStatement.h Mon Oct 26 00:00:35 2020 +0100 @@ -35,7 +35,7 @@ void* statement; std::wstring_convert> convertor; // TODO: support also other encodings std::list booleanParameters; - std::list integerParameters; + std::list integerParameters; std::list> stringParameters; public: PreparedStatement(void* stmt); diff -r 656b5aecd4a2 -r cc6ffeba0fe5 src/ResultSet.cpp --- a/src/ResultSet.cpp Sat Oct 24 00:08:19 2020 +0200 +++ b/src/ResultSet.cpp Mon Oct 26 00:00:35 2020 +0100 @@ -55,7 +55,7 @@ // TODO: get integer directly from SQLGetData() without string conversion relpipe::writer::string_t s = getString(columnNumber, isNull); if (isNull && *isNull) return 0; - else return std::stol(s); + else return std::stoll(s); } relpipe::writer::string_t ResultSet::getString(unsigned short columnNumber, bool* isNull) {