summaryrefslogtreecommitdiff
path: root/dbaccess/source/ui
diff options
context:
space:
mode:
authorOcke Janssen <oj@openoffice.org>2001-07-02 09:31:49 +0000
committerOcke Janssen <oj@openoffice.org>2001-07-02 09:31:49 +0000
commitf3198d19a4993578f8e32919ced820a7a79ab9e4 (patch)
tree579264b75ac0a96c5b0f5387798cce4fa2fa1651 /dbaccess/source/ui
parent49195a8f878db97bc0cc2213b614f8ed4f8d812c (diff)
#88476# move some methods to UITools
Diffstat (limited to 'dbaccess/source/ui')
-rw-r--r--dbaccess/source/ui/inc/TableController.hxx6
-rw-r--r--dbaccess/source/ui/inc/UITools.hxx61
-rw-r--r--dbaccess/source/ui/inc/WCopyTable.hxx6
-rw-r--r--dbaccess/source/ui/misc/UITools.cxx170
-rw-r--r--dbaccess/source/ui/misc/WCPage.cxx114
-rw-r--r--dbaccess/source/ui/misc/WCopyTable.cxx510
-rw-r--r--dbaccess/source/ui/tabledesign/FieldDescriptions.cxx49
-rw-r--r--dbaccess/source/ui/tabledesign/TableController.cxx172
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);