diff options
author | Jens-Heiner Rechtien <hr@openoffice.org> | 2008-11-19 17:43:08 +0000 |
---|---|---|
committer | Jens-Heiner Rechtien <hr@openoffice.org> | 2008-11-19 17:43:08 +0000 |
commit | c43ea4ea87ffb1c7f9a8528b77c32e2d9d568197 (patch) | |
tree | 69a22c5dfb4cfe773af8f34d2165b164b49743f2 /connectivity | |
parent | 35fadd14797672ecfa650dd6b7a50c5cc88c4d3d (diff) |
CWS-TOOLING: integrate CWS dba301a_DEV300
Diffstat (limited to 'connectivity')
-rw-r--r-- | connectivity/source/parse/sqlbison.y | 4 | ||||
-rw-r--r-- | connectivity/source/parse/sqliterator.cxx | 19 | ||||
-rw-r--r-- | connectivity/source/parse/sqlnode.cxx | 2 |
3 files changed, 15 insertions, 10 deletions
diff --git a/connectivity/source/parse/sqlbison.y b/connectivity/source/parse/sqlbison.y index 28dcb86a72..6f625bd231 100644 --- a/connectivity/source/parse/sqlbison.y +++ b/connectivity/source/parse/sqlbison.y @@ -996,14 +996,12 @@ table_ref: $$->append($3); $$->append($4 = newNode("}", SQL_NODE_PUNCTUATION)); } - | '(' joined_table ')' range_variable op_column_commalist + | '(' joined_table ')' { $$ = SQL_NEW_RULE; $$->append($1 = newNode("(", SQL_NODE_PUNCTUATION)); $$->append($2); $$->append($3 = newNode(")", SQL_NODE_PUNCTUATION)); - $$->append($4); - $$->append($5); } ; where_clause: diff --git a/connectivity/source/parse/sqliterator.cxx b/connectivity/source/parse/sqliterator.cxx index 2e926e0f51..a3fc5d5db4 100644 --- a/connectivity/source/parse/sqliterator.cxx +++ b/connectivity/source/parse/sqliterator.cxx @@ -516,18 +516,25 @@ const OSQLParseNode* OSQLParseTreeIterator::getTableNode( OSQLTables& _rTables, { getQualified_join( _rTables, pTableRef->getChild(6 - pTableRef->count()), rTableRange ); } - else if ( pTableRef->count() == 3 ) // subquery range_variable op_column_commalist + else if ( pTableRef->count() == 3 ) // subquery range_variable op_column_commalist || '(' joined_table ')' { 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 ) ) + if ( pSubQuery->isToken() ) { - getSelect_statement( *m_pImpl->m_pSubTables, pQueryExpression ); + getQualified_join( _rTables, pTableRef->getChild(1), rTableRange ); } else { - OSL_ENSURE( false, "OSQLParseTreeIterator::getTableNode: subquery which is no select_statement: not yet implemented!" ); + OSL_ENSURE( pSubQuery->count() == 3, "sub queries should have 3 children!" ); + const OSQLParseNode* pQueryExpression = pSubQuery->getChild(1); + if ( SQL_ISRULE( pQueryExpression, select_statement ) ) + { + getSelect_statement( *m_pImpl->m_pSubTables, pQueryExpression ); + } + else + { + OSL_ENSURE( false, "OSQLParseTreeIterator::getTableNode: subquery which is no select_statement: not yet implemented!" ); + } } } else if ( pTableRef->count() == 2 ) // table_node table_primary_as_range_column diff --git a/connectivity/source/parse/sqlnode.cxx b/connectivity/source/parse/sqlnode.cxx index 3fdce7b186..824aed42e0 100644 --- a/connectivity/source/parse/sqlnode.cxx +++ b/connectivity/source/parse/sqlnode.cxx @@ -2571,7 +2571,7 @@ OSQLParseNode::Rule OSQLParseNode::getKnownRuleID() const OSL_ENSURE(_pTableRef && _pTableRef->count() > 1 && _pTableRef->getKnownRuleID() == OSQLParseNode::table_ref,"Invalid node give, only table ref is allowed!"); const sal_uInt32 nCount = _pTableRef->count(); ::rtl::OUString sTableRange; - if ( nCount == 2 || nCount == 3 || nCount == 5) + if ( nCount == 2 || (nCount == 3 && !_pTableRef->getChild(0)->isToken()) || nCount == 5 ) { const OSQLParseNode* pNode = _pTableRef->getChild(nCount - (nCount == 2 ? 1 : 2)); OSL_ENSURE(pNode && (pNode->getKnownRuleID() == OSQLParseNode::table_primary_as_range_column |