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]

Reply via email to