summaryrefslogtreecommitdiff
path: root/connectivity
diff options
context:
space:
mode:
authorLionel Elie Mamane <lionel@mamane.lu>2015-10-18 18:43:06 +0200
committerAndras Timar <andras.timar@collabora.com>2015-10-26 16:04:04 +0100
commit3b6947a3d913f664dd2c4b8627d768f5200ea8cb (patch)
treec6ec5948abf0f9d11c7f0fb0f5857155d60dd0d2 /connectivity
parentdfd0e81376312f8da4dcf4bbb7cbbf5ef866486d (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.cxx70
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)
{