diff options
author | Lionel Elie Mamane <lionel@mamane.lu> | 2015-10-18 18:43:06 +0200 |
---|---|---|
committer | Lionel Elie Mamane <lionel@mamane.lu> | 2015-10-18 16:46:16 +0000 |
commit | b969f364ee773e3d202607f6bcddba2ac85c19c8 (patch) | |
tree | 964e78cdae11d828fe83f8a29f330829b461a4e1 | |
parent | 403e652402bddca925d7163373b9f8ebbac2374e (diff) |
tdf#72205 a VARCHAR and a LONGVARCHAR should compare equal
Change-Id: Id20ceb22bb04570c9c52df4d8233a7afa8ba0168
Reviewed-on: https://gerrit.libreoffice.org/19436
Reviewed-by: Lionel Elie Mamane <lionel@mamane.lu>
Tested-by: Lionel Elie Mamane <lionel@mamane.lu>
-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 3318fc14cdef..1b92f570b9c3 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) { |