summaryrefslogtreecommitdiff
path: root/connectivity
diff options
context:
space:
mode:
authorJens-Heiner Rechtien <hr@openoffice.org>2008-11-19 17:43:08 +0000
committerJens-Heiner Rechtien <hr@openoffice.org>2008-11-19 17:43:08 +0000
commitc43ea4ea87ffb1c7f9a8528b77c32e2d9d568197 (patch)
tree69a22c5dfb4cfe773af8f34d2165b164b49743f2 /connectivity
parent35fadd14797672ecfa650dd6b7a50c5cc88c4d3d (diff)
CWS-TOOLING: integrate CWS dba301a_DEV300
Diffstat (limited to 'connectivity')
-rw-r--r--connectivity/source/parse/sqlbison.y4
-rw-r--r--connectivity/source/parse/sqliterator.cxx19
-rw-r--r--connectivity/source/parse/sqlnode.cxx2
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