Tag: cws_src680_qiq User: fs Date: 06/06/07 05:18:09 Modified: /dba/connectivity/source/parse/ sqliterator.cxx
Log: #i51143# allow subqueries in FROM / getTableRef -> getTableNode 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.46.78.5&r2=1.46.78.6 Delta lines: +124 -111 ----------------------- --- sqliterator.cxx 23 May 2006 13:54:37 -0000 1.46.78.5 +++ sqliterator.cxx 7 Jun 2006 12:18:06 -0000 1.46.78.6 @@ -4,9 +4,9 @@ * * $RCSfile: sqliterator.cxx,v $ * - * $Revision: 1.46.78.5 $ + * $Revision: 1.46.78.6 $ * - * last change: $Author: fs $ $Date: 2006/05/23 13:54:37 $ + * last change: $Author: fs $ $Date: 2006/06/07 12:18:06 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -449,74 +449,81 @@ //----------------------------------------------------------------------------- void OSQLParseTreeIterator::getQualified_join( OSQLTables& _rTables, const OSQLParseNode *pTableRef, ::rtl::OUString& aTableRange ) { + OSL_PRECOND( SQL_ISRULE( pTableRef, joined_table ) || SQL_ISRULE( pTableRef, cross_union ), + "OSQLParseTreeIterator::getQualified_join: illegal node!" ); aTableRange = ::rtl::OUString(); - const OSQLParseNode* pNode = getTableRef(_rTables,pTableRef->getChild(0),aTableRange); - if(isTableNode(pNode)) + const OSQLParseNode* pNode = getTableNode(_rTables,pTableRef->getChild(0),aTableRange); + if ( isTableNode( pNode ) ) traverseOneTableName( _rTables, pNode, aTableRange ); sal_uInt32 nPos = 4; if(SQL_ISRULE(pTableRef,cross_union) || pTableRef->getChild(1)->getTokenID() != SQL_TOKEN_NATURAL) nPos = 3; - pNode = getTableRef(_rTables,pTableRef->getChild(nPos),aTableRange); + pNode = getTableNode(_rTables,pTableRef->getChild(nPos),aTableRange); if ( isTableNode( pNode ) ) traverseOneTableName( _rTables, pNode, aTableRange ); } //----------------------------------------------------------------------------- -const OSQLParseNode* OSQLParseTreeIterator::getTableRef( OSQLTables& _rTables, const OSQLParseNode *pTableRef,::rtl::OUString& aTableRange ) +const OSQLParseNode* OSQLParseTreeIterator::getTableNode( OSQLTables& _rTables, const OSQLParseNode *pTableRef,::rtl::OUString& aTableRange ) { + OSL_PRECOND( SQL_ISRULE( pTableRef, table_ref ) || SQL_ISRULE( pTableRef, joined_table ) + || SQL_ISRULE( pTableRef, qualified_join ) || SQL_ISRULE( pTableRef, cross_union ) + || SQL_ISRULE( pTableRef, subquery ), + "OSQLParseTreeIterator::getTableNode: only to be called for table_ref nodes!" ); + + const OSQLParseNode* pTableNameNode = NULL; - const OSQLParseNode *pTableName = pTableRef; - if (pTableName->count() == 4 ) + if ( SQL_ISRULE( pTableRef, joined_table ) ) { - if(SQL_ISPUNCTUATION(pTableName->getChild(0),"{")) - { // { OJ joined_table } - getQualified_join(_rTables,pTableName->getChild(2),aTableRange); - pTableName = NULL; + getQualified_join( _rTables, pTableRef->getChild(1), aTableRange ); + } + else if ( SQL_ISRULE( pTableRef, qualified_join ) || SQL_ISRULE( pTableRef, cross_union ) ) + { + getQualified_join( _rTables, pTableRef, aTableRange ); } else { - // Tabellennamen gefunden - if(!isTableNode(pTableName)) - pTableName = pTableRef->getChild(0); - aTableRange = ::rtl::OUString(); - if(pTableRef->count() == 4) - aTableRange = pTableRef->getChild(2)->getTokenValue(); // Tabellenrange an Pos 2 + if ( pTableRef->count() == 4 ) + { + if ( SQL_ISPUNCTUATION( pTableRef->getChild(0), "{" ) ) + { // { OJ joined_table } + getQualified_join( _rTables, pTableRef->getChild(2), aTableRange ); } + else + { // table_node as range_variable op_column_commalist + pTableNameNode = pTableRef->getChild(0); + aTableRange = pTableRef->getChild(2)->getTokenValue(); } - else if(SQL_ISRULE(pTableName,table_ref)) - { - pTableName = pTableRef->getChild(0); - aTableRange = ::rtl::OUString(); } - else if(SQL_ISRULE(pTableName,qualified_join) || SQL_ISRULE(pTableName,cross_union)) + else if ( pTableRef->count() == 3 ) + { // subquery as range_variable + const OSQLParseNode* pSubQuery = pTableRef->getChild(0); + OSL_ENSURE( pSubQuery->count() == 3, "sub queries should have 3 children!" ); + const OSQLParseNode* pQueryExpression = pSubQuery->getChild(1); + if ( SQL_ISRULE( pQueryExpression, select_statement ) ) { - getQualified_join(_rTables,pTableRef,aTableRange); - pTableName = NULL; + getSelect_statement( *m_pImpl->m_pSubTables, pQueryExpression ); + aTableRange = pTableRef->getChild(2)->getTokenValue(); } - else if (SQL_ISRULE(pTableName,joined_table)) + else { - // '(' qualified_join ')' - getQualified_join(_rTables,pTableName->getChild(1),aTableRange); - pTableName = NULL; + OSL_ENSURE( false, "OSQLParseTreeIterator::getTableNode: subquery which is no select_statement: not yet implemented!" ); + } } - else if(pTableRef->count() == 6) + else if ( pTableRef->count() == 6 ) { // '(' joined_table ')' as range_variable op_column_commalist - if(SQL_ISRULE(pTableRef->getChild(1),qualified_join) || SQL_ISRULE(pTableRef->getChild(1),cross_union)) - getQualified_join(_rTables,pTableRef->getChild(1),aTableRange); - else if(SQL_ISRULE(pTableRef->getChild(1),select_statement)) // Unterabfrage - getSelect_statement(_rTables,pTableRef->getChild(1)); - else if(pTableRef->getChild(1)->count() == 4) - // pTableRef->getChild(1) ->> non_join_query_exp - getSelect_statement(_rTables,pTableRef->getChild(0)); // query_exp SQL_TOKEN_UNION all query_term - else - {// nyi: tiefere Verschachtelung m"oglch + getQualified_join( _rTables, pTableRef->getChild(1), aTableRange ); + aTableRange = pTableRef->getChild(4)->getTokenValue(); } + else + OSL_ENSURE( false, "OSQLParseTreeIterator::getTableNode: unhandled case!" ); } - return pTableName; + + return pTableNameNode; } //----------------------------------------------------------------------------- void OSQLParseTreeIterator::getSelect_statement(OSQLTables& _rTables,const OSQLParseNode* pSelect) @@ -529,8 +536,8 @@ } OSQLParseNode * pTableRefCommalist = pSelect->getChild(3)->getChild(0)->getChild(1); - OSL_ENSURE(pTableRefCommalist != NULL,"OSQLParseTreeIterator: Fehler im Parse Tree"); - OSL_ENSURE(SQL_ISRULE(pTableRefCommalist,table_ref_commalist),"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pTableRefCommalist != NULL,"OSQLParseTreeIterator: error in parse tree!"); + OSL_ENSURE(SQL_ISRULE(pTableRefCommalist,table_ref_commalist),"OSQLParseTreeIterator: error in parse tree!"); const OSQLParseNode* pTableName = NULL; ::rtl::OUString aTableRange; @@ -549,23 +556,29 @@ pTableName = pTableListElement->getChild(0); if( isTableNode( pTableName ) ) { // Tabellennamen gefunden - if ( pTableListElement->count() == 4 ) // Tabellenrange an Pos 2 + if ( pTableListElement->count() == 4 ) + { // table_node as range_variable op_column_commalist + OSL_ENSURE( pTableListElement->getChild(1)->getKnownRuleID() == OSQLParseNode::as, + "OSQLParseTreeIterator::getSelect_statement: table_ref rules changed?" ); aTableRange = pTableListElement->getChild(2)->getTokenValue(); + } traverseOneTableName( _rTables, pTableName, aTableRange ); } else if(SQL_ISPUNCTUATION(pTableName,"{")) + { // '{' SQL_TOKEN_OJ joined_table '}' getQualified_join( _rTables, pTableListElement->getChild(2), aTableRange ); - else // '(' joined_table ')' as range_variable op_column_commalist - getTableRef( _rTables, pTableListElement, aTableRange ); + } + else + { // '(' joined_table ')' as range_variable op_column_commalist + getTableNode( _rTables, pTableListElement, aTableRange ); + } } else if (SQL_ISRULE( pTableListElement, qualified_join ) || SQL_ISRULE( pTableListElement, cross_union ) ) { - // qualified_join oder cross_union vorhanden getQualified_join( _rTables, pTableListElement, aTableRange ); } else if ( SQL_ISRULE( pTableListElement, joined_table ) ) { - // '(' qualified_join ')' getQualified_join( _rTables, pTableListElement->getChild(1), aTableRange ); } @@ -971,26 +984,26 @@ return; } - OSL_ENSURE(pSelectNode->count() >= 4,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pSelectNode->count() >= 4,"OSQLParseTreeIterator: error in parse tree!"); OSQLParseNode * pTableExp = pSelectNode->getChild(3); - OSL_ENSURE(pTableExp != NULL,"OSQLParseTreeIterator: Fehler im Parse Tree"); - OSL_ENSURE(SQL_ISRULE(pTableExp,table_exp),"OSQLParseTreeIterator:table_exp Fehler im Parse Tree"); - OSL_ENSURE(pTableExp->count() == 5,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pTableExp != NULL,"OSQLParseTreeIterator: error in parse tree!"); + OSL_ENSURE(SQL_ISRULE(pTableExp,table_exp),"OSQLParseTreeIterator:table_exp error in parse tree!"); + OSL_ENSURE(pTableExp->count() == 5,"OSQLParseTreeIterator: error in parse tree!"); sal_uInt32 nPos = ( _bOrder ? 4 : 2 ); OSQLParseNode * pOptByClause = pTableExp->getChild(nPos); - OSL_ENSURE(pOptByClause != NULL,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pOptByClause != NULL,"OSQLParseTreeIterator: error in parse tree!"); if ( pOptByClause->count() == 0 ) return; - OSL_ENSURE(pOptByClause->count() == 3,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pOptByClause->count() == 3,"OSQLParseTreeIterator: error in parse tree!"); OSQLParseNode * pOrderingSpecCommalist = pOptByClause->getChild(2); - OSL_ENSURE(pOrderingSpecCommalist != NULL,"OSQLParseTreeIterator: Fehler im Parse Tree"); - 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"); + OSL_ENSURE(pOrderingSpecCommalist != NULL,"OSQLParseTreeIterator: error in parse tree!"); + OSL_ENSURE(!_bOrder || SQL_ISRULE(pOrderingSpecCommalist,ordering_spec_commalist),"OSQLParseTreeIterator:ordering_spec_commalist error in parse tree!"); + OSL_ENSURE(pOrderingSpecCommalist->count() > 0,"OSQLParseTreeIterator: error in parse tree!"); ::rtl::OUString sColumnName,aColumnAlias; ::rtl::OUString aTableRange; @@ -998,11 +1011,11 @@ for (sal_uInt32 i = 0; i < nCount; ++i) { OSQLParseNode* pColumnRef = pOrderingSpecCommalist->getChild(i); - OSL_ENSURE(pColumnRef != NULL,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pColumnRef != NULL,"OSQLParseTreeIterator: error in parse tree!"); if ( _bOrder ) { - OSL_ENSURE(SQL_ISRULE(pColumnRef,ordering_spec),"OSQLParseTreeIterator:ordering_spec Fehler im Parse Tree"); - OSL_ENSURE(pColumnRef->count() == 2,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(SQL_ISRULE(pColumnRef,ordering_spec),"OSQLParseTreeIterator:ordering_spec error in parse tree!"); + OSL_ENSURE(pColumnRef->count() == 2,"OSQLParseTreeIterator: error in parse tree!"); pColumnRef = pColumnRef->getChild(0); } @@ -1022,12 +1035,12 @@ { // here I found a predicate pColumnRef->parseNodeToStr( sColumnName, m_pImpl->m_xDatabaseMetaData, NULL, sal_False, sal_False ); } - OSL_ENSURE(pColumnRef != NULL,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pColumnRef != NULL,"OSQLParseTreeIterator: error in parse tree!"); if ( _bOrder ) { // Ascending/Descending OSQLParseNode * pOptAscDesc = pColumnRef->getParent()->getChild(1); - OSL_ENSURE(pOptAscDesc != NULL,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pOptAscDesc != NULL,"OSQLParseTreeIterator: error in parse tree!"); sal_Bool bAscending = pOptAscDesc && SQL_ISTOKEN(pOptAscDesc,ASC); setOrderByColumnName(sColumnName, aTableRange,bAscending); @@ -1066,19 +1079,19 @@ traverseSelectionCriteria(pSelectNode->getChild(3)); return; } - OSL_ENSURE(pSelectNode->count() >= 4,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pSelectNode->count() >= 4,"OSQLParseTreeIterator: error in parse tree!"); OSQLParseNode * pTableExp = pSelectNode->getChild(3); - OSL_ENSURE(pTableExp != NULL,"OSQLParseTreeIterator: Fehler im Parse Tree"); - OSL_ENSURE(SQL_ISRULE(pTableExp,table_exp),"OSQLParseTreeIterator: Fehler im Parse Tree"); - OSL_ENSURE(pTableExp->count() == 5,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pTableExp != NULL,"OSQLParseTreeIterator: error in parse tree!"); + OSL_ENSURE(SQL_ISRULE(pTableExp,table_exp),"OSQLParseTreeIterator: error in parse tree!"); + OSL_ENSURE(pTableExp->count() == 5,"OSQLParseTreeIterator: error in parse tree!"); pWhereClause = pTableExp->getChild(1); } else if (SQL_ISRULE(pSelectNode,update_statement_searched)) { - OSL_ENSURE(pSelectNode->count() == 5,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pSelectNode->count() == 5,"OSQLParseTreeIterator: error in parse tree!"); pWhereClause = pSelectNode->getChild(4); } else if (SQL_ISRULE(pSelectNode,delete_statement_searched)) { - OSL_ENSURE(pSelectNode->count() == 4,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pSelectNode->count() == 4,"OSQLParseTreeIterator: error in parse tree!"); pWhereClause = pSelectNode->getChild(3); } else if (SQL_ISRULE(pSelectNode,delete_statement_positioned)) { // nyi @@ -1091,15 +1104,15 @@ if (! SQL_ISRULE(pWhereClause,where_clause)) { // Die Where Clause ist meistens optional, d. h. es koennte sich auch // um "optional_where_clause" handeln. - OSL_ENSURE(SQL_ISRULE(pWhereClause,opt_where_clause),"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(SQL_ISRULE(pWhereClause,opt_where_clause),"OSQLParseTreeIterator: error in parse tree!"); return; } // Wenn es aber eine where_clause ist, dann darf sie nicht leer sein: - OSL_ENSURE(pWhereClause->count() == 2,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pWhereClause->count() == 2,"OSQLParseTreeIterator: error in parse tree!"); OSQLParseNode * pComparisonPredicate = pWhereClause->getChild(1); - OSL_ENSURE(pComparisonPredicate != NULL,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pComparisonPredicate != NULL,"OSQLParseTreeIterator: error in parse tree!"); // @@ -1225,7 +1238,7 @@ { sal_Int32 ePredicateType; - OSL_ENSURE(pSearchCondition->count() >= 4,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pSearchCondition->count() >= 4,"OSQLParseTreeIterator: error in parse tree!"); sal_Int32 nCurentPos = pSearchCondition->count()-2; @@ -1237,8 +1250,8 @@ else ePredicateType = SQLFilterOperator::LIKE; - OSL_ENSURE(pNum_value_exp != NULL,"OSQLParseTreeIterator: Fehler im Parse Tree"); - OSL_ENSURE(pOptEscape != NULL,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pNum_value_exp != NULL,"OSQLParseTreeIterator: error in parse tree!"); + OSL_ENSURE(pOptEscape != NULL,"OSQLParseTreeIterator: error in parse tree!"); if (pOptEscape->count() != 0) { @@ -1265,7 +1278,7 @@ } else if (SQL_ISRULE(pSearchCondition,in_predicate)) { - OSL_ENSURE(pSearchCondition->count() == 4,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pSearchCondition->count() == 4,"OSQLParseTreeIterator: error in parse tree!"); traverseORCriteria(pSearchCondition->getChild(0)); // if (! aIteratorStatus.IsSuccessful()) return; @@ -1290,8 +1303,8 @@ { sal_Int32 ePredicateType; - OSL_ENSURE(pSearchCondition->count() >= 3,"OSQLParseTreeIterator: Fehler im Parse Tree"); - OSL_ENSURE(SQL_ISTOKEN(pSearchCondition->getChild(1),IS),"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pSearchCondition->count() >= 3,"OSQLParseTreeIterator: error in parse tree!"); + OSL_ENSURE(SQL_ISTOKEN(pSearchCondition->getChild(1),IS),"OSQLParseTreeIterator: error in parse tree!"); if (SQL_ISTOKEN(pSearchCondition->getChild(2),NOT) ) ePredicateType = SQLFilterOperator::NOT_SQLNULL; @@ -1320,7 +1333,7 @@ { if ( !SQL_ISRULE( _pParseNode, parameter ) ) return; - OSL_ENSURE(_pParseNode->count() > 0,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(_pParseNode->count() > 0,"OSQLParseTreeIterator: error in parse tree!"); OSQLParseNode * pMark = _pParseNode->getChild(0); ::rtl::OUString sParameterName; @@ -1342,7 +1355,7 @@ } else { - OSL_ASSERT("OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ASSERT("OSQLParseTreeIterator: error in parse tree!"); } // found a parameter @@ -1766,11 +1779,11 @@ OSQLParseNode * pWhereClause = NULL; if(getStatementType() == SQL_STATEMENT_SELECT) { - OSL_ENSURE(m_pParseTree->count() >= 4,"ParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(m_pParseTree->count() >= 4,"ParseTreeIterator: error in parse tree!"); OSQLParseNode * pTableExp = m_pParseTree->getChild(3); - OSL_ENSURE(pTableExp != NULL,"OSQLParseTreeIterator: Fehler im Parse Tree"); - OSL_ENSURE(SQL_ISRULE(pTableExp,table_exp),"OSQLParseTreeIterator: Fehler im Parse Tree"); - OSL_ENSURE(pTableExp->count() == 5,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pTableExp != NULL,"OSQLParseTreeIterator: error in parse tree!"); + OSL_ENSURE(SQL_ISRULE(pTableExp,table_exp),"OSQLParseTreeIterator: error in parse tree!"); + OSL_ENSURE(pTableExp->count() == 5,"OSQLParseTreeIterator: error in parse tree!"); pWhereClause = pTableExp->getChild(1); } @@ -1795,11 +1808,11 @@ // Parse Tree analysieren (je nach Statement-Typ) // und Zeiger auf ORDER-Klausel setzen: OSQLParseNode * pOrderClause = NULL; - OSL_ENSURE(m_pParseTree->count() >= 4,"ParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(m_pParseTree->count() >= 4,"ParseTreeIterator: error in parse tree!"); OSQLParseNode * pTableExp = m_pParseTree->getChild(3); - OSL_ENSURE(pTableExp != NULL,"OSQLParseTreeIterator: Fehler im Parse Tree"); - OSL_ENSURE(SQL_ISRULE(pTableExp,table_exp),"OSQLParseTreeIterator: Fehler im Parse Tree"); - OSL_ENSURE(pTableExp->count() == 5,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pTableExp != NULL,"OSQLParseTreeIterator: error in parse tree!"); + OSL_ENSURE(SQL_ISRULE(pTableExp,table_exp),"OSQLParseTreeIterator: error in parse tree!"); + OSL_ENSURE(pTableExp->count() == 5,"OSQLParseTreeIterator: error in parse tree!"); pOrderClause = pTableExp->getChild(4); // Wenn es aber eine order_by ist, dann darf sie nicht leer sein: @@ -1816,11 +1829,11 @@ // Parse Tree analysieren (je nach Statement-Typ) // und Zeiger auf ORDER-Klausel setzen: OSQLParseNode * pGroupClause = NULL; - OSL_ENSURE(m_pParseTree->count() >= 4,"ParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(m_pParseTree->count() >= 4,"ParseTreeIterator: error in parse tree!"); OSQLParseNode * pTableExp = m_pParseTree->getChild(3); - OSL_ENSURE(pTableExp != NULL,"OSQLParseTreeIterator: Fehler im Parse Tree"); - OSL_ENSURE(SQL_ISRULE(pTableExp,table_exp),"OSQLParseTreeIterator: Fehler im Parse Tree"); - OSL_ENSURE(pTableExp->count() == 5,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pTableExp != NULL,"OSQLParseTreeIterator: error in parse tree!"); + OSL_ENSURE(SQL_ISRULE(pTableExp,table_exp),"OSQLParseTreeIterator: error in parse tree!"); + OSL_ENSURE(pTableExp->count() == 5,"OSQLParseTreeIterator: error in parse tree!"); pGroupClause = pTableExp->getChild(2); // Wenn es aber eine order_by ist, dann darf sie nicht leer sein: @@ -1837,11 +1850,11 @@ // Parse Tree analysieren (je nach Statement-Typ) // und Zeiger auf ORDER-Klausel setzen: OSQLParseNode * pHavingClause = NULL; - OSL_ENSURE(m_pParseTree->count() >= 4,"ParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(m_pParseTree->count() >= 4,"ParseTreeIterator: error in parse tree!"); OSQLParseNode * pTableExp = m_pParseTree->getChild(3); - OSL_ENSURE(pTableExp != NULL,"OSQLParseTreeIterator: Fehler im Parse Tree"); - OSL_ENSURE(SQL_ISRULE(pTableExp,table_exp),"OSQLParseTreeIterator: Fehler im Parse Tree"); - OSL_ENSURE(pTableExp->count() == 5,"OSQLParseTreeIterator: Fehler im Parse Tree"); + OSL_ENSURE(pTableExp != NULL,"OSQLParseTreeIterator: error in parse tree!"); + OSL_ENSURE(SQL_ISRULE(pTableExp,table_exp),"OSQLParseTreeIterator: error in parse tree!"); + OSL_ENSURE(pTableExp->count() == 5,"OSQLParseTreeIterator: error in parse tree!"); pHavingClause = pTableExp->getChild(3); // Wenn es aber eine order_by ist, dann darf sie nicht leer sein: --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
