diff options
author | Lionel Elie Mamane <lionel@mamane.lu> | 2015-12-13 19:21:30 +0100 |
---|---|---|
committer | Lionel Elie Mamane <lionel@mamane.lu> | 2015-12-13 18:28:33 +0000 |
commit | 0df0ab1bc8530b5bc307e946f35e8f6be883c2d1 (patch) | |
tree | 2f2aa1ed70e619596708d524caf26d959d9d6695 /connectivity/source | |
parent | 76220aafe0bffe20f10b07c725cd096adb56b108 (diff) |
tdf#96461 ODBC SQLBindParameter: correct DecimalDigits for time(date) values
Change-Id: I33c63d2c002d9abcbadb16bcd460996ef3212f4a
Reviewed-on: https://gerrit.libreoffice.org/20684
Reviewed-by: Lionel Elie Mamane <lionel@mamane.lu>
Tested-by: Lionel Elie Mamane <lionel@mamane.lu>
Diffstat (limited to 'connectivity/source')
-rw-r--r-- | connectivity/source/drivers/odbc/OPreparedStatement.cxx | 12 | ||||
-rw-r--r-- | connectivity/source/inc/odbc/OPreparedStatement.hxx | 1 |
2 files changed, 10 insertions, 3 deletions
diff --git a/connectivity/source/drivers/odbc/OPreparedStatement.cxx b/connectivity/source/drivers/odbc/OPreparedStatement.cxx index 2e8f6be05c39..95a9f21d7d4e 100644 --- a/connectivity/source/drivers/odbc/OPreparedStatement.cxx +++ b/connectivity/source/drivers/odbc/OPreparedStatement.cxx @@ -290,6 +290,12 @@ void OPreparedStatement::setParameterPre(sal_Int32 parameterIndex) template <typename T> void OPreparedStatement::setScalarParameter(const sal_Int32 parameterIndex, const sal_Int32 i_nType, const SQLULEN i_nColSize, const T i_Value) { + setScalarParameter(parameterIndex, i_nType, i_nColSize, invalid_scale, i_Value); +} + + +template <typename T> void OPreparedStatement::setScalarParameter(const sal_Int32 parameterIndex, const sal_Int32 i_nType, const SQLULEN i_nColSize, sal_Int32 i_nScale, const T i_Value) +{ ::osl::MutexGuard aGuard( m_aMutex ); setParameterPre(parameterIndex); @@ -298,7 +304,7 @@ template <typename T> void OPreparedStatement::setScalarParameter(const sal_Int3 TnoRef *bindBuf = static_cast< TnoRef* >( allocBindBuf(parameterIndex, sizeof(i_Value)) ); *bindBuf = i_Value; - setParameter(parameterIndex, i_nType, i_nColSize, invalid_scale, bindBuf, sizeof(i_Value), sizeof(i_Value)); + setParameter(parameterIndex, i_nType, i_nColSize, i_nScale, bindBuf, sizeof(i_Value), sizeof(i_Value)); } @@ -442,7 +448,7 @@ void SAL_CALL OPreparedStatement::setTime( sal_Int32 parameterIndex, const css:: else nColSize = 18; TIME_STRUCT x(OTools::TimeToOdbcTime(aVal)); - setScalarParameter<TIME_STRUCT&>(parameterIndex, DataType::TIME, nColSize, x); + setScalarParameter<TIME_STRUCT&>(parameterIndex, DataType::TIME, nColSize, (nColSize == 8)? 0 : nColSize-9, x); } @@ -476,7 +482,7 @@ void SAL_CALL OPreparedStatement::setTimestamp( sal_Int32 parameterIndex, const nColSize = 29; TIMESTAMP_STRUCT x(OTools::DateTimeToTimestamp(aVal)); - setScalarParameter<TIMESTAMP_STRUCT&>(parameterIndex, DataType::TIMESTAMP, nColSize, x); + setScalarParameter<TIMESTAMP_STRUCT&>(parameterIndex, DataType::TIMESTAMP, nColSize, (nColSize <= 19)? 0 : nColSize-20, x); } diff --git a/connectivity/source/inc/odbc/OPreparedStatement.hxx b/connectivity/source/inc/odbc/OPreparedStatement.hxx index f3ccaf7f04da..edd9b320cd88 100644 --- a/connectivity/source/inc/odbc/OPreparedStatement.hxx +++ b/connectivity/source/inc/odbc/OPreparedStatement.hxx @@ -81,6 +81,7 @@ namespace connectivity void initBoundParam () throw(::com::sun::star::sdbc::SQLException); void setParameterPre(sal_Int32 parameterIndex); template <typename T> void setScalarParameter(sal_Int32 parameterIndex, sal_Int32 _nType, SQLULEN _nColumnSize, const T i_Value); + template <typename T> void setScalarParameter(sal_Int32 parameterIndex, sal_Int32 _nType, SQLULEN _nColumnSize, sal_Int32 _nScale, const T i_Value); void setParameter(sal_Int32 parameterIndex, sal_Int32 _nType, SQLULEN _nColumnSize, sal_Int32 _nScale, const void* _pData, SQLULEN _nDataLen, SQLLEN _nDataAllocLen); // Wrappers for special cases void setParameter(sal_Int32 parameterIndex, sal_Int32 _nType, sal_Int16 _nScale, const OUString &_sData); |