summaryrefslogtreecommitdiff
path: root/connectivity/source/commontools
diff options
context:
space:
mode:
authorFrank Schoenheit [fs] <frank.schoenheit@oracle.com>2010-11-23 21:55:13 +0100
committerFrank Schoenheit [fs] <frank.schoenheit@oracle.com>2010-11-23 21:55:13 +0100
commit9e9e1181d4bda2f836cd9c23832142325d3229c1 (patch)
treedc9a559956fac6b3500e19798aff89014639bde3 /connectivity/source/commontools
parent60336fbefa1b29b0bfa8d89eec240a483b438c06 (diff)
dba34b: #i115250# DBTypeConversion::getValue: do not use the target format to determine how to obtain the column value, instead, use the column type
Diffstat (limited to 'connectivity/source/commontools')
-rw-r--r--connectivity/source/commontools/DateConversion.cxx63
1 files changed, 32 insertions, 31 deletions
diff --git a/connectivity/source/commontools/DateConversion.cxx b/connectivity/source/commontools/DateConversion.cxx
index 3999494c3d39..a701b3b01570 100644
--- a/connectivity/source/commontools/DateConversion.cxx
+++ b/connectivity/source/commontools/DateConversion.cxx
@@ -43,6 +43,7 @@
#include "diagnose_ex.h"
#include <comphelper/numbers.hxx>
#include <rtl/ustrbuf.hxx>
+#include <tools/diagnose_ex.h>
using namespace ::connectivity;
@@ -365,46 +366,49 @@ void DBTypeConversion::setValue(const Reference<XColumnUpdate>& xVariant,
}
//------------------------------------------------------------------------------
-double DBTypeConversion::getValue(const Reference<XColumn>& xVariant,
- const Date& rNullDate,
- sal_Int16 nKeyType)
+double DBTypeConversion::getValue( const Reference< XColumn >& i_column, const Date& i_relativeToNullDate )
{
try
{
- switch (nKeyType & ~NumberFormat::DEFINED)
+ const Reference< XPropertySet > xProp( i_column, UNO_QUERY_THROW );
+
+ const sal_Int32 nColumnType = ::comphelper::getINT32( xProp->getPropertyValue( OMetaConnection::getPropMap().getNameByIndex( PROPERTY_ID_TYPE ) ) );
+ switch ( nColumnType )
{
- case NumberFormat::DATE:
- return toDouble( xVariant->getDate(), rNullDate);
- case NumberFormat::DATETIME:
- return toDouble(xVariant->getTimestamp(),rNullDate);
- case NumberFormat::TIME:
- return toDouble(xVariant->getTime());
- default:
+ case DataType::DATE:
+ return toDouble( i_column->getDate(), i_relativeToNullDate );
+
+ case DataType::TIME:
+ return toDouble( i_column->getTime() );
+
+ case DataType::TIMESTAMP:
+ return toDouble( i_column->getTimestamp(), i_relativeToNullDate );
+
+ default:
{
- Reference<XPropertySet> xProp(xVariant,UNO_QUERY);
- if ( xProp.is()
- && xProp->getPropertySetInfo()->hasPropertyByName(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISSIGNED))
- && !::comphelper::getBOOL(xProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISSIGNED))) )
+ sal_Bool bIsSigned = sal_True;
+ OSL_VERIFY( xProp->getPropertyValue( OMetaConnection::getPropMap().getNameByIndex( PROPERTY_ID_ISSIGNED ) ) >>= bIsSigned );
+ if ( !bIsSigned )
{
- switch (::comphelper::getINT32(xProp->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE))))
+ switch ( nColumnType)
{
case DataType::TINYINT:
- return static_cast<double>(static_cast<sal_uInt8>(xVariant->getByte()));
+ return static_cast<double>(static_cast<sal_uInt8>(i_column->getByte()));
case DataType::SMALLINT:
- return static_cast<double>(static_cast<sal_uInt16>(xVariant->getShort()));
+ return static_cast<double>(static_cast<sal_uInt16>(i_column->getShort()));
case DataType::INTEGER:
- return static_cast<double>(static_cast<sal_uInt32>(xVariant->getInt()));
+ return static_cast<double>(static_cast<sal_uInt32>(i_column->getInt()));
case DataType::BIGINT:
- return static_cast<double>(static_cast<sal_uInt64>(xVariant->getLong()));
+ return static_cast<double>(static_cast<sal_uInt64>(i_column->getLong()));
}
}
-
- return xVariant->getDouble();
}
+ return i_column->getDouble();
}
}
- catch(const Exception& )
+ catch( const Exception& )
{
+ DBG_UNHANDLED_EXCEPTION();
return 0.0;
}
}
@@ -462,23 +466,20 @@ double DBTypeConversion::getValue(const Reference<XColumn>& xVariant,
case NumberFormat::DATETIME:
{
// get a value which represents the given date, relative to the given null date
- double fValue = getValue(xVariant, rNullDate, nKeyType);
+ double fValue = getValue( xVariant, rNullDate );
if ( !xVariant->wasNull() )
{
// get the null date of the formatter
Date aFormatterNullDate( rNullDate );
try
{
- Reference< XPropertySet > xFormatterSettings;
- Reference< XNumberFormatsSupplier > xSupplier( xFormatter->getNumberFormatsSupplier( ) );
- if ( xSupplier.is() )
- xFormatterSettings = xSupplier->getNumberFormatSettings();
- if ( xFormatterSettings.is() )
- xFormatterSettings->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "NullDate" ) ) ) >>= aFormatterNullDate;
+ Reference< XNumberFormatsSupplier > xSupplier( xFormatter->getNumberFormatsSupplier(), UNO_SET_THROW );
+ Reference< XPropertySet > xFormatterSettings( xSupplier->getNumberFormatSettings(), UNO_SET_THROW );
+ OSL_VERIFY( xFormatterSettings->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "NullDate" ) ) ) >>= aFormatterNullDate );
}
catch( const Exception& )
{
- OSL_ENSURE( sal_False, "DBTypeConversion::getFormattedValue: caught an exception while retrieving the formatter's NullDate!" );
+ DBG_UNHANDLED_EXCEPTION();
}
// get a value which represents the given date, relative to the null date of the formatter
fValue -= toDays( rNullDate, aFormatterNullDate );