User: obo Date: 05/12/21 05:18:42 Modified: /dba/connectivity/source/parse/ sqliterator.cxx
Log: INTEGRATION: CWS dba202a (1.45.36); FILE MERGED 2005/11/25 08:25:07 oj 1.45.36.1: #i57084# accept parameter in scalar expression list 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.45&r2=1.46 Delta lines: +124 -111 ----------------------- --- sqliterator.cxx 8 Sep 2005 07:41:10 -0000 1.45 +++ sqliterator.cxx 21 Dec 2005 13:18:40 -0000 1.46 @@ -714,7 +714,7 @@ else if (SQL_ISRULE(pColumnRef,derived_column)) { ::rtl::OUString aColumnAlias(getColumnAlias(pColumnRef)); // kann leer sein - ::rtl::OUString aColumnName; + ::rtl::OUString sColumnName; ::rtl::OUString aTableRange; sal_Int32 nType = DataType::VARCHAR; sal_Bool bFkt(sal_False); @@ -728,8 +728,8 @@ if (SQL_ISRULE(pColumnRef,column_ref)) { - getColumnRange(pColumnRef,aColumnName,aTableRange); - OSL_ENSURE(aColumnName.getLength(),"Columnname darf nicht leer sein"); + getColumnRange(pColumnRef,sColumnName,aTableRange); + OSL_ENSURE(sColumnName.getLength(),"Columnname darf nicht leer sein"); } else /*if (SQL_ISRULE(pColumnRef,general_set_fct) || SQL_ISRULE(pColumnRef,set_fct_spec) || SQL_ISRULE(pColumnRef,position_exp) || SQL_ISRULE(pColumnRef,extract_exp) || @@ -737,7 +737,11 @@ SQL_ISRULE(pColumnRef,num_value_exp) || SQL_ISRULE(pColumnRef,term))*/ { /* Funktionsaufruf vorhanden */ - pColumnRef->parseNodeToStr(aColumnName,m_xDatabaseMetaData,NULL,sal_False,sal_True); + pColumnRef->parseNodeToStr(sColumnName,m_xDatabaseMetaData,NULL,sal_False,sal_True); + ::rtl::OUString sTableRange; + // check if the column is also a parameter + traverseORCriteria(pColumnRef); // num_value_exp + traverseParameter(pColumnRef,NULL,sColumnName,sTableRange); // gehoeren alle beteiligten Spalten der Funktion zu einer Tabelle if (m_aTables.size() == 1) @@ -774,8 +778,8 @@ } */ if(!aColumnAlias.getLength()) - aColumnAlias = aColumnName; - setSelectColumnName(m_aSelectColumns,aColumnName,aColumnAlias,aTableRange,bFkt,nType,SQL_ISRULE(pColumnRef,general_set_fct) || SQL_ISRULE(pColumnRef,set_fct_spec)); + aColumnAlias = sColumnName; + setSelectColumnName(m_aSelectColumns,sColumnName,aColumnAlias,aTableRange,bFkt,nType,SQL_ISRULE(pColumnRef,general_set_fct) || SQL_ISRULE(pColumnRef,set_fct_spec)); } } @@ -832,7 +836,7 @@ OSL_ENSURE(!_bOrder || SQL_ISRULE(pOrderingSpecCommalist,ordering_spec_commalist),"OSQLParseTreeIterator:ordering_spec_commalist Fehler im Parse Tree"); OSL_ENSURE(pOrderingSpecCommalist->count() > 0,"OSQLParseTreeIterator: Fehler im Parse Tree"); - ::rtl::OUString aColumnName,aColumnAlias; + ::rtl::OUString sColumnName,aColumnAlias; ::rtl::OUString aTableRange; sal_uInt32 nCount = pOrderingSpecCommalist->count(); for (sal_uInt32 i = 0; i < nCount; ++i) @@ -847,20 +851,20 @@ pColumnRef = pColumnRef->getChild(0); } aTableRange = ::rtl::OUString(); - aColumnName = ::rtl::OUString(); + sColumnName = ::rtl::OUString(); if ( SQL_ISRULE(pColumnRef,column_ref) ) { // Column-Name (und TableRange): if(SQL_ISRULE(pColumnRef,column_ref)) - getColumnRange(pColumnRef,aColumnName,aTableRange); + getColumnRange(pColumnRef,sColumnName,aTableRange); else // eine Expression - pColumnRef->parseNodeToStr(aColumnName,m_xDatabaseMetaData,NULL,sal_False,sal_False); + pColumnRef->parseNodeToStr(sColumnName,m_xDatabaseMetaData,NULL,sal_False,sal_False); - OSL_ENSURE(aColumnName.getLength(),"aColumnName darf nicht leer sein"); + OSL_ENSURE(sColumnName.getLength(),"sColumnName darf nicht leer sein"); } else { // here I found a predicate - pColumnRef->parseNodeToStr(aColumnName,m_xDatabaseMetaData,NULL,sal_False,sal_False); + pColumnRef->parseNodeToStr(sColumnName,m_xDatabaseMetaData,NULL,sal_False,sal_False); } OSL_ENSURE(pColumnRef != NULL,"OSQLParseTreeIterator: Fehler im Parse Tree"); if ( _bOrder ) @@ -870,10 +874,10 @@ OSL_ENSURE(pOptAscDesc != NULL,"OSQLParseTreeIterator: Fehler im Parse Tree"); sal_Bool bAscending = pOptAscDesc && SQL_ISTOKEN(pOptAscDesc,ASC); - setOrderByColumnName(aColumnName, aTableRange,bAscending); + setOrderByColumnName(sColumnName, aTableRange,bAscending); } else - setGroupByColumnName(aColumnName, aTableRange); + setGroupByColumnName(sColumnName, aTableRange); } } //----------------------------------------------------------------------------- @@ -1170,47 +1174,35 @@ } // Fehler einfach weiterreichen. } - //----------------------------------------------------------------------------- -void OSQLParseTreeIterator::traverseOnePredicate( - OSQLParseNode * pColumnRef, - sal_Int32 ePredicateType, - ::rtl::OUString& rValue, - sal_Bool bCompareNull, - OSQLParseNode * pParseNode) +void OSQLParseTreeIterator::traverseParameter(OSQLParseNode* _pParseNode + ,OSQLParseNode* _pColumnRef + ,const ::rtl::OUString& _aColumnName + ,const ::rtl::OUString& _aTableRange) { - - - // Column-Name (und TableRange): - ::rtl::OUString aColumnName; - ::rtl::OUString aTableRange; - getColumnRange(pColumnRef,aColumnName,aTableRange); - - ::rtl::OUString aName; - if (pParseNode) //event. Parameter, oder Columnref oder - { - if (SQL_ISRULE(pParseNode,parameter)) + if (SQL_ISRULE(_pParseNode,parameter)) { - OSL_ENSURE(pParseNode->count() > 0,"OSQLParseTreeIterator: Fehler im Parse Tree"); - OSQLParseNode * pMark = pParseNode->getChild(0); + OSL_ENSURE(_pParseNode->count() > 0,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSQLParseNode * pMark = _pParseNode->getChild(0); + ::rtl::OUString aName,rValue; ::rtl::OUString aParameterName; if (SQL_ISPUNCTUATION(pMark,"?")) { // Name = "?", da kein Parametername verfuegbar (z. B. bei Native SQL) rValue = ::rtl::OUString::createFromAscii("?"); - if(aColumnName.getLength()) - rValue = aColumnName; + if(_aColumnName.getLength()) + rValue = _aColumnName; aName = ::rtl::OUString::createFromAscii("?"); } else if (SQL_ISPUNCTUATION(pMark,":")) { - rValue = pParseNode->getChild(1)->getTokenValue(); + rValue = _pParseNode->getChild(1)->getTokenValue(); aName = ::rtl::OUString::createFromAscii(":"); } else if (SQL_ISPUNCTUATION(pMark,"[")) { - rValue = pParseNode->getChild(1)->getTokenValue(); + rValue = _pParseNode->getChild(1)->getTokenValue(); aName = ::rtl::OUString::createFromAscii("["); } else @@ -1218,10 +1210,10 @@ OSL_ASSERT("OSQLParseTreeIterator: Fehler im Parse Tree"); } // found a parameter - if(SQL_ISRULE(pColumnRef,general_set_fct) || SQL_ISRULE(pColumnRef,set_fct_spec)) + if ( _pColumnRef && (SQL_ISRULE(_pColumnRef,general_set_fct) || SQL_ISRULE(_pColumnRef,set_fct_spec)) ) {// found a function as column_ref ::rtl::OUString sFunctionName; - pColumnRef->getChild(0)->parseNodeToStr(sFunctionName,m_xDatabaseMetaData,NULL,sal_False,sal_False); + _pColumnRef->getChild(0)->parseNodeToStr(sFunctionName,m_xDatabaseMetaData,NULL,sal_False,sal_False); sal_Int32 nType = ::connectivity::OSQLParser::getFunctionReturnType(sFunctionName,m_pParser ? &m_pParser->getContext() : NULL); OParseColumn* pColumn = new OParseColumn( rValue , @@ -1242,27 +1234,27 @@ else { sal_Bool bNotFound = sal_True; - OSQLColumns::const_iterator aIter = ::connectivity::find(m_aSelectColumns->begin(),m_aSelectColumns->end(),aColumnName,m_aCaseEqual); + OSQLColumns::const_iterator aIter = ::connectivity::find(m_aSelectColumns->begin(),m_aSelectColumns->end(),_aColumnName,m_aCaseEqual); if(aIter != m_aSelectColumns->end()) { OParseColumn* pNewColumn = new OParseColumn(*aIter,m_aCaseEqual.isCaseSensitive()); pNewColumn->setName(rValue); - pNewColumn->setRealName(aColumnName); + pNewColumn->setRealName(_aColumnName); m_aParameters->push_back(pNewColumn); bNotFound = sal_False; } - else if(aColumnName.getLength())// search in the tables for the right one + else if(_aColumnName.getLength())// search in the tables for the right one { - Reference<XPropertySet> xColumn = findColumn(m_aTables,aColumnName,aTableRange); + Reference<XPropertySet> xColumn = findColumn(m_aTables,_aColumnName,_aTableRange); if ( !xColumn.is() ) - xColumn = findColumn(m_pImpl->m_aSubTables,aColumnName,aTableRange); + xColumn = findColumn(m_pImpl->m_aSubTables,_aColumnName,_aTableRange); if ( xColumn.is() ) { OParseColumn* pNewColumn = new OParseColumn(xColumn,m_aCaseEqual.isCaseSensitive()); pNewColumn->setName(rValue); - pNewColumn->setRealName(aColumnName); + pNewColumn->setRealName(_aColumnName); m_aParameters->push_back(pNewColumn); bNotFound = sal_False; } @@ -1287,6 +1279,27 @@ } } } +} +//----------------------------------------------------------------------------- +void OSQLParseTreeIterator::traverseOnePredicate( + OSQLParseNode * pColumnRef, + sal_Int32 ePredicateType, + ::rtl::OUString& rValue, + sal_Bool bCompareNull, + OSQLParseNode * pParseNode) +{ + + + // Column-Name (und TableRange): + ::rtl::OUString aColumnName; + ::rtl::OUString aTableRange; + getColumnRange(pColumnRef,aColumnName,aTableRange); + + ::rtl::OUString aName; + if (pParseNode) //event. Parameter, oder Columnref oder + { + if (SQL_ISRULE(pParseNode,parameter)) + traverseParameter(pParseNode,pColumnRef,aColumnName,aTableRange); else if (SQL_ISRULE(pParseNode,column_ref))// Column-Name (und TableRange): getColumnRange(pParseNode,aName,rValue); else --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
