diff options
author | Lionel Elie Mamane <lionel@mamane.lu> | 2013-07-11 16:53:23 +0200 |
---|---|---|
committer | David Tardon <dtardon@redhat.com> | 2013-07-12 07:10:25 +0000 |
commit | 311fb8b75053c22ae5d5a5726c760489edaebe8c (patch) | |
tree | da26edc7375de6215c99461b71b7f7c1f9b79efd /connectivity | |
parent | 99f8b0363ab3bddcd9ccffd2803b3ad99e569295 (diff) |
ORDER BY columns are prioritarily *SELECT* columns
as opposed to *table* columns,
and notwithstanding HSQLDB 1.8 (our embedded database) bugs.
Actually, supporting ORDER BY on non-select (but table) columns is OPTIONAL for DBMSs
(but quite common)
Conflicts:
connectivity/source/parse/sqliterator.cxx
Change-Id: I6725dfda36b09429a78262bff6f3d3e3dd9032b6
Reviewed-on: https://gerrit.libreoffice.org/4836
Reviewed-by: David Tardon <dtardon@redhat.com>
Tested-by: David Tardon <dtardon@redhat.com>
Diffstat (limited to 'connectivity')
-rw-r--r-- | connectivity/source/parse/sqliterator.cxx | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/connectivity/source/parse/sqliterator.cxx b/connectivity/source/parse/sqliterator.cxx index 8d0e20f4e890..7065e66a9b74 100644 --- a/connectivity/source/parse/sqliterator.cxx +++ b/connectivity/source/parse/sqliterator.cxx @@ -1863,7 +1863,9 @@ OUString OSQLParseTreeIterator::getUniqueColumnName(const OUString & rColumnName void OSQLParseTreeIterator::setOrderByColumnName(const OUString & rColumnName, OUString & rTableRange, sal_Bool bAscending) { RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "parse", "Ocke.Janssen@sun.com", "OSQLParseTreeIterator::setOrderByColumnName" ); - Reference<XPropertySet> xColumn = findColumn( rColumnName, rTableRange, false ); + Reference<XPropertySet> xColumn = findSelectColumn( rColumnName ); + if ( !xColumn.is() ) + xColumn = findColumn ( rColumnName, rTableRange, false ); if ( xColumn.is() ) m_aOrderColumns->get().push_back(new OOrderColumn( xColumn, rTableRange, isCaseSensitive(), bAscending ) ); else @@ -2041,6 +2043,30 @@ const OSQLParseNode* OSQLParseTreeIterator::getSimpleHavingTree() const } // ----------------------------------------------------------------------------- +Reference< XPropertySet > OSQLParseTreeIterator::findSelectColumn( const OUString & rColumnName ) +{ + SAL_INFO( "connectivity.parse", "parse lionel@mamane.lu OSQLParseTreeIterator::findSelectColumn" ); + for ( OSQLColumns::Vector::const_iterator lookupColumn = m_aSelectColumns->get().begin(); + lookupColumn != m_aSelectColumns->get().end(); + ++lookupColumn ) + { + Reference< XPropertySet > xColumn( *lookupColumn ); + try + { + OUString sName, sTableName; + xColumn->getPropertyValue( OMetaConnection::getPropMap().getNameByIndex( PROPERTY_ID_NAME ) ) >>= sName; + if ( sName == rColumnName ) + return xColumn; + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + } + return NULL; +} + +// ----------------------------------------------------------------------------- Reference< XPropertySet > OSQLParseTreeIterator::findColumn( const OUString & rColumnName, OUString & rTableRange, bool _bLookInSubTables ) { RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "parse", "Ocke.Janssen@sun.com", "OSQLParseTreeIterator::findColumn" ); |