Tag: cws_src680_dba202b User: oj Date: 05/11/28 03:53:53 Modified: /dba/dbaccess/source/ui/misc/ DExport.cxx, UITools.cxx
Log: #127608# convert type if it doesn't exist on dest db File Changes: Directory: /dba/dbaccess/source/ui/misc/ ======================================== File [changed]: DExport.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/ui/misc/DExport.cxx?r1=1.26&r2=1.26.46.1 Delta lines: +81 -19 --------------------- --- DExport.cxx 23 Sep 2005 12:36:23 -0000 1.26 +++ DExport.cxx 28 Nov 2005 11:53:49 -0000 1.26.46.1 @@ -4,9 +4,9 @@ * * $RCSfile: DExport.cxx,v $ * - * $Revision: 1.26 $ + * $Revision: 1.26.46.1 $ * - * last change: $Author: hr $ $Date: 2005/09/23 12:36:23 $ + * last change: $Author: oj $ $Date: 2005/11/28 11:53:49 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -132,6 +132,9 @@ #ifndef _DBHELPER_DBEXCEPTION_HXX_ #include <connectivity/dbexception.hxx> #endif +#ifndef _CONNECTIVITY_FILE_VALUE_HXX_ +#include <connectivity/FValue.hxx> +#endif #ifndef _COM_SUN_STAR_SDBC_SQLWARNING_HPP_ #include <com/sun/star/sdbc/SQLWarning.hpp> #endif @@ -263,30 +266,89 @@ Reference<XResultSet> xSet = xMeta.is() ? xMeta->getTypeInfo() : Reference<XResultSet>(); if(xSet.is()) { + ::connectivity::ORowSetValue aValue; + ::std::vector<sal_Int32> aTypes; + Reference<XResultSetMetaData> xResultSetMetaData = Reference<XResultSetMetaDataSupplier>(xSet,UNO_QUERY)->getMetaData(); Reference<XRow> xRow(xSet,UNO_QUERY); while(xSet->next()) { - ::rtl::OUString sTypeName = xRow->getString (1); - sal_Int16 nType = xRow->getShort(2); + if ( aTypes.empty() ) + { + sal_Int32 nCount = xResultSetMetaData->getColumnCount(); + if ( nCount < 1 ) + nCount = 18; + aTypes.reserve(nCount+1); + aTypes.push_back(-1); + for (sal_Int32 j = 1; j <= nCount ; ++j) + aTypes.push_back(xResultSetMetaData->getColumnType(j)); + } + + sal_Int32 nPos = 1; + aValue.fill(nPos,aTypes[nPos],xRow); + ::rtl::OUString sTypeName = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + sal_Int32 nType = aValue; + ++nPos; + if( nType == DataType::VARCHAR) { m_pTypeInfo = TOTypeInfoSP(new OTypeInfo()); + m_pTypeInfo->aTypeName = sTypeName; m_pTypeInfo->nType = nType; - m_pTypeInfo->nPrecision = xRow->getInt (3); - m_pTypeInfo->aLiteralPrefix = xRow->getString (4); - m_pTypeInfo->aLiteralSuffix = xRow->getString (5); - m_pTypeInfo->aCreateParams = xRow->getString (6); - m_pTypeInfo->bNullable = xRow->getInt (7) == ColumnValue::NULLABLE; - m_pTypeInfo->bCaseSensitive = xRow->getBoolean (8); - m_pTypeInfo->nSearchType = xRow->getShort (9); - m_pTypeInfo->bUnsigned = xRow->getBoolean (10); - m_pTypeInfo->bCurrency = xRow->getBoolean (11); - m_pTypeInfo->bAutoIncrement = xRow->getBoolean (12); - m_pTypeInfo->aLocalTypeName = xRow->getString (13); - m_pTypeInfo->nMinimumScale = xRow->getShort (14); - m_pTypeInfo->nMaximumScale = xRow->getShort (15); - m_pTypeInfo->nNumPrecRadix = xRow->getInt (18); + + aValue.fill(nPos,aTypes[nPos],xRow); + m_pTypeInfo->nPrecision = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + m_pTypeInfo->aLiteralPrefix = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + m_pTypeInfo->aLiteralSuffix = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + m_pTypeInfo->aCreateParams = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + m_pTypeInfo->bNullable = (sal_Int32)aValue == ColumnValue::NULLABLE; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + m_pTypeInfo->bCaseSensitive = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + m_pTypeInfo->nSearchType = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + m_pTypeInfo->bUnsigned = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + m_pTypeInfo->bCurrency = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + m_pTypeInfo->bAutoIncrement = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + m_pTypeInfo->aLocalTypeName = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + m_pTypeInfo->nMinimumScale = aValue; + ++nPos; + aValue.fill(nPos,aTypes[nPos],xRow); + m_pTypeInfo->nMaximumScale = aValue; + nPos = 18; + aValue.fill(nPos,aTypes[nPos],xRow); + m_pTypeInfo->nNumPrecRadix = aValue; + + // check if values are less than zero like it happens in a oracle jdbc driver + if( m_pTypeInfo->nPrecision < 0) + m_pTypeInfo->nPrecision = 0; + if( m_pTypeInfo->nMinimumScale < 0) + m_pTypeInfo->nMinimumScale = 0; + if( m_pTypeInfo->nMaximumScale < 0) + m_pTypeInfo->nMaximumScale = 0; + if( m_pTypeInfo->nNumPrecRadix < 0) + m_pTypeInfo->nNumPrecRadix = 10; break; } } File [changed]: UITools.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/ui/misc/UITools.cxx?r1=1.58&r2=1.58.46.1 Delta lines: +65 -5 -------------------- --- UITools.cxx 23 Sep 2005 12:38:33 -0000 1.58 +++ UITools.cxx 28 Nov 2005 11:53:50 -0000 1.58.46.1 @@ -4,9 +4,9 @@ * * $RCSfile: UITools.cxx,v $ * - * $Revision: 1.58 $ + * $Revision: 1.58.46.1 $ * - * last change: $Author: hr $ $Date: 2005/09/23 12:38:33 $ + * last change: $Author: oj $ $Date: 2005/11/28 11:53:50 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -1580,8 +1580,68 @@ OTypeInfoMap::const_iterator aIter = _rTypeInfo.find(_nDataType); if(aIter != _rTypeInfo.end()) return aIter->second; - OSL_ENSURE(0,"Wrong DataType supplied!"); - return TOTypeInfoSP(); + // fall back if the type is unknown + TOTypeInfoSP pTypeInfo; + switch(_nDataType) + { + case DataType::TINYINT: + if( pTypeInfo = queryTypeInfoByType(DataType::SMALLINT,_rTypeInfo)) + break; + // run through + case DataType::SMALLINT: + if( pTypeInfo = queryTypeInfoByType(DataType::INTEGER,_rTypeInfo)) + break; + // run through + case DataType::INTEGER: + if( pTypeInfo = queryTypeInfoByType(DataType::FLOAT,_rTypeInfo)) + break; + // run through + case DataType::FLOAT: + if( pTypeInfo = queryTypeInfoByType(DataType::REAL,_rTypeInfo)) + break; + // run through + case DataType::DATE: + case DataType::TIME: + if( DataType::DATE == _nDataType || DataType::TIME == _nDataType ) + { + if( pTypeInfo = queryTypeInfoByType(DataType::TIMESTAMP,_rTypeInfo)) + break; + } + // run through + case DataType::TIMESTAMP: + case DataType::REAL: + case DataType::BIGINT: + if ( pTypeInfo = queryTypeInfoByType(DataType::DOUBLE,_rTypeInfo) ) + break; + // run through + case DataType::DOUBLE: + if ( pTypeInfo = queryTypeInfoByType(DataType::NUMERIC,_rTypeInfo) ) + break; + // run through + case DataType::NUMERIC: + pTypeInfo = queryTypeInfoByType(DataType::DECIMAL,_rTypeInfo); + break; + case DataType::DECIMAL: + if ( pTypeInfo = queryTypeInfoByType(DataType::NUMERIC,_rTypeInfo) ) + break; + if ( pTypeInfo = queryTypeInfoByType(DataType::DOUBLE,_rTypeInfo) ) + break; + break; + case DataType::VARCHAR: + if ( pTypeInfo = queryTypeInfoByType(DataType::LONGVARCHAR,_rTypeInfo) ) + break; + break; + default: + ; + } // switch(_nDataType) + if ( !pTypeInfo ) + { + ::rtl::OUString sCreate(RTL_CONSTASCII_USTRINGPARAM("x")),sTypeName; + sal_Bool bForce = sal_True; + pTypeInfo = ::dbaui::getTypeInfoFromType(_rTypeInfo,DataType::VARCHAR,sTypeName,sCreate,50,0,sal_False,bForce); + } // if ( !pTypeInfo ) + OSL_ENSURE(pTypeInfo,"Wrong DataType supplied!"); + return pTypeInfo; } // ----------------------------------------------------------------------------- ::rtl::OUString getUserDefinedDriverNodeName() --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
