diff options
author | Ocke Janssen <oj@openoffice.org> | 2001-07-02 09:31:49 +0000 |
---|---|---|
committer | Ocke Janssen <oj@openoffice.org> | 2001-07-02 09:31:49 +0000 |
commit | f3198d19a4993578f8e32919ced820a7a79ab9e4 (patch) | |
tree | 579264b75ac0a96c5b0f5387798cce4fa2fa1651 /dbaccess/source/ui | |
parent | 49195a8f878db97bc0cc2213b614f8ed4f8d812c (diff) |
#88476# move some methods to UITools
Diffstat (limited to 'dbaccess/source/ui')
-rw-r--r-- | dbaccess/source/ui/inc/TableController.hxx | 6 | ||||
-rw-r--r-- | dbaccess/source/ui/inc/UITools.hxx | 61 | ||||
-rw-r--r-- | dbaccess/source/ui/inc/WCopyTable.hxx | 6 | ||||
-rw-r--r-- | dbaccess/source/ui/misc/UITools.cxx | 170 | ||||
-rw-r--r-- | dbaccess/source/ui/misc/WCPage.cxx | 114 | ||||
-rw-r--r-- | dbaccess/source/ui/misc/WCopyTable.cxx | 510 | ||||
-rw-r--r-- | dbaccess/source/ui/tabledesign/FieldDescriptions.cxx | 49 | ||||
-rw-r--r-- | dbaccess/source/ui/tabledesign/TableController.cxx | 172 |
8 files changed, 479 insertions, 609 deletions
diff --git a/dbaccess/source/ui/inc/TableController.hxx b/dbaccess/source/ui/inc/TableController.hxx index 5c5f5a30857b..6e2318eb7f89 100644 --- a/dbaccess/source/ui/inc/TableController.hxx +++ b/dbaccess/source/ui/inc/TableController.hxx @@ -2,9 +2,9 @@ * * $RCSfile: TableController.hxx,v $ * - * $Revision: 1.16 $ + * $Revision: 1.17 $ * - * last change: $Author: fs $ $Date: 2001-06-21 17:43:46 $ + * last change: $Author: oj $ $Date: 2001-07-02 10:31:49 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -126,14 +126,12 @@ namespace dbaui void reSyncRows(); void assignTable(); // set the table if a name is given void loadData(); - void fillTypeInfo(); // fills a vector with type info sal_Bool checkColumns(sal_Bool _bNew) throw(::com::sun::star::sdbc::SQLException); // check if we have double column names String createUniqueName(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess>& _rxTables,const String& _rDefault); void appendColumns(::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XColumnsSupplier>& _rxColSup,sal_Bool _bKeyColumns=sal_False); void appendKey(::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XKeysSupplier>& _rxSup); void alterColumns(); void dropKey(); - void setColumnProperties(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxColumn,const OFieldDescription* _pFieldDesc); ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess> getKeyColumns() const; ::rtl::OUString createUniqueName(const ::rtl::OUString& _rName); void setTitle(const ::rtl::OUString & _rTitle); diff --git a/dbaccess/source/ui/inc/UITools.hxx b/dbaccess/source/ui/inc/UITools.hxx index 50585297f6b7..c986c7062c10 100644 --- a/dbaccess/source/ui/inc/UITools.hxx +++ b/dbaccess/source/ui/inc/UITools.hxx @@ -2,9 +2,9 @@ * * $RCSfile: UITools.hxx,v $ * - * $Revision: 1.2 $ + * $Revision: 1.3 $ * - * last change: $Author: oj $ $Date: 2001-02-28 10:10:01 $ + * last change: $Author: oj $ $Date: 2001-07-02 10:31:49 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -61,30 +61,33 @@ #ifndef DBAUI_TOOLS_HXX #define DBAUI_TOOLS_HXX -#ifndef _COM_SUN_STAR_SDBC_XDATABASEMETADATA_HPP_ -#include <com/sun/star/sdbc/XDatabaseMetaData.hpp> -#endif -#ifndef _COM_SUN_STAR_SDBC_XCONNECTION_HPP_ -#include <com/sun/star/sdbc/XConnection.hpp> -#endif -#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ -#include <com/sun/star/beans/XPropertySet.hpp> -#endif -#ifndef _COM_SUN_STAR_CONTAINER_XNAMEACCESS_HPP_ -#include <com/sun/star/container/XNameAccess.hpp> -#endif -#ifndef _COM_SUN_STAR_LANG_XMULTISERVICEFACTORY_HPP_ -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#endif -#ifndef _COM_SUN_STAR_LANG_XEVENTLISTENER_HPP_ -#include <com/sun/star/lang/XEventListener.hpp> -#endif #ifndef _DBHELPER_DBEXCEPTION_HXX_ #include <connectivity/dbexception.hxx> #endif #ifndef _VECTOR_ #include <vector> #endif +#ifndef DBAUI_TYPEINFO_HXX +#include "TypeInfo.hxx" +#endif + +// we only need forward decl here +namespace com { namespace sun { namespace star { + + namespace beans { class XPropertySet;} + namespace container { class XNameAccess;} + namespace lang + { + class XEventListener; + class XMultiServiceFactory; + } + namespace sdbc + { + class XDatabaseMetaData; + class XConnection; + } + +}}} class Window; // ......................................................................... @@ -132,6 +135,24 @@ namespace dbaui getKeyColumns( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxTable, sal_Int32 _nKeyType); + /** fills a map and a vector with localized type names + @param _rxConnection the connection to acces the metadata + @param _rsTypeNames a list of localized type names seperated with ';' + @param _rTypeInfoMap the filled map with the type names + @param _rTypeInfoIters the vector filled with map iterators + */ + void fillTypeInfo( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _rxConnection, + const String& _rsTypeNames, + OTypeInfoMap& _rTypeInfoMap, + ::std::vector<OTypeInfoMap::iterator>& _rTypeInfoIters); + + /** fill a column with data of a field description + @param _rxColumn the column which should be filled + @param _pFieldDesc the source of the data + */ + class OFieldDescription; + void setColumnProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxColumn, + const OFieldDescription* _pFieldDesc); // ......................................................................... } // ......................................................................... diff --git a/dbaccess/source/ui/inc/WCopyTable.hxx b/dbaccess/source/ui/inc/WCopyTable.hxx index 48cf81d0fb5c..9ad538404417 100644 --- a/dbaccess/source/ui/inc/WCopyTable.hxx +++ b/dbaccess/source/ui/inc/WCopyTable.hxx @@ -2,9 +2,9 @@ * * $RCSfile: WCopyTable.hxx,v $ * - * $Revision: 1.3 $ + * $Revision: 1.4 $ * - * last change: $Author: fme $ $Date: 2001-06-21 15:21:14 $ + * last change: $Author: oj $ $Date: 2001-07-02 10:31:49 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -143,14 +143,12 @@ namespace dbaui DECL_LINK( ImplOKHdl , OKButton* ); DECL_LINK( ImplActivateHdl, WizardDialog* ); void CheckColumns(); - void fillTypeInfo(); void loadData(); void construct(); ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess> getKeyColumns() const; // need for table creation void appendColumns(::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XColumnsSupplier>& _rxColSup,const ODatabaseExport::TColumnVector* _pVec,sal_Bool _bKeyColumns=sal_False); void appendKey(::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XKeysSupplier>& _rxSup,const ODatabaseExport::TColumnVector* _pVec); - void setColumnProperties(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxColumn,const OFieldDescription* _pFieldDesc); protected: OTypeInfoMap m_aTypeInfo; diff --git a/dbaccess/source/ui/misc/UITools.cxx b/dbaccess/source/ui/misc/UITools.cxx index 7e44639d9573..daaf5dffd0fc 100644 --- a/dbaccess/source/ui/misc/UITools.cxx +++ b/dbaccess/source/ui/misc/UITools.cxx @@ -2,9 +2,9 @@ * * $RCSfile: UITools.cxx,v $ * - * $Revision: 1.9 $ + * $Revision: 1.10 $ * - * last change: $Author: oj $ $Date: 2001-06-29 11:56:55 $ + * last change: $Author: oj $ $Date: 2001-07-02 10:31:49 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -86,6 +86,9 @@ #ifndef _COM_SUN_STAR_SDBCX_XCOLUMNSSUPPLIER_HPP_ #include <com/sun/star/sdbcx/XColumnsSupplier.hpp> #endif +#ifndef _COM_SUN_STAR_SDBC_XROW_HPP_ +#include <com/sun/star/sdbc/XRow.hpp> +#endif #ifndef _COM_SUN_STAR_TASK_XINTERACTIONHANDLER_HPP_ #include <com/sun/star/task/XInteractionHandler.hpp> #endif @@ -119,6 +122,9 @@ #ifndef DBAUI_TYPEINFO_HXX #include "TypeInfo.hxx" #endif +#ifndef DBAUI_FIELDDESCRIPTIONS_HXX +#include "FieldDescriptions.hxx" +#endif // ......................................................................... namespace dbaui @@ -353,6 +359,166 @@ const OTypeInfo* getTypeInfoFromType(const OTypeInfoMap& _rTypeInfo, return pTypeInfo; } +void fillTypeInfo( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _rxConnection, + const String& _rsTypeNames, + OTypeInfoMap& _rTypeInfoMap, + ::std::vector<OTypeInfoMap::iterator>& _rTypeInfoIters) +{ + if(!_rxConnection.is()) + return; + Reference< XResultSet> xRs = _rxConnection->getMetaData ()->getTypeInfo (); + Reference< XRow> xRow(xRs,UNO_QUERY); + // Information for a single SQL type + if(xRs.is()) + { + static const ::rtl::OUString aB1 = ::rtl::OUString::createFromAscii(" [ "); + static const ::rtl::OUString aB2 = ::rtl::OUString::createFromAscii(" ]"); + // Loop on the result set until we reach end of file + while (xRs->next()) + { + OTypeInfo* pInfo = new OTypeInfo(); + pInfo->aTypeName = xRow->getString (1); + pInfo->nType = xRow->getShort (2); + pInfo->nPrecision = xRow->getInt (3); + pInfo->aLiteralPrefix = xRow->getString (4); + pInfo->aLiteralSuffix = xRow->getString (5); + pInfo->aCreateParams = xRow->getString (6); + pInfo->bNullable = xRow->getInt (7) == ColumnValue::NULLABLE; + pInfo->bCaseSensitive = xRow->getBoolean (8); + pInfo->nSearchType = xRow->getShort (9); + pInfo->bUnsigned = xRow->getBoolean (10); + pInfo->bCurrency = xRow->getBoolean (11); + pInfo->bAutoIncrement = xRow->getBoolean (12); + pInfo->aLocalTypeName = xRow->getString (13); + pInfo->nMinimumScale = xRow->getShort (14); + pInfo->nMaximumScale = xRow->getShort (15); + pInfo->nNumPrecRadix = xRow->getInt (18); + + String aName; + switch(pInfo->nType) + { + case DataType::CHAR: + aName = _rsTypeNames.GetToken(TYPE_CHAR); + break; + case DataType::VARCHAR: + aName = _rsTypeNames.GetToken(TYPE_TEXT); + break; + case DataType::DECIMAL: + aName = _rsTypeNames.GetToken(TYPE_DECIMAL); + break; + case DataType::NUMERIC: + aName = _rsTypeNames.GetToken(TYPE_NUMERIC); + break; + case DataType::BIGINT: + aName = _rsTypeNames.GetToken(TYPE_BIGINT); + break; + case DataType::FLOAT: + aName = _rsTypeNames.GetToken(TYPE_FLOAT); + break; + case DataType::DOUBLE: + aName = _rsTypeNames.GetToken(TYPE_DOUBLE); + break; + case DataType::LONGVARCHAR: + aName = _rsTypeNames.GetToken(TYPE_MEMO); + break; + case DataType::LONGVARBINARY: + aName = _rsTypeNames.GetToken(TYPE_IMAGE); + break; + case DataType::DATE: + aName = _rsTypeNames.GetToken(TYPE_DATE); + break; + case DataType::TIME: + aName = _rsTypeNames.GetToken(TYPE_TIME); + break; + case DataType::TIMESTAMP: + aName = _rsTypeNames.GetToken(TYPE_DATETIME); + break; + case DataType::BIT: + aName = _rsTypeNames.GetToken(TYPE_BOOL); + break; + case DataType::TINYINT: + aName = _rsTypeNames.GetToken(TYPE_TINYINT); + break; + case DataType::SMALLINT: + aName = _rsTypeNames.GetToken(TYPE_SMALLINT); + break; + case DataType::INTEGER: + aName = _rsTypeNames.GetToken(TYPE_INTEGER); + break; + case DataType::REAL: + aName = _rsTypeNames.GetToken(TYPE_REAL); + break; + case DataType::BINARY: + aName = _rsTypeNames.GetToken(TYPE_BINARY); + break; + case DataType::VARBINARY: + aName = _rsTypeNames.GetToken(TYPE_VARBINARY); + break; + case DataType::SQLNULL: + aName = _rsTypeNames.GetToken(TYPE_SQLNULL); + break; + case DataType::OBJECT: + aName = _rsTypeNames.GetToken(TYPE_OBJECT); + break; + case DataType::DISTINCT: + aName = _rsTypeNames.GetToken(TYPE_DISTINCT); + break; + case DataType::STRUCT: + aName = _rsTypeNames.GetToken(TYPE_STRUCT); + break; + case DataType::ARRAY: + aName = _rsTypeNames.GetToken(TYPE_ARRAY); + break; + case DataType::BLOB: + aName = _rsTypeNames.GetToken(TYPE_BLOB); + break; + case DataType::CLOB: + aName = _rsTypeNames.GetToken(TYPE_CLOB); + break; + case DataType::REF: + aName = _rsTypeNames.GetToken(TYPE_REF); + break; + case DataType::OTHER: + aName = _rsTypeNames.GetToken(TYPE_OTHER); + break; + default: + OSL_ENSURE(0,"Unknown type"); + } + pInfo->aUIName = aName.GetBuffer(); + pInfo->aUIName += aB1; + pInfo->aUIName += pInfo->aTypeName; + pInfo->aUIName += aB2; + // Now that we have the type info, save it in the multimap + _rTypeInfoMap.insert(OTypeInfoMap::value_type(pInfo->nType,pInfo)); + } + // for a faster index access + OTypeInfoMap::iterator aIter = _rTypeInfoMap.begin(); + for(;aIter != _rTypeInfoMap.end();++aIter) + _rTypeInfoIters.push_back(aIter); + + // Close the result set/statement. + + ::comphelper::disposeComponent(xRs); + } +} +// ----------------------------------------------------------------------------- +void setColumnProperties(const Reference<XPropertySet>& _rxColumn,const OFieldDescription* _pFieldDesc) +{ + _rxColumn->setPropertyValue(PROPERTY_NAME,makeAny(_pFieldDesc->GetName())); + _rxColumn->setPropertyValue(PROPERTY_TYPE,makeAny(_pFieldDesc->GetType())); + _rxColumn->setPropertyValue(PROPERTY_TYPENAME,makeAny(_pFieldDesc->getTypeInfo()->aTypeName)); + _rxColumn->setPropertyValue(PROPERTY_PRECISION,makeAny(_pFieldDesc->GetPrecision())); + _rxColumn->setPropertyValue(PROPERTY_SCALE,makeAny(_pFieldDesc->GetScale())); + _rxColumn->setPropertyValue(PROPERTY_ISNULLABLE, makeAny(_pFieldDesc->GetIsNullable())); + _rxColumn->setPropertyValue(PROPERTY_ISAUTOINCREMENT,::cppu::bool2any(_pFieldDesc->IsAutoIncrement())); + // _rxColumn->setPropertyValue(PROPERTY_ISCURRENCY,::cppu::bool2any(_pFieldDesc->IsCurrency())); + if(_rxColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_DESCRIPTION)) + _rxColumn->setPropertyValue(PROPERTY_DESCRIPTION,makeAny(_pFieldDesc->GetDescription())); + if(_rxColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_DEFAULTVALUE)) + _rxColumn->setPropertyValue(PROPERTY_DEFAULTVALUE,makeAny(_pFieldDesc->GetDefaultValue())); +} +// ----------------------------------------------------------------------------- + // ......................................................................... } // ......................................................................... diff --git a/dbaccess/source/ui/misc/WCPage.cxx b/dbaccess/source/ui/misc/WCPage.cxx index fc974cc6fde2..0eac2c7b6338 100644 --- a/dbaccess/source/ui/misc/WCPage.cxx +++ b/dbaccess/source/ui/misc/WCPage.cxx @@ -2,9 +2,9 @@ * * $RCSfile: WCPage.cxx,v $ * - * $Revision: 1.5 $ + * $Revision: 1.6 $ * - * last change: $Author: fme $ $Date: 2001-06-21 15:26:43 $ + * last change: $Author: oj $ $Date: 2001-07-02 10:31:49 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -120,72 +120,75 @@ OCopyTable::OCopyTable( Window * pParent, EImportMode atWhat, sal_Bool bIsQuery, { DBG_CTOR(OCopyTable,NULL); - Reference< XDatabaseMetaData > xMetaData(m_pParent->m_xConnection->getMetaData()); - try + if(m_pParent->m_xConnection.is()) { - static ::rtl::OUString sVIEW = ::rtl::OUString::createFromAscii("VIEW"); - Reference<XResultSet> xRs = xMetaData->getTableTypes(); - if(xRs.is()) + Reference< XDatabaseMetaData > xMetaData(m_pParent->m_xConnection->getMetaData()); + try { - Reference<XRow> xRow(xRs,UNO_QUERY); - while(xRs->next()) + static ::rtl::OUString sVIEW = ::rtl::OUString::createFromAscii("VIEW"); + Reference<XResultSet> xRs = xMetaData->getTableTypes(); + if(xRs.is()) { - ::rtl::OUString sValue = xRow->getString(1); - if(!xRow->wasNull() && sValue.equalsIgnoreAsciiCase(sVIEW)) + Reference<XRow> xRow(xRs,UNO_QUERY); + while(xRs->next()) { - m_bIsViewAllowed = m_bIsViewAllowed || sal_True; - break; + ::rtl::OUString sValue = xRow->getString(1); + if(!xRow->wasNull() && sValue.equalsIgnoreAsciiCase(sVIEW)) + { + m_bIsViewAllowed = m_bIsViewAllowed || sal_True; + break; + } } } } - } - catch(SQLException&) - { - } + catch(SQLException&) + { + } - if(!m_bIsViewAllowed) - m_aRB_View.Disable(); + if(!m_bIsViewAllowed) + m_aRB_View.Disable(); - ////////////////////////////////////////////////////////////////////// - // Wenn Datenbank PrimaryKeys verarbeiten kann, PrimaryKey anlegen - m_bPKeyAllowed = xMetaData->supportsCoreSQLGrammar(); + ////////////////////////////////////////////////////////////////////// + // Wenn Datenbank PrimaryKeys verarbeiten kann, PrimaryKey anlegen + m_bPKeyAllowed = xMetaData->supportsCoreSQLGrammar(); - m_aCB_PrimaryColumn.Enable(m_bPKeyAllowed); + m_aCB_PrimaryColumn.Enable(m_bPKeyAllowed); - switch(nLastAction) - { - case OCopyTableWizard::WIZARD_DEF_DATA: - m_aRB_DefData.Check(sal_True); - break; - case OCopyTableWizard::WIZARD_DEF: - m_aRB_Def.Check(sal_True); - break; - case OCopyTableWizard::WIZARD_APPEND_DATA: - m_aRB_AppendData.Check(sal_True); - m_pParent->EnableButton(OCopyTableWizard::WIZARD_NEXT,sal_False); - break; - case OCopyTableWizard::WIZARD_DEF_VIEW: - if(m_bIsViewAllowed) - { - m_aRB_View.Check(sal_True); - m_pParent->EnableButton(OCopyTableWizard::WIZARD_NEXT,sal_False); - } - else + switch(nLastAction) + { + case OCopyTableWizard::WIZARD_DEF_DATA: m_aRB_DefData.Check(sal_True); - } - m_aRB_AppendData.SetClickHdl( LINK( this, OCopyTable, AppendDataClickHdl ) ); + break; + case OCopyTableWizard::WIZARD_DEF: + m_aRB_Def.Check(sal_True); + break; + case OCopyTableWizard::WIZARD_APPEND_DATA: + m_aRB_AppendData.Check(sal_True); + m_pParent->EnableButton(OCopyTableWizard::WIZARD_NEXT,sal_False); + break; + case OCopyTableWizard::WIZARD_DEF_VIEW: + if(m_bIsViewAllowed) + { + m_aRB_View.Check(sal_True); + m_pParent->EnableButton(OCopyTableWizard::WIZARD_NEXT,sal_False); + } + else + m_aRB_DefData.Check(sal_True); + } + m_aRB_AppendData.SetClickHdl( LINK( this, OCopyTable, AppendDataClickHdl ) ); - m_aRB_DefData.SetClickHdl( LINK( this, OCopyTable, RadioChangeHdl ) ); - m_aRB_Def.SetClickHdl( LINK( this, OCopyTable, RadioChangeHdl ) ); - m_aRB_View.SetClickHdl( LINK( this, OCopyTable, RadioChangeHdl ) ); + m_aRB_DefData.SetClickHdl( LINK( this, OCopyTable, RadioChangeHdl ) ); + m_aRB_Def.SetClickHdl( LINK( this, OCopyTable, RadioChangeHdl ) ); + m_aRB_View.SetClickHdl( LINK( this, OCopyTable, RadioChangeHdl ) ); - m_aCB_PrimaryColumn.SetClickHdl( LINK( this, OCopyTable, KeyClickHdl ) ); + m_aCB_PrimaryColumn.SetClickHdl( LINK( this, OCopyTable, KeyClickHdl ) ); - m_aFT_KeyName.Enable(sal_False); - m_edKeyName.Enable(sal_False); - m_edKeyName.SetText(String::CreateFromAscii("ID")); - sal_Int32 nMaxLen = xMetaData->getMaxColumnNameLength(); - m_edKeyName.SetMaxTextLen(nMaxLen ? (xub_StrLen)nMaxLen : EDIT_NOLIMIT); + m_aFT_KeyName.Enable(sal_False); + m_edKeyName.Enable(sal_False); + m_edKeyName.SetText(String::CreateFromAscii("ID")); + sal_Int32 nMaxLen = xMetaData->getMaxColumnNameLength(); + m_edKeyName.SetMaxTextLen(nMaxLen ? (xub_StrLen)nMaxLen : EDIT_NOLIMIT); + } FreeResource(); @@ -208,7 +211,6 @@ OCopyTable::~OCopyTable() IMPL_LINK( OCopyTable, AppendDataClickHdl, Button*, pButton ) { sal_Bool bChecked = m_aRB_AppendData.IsChecked(); - //m_pParent->EnableButton(OCopyTableWizard::WIZARD_FINISH,bChecked); m_pParent->EnableButton(OCopyTableWizard::WIZARD_NEXT,sal_True); m_aFT_KeyName.Enable(sal_False); m_aCB_PrimaryColumn.Enable(sal_False); @@ -362,7 +364,9 @@ void OCopyTable::Reset() { m_bFirstTime = sal_False; - sal_Int32 nLen = m_pParent->m_xConnection->getMetaData()->getMaxTableNameLength(); + sal_Int32 nLen = 0; + if(m_pParent->m_xConnection.is()) + nLen = m_pParent->m_xConnection->getMetaData()->getMaxTableNameLength(); m_edTableName.SetMaxTextLen(nLen ? (xub_StrLen)nLen : EDIT_NOLIMIT); String aTableName = m_pParent->m_sName; diff --git a/dbaccess/source/ui/misc/WCopyTable.cxx b/dbaccess/source/ui/misc/WCopyTable.cxx index 5719ea159108..985e76a82029 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.8 $ + * $Revision: 1.9 $ * - * last change: $Author: oj $ $Date: 2001-06-29 11:56:55 $ + * last change: $Author: oj $ $Date: 2001-07-02 10:31:49 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -169,7 +169,7 @@ OCopyTableWizard::OCopyTableWizard(Window * pParent, if(xColSupp.is()) m_xSourceColumns = xColSupp->getColumns(); - if(!_xSourceObject->getPropertySetInfo()->hasPropertyByName(PROPERTY_COMMAND)) + if(!m_xSourceObject->getPropertySetInfo()->hasPropertyByName(PROPERTY_COMMAND)) { ::rtl::OUString sCatalog,sSchema,sTable; m_xSourceObject->getPropertyValue(PROPERTY_CATALOGNAME) >>= sCatalog; @@ -243,7 +243,7 @@ void OCopyTableWizard::construct() FreeResource(); - fillTypeInfo(); + ::dbaui::fillTypeInfo(m_xConnection,m_sTypeNames,m_aTypeInfo,m_aTypeInfoIndex); } //------------------------------------------------------------------------ OCopyTableWizard::~OCopyTableWizard() @@ -254,6 +254,15 @@ OCopyTableWizard::~OCopyTableWizard() RemovePage( pPage ); delete pPage; } + + // 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(); + DBG_DTOR(OCopyTableWizard,NULL); } // ----------------------------------------------------------------------- @@ -300,72 +309,75 @@ void OCopyTableWizard::CheckColumns() m_vColumnPos.clear(); m_vColumnTypes.clear(); + OSL_ENSURE(m_xConnection.is(),"OCopyTableWizard::CheckColumns: No connection!"); ////////////////////////////////////////////////////////////////////// // Wenn Datenbank PrimaryKeys verarbeiten kann, PrimaryKey anlegen - Reference< XDatabaseMetaData > xMetaData(m_xConnection->getMetaData()); - sal_Bool bPKeyAllowed = xMetaData->supportsCoreSQLGrammar(); - - - if(m_vDestColumns.size()) - { // we have dest columns so look for the column matching - ODatabaseExport::TColumnVector::const_iterator aSrcIter = m_vSourceVec.begin(); - for(;aSrcIter != m_vSourceVec.end();++aSrcIter) - { - ODatabaseExport::TColumns::iterator aDestIter = m_vDestColumns.find(m_mNameMapping[(*aSrcIter)->first]); + if(m_xConnection.is()) + { + Reference< XDatabaseMetaData > xMetaData(m_xConnection->getMetaData()); + sal_Bool bPKeyAllowed = xMetaData->supportsCoreSQLGrammar(); - if(aDestIter != m_vDestColumns.end()) + if(m_vDestColumns.size()) + { // we have dest columns so look for the column matching + ODatabaseExport::TColumnVector::const_iterator aSrcIter = m_vSourceVec.begin(); + for(;aSrcIter != m_vSourceVec.end();++aSrcIter) { - ODatabaseExport::TColumnVector::const_iterator aFind = ::std::find(m_aDestVec.begin(),m_aDestVec.end(),aDestIter); - m_vColumnPos.push_back((aFind - m_aDestVec.begin())+1); - m_vColumnTypes.push_back((*aFind)->second->GetType()); - } - else - { - m_vColumnPos.push_back(CONTAINER_ENTRY_NOTFOUND); - m_vColumnTypes.push_back(0); + ODatabaseExport::TColumns::iterator aDestIter = m_vDestColumns.find(m_mNameMapping[(*aSrcIter)->first]); + + if(aDestIter != m_vDestColumns.end()) + { + ODatabaseExport::TColumnVector::const_iterator aFind = ::std::find(m_aDestVec.begin(),m_aDestVec.end(),aDestIter); + m_vColumnPos.push_back((aFind - m_aDestVec.begin())+1); + m_vColumnTypes.push_back((*aFind)->second->GetType()); + } + else + { + m_vColumnPos.push_back(CONTAINER_ENTRY_NOTFOUND); + m_vColumnTypes.push_back(0); + } } } - } - else - { - // DlgFieldMatch dlgMissingFields(this); - // ListBox* pInfoBox = dlgMissingFields.GetInfoBox(); - ::rtl::OUString aColumnName,aOldColName; - sal_Int32 nMaxNameLen = xMetaData->getMaxColumnNameLength(); - ODatabaseExport::TColumnVector::const_iterator aSrcIter = m_vSourceVec.begin(); - for(;aSrcIter != m_vSourceVec.end();++aSrcIter) + else { - if(nMaxNameLen && nMaxNameLen < (*aSrcIter)->first.getLength()) + // DlgFieldMatch dlgMissingFields(this); + // ListBox* pInfoBox = dlgMissingFields.GetInfoBox(); + ::rtl::OUString aColumnName,aOldColName; + sal_Int32 nMaxNameLen = xMetaData->getMaxColumnNameLength(); + ODatabaseExport::TColumnVector::const_iterator aSrcIter = m_vSourceVec.begin(); + for(;aSrcIter != m_vSourceVec.end();++aSrcIter) { - ::rtl::OUString aAlias(::dbtools::convertName2SQLName((*aSrcIter)->first,xMetaData->getExtraNameCharacters())); + if(nMaxNameLen && nMaxNameLen < (*aSrcIter)->first.getLength()) + { + ::rtl::OUString aAlias(::dbtools::convertName2SQLName((*aSrcIter)->first,xMetaData->getExtraNameCharacters())); - if(nMaxNameLen && aAlias.getLength() > nMaxNameLen) - aAlias = aAlias.copy(0,aAlias.getLength() - (aAlias.getLength()-nMaxNameLen-2)); + if(nMaxNameLen && aAlias.getLength() > nMaxNameLen) + aAlias = aAlias.copy(0,aAlias.getLength() - (aAlias.getLength()-nMaxNameLen-2)); - ::rtl::OUString sName(aAlias); - sal_Int32 nPos = 1; - sName += ::rtl::OUString::valueOf(nPos); + ::rtl::OUString sName(aAlias); + sal_Int32 nPos = 1; + sName += ::rtl::OUString::valueOf(nPos); - while(m_vDestColumns.find(sName) != m_vDestColumns.end()) - { - sName = aAlias; - sName += ::rtl::OUString::valueOf(++nPos); + while(m_vDestColumns.find(sName) != m_vDestColumns.end()) + { + sName = aAlias; + sName += ::rtl::OUString::valueOf(++nPos); + } + aAlias = sName; + + m_mNameMapping[(*aSrcIter)->first] = aAlias; } - aAlias = sName; + else + m_mNameMapping[(*aSrcIter)->first] = (*aSrcIter)->first; - m_mNameMapping[(*aSrcIter)->first] = aAlias; + // now create a column + insertColumn(m_vDestColumns.size(),new OFieldDescription(*(*aSrcIter)->second)); + m_vColumnPos.push_back(m_vDestColumns.size()); + m_vColumnTypes.push_back((*aSrcIter)->second->GetType()); } - else - m_mNameMapping[(*aSrcIter)->first] = (*aSrcIter)->first; - // now create a column - insertColumn(m_vDestColumns.size(),new OFieldDescription(*(*aSrcIter)->second)); - m_vColumnPos.push_back(m_vDestColumns.size()); - m_vColumnTypes.push_back((*aSrcIter)->second->GetType()); + // if(pInfoBox->GetEntryCount()) + // dlgMissingFields.Execute(); } - -// if(pInfoBox->GetEntryCount()) -// dlgMissingFields.Execute(); } } // ----------------------------------------------------------------------- @@ -374,34 +386,33 @@ IMPL_LINK( OCopyTableWizard, ImplOKHdl, OKButton*, EMPTYARG ) m_ePressed = WIZARD_FINISH; sal_Bool bFinish = DeactivatePage() != 0; - if(!bFinish) - return sal_False; - - sal_Bool bWasEmpty = !m_vDestColumns.size(); - if(m_eCreateStyle != WIZARD_DEF_VIEW && m_eCreateStyle != WIZARD_APPEND_DATA ) - CheckColumns(); - - switch(m_eCreateStyle) + if(bFinish) { - case WIZARD_APPEND_DATA: - { - break; - } - case WIZARD_DEF_DATA: - case WIZARD_DEF: - { - break; - } - case WIZARD_DEF_VIEW: - break; - default: + sal_Bool bWasEmpty = !m_vDestColumns.size(); + if(m_eCreateStyle != WIZARD_DEF_VIEW && m_eCreateStyle != WIZARD_APPEND_DATA ) + CheckColumns(); + + switch(m_eCreateStyle) { - OSL_ENSURE(sal_False, "OCopyTableWizard::ImplOKHdl: invalid creation style!"); + case WIZARD_APPEND_DATA: + { + break; + } + case WIZARD_DEF_DATA: + case WIZARD_DEF: + { + break; + } + case WIZARD_DEF_VIEW: + break; + default: + { + OSL_ENSURE(sal_False, "OCopyTableWizard::ImplOKHdl: invalid creation style!"); + } } - } - if(bFinish) EndDialog(sal_True); + } return bFinish; } //------------------------------------------------------------------------ @@ -414,17 +425,18 @@ sal_Bool OCopyTableWizard::SetAutoincrement() const IMPL_LINK( OCopyTableWizard, ImplActivateHdl, WizardDialog*, EMPTYARG ) { OWizardPage* pCurrent = (OWizardPage*)GetPage(GetCurLevel()); - if(!pCurrent) - return 0; - sal_Bool bFirstTime = pCurrent->IsFirstTime(); - if(bFirstTime) - pCurrent->Reset(); + if(pCurrent) + { + sal_Bool bFirstTime = pCurrent->IsFirstTime(); + if(bFirstTime) + pCurrent->Reset(); - CheckButtons(); + CheckButtons(); - SetText(pCurrent->GetTitle()); + SetText(pCurrent->GetTitle()); - Invalidate(); + Invalidate(); + } return 0; } // ----------------------------------------------------------------------- @@ -483,144 +495,6 @@ void OCopyTableWizard::RemoveWizardPage(OWizardPage* pPage) --m_nPageCount; } // ----------------------------------------------------------------------------- -void OCopyTableWizard::fillTypeInfo() -{ - if(!m_xConnection.is()) - return; - Reference< XResultSet> xRs = m_xConnection->getMetaData()->getTypeInfo(); - Reference< XRow> xRow(xRs,UNO_QUERY); - // Information for a single SQL type - ::rtl::OUString aB1 = ::rtl::OUString::createFromAscii(" [ "); - ::rtl::OUString aB2 = ::rtl::OUString::createFromAscii(" ]"); - - // Loop on the result set until we reach end of file - while (xRs->next()) - { - OTypeInfo* pInfo = new OTypeInfo(); - pInfo->aTypeName = xRow->getString (1); - pInfo->nType = xRow->getShort (2); - pInfo->nPrecision = xRow->getInt (3); - pInfo->aLiteralPrefix = xRow->getString (4); - pInfo->aLiteralSuffix = xRow->getString (5); - pInfo->aCreateParams = xRow->getString (6); - pInfo->bNullable = xRow->getInt (7) == ColumnValue::NULLABLE; - pInfo->bCaseSensitive = xRow->getBoolean (8); - pInfo->nSearchType = xRow->getShort (9); - pInfo->bUnsigned = xRow->getBoolean (10); - pInfo->bCurrency = xRow->getBoolean (11); - pInfo->bAutoIncrement = xRow->getBoolean (12); - pInfo->aLocalTypeName = xRow->getString (13); - pInfo->nMinimumScale = xRow->getShort (14); - pInfo->nMaximumScale = xRow->getShort (15); - pInfo->nNumPrecRadix = xRow->getInt (18); - - String aName; - switch(pInfo->nType) - { - case DataType::CHAR: - aName = m_sTypeNames.GetToken(TYPE_CHAR); - break; - case DataType::VARCHAR: - aName = m_sTypeNames.GetToken(TYPE_TEXT); - break; - case DataType::DECIMAL: - aName = m_sTypeNames.GetToken(TYPE_DECIMAL); - break; - case DataType::NUMERIC: - aName = m_sTypeNames.GetToken(TYPE_NUMERIC); - break; - case DataType::BIGINT: - aName = m_sTypeNames.GetToken(TYPE_BIGINT); - break; - case DataType::FLOAT: - aName = m_sTypeNames.GetToken(TYPE_FLOAT); - break; - case DataType::DOUBLE: - aName = m_sTypeNames.GetToken(TYPE_DOUBLE); - break; - case DataType::LONGVARCHAR: - aName = m_sTypeNames.GetToken(TYPE_MEMO); - break; - case DataType::LONGVARBINARY: - aName = m_sTypeNames.GetToken(TYPE_IMAGE); - break; - case DataType::DATE: - aName = m_sTypeNames.GetToken(TYPE_DATE); - break; - case DataType::TIME: - aName = m_sTypeNames.GetToken(TYPE_TIME); - break; - case DataType::TIMESTAMP: - aName = m_sTypeNames.GetToken(TYPE_DATETIME); - break; - case DataType::BIT: - aName = m_sTypeNames.GetToken(TYPE_BOOL); - break; - case DataType::TINYINT: - aName = m_sTypeNames.GetToken(TYPE_TINYINT); - break; - case DataType::SMALLINT: - aName = m_sTypeNames.GetToken(TYPE_SMALLINT); - break; - case DataType::INTEGER: - aName = m_sTypeNames.GetToken(TYPE_INTEGER); - break; - case DataType::REAL: - aName = m_sTypeNames.GetToken(TYPE_REAL); - break; - case DataType::BINARY: - aName = m_sTypeNames.GetToken(TYPE_BINARY); - break; - case DataType::VARBINARY: - aName = m_sTypeNames.GetToken(TYPE_VARBINARY); - break; - case DataType::SQLNULL: - aName = m_sTypeNames.GetToken(TYPE_SQLNULL); - break; - case DataType::OBJECT: - aName = m_sTypeNames.GetToken(TYPE_OBJECT); - break; - case DataType::DISTINCT: - aName = m_sTypeNames.GetToken(TYPE_DISTINCT); - break; - case DataType::STRUCT: - aName = m_sTypeNames.GetToken(TYPE_STRUCT); - break; - case DataType::ARRAY: - aName = m_sTypeNames.GetToken(TYPE_ARRAY); - break; - case DataType::BLOB: - aName = m_sTypeNames.GetToken(TYPE_BLOB); - break; - case DataType::CLOB: - aName = m_sTypeNames.GetToken(TYPE_CLOB); - break; - case DataType::REF: - aName = m_sTypeNames.GetToken(TYPE_REF); - break; - case DataType::OTHER: - aName = m_sTypeNames.GetToken(TYPE_OTHER); - break; - default: - OSL_ENSURE(0,"Unknown type"); - } - pInfo->aUIName = aName.GetBuffer(); - pInfo->aUIName += aB1; - pInfo->aUIName += pInfo->aTypeName; - pInfo->aUIName += aB2; - // Now that we have the type info, save it in the multimap - m_aTypeInfo.insert(OTypeInfoMap::value_type(pInfo->nType,pInfo)); - } - // for a faster index access - OTypeInfoMap::iterator aIter = m_aTypeInfo.begin(); - for(;aIter != m_aTypeInfo.end();++aIter) - m_aTypeInfoIndex.push_back(aIter); - - // Close the result set/statement. - - ::comphelper::disposeComponent(xRs); -} -// ----------------------------------------------------------------------------- void OCopyTableWizard::insertColumn(sal_Int32 _nPos,OFieldDescription* _pField) { m_aDestVec.insert(m_aDestVec.begin() + _nPos, @@ -637,111 +511,83 @@ void OCopyTableWizard::loadData() m_vSourceVec.clear(); m_vSourceColumns.clear(); - Reference< XDatabaseMetaData> xMetaData = m_xConnection->getMetaData(); - ////////////////////////////////////////////////////////////////////// - // Datenstruktur mit Daten aus DatenDefinitionsObjekt fuellen - if(m_xSourceObject.is()) + OSL_ENSURE(m_xConnection.is(),"OCopyTableWizard::CheckColumns: No connection!"); + if(m_xConnection.is()) { - Reference<XColumnsSupplier> xColSup(m_xSourceObject,UNO_QUERY); - OSL_ENSURE(xColSup.is(),"No XColumnsSupplier!"); - Reference<XNameAccess> xColumns = xColSup->getColumns(); - OFieldDescription* pActFieldDescr = NULL; - String aType; + Reference< XDatabaseMetaData> xMetaData = m_xConnection->getMetaData(); ////////////////////////////////////////////////////////////////////// - // ReadOnly-Flag - // Bei Drop darf keine Zeile editierbar sein. - // Bei Add duerfen nur die leeren Zeilen editierbar sein. - // Bei Add und Drop koennen alle Zeilen editiert werden. - Sequence< ::rtl::OUString> aColumns = xColumns->getElementNames(); - const ::rtl::OUString* pBegin = aColumns.getConstArray(); - const ::rtl::OUString* pEnd = pBegin + aColumns.getLength(); - - for(;pBegin != pEnd;++pBegin) + // Datenstruktur mit Daten aus DatenDefinitionsObjekt fuellen + if(m_xSourceObject.is()) { - Reference<XPropertySet> xColumn; - xColumns->getByName(*pBegin) >>= xColumn; - sal_Int32 nType = 0; - sal_Int32 nScale = 0; - sal_Int32 nPrecision = 0; - sal_Int32 nNullable = 0; - sal_Int32 nFormatKey = 0; - sal_Int32 nAlign = 0; - - sal_Bool bIsAutoIncrement,bIsCurrency; - ::rtl::OUString sName,sDefaultValue,sDescription,sTypeName; - - // get the properties from the column - xColumn->getPropertyValue(PROPERTY_NAME) >>= sName; - xColumn->getPropertyValue(PROPERTY_TYPENAME) >>= sTypeName; - xColumn->getPropertyValue(PROPERTY_ISNULLABLE) >>= nNullable; - bIsAutoIncrement = ::cppu::any2bool(xColumn->getPropertyValue(PROPERTY_ISAUTOINCREMENT)); - bIsCurrency = ::cppu::any2bool(xColumn->getPropertyValue(PROPERTY_ISCURRENCY)); - xColumn->getPropertyValue(PROPERTY_TYPE) >>= nType; - xColumn->getPropertyValue(PROPERTY_SCALE) >>= nScale; - xColumn->getPropertyValue(PROPERTY_PRECISION) >>= nPrecision; - - - if(xColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_DESCRIPTION)) - xColumn->getPropertyValue(PROPERTY_DESCRIPTION) >>= sDescription; - if(xColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_DEFAULTVALUE)) - xColumn->getPropertyValue(PROPERTY_DEFAULTVALUE)>>= sDefaultValue; - if(xColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_FORMATKEY)) - xColumn->getPropertyValue(PROPERTY_FORMATKEY) >>= nFormatKey; - if(xColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_ALIGN)) - xColumn->getPropertyValue(PROPERTY_ALIGN) >>= nAlign; - - - pActFieldDescr = new OFieldDescription(); - // search for type - sal_Bool bForce; - const OTypeInfo* pTypeInfo = ::dbaui::getTypeInfoFromType(m_aTypeInfo,nType,sTypeName,nPrecision,nScale,bForce); - - pActFieldDescr->SetType(pTypeInfo); - switch(pTypeInfo->nType) - { - case DataType::CHAR: - case DataType::VARCHAR: - pActFieldDescr->SetPrecision(::std::min<sal_Int32>(sal_Int32(50),pTypeInfo->nPrecision)); - break; - default: - if(pTypeInfo->nPrecision && pTypeInfo->nMaximumScale) - { - pActFieldDescr->SetPrecision(5); - pActFieldDescr->SetScale(0); - } - else if(pTypeInfo->nPrecision) - pActFieldDescr->SetPrecision(::std::min<sal_Int32>(sal_Int32(16),pTypeInfo->nPrecision)); - } - - pActFieldDescr->SetName(sName); - pActFieldDescr->SetFormatKey(nFormatKey); - pActFieldDescr->SetDescription(sDescription); - pActFieldDescr->SetAutoIncrement(bIsAutoIncrement); - pActFieldDescr->SetHorJustify((SvxCellHorJustify)nAlign); - pActFieldDescr->SetCurrency(bIsCurrency); - + Reference<XColumnsSupplier> xColSup(m_xSourceObject,UNO_QUERY); + OSL_ENSURE(xColSup.is(),"No XColumnsSupplier!"); + Reference<XNameAccess> xColumns = xColSup->getColumns(); + OFieldDescription* pActFieldDescr = NULL; + String aType; ////////////////////////////////////////////////////////////////////// - // Spezielle Daten - pActFieldDescr->SetIsNullable(nNullable); - pActFieldDescr->SetDefaultValue(sDefaultValue); - pActFieldDescr->SetPrecision(nPrecision); - pActFieldDescr->SetScale(nScale); - m_vSourceColumns[sName] = pActFieldDescr; - m_vSourceVec.push_back(m_vSourceColumns.insert(ODatabaseExport::TColumns::value_type(pActFieldDescr->GetName(),pActFieldDescr)).first); - } - // fill the primary key information - Reference<XNameAccess> xKeyColumns = getKeyColumns(); - if(xKeyColumns.is()) - { - Sequence< ::rtl::OUString> aKeyColumns = xKeyColumns->getElementNames(); - const ::rtl::OUString* pKeyBegin = aKeyColumns.getConstArray(); - const ::rtl::OUString* pKeyEnd = pKeyBegin + aKeyColumns.getLength(); + // ReadOnly-Flag + // Bei Drop darf keine Zeile editierbar sein. + // Bei Add duerfen nur die leeren Zeilen editierbar sein. + // Bei Add und Drop koennen alle Zeilen editiert werden. + Sequence< ::rtl::OUString> aColumns = xColumns->getElementNames(); + const ::rtl::OUString* pBegin = aColumns.getConstArray(); + const ::rtl::OUString* pEnd = pBegin + aColumns.getLength(); + + for(;pBegin != pEnd;++pBegin) + { + Reference<XPropertySet> xColumn; + xColumns->getByName(*pBegin) >>= xColumn; + + sal_Int32 nType = 0; + sal_Int32 nScale = 0; + sal_Int32 nPrecision = 0; + ::rtl::OUString sTypeName; + + // get the properties from the column + xColumn->getPropertyValue(PROPERTY_TYPENAME) >>= sTypeName; + xColumn->getPropertyValue(PROPERTY_TYPE) >>= nType; + xColumn->getPropertyValue(PROPERTY_SCALE) >>= nScale; + xColumn->getPropertyValue(PROPERTY_PRECISION) >>= nPrecision; + + pActFieldDescr = new OFieldDescription(xColumn); + // search for type + sal_Bool bForce; + const OTypeInfo* pTypeInfo = ::dbaui::getTypeInfoFromType(m_aTypeInfo,nType,sTypeName,nPrecision,nScale,bForce); + + pActFieldDescr->SetType(pTypeInfo); + switch(pTypeInfo->nType) + { + case DataType::CHAR: + case DataType::VARCHAR: + pActFieldDescr->SetPrecision(::std::min<sal_Int32>(sal_Int32(50),pTypeInfo->nPrecision)); + break; + default: + if(pTypeInfo->nPrecision && pTypeInfo->nMaximumScale) + { + pActFieldDescr->SetPrecision(5); + pActFieldDescr->SetScale(0); + } + else if(pTypeInfo->nPrecision) + pActFieldDescr->SetPrecision(::std::min<sal_Int32>(sal_Int32(16),pTypeInfo->nPrecision)); + } - for(;pKeyBegin != pKeyEnd;++pKeyBegin) + m_vSourceColumns[pActFieldDescr->GetName()] = pActFieldDescr; + m_vSourceVec.push_back(m_vSourceColumns.insert(ODatabaseExport::TColumns::value_type(pActFieldDescr->GetName(),pActFieldDescr)).first); + } + // fill the primary key information + Reference<XNameAccess> xKeyColumns = getKeyColumns(); + if(xKeyColumns.is()) { - ODatabaseExport::TColumns::iterator aIter = m_vSourceColumns.find(*pKeyBegin); - if(aIter != m_vSourceColumns.end()) - aIter->second->SetPrimaryKey(sal_True); + Sequence< ::rtl::OUString> aKeyColumns = xKeyColumns->getElementNames(); + const ::rtl::OUString* pKeyBegin = aKeyColumns.getConstArray(); + const ::rtl::OUString* pKeyEnd = pKeyBegin + aKeyColumns.getLength(); + + for(;pKeyBegin != pKeyEnd;++pKeyBegin) + { + ODatabaseExport::TColumns::iterator aIter = m_vSourceColumns.find(*pKeyBegin); + if(aIter != m_vSourceColumns.end()) + aIter->second->SetPrimaryKey(sal_True); + } } } } @@ -816,7 +662,7 @@ void OCopyTableWizard::appendColumns(Reference<XColumnsSupplier>& _rxColSup,cons if(xColumn.is()) { if(!_bKeyColumns) - setColumnProperties(xColumn,pField); + ::dbaui::setColumnProperties(xColumn,pField); else xColumn->setPropertyValue(PROPERTY_NAME,makeAny(pField->GetName())); @@ -862,28 +708,12 @@ void OCopyTableWizard::appendKey(Reference<XKeysSupplier>& _rxSup,const ODatabas { appendColumns(xColSup,_pVec,sal_True); Reference<XNameAccess> xColumns = xColSup->getColumns(); - if(xColumns->getElementNames().getLength()) + if(xColumns.is() && xColumns->getElementNames().getLength()) xAppend->appendByDescriptor(xKey); } } // ----------------------------------------------------------------------------- -void OCopyTableWizard::setColumnProperties(const Reference<XPropertySet>& _rxColumn,const OFieldDescription* _pFieldDesc) -{ - _rxColumn->setPropertyValue(PROPERTY_NAME,makeAny(_pFieldDesc->GetName())); - _rxColumn->setPropertyValue(PROPERTY_TYPE,makeAny(_pFieldDesc->GetType())); - _rxColumn->setPropertyValue(PROPERTY_TYPENAME,makeAny(_pFieldDesc->getTypeInfo()->aTypeName)); - _rxColumn->setPropertyValue(PROPERTY_PRECISION,makeAny(_pFieldDesc->GetPrecision())); - _rxColumn->setPropertyValue(PROPERTY_SCALE,makeAny(_pFieldDesc->GetScale())); - _rxColumn->setPropertyValue(PROPERTY_ISNULLABLE, makeAny(_pFieldDesc->GetIsNullable())); - _rxColumn->setPropertyValue(PROPERTY_ISAUTOINCREMENT,::cppu::bool2any(_pFieldDesc->IsAutoIncrement())); - // _rxColumn->setPropertyValue(PROPERTY_ISCURRENCY,::cppu::bool2any(_pFieldDesc->IsCurrency())); - if(_rxColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_DESCRIPTION)) - _rxColumn->setPropertyValue(PROPERTY_DESCRIPTION,makeAny(_pFieldDesc->GetDescription())); - if(_rxColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_DEFAULTVALUE)) - _rxColumn->setPropertyValue(PROPERTY_DEFAULTVALUE,makeAny(_pFieldDesc->GetDefaultValue())); -} -// ----------------------------------------------------------------------------- Reference< XPropertySet > OCopyTableWizard::createView() { Reference<XViewsSupplier> xSup(m_xConnection,UNO_QUERY); diff --git a/dbaccess/source/ui/tabledesign/FieldDescriptions.cxx b/dbaccess/source/ui/tabledesign/FieldDescriptions.cxx index f2254bf9a951..4786f8ee7b5e 100644 --- a/dbaccess/source/ui/tabledesign/FieldDescriptions.cxx +++ b/dbaccess/source/ui/tabledesign/FieldDescriptions.cxx @@ -2,9 +2,9 @@ * * $RCSfile: FieldDescriptions.cxx,v $ * - * $Revision: 1.3 $ + * $Revision: 1.4 $ * - * last change: $Author: oj $ $Date: 2001-04-11 10:36:33 $ + * last change: $Author: oj $ $Date: 2001-07-02 10:31:49 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -148,27 +148,30 @@ OFieldDescription::OFieldDescription(const Reference< XPropertySet >& xAffectedC { DBG_CTOR(OFieldDescription,NULL); OSL_ENSURE(xAffectedCol.is(),"PropetySet can notbe null!"); - Reference<XPropertySetInfo> xPropSetInfo = xAffectedCol->getPropertySetInfo(); - if(xPropSetInfo->hasPropertyByName(PROPERTY_NAME)) - SetName(::comphelper::getString(xAffectedCol->getPropertyValue(PROPERTY_NAME))); - if(xPropSetInfo->hasPropertyByName(PROPERTY_DESCRIPTION)) - SetDescription(::comphelper::getString(xAffectedCol->getPropertyValue(PROPERTY_DESCRIPTION))); - if(xPropSetInfo->hasPropertyByName(PROPERTY_DEFAULTVALUE)) - SetDefaultValue(::comphelper::getString(xAffectedCol->getPropertyValue(PROPERTY_DEFAULTVALUE))); - if(xPropSetInfo->hasPropertyByName(PROPERTY_TYPE)) - SetTypeValue(::comphelper::getINT32(xAffectedCol->getPropertyValue(PROPERTY_TYPE))); - if(xPropSetInfo->hasPropertyByName(PROPERTY_PRECISION)) - SetPrecision(::comphelper::getINT32(xAffectedCol->getPropertyValue(PROPERTY_PRECISION))); - if(xPropSetInfo->hasPropertyByName(PROPERTY_SCALE)) - SetScale(::comphelper::getINT32(xAffectedCol->getPropertyValue(PROPERTY_SCALE))); - if(xPropSetInfo->hasPropertyByName(PROPERTY_ISNULLABLE)) - SetIsNullable(::comphelper::getINT32(xAffectedCol->getPropertyValue(PROPERTY_ISNULLABLE))); - if(xPropSetInfo->hasPropertyByName(PROPERTY_FORMATKEY)) - SetFormatKey(::comphelper::getINT32(xAffectedCol->getPropertyValue(PROPERTY_FORMATKEY))); - if(xPropSetInfo->hasPropertyByName(PROPERTY_ALIGN)) - SetHorJustify((SvxCellHorJustify)::comphelper::getINT32(xAffectedCol->getPropertyValue(PROPERTY_ALIGN))); - if(xPropSetInfo->hasPropertyByName(PROPERTY_ISAUTOINCREMENT)) - SetAutoIncrement(::cppu::any2bool(xAffectedCol->getPropertyValue(PROPERTY_ISAUTOINCREMENT))); + if(xAffectedCol.is()) + { + Reference<XPropertySetInfo> xPropSetInfo = xAffectedCol->getPropertySetInfo(); + if(xPropSetInfo->hasPropertyByName(PROPERTY_NAME)) + SetName(::comphelper::getString(xAffectedCol->getPropertyValue(PROPERTY_NAME))); + if(xPropSetInfo->hasPropertyByName(PROPERTY_DESCRIPTION)) + SetDescription(::comphelper::getString(xAffectedCol->getPropertyValue(PROPERTY_DESCRIPTION))); + if(xPropSetInfo->hasPropertyByName(PROPERTY_DEFAULTVALUE)) + SetDefaultValue(::comphelper::getString(xAffectedCol->getPropertyValue(PROPERTY_DEFAULTVALUE))); + if(xPropSetInfo->hasPropertyByName(PROPERTY_TYPE)) + SetTypeValue(::comphelper::getINT32(xAffectedCol->getPropertyValue(PROPERTY_TYPE))); + if(xPropSetInfo->hasPropertyByName(PROPERTY_PRECISION)) + SetPrecision(::comphelper::getINT32(xAffectedCol->getPropertyValue(PROPERTY_PRECISION))); + if(xPropSetInfo->hasPropertyByName(PROPERTY_SCALE)) + SetScale(::comphelper::getINT32(xAffectedCol->getPropertyValue(PROPERTY_SCALE))); + if(xPropSetInfo->hasPropertyByName(PROPERTY_ISNULLABLE)) + SetIsNullable(::comphelper::getINT32(xAffectedCol->getPropertyValue(PROPERTY_ISNULLABLE))); + if(xPropSetInfo->hasPropertyByName(PROPERTY_FORMATKEY)) + SetFormatKey(::comphelper::getINT32(xAffectedCol->getPropertyValue(PROPERTY_FORMATKEY))); + if(xPropSetInfo->hasPropertyByName(PROPERTY_ALIGN)) + SetHorJustify((SvxCellHorJustify)::comphelper::getINT32(xAffectedCol->getPropertyValue(PROPERTY_ALIGN))); + if(xPropSetInfo->hasPropertyByName(PROPERTY_ISAUTOINCREMENT)) + SetAutoIncrement(::cppu::any2bool(xAffectedCol->getPropertyValue(PROPERTY_ISAUTOINCREMENT))); + } } // ----------------------------------------------------------------------------- diff --git a/dbaccess/source/ui/tabledesign/TableController.cxx b/dbaccess/source/ui/tabledesign/TableController.cxx index d37573c59654..74a1d8f8bfba 100644 --- a/dbaccess/source/ui/tabledesign/TableController.cxx +++ b/dbaccess/source/ui/tabledesign/TableController.cxx @@ -2,9 +2,9 @@ * * $RCSfile: TableController.cxx,v $ * - * $Revision: 1.40 $ + * $Revision: 1.41 $ * - * last change: $Author: oj $ $Date: 2001-06-29 11:53:02 $ + * last change: $Author: oj $ $Date: 2001-07-02 10:31:49 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -185,6 +185,9 @@ #ifndef DBAUI_TOOLS_HXX #include "UITools.hxx" #endif +#ifndef DBAUI_TOOLS_HXX +#include "UITools.hxx" +#endif extern "C" void SAL_CALL createRegistryInfo_OTableControl() { @@ -249,6 +252,7 @@ OTableController::OTableController(const Reference< XMultiServiceFactory >& _rM) // ----------------------------------------------------------------------------- OTableController::~OTableController() { + m_aTypeInfoIndex.clear(); OTypeInfoMap::iterator aIter = m_aTypeInfo.begin(); for(;aIter != m_aTypeInfo.end();++aIter) delete aIter->second; @@ -701,7 +705,7 @@ void SAL_CALL OTableController::initialize( const Sequence< Any >& aArguments ) } OSL_ENSURE(m_xFormatter.is(),"No NumberFormatter!"); } - fillTypeInfo(); // fill the needed type information + ::dbaui::fillTypeInfo(getConnection(),m_sTypeNames,m_aTypeInfo,m_aTypeInfoIndex); // fill the needed type information loadData(); // fill the column information form the table getView()->initialize(); // show the windows and fill with our informations getUndoMgr()->Clear(); // clear all undo redo things @@ -855,144 +859,6 @@ void OTableController::createNewConnection(sal_Bool _bUI) } } // ----------------------------------------------------------------------------- -void OTableController::fillTypeInfo() -{ - if(!getConnection().is()) - return; - Reference< XResultSet> xRs = getConnection()->getMetaData ()->getTypeInfo (); - Reference< XRow> xRow(xRs,UNO_QUERY); - // Information for a single SQL type - - ::rtl::OUString aB1 = ::rtl::OUString::createFromAscii(" [ "); - ::rtl::OUString aB2 = ::rtl::OUString::createFromAscii(" ]"); - // Loop on the result set until we reach end of file - while (xRs->next()) - { - OTypeInfo* pInfo = new OTypeInfo(); - pInfo->aTypeName = xRow->getString (1); - pInfo->nType = xRow->getShort (2); - pInfo->nPrecision = xRow->getInt (3); - pInfo->aLiteralPrefix = xRow->getString (4); - pInfo->aLiteralSuffix = xRow->getString (5); - pInfo->aCreateParams = xRow->getString (6); - pInfo->bNullable = xRow->getInt (7) == ColumnValue::NULLABLE; - pInfo->bCaseSensitive = xRow->getBoolean (8); - pInfo->nSearchType = xRow->getShort (9); - pInfo->bUnsigned = xRow->getBoolean (10); - pInfo->bCurrency = xRow->getBoolean (11); - pInfo->bAutoIncrement = xRow->getBoolean (12); - pInfo->aLocalTypeName = xRow->getString (13); - pInfo->nMinimumScale = xRow->getShort (14); - pInfo->nMaximumScale = xRow->getShort (15); - pInfo->nNumPrecRadix = xRow->getInt (18); - - String aName; - switch(pInfo->nType) - { - case DataType::CHAR: - aName = m_sTypeNames.GetToken(TYPE_CHAR); - break; - case DataType::VARCHAR: - aName = m_sTypeNames.GetToken(TYPE_TEXT); - break; - case DataType::DECIMAL: - aName = m_sTypeNames.GetToken(TYPE_DECIMAL); - break; - case DataType::NUMERIC: - aName = m_sTypeNames.GetToken(TYPE_NUMERIC); - break; - case DataType::BIGINT: - aName = m_sTypeNames.GetToken(TYPE_BIGINT); - break; - case DataType::FLOAT: - aName = m_sTypeNames.GetToken(TYPE_FLOAT); - break; - case DataType::DOUBLE: - aName = m_sTypeNames.GetToken(TYPE_DOUBLE); - break; - case DataType::LONGVARCHAR: - aName = m_sTypeNames.GetToken(TYPE_MEMO); - break; - case DataType::LONGVARBINARY: - aName = m_sTypeNames.GetToken(TYPE_IMAGE); - break; - case DataType::DATE: - aName = m_sTypeNames.GetToken(TYPE_DATE); - break; - case DataType::TIME: - aName = m_sTypeNames.GetToken(TYPE_TIME); - break; - case DataType::TIMESTAMP: - aName = m_sTypeNames.GetToken(TYPE_DATETIME); - break; - case DataType::BIT: - aName = m_sTypeNames.GetToken(TYPE_BOOL); - break; - case DataType::TINYINT: - aName = m_sTypeNames.GetToken(TYPE_TINYINT); - break; - case DataType::SMALLINT: - aName = m_sTypeNames.GetToken(TYPE_SMALLINT); - break; - case DataType::INTEGER: - aName = m_sTypeNames.GetToken(TYPE_INTEGER); - break; - case DataType::REAL: - aName = m_sTypeNames.GetToken(TYPE_REAL); - break; - case DataType::BINARY: - aName = m_sTypeNames.GetToken(TYPE_BINARY); - break; - case DataType::VARBINARY: - aName = m_sTypeNames.GetToken(TYPE_VARBINARY); - break; - case DataType::SQLNULL: - aName = m_sTypeNames.GetToken(TYPE_SQLNULL); - break; - case DataType::OBJECT: - aName = m_sTypeNames.GetToken(TYPE_OBJECT); - break; - case DataType::DISTINCT: - aName = m_sTypeNames.GetToken(TYPE_DISTINCT); - break; - case DataType::STRUCT: - aName = m_sTypeNames.GetToken(TYPE_STRUCT); - break; - case DataType::ARRAY: - aName = m_sTypeNames.GetToken(TYPE_ARRAY); - break; - case DataType::BLOB: - aName = m_sTypeNames.GetToken(TYPE_BLOB); - break; - case DataType::CLOB: - aName = m_sTypeNames.GetToken(TYPE_CLOB); - break; - case DataType::REF: - aName = m_sTypeNames.GetToken(TYPE_REF); - break; - case DataType::OTHER: - aName = m_sTypeNames.GetToken(TYPE_OTHER); - break; - default: - OSL_ENSURE(0,"Unknown type"); - } - pInfo->aUIName = aName.GetBuffer(); - pInfo->aUIName += aB1; - pInfo->aUIName += pInfo->aTypeName; - pInfo->aUIName += aB2; - // Now that we have the type info, save it in the multimap - m_aTypeInfo.insert(OTypeInfoMap::value_type(pInfo->nType,pInfo)); - } - // for a faster index access - OTypeInfoMap::iterator aIter = m_aTypeInfo.begin(); - for(;aIter != m_aTypeInfo.end();++aIter) - m_aTypeInfoIndex.push_back(aIter); - - // Close the result set/statement. - - ::comphelper::disposeComponent(xRs); -} -// ----------------------------------------------------------------------------- const OTypeInfo* OTableController::getTypeInfoByType(sal_Int32 _nDataType) const { OTypeInfoMap::const_iterator aIter = m_aTypeInfo.find(_nDataType); @@ -1031,7 +897,7 @@ void OTableController::appendColumns(Reference<XColumnsSupplier>& _rxColSup,sal_ if(xColumn.is()) { if(!_bKeyColumns) - setColumnProperties(xColumn,pField); + ::dbaui::setColumnProperties(xColumn,pField); else xColumn->setPropertyValue(PROPERTY_NAME,makeAny(pField->GetName())); @@ -1422,7 +1288,7 @@ void OTableController::alterColumns() { Reference<XPropertySet> xNewColumn; xNewColumn = xColumnFactory->createDataDescriptor(); - setColumnProperties(xNewColumn,pField); + ::dbaui::setColumnProperties(xNewColumn,pField); // first try to alter the column sal_Bool bNotOk = sal_False; try @@ -1463,7 +1329,7 @@ void OTableController::alterColumns() {// column not found by its name so we assume it is new // Column is new xColumn = xColumnFactory->createDataDescriptor(); - setColumnProperties(xColumn,pField); + ::dbaui::setColumnProperties(xColumn,pField); xAppend->appendByDescriptor(xColumn); if(xColumns->hasByName(pField->GetName())) { // ask for the append by name @@ -1486,7 +1352,7 @@ void OTableController::alterColumns() { // we can't find the column nor can we append a new one so we alter it by index Reference<XPropertySet> xNewColumn; xNewColumn = xColumnFactory->createDataDescriptor(); - setColumnProperties(xNewColumn,pField); + ::dbaui::setColumnProperties(xNewColumn,pField); xAlter->alterColumnByIndex(nPos,xNewColumn); if(xColumns->hasByName(pField->GetName())) { // ask for the append by name @@ -1586,22 +1452,6 @@ void OTableController::alterColumns() } } // ----------------------------------------------------------------------------- -void OTableController::setColumnProperties(const Reference<XPropertySet>& _rxColumn,const OFieldDescription* _pFieldDesc) -{ - _rxColumn->setPropertyValue(PROPERTY_NAME,makeAny(_pFieldDesc->GetName())); - _rxColumn->setPropertyValue(PROPERTY_TYPE,makeAny(_pFieldDesc->GetType())); - _rxColumn->setPropertyValue(PROPERTY_TYPENAME,makeAny(_pFieldDesc->getTypeInfo()->aTypeName)); - _rxColumn->setPropertyValue(PROPERTY_PRECISION,makeAny(_pFieldDesc->GetPrecision())); - _rxColumn->setPropertyValue(PROPERTY_SCALE,makeAny(_pFieldDesc->GetScale())); - _rxColumn->setPropertyValue(PROPERTY_ISNULLABLE, makeAny(_pFieldDesc->GetIsNullable())); - _rxColumn->setPropertyValue(PROPERTY_ISAUTOINCREMENT,::cppu::bool2any(_pFieldDesc->IsAutoIncrement())); - // _rxColumn->setPropertyValue(PROPERTY_ISCURRENCY,::cppu::bool2any(_pFieldDesc->IsCurrency())); - if(_rxColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_DESCRIPTION)) - _rxColumn->setPropertyValue(PROPERTY_DESCRIPTION,makeAny(_pFieldDesc->GetDescription())); - if(_rxColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_DEFAULTVALUE)) - _rxColumn->setPropertyValue(PROPERTY_DEFAULTVALUE,makeAny(_pFieldDesc->GetDefaultValue())); -} -// ----------------------------------------------------------------------------- void OTableController::dropKey() { Reference<XKeysSupplier> xKeySup(m_xTable,UNO_QUERY); |