summaryrefslogtreecommitdiff
path: root/mysqlc
diff options
context:
space:
mode:
authorTamas Bunth <tamas.bunth@collabora.co.uk>2018-08-08 17:08:22 +0200
committerAndras Timar <andras.timar@collabora.com>2018-08-28 20:27:04 +0200
commit4e8a7a6cbca2ba4119647dfeb59da68bedb3e157 (patch)
treeb82fb491d2fc1e81d02df331e715d5c91470129d /mysqlc
parent1db3337a82320aacbeed87963e2f6d0c84ba408c (diff)
mysqlc: Fix float, double and numeric types
Change-Id: I9d0b989735e736c9c35d8acf4ea1b072eddf7437 Reviewed-on: https://gerrit.libreoffice.org/58744 Tested-by: Jenkins Reviewed-by: Tamás Bunth <btomi96@gmail.com> Reviewed-on: https://gerrit.libreoffice.org/59712 Reviewed-by: Andras Timar <andras.timar@collabora.com> Tested-by: Andras Timar <andras.timar@collabora.com>
Diffstat (limited to 'mysqlc')
-rw-r--r--mysqlc/source/mysqlc_prepared_resultset.cxx3
-rw-r--r--mysqlc/source/mysqlc_preparedstatement.cxx21
2 files changed, 14 insertions, 10 deletions
diff --git a/mysqlc/source/mysqlc_prepared_resultset.cxx b/mysqlc/source/mysqlc_prepared_resultset.cxx
index 3bc6b9424752..6ef50bea7116 100644
--- a/mysqlc/source/mysqlc_prepared_resultset.cxx
+++ b/mysqlc/source/mysqlc_prepared_resultset.cxx
@@ -239,6 +239,9 @@ double SAL_CALL OPreparedResultSet::getDouble(sal_Int32 column)
}
m_bWasNull = false;
+ if (m_aFields[column - 1].type == MYSQL_TYPE_FLOAT)
+ return *reinterpret_cast<float*>(m_aData[column - 1].buffer);
+
return *reinterpret_cast<double*>(m_aData[column - 1].buffer);
}
diff --git a/mysqlc/source/mysqlc_preparedstatement.cxx b/mysqlc/source/mysqlc_preparedstatement.cxx
index 88b899a55814..9c6da76913e6 100644
--- a/mysqlc/source/mysqlc_preparedstatement.cxx
+++ b/mysqlc/source/mysqlc_preparedstatement.cxx
@@ -439,23 +439,24 @@ void SAL_CALL OPreparedStatement::setObjectWithInfo(sal_Int32 parameterIndex, co
case DataType::DECIMAL:
case DataType::NUMERIC:
{
- double nValue(0);
+ double nValue(0.0);
+ rtl::OUString sValue;
if ( value >>= nValue )
{
setDouble( parameterIndex, nValue );
break;
}
- else
+ else if ( value >>= sValue )
{
- rtl::OUString sValue;
- if( value >>= sValue )
- {
- m_binds[nIndex].buffer_type = MYSQL_TYPE_NEWDECIMAL;
- mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, sValue.getStr(), MYSQL_TYPE_LONGLONG, sValue.getLength());
- m_bindMetas[nIndex].is_null = 0;
- }
-
+ rtl::OString sAscii = rtl::OUStringToOString(sValue, getOwnConnection()->getConnectionEncoding());
+ std::stringstream sStream{sAscii.getStr()};
+ sStream >> nValue;
+ m_binds[nIndex].buffer_type = MYSQL_TYPE_DOUBLE;
+ mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, &nValue, MYSQL_TYPE_DOUBLE, sValue.getLength());
+ m_bindMetas[nIndex].is_null = 0;
+ break;
}
+
#if defined __GNUC__ && __GNUC__ >= 7
[[fallthrough]];
#else