From d27d06b94128e88c71eef6f2619f29bc0b60e428 Mon Sep 17 00:00:00 2001
From: Jens-Heiner Rechtien
Date: Wed, 26 Sep 2007 13:50:55 +0000
Subject: [PATCH] INTEGRATION: CWS dba24a (1.37.54); FILE MERGED 2007/08/30
08:19:53 oj 1.37.54.3: #i78257# check vector size of source vec 2007/08/03
08:12:50 oj 1.37.54.2: #i73710# be mor error prone when update row 2007/07/23
11:59:03 fs 1.37.54.1: when pasting tables, use a meaningful default in the
wizard, as indicated by the current selection Issue number: #i18907#
Submitted by: dyf@openoffice.org Reviewed by: frank.schoenheit@sun.com
---
dbaccess/source/ui/misc/DExport.cxx | 190 ++++++++++++++++------------
1 file changed, 110 insertions(+), 80 deletions(-)
diff --git a/dbaccess/source/ui/misc/DExport.cxx b/dbaccess/source/ui/misc/DExport.cxx
index 3bc8dcefe407..39eadf7023df 100644
--- a/dbaccess/source/ui/misc/DExport.cxx
+++ b/dbaccess/source/ui/misc/DExport.cxx
@@ -4,9 +4,9 @@
*
* $RCSfile: DExport.cxx,v $
*
- * $Revision: 1.37 $
+ * $Revision: 1.38 $
*
- * last change: $Author: vg $ $Date: 2007-01-15 14:35:51 $
+ * last change: $Author: hr $ $Date: 2007-09-26 14:50:55 $
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
@@ -291,9 +291,11 @@ ODatabaseExport::ODatabaseExport(const SharedConnection& _rxConnection,
}
sal_Int32 nPos = 1;
+ OSL_ENSURE((nPos) < static_cast(aTypes.size()),"aTypes: Illegal index for vector");
aValue.fill(nPos,aTypes[nPos],xRow);
::rtl::OUString sTypeName = aValue;
++nPos;
+ OSL_ENSURE((nPos) < static_cast(aTypes.size()),"aTypes: Illegal index for vector");
aValue.fill(nPos,aTypes[nPos],xRow);
sal_Int32 nType = aValue;
++nPos;
@@ -305,6 +307,7 @@ ODatabaseExport::ODatabaseExport(const SharedConnection& _rxConnection,
m_pTypeInfo->aTypeName = sTypeName;
m_pTypeInfo->nType = nType;
+ OSL_ENSURE((nPos) < static_cast(aTypes.size()),"aTypes: Illegal index for vector");
aValue.fill(nPos,aTypes[nPos],xRow);
m_pTypeInfo->nPrecision = aValue;
++nPos;
@@ -380,91 +383,99 @@ void ODatabaseExport::insertValueIntoColumn()
if(pField)
{
sal_Int32 nNewPos = m_bIsAutoIncrement ? m_nColumnPos+1 : m_nColumnPos;
- OSL_ENSURE((nNewPos) < static_cast(m_vColumns.size()),"Illegal index for vector");
+ OSL_ENSURE((nNewPos) < static_cast(m_vColumns.size()),"m_vColumns: Illegal index for vector");
- sal_Int32 nPos = m_vColumns[nNewPos].first;
- if ( nPos != COLUMN_POSITION_NOT_FOUND )
+ if ( (nNewPos) < static_cast(m_vColumns.size() ) )
{
-// if(m_nDefToken != LANGUAGE_DONTKNOW) // falls Sprache anders als Systemsprache
-// m_pNF->ChangeIntl((LanguageType)m_nDefToken);
-
- if(!m_sTextToken.Len() && m_xResultSetMetaData->isNullable(nPos))
- m_pUpdateHelper->updateNull(nPos,pField->GetType());
- else
+ sal_Int32 nPos = m_vColumns[nNewPos].first;
+ if ( nPos != COLUMN_POSITION_NOT_FOUND )
{
- sal_Int32 nNumberFormat = 0;
- double fOutNumber = 0.0;
- OSL_ENSURE((nNewPos) < static_cast(m_vColumnTypes.size()),"Illegal index for vector");
- if (m_vColumnTypes[nNewPos] != DataType::VARCHAR)
- {
- Reference< XNumberFormatsSupplier > xSupplier = m_xFormatter->getNumberFormatsSupplier();
- Reference xNumberFormatSettings = xSupplier->getNumberFormatSettings();
- com::sun::star::util::Date aNullDate;
- xNumberFormatSettings->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NullDate"))) >>= aNullDate;
+ // if(m_nDefToken != LANGUAGE_DONTKNOW) // falls Sprache anders als Systemsprache
+ // m_pNF->ChangeIntl((LanguageType)m_nDefToken);
- ensureFormatter();
- if ( m_pFormatter && m_sNumToken.Len() )
+ if(!m_sTextToken.Len() && m_xResultSetMetaData->isNullable(nPos))
+ m_pUpdateHelper->updateNull(nPos,pField->GetType());
+ else
+ {
+ sal_Int32 nNumberFormat = 0;
+ double fOutNumber = 0.0;
+ OSL_ENSURE((nNewPos) < static_cast(m_vColumnTypes.size()),"Illegal index for vector");
+ if (m_vColumnTypes[nNewPos] != DataType::VARCHAR && m_vColumnTypes[nNewPos] != DataType::CHAR && m_vColumnTypes[nNewPos] != DataType::LONGVARCHAR )
{
- LanguageType eNumLang;
- sal_uInt32 nNumberFormat2;
- fOutNumber = SfxHTMLParser::GetTableDataOptionsValNum(nNumberFormat2,eNumLang,m_sTextToken,m_sNumToken,*m_pFormatter);
- nNumberFormat = static_cast(nNumberFormat2);
- }
- else
- {
- Reference xNumType(xSupplier->getNumberFormats(),UNO_QUERY);
- sal_Int16 nFormats[] = { NumberFormat::DATETIME
- ,NumberFormat::DATETIME
- ,NumberFormat::DATE
- ,NumberFormat::TIME
- ,NumberFormat::NUMBER
- ,NumberFormat::LOGICAL
- };
- for (size_t i = 0; i < sizeof(nFormats)/sizeof(nFormats[0]); ++i)
+ Reference< XNumberFormatsSupplier > xSupplier = m_xFormatter->getNumberFormatsSupplier();
+ Reference xNumberFormatSettings = xSupplier->getNumberFormatSettings();
+ com::sun::star::util::Date aNullDate;
+ xNumberFormatSettings->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NullDate"))) >>= aNullDate;
+
+ ensureFormatter();
+ bool bNumberFormatError = false;
+ if ( m_pFormatter && m_sNumToken.Len() )
{
+ LanguageType eNumLang;
+ sal_uInt32 nNumberFormat2;
+ fOutNumber = SfxHTMLParser::GetTableDataOptionsValNum(nNumberFormat2,eNumLang,m_sTextToken,m_sNumToken,*m_pFormatter);
+ nNumberFormat = static_cast(nNumberFormat2);
+ }
+ else
+ {
+ Reference xNumType(xSupplier->getNumberFormats(),UNO_QUERY);
+ sal_Int16 nFormats[] = { NumberFormat::DATETIME
+ ,NumberFormat::DATETIME
+ ,NumberFormat::DATE
+ ,NumberFormat::TIME
+ ,NumberFormat::NUMBER
+ ,NumberFormat::LOGICAL
+ };
+ for (size_t i = 0; i < sizeof(nFormats)/sizeof(nFormats[0]); ++i)
+ {
+ try
+ {
+ nNumberFormat = m_xFormatter->detectNumberFormat(xNumType->getStandardFormat(nFormats[i],m_aLocale),m_sTextToken);
+ break;
+ }
+ catch(Exception&)
+ {
+ }
+ }
try
{
- nNumberFormat = m_xFormatter->detectNumberFormat(xNumType->getStandardFormat(nFormats[i],m_aLocale),m_sTextToken);
- break;
+ fOutNumber = m_xFormatter->convertStringToNumber(nNumberFormat,m_sTextToken);
}
catch(Exception&)
{
+ bNumberFormatError = true;
+ m_pUpdateHelper->updateString(nPos,m_sTextToken);
}
}
- try
+ if ( !bNumberFormatError )
{
- fOutNumber = m_xFormatter->convertStringToNumber(nNumberFormat,m_sTextToken);
+ try
+ {
+ Reference< XNumberFormats > xFormats = xSupplier->getNumberFormats();
+ Reference xProp = xFormats->getByKey(nNumberFormat);
+ sal_Int16 nType = 0;
+ xProp->getPropertyValue(PROPERTY_TYPE) >>= nType;
+ switch(nType)
+ {
+ case NumberFormat::DATE:
+ case NumberFormat::DATETIME:
+ fOutNumber = ::dbtools::DBTypeConversion::toStandardDbDate(aNullDate,fOutNumber);
+ break;
+ default:
+ ;
+ }
+ m_pUpdateHelper->updateDouble(nPos,fOutNumber);//::dbtools::DBTypeConversion::getStandardDate()
+ }
+ catch(Exception&)
+ {
+ m_pUpdateHelper->updateString(nPos,m_sTextToken);
+ }
}
- catch(Exception&)
- {
- OSL_ENSURE(0,"Could not convert to number!");
- }
- }
- try
- {
- Reference< XNumberFormats > xFormats = xSupplier->getNumberFormats();
- Reference xProp = xFormats->getByKey(nNumberFormat);
- sal_Int16 nType = 0;
- xProp->getPropertyValue(PROPERTY_TYPE) >>= nType;
- switch(nType)
- {
- case NumberFormat::DATE:
- case NumberFormat::DATETIME:
- fOutNumber = ::dbtools::DBTypeConversion::toStandardDbDate(aNullDate,fOutNumber);
- break;
- default:
- ;
- }
- m_pUpdateHelper->updateDouble(nPos,fOutNumber);//::dbtools::DBTypeConversion::getStandardDate()
- }
- catch(Exception&)
- {
- m_pUpdateHelper->updateString(nPos,m_sTextToken);
- }
+ }
+ else
+ m_pUpdateHelper->updateString(nPos,m_sTextToken);
}
- else
- m_pUpdateHelper->updateString(nPos,m_sTextToken);
}
}
eraseTokens();
@@ -621,6 +632,8 @@ void ODatabaseExport::SetColumnTypes(const TColumnVector* _pList,const OTypeInfo
{
sal_Int32 nDataType;
sal_Int32 nLength(0),nScale(0);
+ OSL_ENSURE((i) < static_cast(m_vFormatKey.size()),"m_vFormatKey: Illegal index for vector");
+ OSL_ENSURE((i) < static_cast(m_vColumnSize.size()),"m_vColumnSize: Illegal index for vector");
Reference xProp = xFormats->getByKey(m_vFormatKey[i]);
sal_Int16 nType = 0;
xProp->getPropertyValue(PROPERTY_TYPE) >>= nType;
@@ -683,13 +696,11 @@ void ODatabaseExport::CreateDefaultColumn(const ::rtl::OUString& _rColumnName)
aAlias = ::dbtools::convertName2SQLName(_rColumnName,xDestMetaData->getExtraNameCharacters());
if(nMaxNameLen && aAlias.getLength() > nMaxNameLen)
- aAlias = aAlias.copy(0, ::std::min( nMaxNameLen, aAlias.getLength() ) );
+ aAlias = aAlias.copy(0, ::std::min( nMaxNameLen-1, aAlias.getLength() ) );
::rtl::OUString sName(aAlias);
if(m_aDestColumns.find(sName) != m_aDestColumns.end())
{
- aAlias = aAlias.copy(0,::std::min( nMaxNameLen-1, aAlias.getLength() ));
-
sal_Int32 nPos = 0;
sal_Int32 nCount = 2;
while(m_aDestColumns.find(sName) != m_aDestColumns.end())
@@ -765,14 +776,25 @@ sal_Bool ODatabaseExport::createRowSet()
sal_Bool ODatabaseExport::executeWizard(const ::rtl::OUString& _sTableName,const Any& _aTextColor,const FontDescriptor& _rFont)
{
DBG_CHKTHIS(ODatabaseExport,NULL);
- OCopyTableWizard aWizard(NULL,_sTableName,m_aDestColumns,m_vDestVector,m_xConnection,m_xFormatter,m_xFactory);
+ //--------dyf add 20070601
+ //if there is a table was selected,then create with m_sDefaultTableName,otherwise,with _sTableName
+ OCopyTableWizard aWizard(NULL,_sTableName,m_aDestColumns,m_vDestVector,m_xConnection,m_xFormatter,m_xFactory);
+ if (m_sDefaultTableName.getLength() != 0 )
+ {
+ aWizard.ResetsName(m_sDefaultTableName);
+ aWizard.setCreateStyle(OCopyTableWizard::WIZARD_APPEND_DATA);
+ }
sal_Bool bError = sal_False;
try
{
aWizard.fillTypeInfo();
- OCopyTable* pPage1 = new OCopyTable(&aWizard,COPY, sal_False,OCopyTableWizard::WIZARD_DEF_DATA);
+ OCopyTable* pPage1;
+ pPage1 = new OCopyTable(&aWizard,COPY, sal_False);
+ pPage1->setCreateStyleAction();
+ //---------dyf add end
+
OWizNameMatching* pPage2 = new OWizNameMatching(&aWizard);
OWizColumnSelect* pPage3 = new OWizColumnSelect(&aWizard);
OWizTypeSelect* pPage4 = createPage(&aWizard);
@@ -861,12 +883,19 @@ void ODatabaseExport::adjustFormat()
{
if ( m_sTextToken.Len() )
{
- sal_Int32 nColPos = m_vColumns[m_bIsAutoIncrement ? m_nColumnPos+1 : m_nColumnPos].first;
- if( nColPos != sal::static_int_cast< long >(CONTAINER_ENTRY_NOTFOUND))
+ sal_Int32 nNewPos = m_bIsAutoIncrement ? m_nColumnPos+1 : m_nColumnPos;
+ OSL_ENSURE((nNewPos) < static_cast(m_vColumns.size()),"Illegal index for vector");
+ if ( (nNewPos) < static_cast(m_vColumns.size()) )
{
- --nColPos;
- m_vFormatKey[nColPos] = CheckString(m_sTextToken,m_vFormatKey[nColPos]);
- m_vColumnSize[nColPos] = ::std::max((sal_Int32)m_vColumnSize[nColPos],(sal_Int32)m_sTextToken.Len());
+ sal_Int32 nColPos = m_vColumns[nNewPos].first;
+ if( nColPos != sal::static_int_cast< long >(CONTAINER_ENTRY_NOTFOUND))
+ {
+ --nColPos;
+ OSL_ENSURE((nColPos) < static_cast(m_vFormatKey.size()),"m_vFormatKey: Illegal index for vector");
+ OSL_ENSURE((nColPos) < static_cast(m_vColumnSize.size()),"m_vColumnSize: Illegal index for vector");
+ m_vFormatKey[nColPos] = CheckString(m_sTextToken,m_vFormatKey[nColPos]);
+ m_vColumnSize[nColPos] = ::std::max((sal_Int32)m_vColumnSize[nColPos],(sal_Int32)m_sTextToken.Len());
+ }
}
eraseTokens();
}
@@ -926,6 +955,7 @@ Reference< XPreparedStatement > ODatabaseExport::createPreparedStatment( const R
::std::compose1(::std::bind2nd(::std::equal_to(),i+1),::std::select2nd()));
if ( _rvColumns.end() != aFind && aFind->second != sal::static_int_cast< long >(CONTAINER_ENTRY_NOTFOUND) && aFind->first != sal::static_int_cast< long >(CONTAINER_ENTRY_NOTFOUND) )
{
+ OSL_ENSURE((aFind->first) < static_cast(aInsertList.size()),"aInsertList: Illegal index for vector");
aInsertList[aFind->first] = ::dbtools::quoteName( aQuote,*(pIter+i));
}
}