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)

Change-Id: I6725dfda36b09429a78262bff6f3d3e3dd9032b6
This commit is contained in:
Lionel Elie Mamane
2013-07-11 16:53:23 +02:00
parent ad1049716a
commit 40370f759c
5 changed files with 95 additions and 35 deletions

View File

@@ -1868,7 +1868,9 @@ OUString OSQLParseTreeIterator::getUniqueColumnName(const OUString & rColumnName
void OSQLParseTreeIterator::setOrderByColumnName(const OUString & rColumnName, OUString & rTableRange, sal_Bool bAscending)
{
SAL_INFO( "connectivity.parse", "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
@@ -2045,6 +2047,30 @@ const OSQLParseNode* OSQLParseTreeIterator::getSimpleHavingTree() const
return pNode ? pNode->getChild(1) : NULL;
}
// -----------------------------------------------------------------------------
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 )
{