User: ihi Date: 2006/08/22 05:51:44 Modified: dba/connectivity/source/parse/sqliterator.cxx
Log: INTEGRATION: CWS dba204d_SRC680 (1.49.8); FILE MERGED 2006/08/15 10:36:59 fs 1.49.8.1: #i68601# setSelectColumnName: also create a column for plain expressions File Changes: Directory: /dba/connectivity/source/parse/ ========================================== File [changed]: sqliterator.cxx Url: http://dba.openoffice.org/source/browse/dba/connectivity/source/parse/sqliterator.cxx?r1=1.49&r2=1.50 Delta lines: +57 -38 --------------------- --- sqliterator.cxx 4 Aug 2006 13:50:09 -0000 1.49 +++ sqliterator.cxx 22 Aug 2006 12:51:42 -0000 1.50 @@ -1603,13 +1603,13 @@ void OSQLParseTreeIterator::setSelectColumnName(::vos::ORef<OSQLColumns>& _rColumns,const ::rtl::OUString & rColumnName,const ::rtl::OUString & rColumnAlias, const ::rtl::OUString & rTableRange,sal_Bool bFkt,sal_Int32 _nType,sal_Bool bAggFkt) { if(rColumnName.toChar() == '*' && !rTableRange.getLength()) - { // Suche "uber alle vorkommenden Tabellen + { // SELECT * ... OSL_ENSURE(_rColumns == m_aSelectColumns,"Invalid columns used here!"); for(ConstOSQLTablesIterator aIter = m_pImpl->m_pTables->begin(); aIter != m_pImpl->m_pTables->end();++aIter) appendColumns(_rColumns,aIter->first,aIter->second); } - else if(rColumnName.toChar() == '*' && rTableRange.getLength()) // alle Columns aus dieser Tabelle - { + else if( rColumnName.toChar() == '*' && rTableRange.getLength() ) + { // SELECT <table>.* OSL_ENSURE(_rColumns == m_aSelectColumns,"Invalid columns used here!"); ConstOSQLTablesIterator aFind = m_pImpl->m_pTables->find(rTableRange); @@ -1622,43 +1622,62 @@ else appendColumns(_rColumns,rTableRange,aFind->second); } - else if( !rTableRange.getLength() )// ein Columnname existiert - { - if(!bFkt) + else if ( !rTableRange.getLength() ) + { // SELECT <something> ... + // without table specified + if ( !bFkt ) { - sal_uInt32 ncount = _rColumns->size(); + Reference< XPropertySet> xNewColumn; - for(OSQLTablesIterator aIter = m_pImpl->m_pTables->begin(); aIter != m_pImpl->m_pTables->end(); ++aIter) + for ( OSQLTablesIterator aIter = m_pImpl->m_pTables->begin(); aIter != m_pImpl->m_pTables->end(); ++aIter ) { - if (aIter->second.is()) - { - Reference<XNameAccess> xColumns = aIter->second->getColumns(); + if ( !aIter->second.is() ) + continue; + Reference<XNameAccess> xColumns = aIter->second->getColumns(); Reference< XPropertySet > xColumn; - if ( xColumns->hasByName(rColumnName) && (xColumns->getByName(rColumnName) >>= xColumn) ) - { - OSL_ENSURE(xColumn.is(),"Column isn't a propertyset!"); + if ( !xColumns->hasByName( rColumnName ) + || !( xColumns->getByName( rColumnName ) >>= xColumn ) + ) + continue; + ::rtl::OUString aNewColName(getUniqueColumnName(rColumnAlias)); - Reference< XPropertySet> xCol; OParseColumn* pColumn = new OParseColumn(xColumn,isCaseSensitive()); - xCol = pColumn; + xNewColumn = pColumn; pColumn->setTableName(aIter->first); pColumn->setName(aNewColName); pColumn->setRealName(rColumnName); - _rColumns->push_back(xCol); - continue; // diese Column darf nur einmal vorkommen - } + break; } - } - if ( ncount == _rColumns->size() ) + + if ( !xNewColumn.is() ) { - ::rtl::OUString strExpression = rTableRange; - if (strExpression.getLength()) - strExpression += ::rtl::OUString::createFromAscii("."); - strExpression += rColumnName; + // no function (due to the above !bFkt), no existing column + // => assume an expression + ::rtl::OUString aNewColName( getUniqueColumnName( rColumnAlias ) ); + // did not find a column with this name in any of the tables + OParseColumn* pColumn = new OParseColumn( + aNewColName, + ::rtl::OUString::createFromAscii( "VARCHAR" ), + // TODO: does this match with _nType? + // Or should be fill this from the getTypeInfo of the connection? + ::rtl::OUString(), + ColumnValue::NULLABLE_UNKNOWN, + 0, + 0, + _nType, + sal_False, + sal_False, + isCaseSensitive() + ); + + xNewColumn = pColumn; + pColumn->setRealName( rColumnName ); } + + _rColumns->push_back( xNewColumn ); } else { @@ -1666,7 +1685,7 @@ OParseColumn* pColumn = new OParseColumn(aNewColName,::rtl::OUString(),::rtl::OUString(), ColumnValue::NULLABLE_UNKNOWN,0,0,_nType,sal_False,sal_False,isCaseSensitive()); - pColumn->setFunction(bFkt); + pColumn->setFunction(sal_True); pColumn->setAggregateFunction(bAggFkt); pColumn->setRealName(rColumnName); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
