diff options
author | Lionel Elie Mamane <lionel@mamane.lu> | 2015-10-18 18:43:06 +0200 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2015-10-26 16:04:04 +0100 |
commit | 3b6947a3d913f664dd2c4b8627d768f5200ea8cb (patch) | |
tree | c6ec5948abf0f9d11c7f0fb0f5857155d60dd0d2 /connectivity | |
parent | dfd0e81376312f8da4dcf4bbb7cbbf5ef866486d (diff) |
tdf#72205 a VARCHAR and a LONGVARCHAR should compare equal
Change-Id: Id20ceb22bb04570c9c52df4d8233a7afa8ba0168
Reviewed-on: https://gerrit.libreoffice.org/19438
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Eike Rathke <erack@redhat.com>
(cherry picked from commit 0fff374fc0e9d3ea76d0aa0a0466467078f0519d)
Diffstat (limited to 'connectivity')
-rw-r--r-- | connectivity/source/commontools/FValue.cxx | 70 |
1 files changed, 69 insertions, 1 deletions
diff --git a/connectivity/source/commontools/FValue.cxx b/connectivity/source/commontools/FValue.cxx index 16402507eaba..0cad2141e5c9 100644 --- a/connectivity/source/commontools/FValue.cxx +++ b/connectivity/source/commontools/FValue.cxx @@ -103,6 +103,74 @@ namespace { } return bIsCompatible; } + + static bool isStorageComparable(sal_Int32 _eType1, sal_Int32 _eType2) + { + bool bIsComparable = true; + + if (_eType1 != _eType2) + { + SAL_INFO( "connectivity.commontools", "ORowSetValue::isStorageCompatible _eType1 != _eType2" ); + switch (_eType1) + { + case DataType::CHAR: + case DataType::VARCHAR: + case DataType::LONGVARCHAR: + bIsComparable = (DataType::CHAR == _eType2) + || (DataType::VARCHAR == _eType2) + || (DataType::LONGVARCHAR == _eType2); + break; + + case DataType::DECIMAL: + case DataType::NUMERIC: + bIsComparable = (DataType::DECIMAL == _eType2) + || (DataType::NUMERIC == _eType2); + break; + + case DataType::DOUBLE: + case DataType::REAL: + bIsComparable = (DataType::DOUBLE == _eType2) + || (DataType::REAL == _eType2); + break; + + case DataType::BINARY: + case DataType::VARBINARY: + case DataType::LONGVARBINARY: + bIsComparable = (DataType::BINARY == _eType2) + || (DataType::VARBINARY == _eType2) + || (DataType::LONGVARBINARY == _eType2); + break; + + case DataType::INTEGER: + bIsComparable = (DataType::SMALLINT == _eType2) + || (DataType::TINYINT == _eType2) + || (DataType::BIT == _eType2) + || (DataType::BOOLEAN == _eType2); + break; + case DataType::SMALLINT: + bIsComparable = (DataType::TINYINT == _eType2) + || (DataType::BIT == _eType2) + || (DataType::BOOLEAN == _eType2); + break; + case DataType::TINYINT: + bIsComparable = (DataType::BIT == _eType2) + || (DataType::BOOLEAN == _eType2); + break; + + case DataType::BLOB: + case DataType::CLOB: + case DataType::OBJECT: + bIsComparable = (DataType::BLOB == _eType2) + || (DataType::CLOB == _eType2) + || (DataType::OBJECT == _eType2); + break; + + default: + bIsComparable = false; + } + } + return bIsComparable; + } } @@ -775,7 +843,7 @@ bool ORowSetValue::operator==(const ORowSetValue& _rRH) const if(m_bNull && _rRH.isNull()) return true; - if ( m_eTypeKind != _rRH.m_eTypeKind ) + if ( !isStorageComparable(m_eTypeKind, _rRH.m_eTypeKind )) { switch(m_eTypeKind) { |