INTEGRATION: CWS oj07 (1.32.90); FILE MERGED

2004/01/28 09:22:37 oj 1.32.90.2: RESYNC: (1.32-1.33); FILE MERGED
2003/08/27 10:08:52 oj 1.32.90.1: #i18583# adjust value when it is unsigned
This commit is contained in:
Rüdiger Timm
2004-03-02 11:40:41 +00:00
parent 162b2cc71a
commit c69e2c6e8b

View File

@@ -2,9 +2,9 @@
*
* $RCSfile: CacheSet.cxx,v $
*
* $Revision: 1.33 $
* $Revision: 1.34 $
*
* last change: $Author: rt $ $Date: 2003-12-01 10:18:00 $
* last change: $Author: rt $ $Date: 2004-03-02 12:40:41 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -141,6 +141,16 @@ void OCacheSet::construct( const Reference< XResultSet>& _xDriverSet)
m_xDriverSet = _xDriverSet;
m_xDriverRow = Reference<XRow>(_xDriverSet,UNO_QUERY);
m_xSetMetaData = Reference<XResultSetMetaDataSupplier>(_xDriverSet,UNO_QUERY)->getMetaData();
if ( m_xSetMetaData.is() )
{
sal_Int32 nCount = m_xSetMetaData->getColumnCount();
m_aSignedFlags.realloc(nCount);
sal_Bool* pBegin = m_aSignedFlags.getArray();
for (sal_Int32 i=1; i <= nCount; ++i,++pBegin)
{
*pBegin = m_xSetMetaData->isSigned(i);
}
}
Reference< XStatement> xStmt(m_xDriverSet->getStatement(),UNO_QUERY);
if(xStmt.is())
m_xConnection = xStmt->getConnection();
@@ -511,19 +521,31 @@ void OCacheSet::setParameter(sal_Int32 nPos,Reference< XParameters > _xParameter
_xParameter->setString(nPos,_rValue);
break;
case DataType::BIGINT:
_xParameter->setLong(nPos,_rValue);
if ( _rValue.isSigned() )
_xParameter->setLong(nPos,_rValue);
else
_xParameter->setString(nPos,_rValue);
break;
case DataType::BIT:
_xParameter->setBoolean(nPos,_rValue);
break;
case DataType::TINYINT:
_xParameter->setByte(nPos,_rValue);
if ( _rValue.isSigned() )
_xParameter->setByte(nPos,_rValue);
else
_xParameter->setShort(nPos,_rValue);
break;
case DataType::SMALLINT:
_xParameter->setShort(nPos,_rValue);
if ( _rValue.isSigned() )
_xParameter->setShort(nPos,_rValue);
else
_xParameter->setInt(nPos,_rValue);
break;
case DataType::INTEGER:
_xParameter->setInt(nPos,_rValue);
if ( _rValue.isSigned() )
_xParameter->setInt(nPos,_rValue);
else
_xParameter->setLong(nPos,_rValue);
break;
case DataType::FLOAT:
_xParameter->setFloat(nPos,_rValue);
@@ -577,70 +599,8 @@ void OCacheSet::fillValueRow(ORowSetRow& _rRow,sal_Int32 _nPosition)
for(sal_Int32 i=1;aIter != _rRow->end();++aIter,++i)
{
sal_Int32 nType = m_xSetMetaData->getColumnType(i);
sal_Bool bReadData = sal_True;
switch(nType)
{
case DataType::CHAR:
case DataType::VARCHAR:
case DataType::DECIMAL:
case DataType::NUMERIC:
case DataType::LONGVARCHAR:
(*aIter) = getString(i);
break;
case DataType::BIGINT:
(*aIter) = getLong(i);
break;
case DataType::FLOAT:
(*aIter) = getFloat(i);
break;
case DataType::DOUBLE:
case DataType::REAL:
(*aIter) = getDouble(i);
break;
case DataType::DATE:
(*aIter) = getDate(i);
break;
case DataType::TIME:
(*aIter) = getTime(i);
break;
case DataType::TIMESTAMP:
(*aIter) = getTimestamp(i);
break;
case DataType::BINARY:
case DataType::VARBINARY:
case DataType::LONGVARBINARY:
(*aIter) = getBytes(i);
break;
case DataType::BIT:
(*aIter) = getBoolean(i);
break;
case DataType::TINYINT:
(*aIter) = getByte(i);
break;
case DataType::SMALLINT:
(*aIter) = getShort(i);
break;
case DataType::INTEGER:
(*aIter) = getInt(i);
break;
case DataType::CLOB:
(*aIter) = makeAny(getCharacterStream(i));
break;
case DataType::BLOB:
(*aIter) = makeAny(getBinaryStream(i));
break;
default:
bReadData = sal_False;
OSL_ENSURE(0,"ORowSetValue::makeAny(): UNSPUPPORTED TYPE!");
}
if ( bReadData && wasNull() )
aIter->setNull();
if(nType != aIter->getTypeKind())
{
aIter->setTypeKind(nType);
}
aIter->setSigned(m_aSignedFlags[i-1]);
fetchValue(i,nType,this,*aIter);
}
}
// -----------------------------------------------------------------------------
@@ -843,5 +803,82 @@ Reference< XInterface > SAL_CALL OCacheSet::getStatement( ) throw(SQLException,
return m_xDriverSet->getStatement();
}
// -----------------------------------------------------------------------------
void OCacheSet::fetchValue(sal_Int32 _nPos,sal_Int32 _nType,const Reference<XRow>& _xRow,ORowSetValue& _rValue)
{
sal_Bool bReadData = sal_True;
switch(_nType)
{
case DataType::CHAR:
case DataType::VARCHAR:
case DataType::DECIMAL:
case DataType::NUMERIC:
case DataType::LONGVARCHAR:
_rValue = _xRow->getString(_nPos);
break;
case DataType::BIGINT:
if ( _rValue.isSigned() )
_rValue = _xRow->getLong(_nPos);
else
_rValue = _xRow->getString(_nPos);
break;
case DataType::FLOAT:
_rValue = _xRow->getFloat(_nPos);
break;
case DataType::DOUBLE:
case DataType::REAL:
_rValue = _xRow->getDouble(_nPos);
break;
case DataType::DATE:
_rValue = _xRow->getDate(_nPos);
break;
case DataType::TIME:
_rValue = _xRow->getTime(_nPos);
break;
case DataType::TIMESTAMP:
_rValue = _xRow->getTimestamp(_nPos);
break;
case DataType::BINARY:
case DataType::VARBINARY:
case DataType::LONGVARBINARY:
_rValue = _xRow->getBytes(_nPos);
break;
case DataType::BIT:
_rValue = _xRow->getBoolean(_nPos);
break;
case DataType::TINYINT:
if ( _rValue.isSigned() )
_rValue = _xRow->getByte(_nPos);
else
_rValue = _xRow->getShort(_nPos);
break;
case DataType::SMALLINT:
if ( _rValue.isSigned() )
_rValue = _xRow->getShort(_nPos);
else
_rValue = _xRow->getInt(_nPos);
break;
case DataType::INTEGER:
if ( _rValue.isSigned() )
_rValue = _xRow->getInt(_nPos);
else
_rValue = _xRow->getLong(_nPos);
break;
case DataType::CLOB:
_rValue = makeAny(_xRow->getCharacterStream(_nPos));
_rValue.setTypeKind(DataType::CLOB);
break;
case DataType::BLOB:
_rValue = makeAny(_xRow->getBinaryStream(_nPos));
_rValue.setTypeKind(DataType::BLOB);
break;
default:
bReadData = sal_False;
break;
}
if ( bReadData && _xRow->wasNull() )
_rValue.setNull();
_rValue.setTypeKind(_nType);
}
// -----------------------------------------------------------------------------