summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLionel Elie Mamane <lionel@mamane.lu>2015-12-13 19:21:30 +0100
committerLionel Elie Mamane <lionel@mamane.lu>2015-12-13 18:30:13 +0000
commite95e07ef3b125688d4dce47f382533a1db50479f (patch)
tree697a7da1aef8162e4c23eb69f95ba71680026072
parent455e35dfc89119dc93aecaee1447b2b27ce27baf (diff)
tdf#96461 ODBC SQLBindParameter: correct DecimalDigits for time(date) values
Change-Id: I33c63d2c002d9abcbadb16bcd460996ef3212f4a Reviewed-on: https://gerrit.libreoffice.org/20686 Reviewed-by: Lionel Elie Mamane <lionel@mamane.lu> Tested-by: Lionel Elie Mamane <lionel@mamane.lu>
-rw-r--r--connectivity/source/drivers/odbc/OPreparedStatement.cxx12
-rw-r--r--connectivity/source/inc/odbc/OPreparedStatement.hxx1
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);