Author: kschenk
Date: Thu Sep 18 22:49:12 2014
New Revision: 1626099
URL: http://svn.apache.org/r1626099
Log:
#i121492
Patch by: hanya
Fixed date filter problems in table view. Now processes old style date format
and "normal" for database as expected.
Modified:
openoffice/trunk/main/dbaccess/source/core/api/SingleSelectQueryComposer.cxx
Modified:
openoffice/trunk/main/dbaccess/source/core/api/SingleSelectQueryComposer.cxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/dbaccess/source/core/api/SingleSelectQueryComposer.cxx?rev=1626099&r1=1626098&r2=1626099&view=diff
==============================================================================
---
openoffice/trunk/main/dbaccess/source/core/api/SingleSelectQueryComposer.cxx
(original)
+++
openoffice/trunk/main/dbaccess/source/core/api/SingleSelectQueryComposer.cxx
Thu Sep 18 22:49:12 2014
@@ -1507,7 +1507,44 @@ Reference< XIndexAccess > SAL_CALL OSing
//
-----------------------------------------------------------------------------
namespace
{
- ::rtl::OUString lcl_getCondition(const Sequence< Sequence<
PropertyValue > >& filter,const OPredicateInputController&
i_aPredicateInputController,const Reference< XNameAccess >& i_xSelectColumns)
+ ::rtl::OUString lcl_getDecomposedColumnName( const ::rtl::OUString&
rComposedName, const ::rtl::OUString& rQuoteString )
+ {
+ const sal_Int32 nQuoteLength = rQuoteString.getLength();
+ ::rtl::OUString sName = rComposedName.trim();
+ ::rtl::OUString sColumnName;
+ sal_Int32 nPos, nRPos = 0;
+
+ for (;;)
+ {
+ nPos = sName.indexOf( rQuoteString, nRPos );
+ if ( nPos >= 0 )
+ {
+ nRPos = sName.indexOf( rQuoteString, nPos + nQuoteLength );
+ if ( nRPos > nPos )
+ {
+ if ( nRPos + nQuoteLength < sName.getLength() )
+ {
+ nRPos += nQuoteLength; // -1 + 1 skip dot
+ }
+ else
+ {
+ sColumnName = sName.copy( nPos + nQuoteLength, nRPos -
nPos - nQuoteLength );
+ break;
+ }
+ }
+ else
+ break;
+ }
+ else
+ break;
+ }
+ return sColumnName.isEmpty() ? rComposedName : sColumnName;
+ }
+
+ ::rtl::OUString lcl_getCondition(const Sequence< Sequence<
PropertyValue > >& filter,
+ const OPredicateInputController& i_aPredicateInputController,
+ const Reference< XNameAccess >& i_xSelectColumns,
+ const ::rtl::OUString& rQuoteString )
{
::rtl::OUStringBuffer sRet;
const Sequence< PropertyValue >* pOrIter =
filter.getConstArray();
@@ -1524,9 +1561,10 @@ namespace
sRet.append(pAndIter->Name);
::rtl::OUString sValue;
pAndIter->Value >>= sValue;
- if ( i_xSelectColumns.is() &&
i_xSelectColumns->hasByName(pAndIter->Name) )
+ const ::rtl::OUString sColumnName =
lcl_getDecomposedColumnName( pAndIter->Name, rQuoteString );
+ if ( i_xSelectColumns.is() &&
i_xSelectColumns->hasByName(sColumnName) )
{
- Reference<XPropertySet>
xColumn(i_xSelectColumns->getByName(pAndIter->Name),UNO_QUERY);
+ Reference<XPropertySet>
xColumn(i_xSelectColumns->getByName(sColumnName),UNO_QUERY);
sValue =
i_aPredicateInputController.getPredicateValue(sValue,xColumn,sal_True);
}
else
@@ -1552,14 +1590,14 @@ void SAL_CALL OSingleSelectQueryComposer
{
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "[email protected]",
"OSingleSelectQueryComposer::setStructuredFilter" );
OPredicateInputController
aPredicateInput(m_aContext.getLegacyServiceFactory(),m_xConnection);
- setFilter(lcl_getCondition(filter,aPredicateInput,getColumns()));
+ setFilter(lcl_getCondition(filter,aPredicateInput,getColumns(),
m_xMetaData->getIdentifierQuoteString()));
}
//
-----------------------------------------------------------------------------
void SAL_CALL OSingleSelectQueryComposer::setStructuredHavingClause( const
Sequence< Sequence< PropertyValue > >& filter ) throw (SQLException,
RuntimeException)
{
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbaccess", "[email protected]",
"OSingleSelectQueryComposer::setStructuredHavingClause" );
OPredicateInputController
aPredicateInput(m_aContext.getLegacyServiceFactory(),m_xConnection);
- setHavingClause(lcl_getCondition(filter,aPredicateInput,getColumns()));
+ setHavingClause(lcl_getCondition(filter,aPredicateInput,getColumns(),
m_xMetaData->getIdentifierQuoteString()));
}
//
-----------------------------------------------------------------------------
void OSingleSelectQueryComposer::setConditionByColumn( const Reference<
XPropertySet >& column, sal_Bool andCriteria
,::std::mem_fun1_t<bool,OSingleSelectQueryComposer,::rtl::OUString>&
_aSetFunctor,sal_Int32 filterOperator)