diff options
author | Jens-Heiner Rechtien <hr@openoffice.org> | 2003-03-19 16:57:12 +0000 |
---|---|---|
committer | Jens-Heiner Rechtien <hr@openoffice.org> | 2003-03-19 16:57:12 +0000 |
commit | 2facbebb88fe72614d566c3187c8f86c5c61f8bd (patch) | |
tree | 911e686d46d917817914961e4fb3e00a89371174 /dbaccess/source/ui/misc/WCopyTable.cxx | |
parent | 167b3dbf8d7756705441faa8be21dd9f6afe5c5b (diff) |
MWS_SRX644: migrate branch mws_srx644 -> HEAD
Diffstat (limited to 'dbaccess/source/ui/misc/WCopyTable.cxx')
-rw-r--r-- | dbaccess/source/ui/misc/WCopyTable.cxx | 135 |
1 files changed, 86 insertions, 49 deletions
diff --git a/dbaccess/source/ui/misc/WCopyTable.cxx b/dbaccess/source/ui/misc/WCopyTable.cxx index 18e64d537f24..a96c80b76e3a 100644 --- a/dbaccess/source/ui/misc/WCopyTable.cxx +++ b/dbaccess/source/ui/misc/WCopyTable.cxx @@ -2,9 +2,9 @@ * * $RCSfile: WCopyTable.cxx,v $ * - * $Revision: 1.29 $ + * $Revision: 1.30 $ * - * last change: $Author: oj $ $Date: 2002-12-10 09:17:06 $ + * last change: $Author: hr $ $Date: 2003-03-19 17:52:51 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -131,6 +131,9 @@ #ifndef _SV_WAITOBJ_HXX #include <vcl/waitobj.hxx> #endif +#ifndef DBAUI_WIZ_TYPESELECT_HXX +#include "WTypeSelect.hxx" +#endif using namespace ::dbaui; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; @@ -197,8 +200,6 @@ OCopyTableWizard::OCopyTableWizard(Window * pParent, _xSourceObject->getPropertyValue(PROPERTY_NAME) >>= m_sSourceName; m_sName = m_sSourceName; } - loadData(m_xSourceObject,m_vSourceColumns,m_vSourceVec); // create the field description - } // ----------------------------------------------------------------------------- OCopyTableWizard::OCopyTableWizard(Window * pParent, @@ -261,9 +262,7 @@ void OCopyTableWizard::construct() FreeResource(); - ::dbaui::fillTypeInfo(m_xSourceConnection,m_sTypeNames,m_aTypeInfo,m_aTypeInfoIndex); - ::dbaui::fillTypeInfo(m_xConnection,m_sTypeNames,m_aDestTypeInfo,m_aDestTypeInfoIndex); - m_pTypeInfo = new OTypeInfo(); + m_pTypeInfo = TOTypeInfoSP(new OTypeInfo()); m_pTypeInfo->aUIName = m_sTypeNames.GetToken(TYPE_OTHER); } //------------------------------------------------------------------------ @@ -283,21 +282,9 @@ OCopyTableWizard::~OCopyTableWizard() // clear the type information m_aTypeInfoIndex.clear(); - OTypeInfoMap::iterator aIter = m_aTypeInfo.begin(); - for(;aIter != m_aTypeInfo.end();++aIter) - delete aIter->second; - m_aTypeInfo.clear(); - - m_aDestTypeInfoIndex.clear(); - aIter = m_aDestTypeInfo.begin(); - for(;aIter != m_aDestTypeInfo.end();++aIter) - delete aIter->second; - m_aDestTypeInfoIndex.clear(); - DELETEZ(m_pTypeInfo); - DBG_DTOR(OCopyTableWizard,NULL); } // ----------------------------------------------------------------------- @@ -339,8 +326,9 @@ IMPL_LINK( OCopyTableWizard, ImplNextHdl, PushButton*, EMPTYARG ) return 0; } // ----------------------------------------------------------------------- -void OCopyTableWizard::CheckColumns() +sal_Bool OCopyTableWizard::CheckColumns(sal_Int32& _rnBreakPos) { + sal_Bool bRet = sal_True; m_vColumnPos.clear(); m_vColumnTypes.clear(); @@ -357,14 +345,13 @@ void OCopyTableWizard::CheckColumns() if ( bPKeyAllowed && isAutoincrementEnabled() ) { // add extra column for the primary key - const OTypeInfo* pTypeInfo = queryPrimaryKeyType(m_aDestTypeInfo); - if ( pTypeInfo ) + TOTypeInfoSP pTypeInfo = queryPrimaryKeyType(m_aDestTypeInfo); + if ( pTypeInfo.get() ) { OFieldDescription* pField = new OFieldDescription(); pField->SetName(m_aKeyName); pField->FillFromTypeInfo(pTypeInfo,sal_True,sal_True); pField->SetPrimaryKey(sal_True); - pField->SetIsNullable(ColumnValue::NO_NULLS); insertColumn(0,pField); m_vColumnPos.push_back(ODatabaseExport::TPositions::value_type(1,1)); m_vColumnTypes.push_back(pField->GetType()); @@ -398,11 +385,12 @@ void OCopyTableWizard::CheckColumns() sal_Int32 nMaxNameLen = getMaxColumnNameLength(); ODatabaseExport::TColumnVector::const_iterator aSrcIter = m_vSourceVec.begin(); - for(;aSrcIter != m_vSourceVec.end();++aSrcIter) + for(_rnBreakPos=0;aSrcIter != m_vSourceVec.end() && bRet ;++aSrcIter,++_rnBreakPos) { OFieldDescription* pField = new OFieldDescription(*(*aSrcIter)->second); pField->SetName(convertColumnName(TExportColumnFindFunctor(&m_vDestColumns),(*aSrcIter)->first,sExtraChars,nMaxNameLen)); - pField->SetType(convertType((*aSrcIter)->second->getTypeInfo())); + TOTypeInfoSP pType = convertType((*aSrcIter)->second->getTypeInfo(),bRet); + pField->SetType(pType); if ( !bPKeyAllowed ) pField->SetPrimaryKey(sal_False); @@ -413,6 +401,7 @@ void OCopyTableWizard::CheckColumns() } } } + return bRet; } // ----------------------------------------------------------------------- IMPL_LINK( OCopyTableWizard, ImplOKHdl, OKButton*, EMPTYARG ) @@ -428,14 +417,26 @@ IMPL_LINK( OCopyTableWizard, ImplOKHdl, OKButton*, EMPTYARG ) case WIZARD_DEF_DATA: case WIZARD_DEF: { - if( GetCurLevel() == 0 ) + sal_Bool bOnFirstPage; + if ( bOnFirstPage = (GetCurLevel() == 0) ) { // we came from the first page so we have to clear // all column information already collected clearDestColumns(); m_mNameMapping.clear(); } - CheckColumns(); + sal_Int32 nBreakPos = 0; + sal_Bool bCheckOk = CheckColumns(nBreakPos); + if ( bOnFirstPage && !bCheckOk ) + { + OWizTypeSelect* pPage = reinterpret_cast<OWizTypeSelect*>(GetPage(3)); + if ( pPage ) + { + pPage->setDisplayRow(nBreakPos); + ShowPage(3); + return 0; + } + } break; } case WIZARD_APPEND_DATA: @@ -589,6 +590,7 @@ void OCopyTableWizard::loadData(const Reference<XPropertySet>& _xTable, sal_Int32 nType = 0; sal_Int32 nScale = 0; sal_Int32 nPrecision = 0; + sal_Bool bAutoIncrement = sal_False; ::rtl::OUString sTypeName; // get the properties from the column @@ -596,12 +598,13 @@ void OCopyTableWizard::loadData(const Reference<XPropertySet>& _xTable, xColumn->getPropertyValue(PROPERTY_TYPE) >>= nType; xColumn->getPropertyValue(PROPERTY_SCALE) >>= nScale; xColumn->getPropertyValue(PROPERTY_PRECISION) >>= nPrecision; + xColumn->getPropertyValue(PROPERTY_ISAUTOINCREMENT) >>= bAutoIncrement; pActFieldDescr = new OFieldDescription(xColumn); // search for type sal_Bool bForce; - const OTypeInfo* pTypeInfo = ::dbaui::getTypeInfoFromType(m_aTypeInfo,nType,sTypeName,nPrecision,nScale,bForce); - if ( !pTypeInfo ) + TOTypeInfoSP pTypeInfo = ::dbaui::getTypeInfoFromType(m_aTypeInfo,nType,sTypeName,nPrecision,nScale,bAutoIncrement,bForce); + if ( !pTypeInfo.get() ) pTypeInfo = m_pTypeInfo; pActFieldDescr->FillFromTypeInfo(pTypeInfo,sal_True,sal_False); @@ -618,8 +621,11 @@ void OCopyTableWizard::loadData(const Reference<XPropertySet>& _xTable, for(;pKeyBegin != pKeyEnd;++pKeyBegin) { ODatabaseExport::TColumns::iterator aIter = _rColumns.find(*pKeyBegin); - if(aIter != _rColumns.end()) + if ( aIter != _rColumns.end() ) + { aIter->second->SetPrimaryKey(sal_True); + aIter->second->SetIsNullable(ColumnValue::NO_NULLS); + } } } } @@ -921,8 +927,14 @@ sal_Bool OCopyTableWizard::supportsPrimaryKey() const sal_Bool bAllowed = sal_False; if(m_xConnection.is()) { - Reference< XDatabaseMetaData > xMetaData(m_xConnection->getMetaData()); - bAllowed = xMetaData.is() && xMetaData->supportsCoreSQLGrammar(); + try + { + Reference< XDatabaseMetaData > xMetaData(m_xConnection->getMetaData()); + bAllowed = xMetaData.is() && xMetaData->supportsCoreSQLGrammar(); + } + catch(const Exception&) + { + } } return bAllowed; } @@ -932,8 +944,14 @@ sal_Int32 OCopyTableWizard::getMaxColumnNameLength() const sal_Int32 nLen = 0; if(m_xConnection.is()) { - Reference< XDatabaseMetaData > xMetaData(m_xConnection->getMetaData()); - nLen = xMetaData.is() ? xMetaData->getMaxColumnNameLength() : 0; + try + { + Reference< XDatabaseMetaData > xMetaData(m_xConnection->getMetaData()); + nLen = xMetaData.is() ? xMetaData->getMaxColumnNameLength() : 0; + } + catch(const Exception&) + { + } } return nLen; } @@ -987,18 +1005,20 @@ OCopyTableWizard::Wizard_Create_Style OCopyTableWizard::getCreateStyle() const // ----------------------------------------------------------------------------- sal_Bool OCopyTableWizard::supportsType(sal_Int32 _nDataType,sal_Int32& _rNewDataType) { - _rNewDataType = _nDataType; - return m_aDestTypeInfo.find(_nDataType) != m_aDestTypeInfo.end(); + sal_Bool bRet = m_aDestTypeInfo.find(_nDataType) != m_aDestTypeInfo.end(); + if ( bRet ) + _rNewDataType = _nDataType; + return bRet; } // ----------------------------------------------------------------------------- -const OTypeInfo* OCopyTableWizard::convertType(const OTypeInfo* _pType) +TOTypeInfoSP OCopyTableWizard::convertType(const TOTypeInfoSP& _pType,sal_Bool& _bNotConvert) { - if(m_xSourceConnection == m_xConnection) + if ( m_xSourceConnection == m_xConnection ) return _pType; sal_Bool bForce; - const OTypeInfo* pType = ::dbaui::getTypeInfoFromType(m_aDestTypeInfo,_pType->nType,_pType->aTypeName,_pType->nPrecision,_pType->nMaximumScale,bForce); - if(!pType || bForce) + TOTypeInfoSP pType = ::dbaui::getTypeInfoFromType(m_aDestTypeInfo,_pType->nType,_pType->aTypeName,_pType->nPrecision,_pType->nMaximumScale,_pType->bAutoIncrement,bForce); + if ( !pType.get() || bForce ) { // no type found so we have to find the correct one ourself sal_Int32 nDefaultType = DataType::VARCHAR; switch(_pType->nType) @@ -1030,33 +1050,39 @@ const OTypeInfo* OCopyTableWizard::convertType(const OTypeInfo* _pType) case DataType::TIMESTAMP: case DataType::REAL: case DataType::BIGINT: - if(supportsType(DataType::DOUBLE,nDefaultType)) + if ( supportsType(DataType::DOUBLE,nDefaultType) ) break; // run through case DataType::DOUBLE: - if(supportsType(DataType::NUMERIC,nDefaultType)) + if ( supportsType(DataType::NUMERIC,nDefaultType) ) break; // run through case DataType::NUMERIC: supportsType(DataType::DECIMAL,nDefaultType); break; - // run through case DataType::DECIMAL: - if(supportsType(DataType::NUMERIC,nDefaultType)) + if ( supportsType(DataType::NUMERIC,nDefaultType) ) + break; + if ( supportsType(DataType::DOUBLE,nDefaultType) ) break; - if(supportsType(DataType::DOUBLE,nDefaultType)) + break; + case DataType::VARCHAR: + if ( supportsType(DataType::LONGVARCHAR,nDefaultType) ) break; break; default: nDefaultType = DataType::VARCHAR; } - pType = ::dbaui::getTypeInfoFromType(m_aDestTypeInfo,nDefaultType,_pType->aTypeName,_pType->nPrecision,_pType->nMaximumScale,bForce); - if(!pType) + pType = ::dbaui::getTypeInfoFromType(m_aDestTypeInfo,nDefaultType,_pType->aTypeName,_pType->nPrecision,_pType->nMaximumScale,_pType->bAutoIncrement,bForce); + if ( !pType.get() ) { - pType = ::dbaui::getTypeInfoFromType(m_aDestTypeInfo,DataType::VARCHAR,_pType->aTypeName,_pType->nPrecision,_pType->nMaximumScale,bForce); - if(!pType) + _bNotConvert = sal_False; + pType = ::dbaui::getTypeInfoFromType(m_aDestTypeInfo,DataType::VARCHAR,_pType->aTypeName,50,0,sal_False,bForce); + if ( !pType.get() ) pType = m_pTypeInfo; } + else if ( bForce ) + _bNotConvert = sal_False; } return pType; } @@ -1081,3 +1107,14 @@ const OTypeInfo* OCopyTableWizard::convertType(const OTypeInfo* _pType) return sName; } // ----------------------------------------------------------------------------- +void OCopyTableWizard::fillTypeInfo() +{ + ::dbaui::fillTypeInfo(m_xSourceConnection,m_sTypeNames,m_aTypeInfo,m_aTypeInfoIndex); + ::dbaui::fillTypeInfo(m_xConnection,m_sTypeNames,m_aDestTypeInfo,m_aDestTypeInfoIndex); +} +// ----------------------------------------------------------------------------- +void OCopyTableWizard::loadData() +{ + loadData(m_xSourceObject,m_vSourceColumns,m_vSourceVec); // create the field description +} +// ----------------------------------------------------------------------------- |