summaryrefslogtreecommitdiff
path: root/dbaccess
diff options
context:
space:
mode:
authorLionel Elie Mamane <lionel@mamane.lu>2012-01-16 19:38:01 +0100
committerLionel Elie Mamane <lionel@mamane.lu>2012-01-18 13:16:32 +0100
commitee1510922d7d0c5b8e111437d933078a62eda4b4 (patch)
treeb68f8e8f24111d70e4bdf1daeb60a18ff20312a7 /dbaccess
parent2f1fa4abea5035cdf83331dd18b86b6fd6393d88 (diff)
fdo#44813: don't replace NULLs given by the database by type-default values
It makes no sense, because non-nullable columns can have NULL value. E.g. in "foo LEFT JOIN bar ON condition", the non-nullable columns of "bar" when it has no row matching "condition". Even when we are about to insert/update a row, we should not put a hard-coded value (that just happens to be the one constructed by the C++ default constructor for that type) in non-nullable columns: there is no guarantee that this value makes sense in that database's context. The database may or may not have a default value set for that column. If it has, we should leave it up to the database to set it automatically. If it has not, an error *is* the right reaction. Another place where this substitution does damage is when we refresh a row. We use the values we have read from the primary key to select the row again. So we should not mangle those, else the select returns no row and we mistakingly think the row has been deleted.
Diffstat (limited to 'dbaccess')
-rw-r--r--dbaccess/source/core/api/CacheSet.cxx2
-rw-r--r--dbaccess/source/core/api/KeySet.cxx10
-rw-r--r--dbaccess/source/core/api/OptimisticSet.cxx2
3 files changed, 7 insertions, 7 deletions
diff --git a/dbaccess/source/core/api/CacheSet.cxx b/dbaccess/source/core/api/CacheSet.cxx
index 6f065d71735e..0b46c7af8d90 100644
--- a/dbaccess/source/core/api/CacheSet.cxx
+++ b/dbaccess/source/core/api/CacheSet.cxx
@@ -427,7 +427,7 @@ void OCacheSet::fillValueRow(ORowSetRow& _rRow,sal_Int32 _nPosition)
for(sal_Int32 i=1;aIter != aEnd;++aIter,++i)
{
aIter->setSigned(m_aSignedFlags[i-1]);
- aIter->fill(i,m_aColumnTypes[i-1],m_aNullable[i-1],this);
+ aIter->fill(i, m_aColumnTypes[i-1], this);
}
}
diff --git a/dbaccess/source/core/api/KeySet.cxx b/dbaccess/source/core/api/KeySet.cxx
index 92d0d502a591..17789ff2a119 100644
--- a/dbaccess/source/core/api/KeySet.cxx
+++ b/dbaccess/source/core/api/KeySet.cxx
@@ -762,7 +762,7 @@ void OKeySet::executeInsert( const ORowSetRow& _rInsertRow,const ::rtl::OUString
#endif
SelectColumnsMetaData::iterator aFind = m_pKeyColumnNames->find(*aAutoIter);
if ( aFind != m_pKeyColumnNames->end() )
- (_rInsertRow->get())[aFind->second.nPosition].fill(i,aFind->second.nType,aFind->second.bNullable,xRow);
+ (_rInsertRow->get())[aFind->second.nPosition].fill(i, aFind->second.nType, xRow);
}
bAutoValuesFetched = sal_True;
}
@@ -822,7 +822,7 @@ void OKeySet::executeInsert( const ORowSetRow& _rInsertRow,const ::rtl::OUString
// we will only fetch values which are keycolumns
SelectColumnsMetaData::iterator aFind = m_pKeyColumnNames->find(*aAutoIter);
if ( aFind != aEnd )
- (_rInsertRow->get())[aFind->second.nPosition].fill(i,aFind->second.nType,aFind->second.bNullable,xRow);
+ (_rInsertRow->get())[aFind->second.nPosition].fill(i, aFind->second.nType, xRow);
}
}
::comphelper::disposeComponent(xStatement);
@@ -1376,13 +1376,13 @@ sal_Bool OKeySet::fetchRow()
{
ORowSetRow aKeyRow = new connectivity::ORowVector< ORowSetValue >((*m_pKeyColumnNames).size() + m_pForeignColumnNames->size());
connectivity::ORowVector< ORowSetValue >::Vector::iterator aIter = aKeyRow->get().begin();
- // first fetch the values needed for the key column
+ // first fetch the values needed for the key columns
SelectColumnsMetaData::const_iterator aPosIter = (*m_pKeyColumnNames).begin();
SelectColumnsMetaData::const_iterator aPosEnd = (*m_pKeyColumnNames).end();
for(;aPosIter != aPosEnd;++aPosIter,++aIter)
{
const SelectColumnDescription& rColDesc = aPosIter->second;
- aIter->fill(rColDesc.nPosition,rColDesc.nType,rColDesc.bNullable,m_xDriverRow);
+ aIter->fill(rColDesc.nPosition, rColDesc.nType, m_xDriverRow);
}
// now fetch the values from the missing columns from other tables
aPosIter = (*m_pForeignColumnNames).begin();
@@ -1390,7 +1390,7 @@ sal_Bool OKeySet::fetchRow()
for(;aPosIter != aPosEnd;++aPosIter,++aIter)
{
const SelectColumnDescription& rColDesc = aPosIter->second;
- aIter->fill(rColDesc.nPosition,rColDesc.nType,rColDesc.bNullable,m_xDriverRow);
+ aIter->fill(rColDesc.nPosition, rColDesc.nType, m_xDriverRow);
}
m_aKeyIter = m_aKeyMap.insert(OKeySetMatrix::value_type(m_aKeyMap.rbegin()->first+1,OKeySetValue(aKeyRow,::std::pair<sal_Int32,Reference<XRow> >(0,NULL)))).first;
}
diff --git a/dbaccess/source/core/api/OptimisticSet.cxx b/dbaccess/source/core/api/OptimisticSet.cxx
index 1d1141483b7a..f7b97edc18e0 100644
--- a/dbaccess/source/core/api/OptimisticSet.cxx
+++ b/dbaccess/source/core/api/OptimisticSet.cxx
@@ -725,7 +725,7 @@ void OptimisticSet::fillMissingValues(ORowSetValueVector::Vector& io_aRow) const
{
if ( aColIter->second.sTableName == aSqlIter->first )
{
- io_aRow[aColIter->second.nPosition].fill(i++,aColIter->second.nType,aColIter->second.bNullable,xRow);
+ io_aRow[aColIter->second.nPosition].fill(i++, aColIter->second.nType, xRow);
io_aRow[aColIter->second.nPosition].setModified();
}
}