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]

Reply via email to