[Libreoffice-commits] core.git: dbaccess/source
Stephan Bergmann
sbergman at redhat.com
Thu Aug 7 00:46:14 PDT 2014
dbaccess/source/core/api/CRowSetDataColumn.cxx | 13 +
dbaccess/source/core/api/SingleSelectQueryComposer.cxx | 174 +++++++++--------
2 files changed, 106 insertions(+), 81 deletions(-)
New commits:
commit 90b09303ef4f9163428107be7b8db23022ce10b7
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Thu Aug 7 09:40:02 2014 +0200
Tunnel SQLException through getPropertyValue
Regression introduced with 03a2b4a80c5854bcb8520f2a43e485b98e3eba8f "fdo#82151
when constructing column object, replace m_aCurrentRow by a function," where
the other call to m_pGetValue in ORowSetDataColumn::fireValueChange appears OK,
as ORowSetBase::firePropertyChange already wraps the fireValueChange calls in a
try--catch.
Change-Id: I527cc35ae120cf083f7c69a9a23526839a2bbddb
diff --git a/dbaccess/source/core/api/CRowSetDataColumn.cxx b/dbaccess/source/core/api/CRowSetDataColumn.cxx
index a047725..50ff4ad 100644
--- a/dbaccess/source/core/api/CRowSetDataColumn.cxx
+++ b/dbaccess/source/core/api/CRowSetDataColumn.cxx
@@ -22,6 +22,7 @@
#include "dbastrings.hrc"
#include "apitools.hxx"
#include <comphelper/types.hxx>
+#include <cppuhelper/exc_hlp.hxx>
#include <cppuhelper/typeprovider.hxx>
#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <tools/debug.hxx>
@@ -105,7 +106,17 @@ void SAL_CALL ORowSetDataColumn::getFastPropertyValue( Any& rValue, sal_Int32 nH
{
if ( PROPERTY_ID_VALUE == nHandle )
{
- rValue = m_pGetValue(m_nPos).makeAny();
+ try
+ {
+ rValue = m_pGetValue(m_nPos).makeAny();
+ }
+ catch (css::sdbc::SQLException & e)
+ {
+ css::uno::Any a(cppu::getCaughtException());
+ throw css::lang::WrappedTargetException(
+ "wrapped css::sdbc::SQLException: " + e.Message,
+ css::uno::Reference<css::uno::XInterface>(), a);
+ }
}
else if ( PROPERTY_ID_LABEL == nHandle && !m_sLabel.isEmpty() )
rValue <<= m_sLabel;
diff --git a/dbaccess/source/core/api/SingleSelectQueryComposer.cxx b/dbaccess/source/core/api/SingleSelectQueryComposer.cxx
index 26134b2..34f12dc 100644
--- a/dbaccess/source/core/api/SingleSelectQueryComposer.cxx
+++ b/dbaccess/source/core/api/SingleSelectQueryComposer.cxx
@@ -1506,82 +1506,83 @@ void SAL_CALL OSingleSelectQueryComposer::setStructuredHavingClause( const Seque
void OSingleSelectQueryComposer::setConditionByColumn( const Reference< XPropertySet >& column, bool andCriteria ,::std::mem_fun1_t<bool,OSingleSelectQueryComposer,const OUString& >& _aSetFunctor,sal_Int32 filterOperator)
{
- ::connectivity::checkDisposed(OSubComponent::rBHelper.bDisposed);
-
- if ( !column.is()
- || !column->getPropertySetInfo()->hasPropertyByName(PROPERTY_VALUE)
- || !column->getPropertySetInfo()->hasPropertyByName(PROPERTY_NAME)
- || !column->getPropertySetInfo()->hasPropertyByName(PROPERTY_TYPE))
- throw SQLException(DBACORE_RESSTRING(RID_STR_COLUMN_NOT_VALID),*this,SQLSTATE_GENERAL,1000,Any() );
+ try
+ {
+ ::connectivity::checkDisposed(OSubComponent::rBHelper.bDisposed);
- sal_Int32 nType = 0;
- column->getPropertyValue(PROPERTY_TYPE) >>= nType;
- sal_Int32 nSearchable = dbtools::getSearchColumnFlag(m_xConnection,nType);
- if(nSearchable == ColumnSearch::NONE)
- throw SQLException(DBACORE_RESSTRING(RID_STR_COLUMN_NOT_SEARCHABLE),*this,SQLSTATE_GENERAL,1000,Any() );
+ if ( !column.is()
+ || !column->getPropertySetInfo()->hasPropertyByName(PROPERTY_VALUE)
+ || !column->getPropertySetInfo()->hasPropertyByName(PROPERTY_NAME)
+ || !column->getPropertySetInfo()->hasPropertyByName(PROPERTY_TYPE))
+ throw SQLException(DBACORE_RESSTRING(RID_STR_COLUMN_NOT_VALID),*this,SQLSTATE_GENERAL,1000,Any() );
- ::osl::MutexGuard aGuard( m_aMutex );
+ sal_Int32 nType = 0;
+ column->getPropertyValue(PROPERTY_TYPE) >>= nType;
+ sal_Int32 nSearchable = dbtools::getSearchColumnFlag(m_xConnection,nType);
+ if(nSearchable == ColumnSearch::NONE)
+ throw SQLException(DBACORE_RESSTRING(RID_STR_COLUMN_NOT_SEARCHABLE),*this,SQLSTATE_GENERAL,1000,Any() );
- OUString aName;
- column->getPropertyValue(PROPERTY_NAME) >>= aName;
+ ::osl::MutexGuard aGuard( m_aMutex );
- Any aValue;
- column->getPropertyValue(PROPERTY_VALUE) >>= aValue;
+ OUString aName;
+ column->getPropertyValue(PROPERTY_NAME) >>= aName;
- OUStringBuffer aSQL;
- const OUString aQuote = m_xMetaData->getIdentifierQuoteString();
- getColumns();
+ Any aValue;
+ column->getPropertyValue(PROPERTY_VALUE) >>= aValue;
- // TODO: if this is called for HAVING, check that the column is a GROUP BY column
- // or that it is an aggregate function
+ OUStringBuffer aSQL;
+ const OUString aQuote = m_xMetaData->getIdentifierQuoteString();
+ getColumns();
- if ( m_aCurrentColumns[SelectColumns] && m_aCurrentColumns[SelectColumns]->hasByName(aName) )
- {
- Reference<XPropertySet> xColumn;
- m_aCurrentColumns[SelectColumns]->getByName(aName) >>= xColumn;
- OSL_ENSURE(xColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_REALNAME),"Property REALNAME not available!");
- OSL_ENSURE(xColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_TABLENAME),"Property TABLENAME not available!");
- OSL_ENSURE(xColumn->getPropertySetInfo()->hasPropertyByName("AggregateFunction"),"Property AggregateFunction not available!");
+ // TODO: if this is called for HAVING, check that the column is a GROUP BY column
+ // or that it is an aggregate function
- OUString sRealName,sTableName;
- xColumn->getPropertyValue(PROPERTY_REALNAME) >>= sRealName;
- xColumn->getPropertyValue(PROPERTY_TABLENAME) >>= sTableName;
- if(sTableName.indexOf('.',0) != -1)
+ if ( m_aCurrentColumns[SelectColumns] && m_aCurrentColumns[SelectColumns]->hasByName(aName) )
{
- OUString aCatlog,aSchema,aTable;
- ::dbtools::qualifiedNameComponents(m_xMetaData,sTableName,aCatlog,aSchema,aTable,::dbtools::eInDataManipulation);
- sTableName = ::dbtools::composeTableName( m_xMetaData, aCatlog, aSchema, aTable, true, ::dbtools::eInDataManipulation );
- }
- else
- sTableName = ::dbtools::quoteName(aQuote,sTableName);
+ Reference<XPropertySet> xColumn;
+ m_aCurrentColumns[SelectColumns]->getByName(aName) >>= xColumn;
+ OSL_ENSURE(xColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_REALNAME),"Property REALNAME not available!");
+ OSL_ENSURE(xColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_TABLENAME),"Property TABLENAME not available!");
+ OSL_ENSURE(xColumn->getPropertySetInfo()->hasPropertyByName("AggregateFunction"),"Property AggregateFunction not available!");
+
+ OUString sRealName,sTableName;
+ xColumn->getPropertyValue(PROPERTY_REALNAME) >>= sRealName;
+ xColumn->getPropertyValue(PROPERTY_TABLENAME) >>= sTableName;
+ if(sTableName.indexOf('.',0) != -1)
+ {
+ OUString aCatlog,aSchema,aTable;
+ ::dbtools::qualifiedNameComponents(m_xMetaData,sTableName,aCatlog,aSchema,aTable,::dbtools::eInDataManipulation);
+ sTableName = ::dbtools::composeTableName( m_xMetaData, aCatlog, aSchema, aTable, true, ::dbtools::eInDataManipulation );
+ }
+ else
+ sTableName = ::dbtools::quoteName(aQuote,sTableName);
- if ( !::comphelper::getBOOL(xColumn->getPropertyValue("Function")) )
- {
- aSQL = sTableName + "." + ::dbtools::quoteName( aQuote, sRealName );
+ if ( !::comphelper::getBOOL(xColumn->getPropertyValue("Function")) )
+ {
+ aSQL = sTableName + "." + ::dbtools::quoteName( aQuote, sRealName );
+ }
+ else
+ aSQL = sRealName;
}
else
- aSQL = sRealName;
-
- }
- else
- {
- aSQL = getTableAlias( column ) + ::dbtools::quoteName( aQuote, aName );
- }
-
- if ( aValue.hasValue() )
- {
- if( !m_xTypeConverter.is() )
- m_xTypeConverter.set( Converter::create(m_aContext) );
- OSL_ENSURE(m_xTypeConverter.is(),"NO typeconverter!");
-
- if ( nType != DataType::BOOLEAN && DataType::BIT != nType )
{
- OUString sEmpty;
- lcl_addFilterCriteria_throw(filterOperator,sEmpty,aSQL);
+ aSQL = getTableAlias( column ) + ::dbtools::quoteName( aQuote, aName );
}
- switch(nType)
+ if ( aValue.hasValue() )
{
+ if( !m_xTypeConverter.is() )
+ m_xTypeConverter.set( Converter::create(m_aContext) );
+ OSL_ENSURE(m_xTypeConverter.is(),"NO typeconverter!");
+
+ if ( nType != DataType::BOOLEAN && DataType::BIT != nType )
+ {
+ OUString sEmpty;
+ lcl_addFilterCriteria_throw(filterOperator,sEmpty,aSQL);
+ }
+
+ switch(nType)
+ {
case DataType::VARCHAR:
case DataType::CHAR:
case DataType::LONGVARCHAR:
@@ -1642,31 +1643,44 @@ void OSingleSelectQueryComposer::setConditionByColumn( const Reference< XPropert
default:
aSQL.append( DBTypeConversion::toSQLString( nType, aValue, true, m_xTypeConverter ) );
break;
+ }
+ }
+ else
+ {
+ sal_Int32 nFilterOp = filterOperator;
+ if ( filterOperator != SQLFilterOperator::SQLNULL && filterOperator != SQLFilterOperator::NOT_SQLNULL )
+ nFilterOp = SQLFilterOperator::SQLNULL;
+ OUString sEmpty;
+ lcl_addFilterCriteria_throw(nFilterOp,sEmpty,aSQL);
}
- }
- else
- {
- sal_Int32 nFilterOp = filterOperator;
- if ( filterOperator != SQLFilterOperator::SQLNULL && filterOperator != SQLFilterOperator::NOT_SQLNULL )
- nFilterOp = SQLFilterOperator::SQLNULL;
- OUString sEmpty;
- lcl_addFilterCriteria_throw(nFilterOp,sEmpty,aSQL);
- }
- // Attach filter
- // Construct SELECT without WHERE and ORDER BY
- OUString sFilter = getFilter();
+ // Attach filter
+ // Construct SELECT without WHERE and ORDER BY
+ OUString sFilter = getFilter();
+
+ if ( !sFilter.isEmpty() && !aSQL.isEmpty() )
+ {
+ OUString sTemp(L_BRACKET + sFilter + R_BRACKET);
+ sTemp += andCriteria ? OUString(STR_AND) : OUString(STR_OR);
+ sFilter = sTemp;
+ }
+ sFilter += aSQL.makeStringAndClear();
- if ( !sFilter.isEmpty() && !aSQL.isEmpty() )
+ // add the filter and the sort order
+ _aSetFunctor(this,sFilter);
+ }
+ catch (css::lang::WrappedTargetException & e)
{
- OUString sTemp(L_BRACKET + sFilter + R_BRACKET);
- sTemp += andCriteria ? OUString(STR_AND) : OUString(STR_OR);
- sFilter = sTemp;
+ if (e.TargetException.isExtractableTo(
+ cppu::UnoType<css::sdbc::SQLException>::get()))
+ {
+ cppu::throwException(e.TargetException);
+ }
+ else
+ {
+ throw e;
+ }
}
- sFilter += aSQL.makeStringAndClear();
-
- // add the filter and the sort order
- _aSetFunctor(this,sFilter);
}
Sequence< Sequence< PropertyValue > > OSingleSelectQueryComposer::getStructuredCondition( TGetParseNode& _aGetFunctor )
More information about the Libreoffice-commits
mailing list