summaryrefslogtreecommitdiff
path: root/connectivity
diff options
context:
space:
mode:
authorLionel Elie Mamane <lionel@mamane.lu>2013-07-11 16:53:23 +0200
committerDavid Tardon <dtardon@redhat.com>2013-07-12 07:10:25 +0000
commit311fb8b75053c22ae5d5a5726c760489edaebe8c (patch)
treeda26edc7375de6215c99461b71b7f7c1f9b79efd /connectivity
parent99f8b0363ab3bddcd9ccffd2803b3ad99e569295 (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.cxx28
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" );