User: rt      
Date: 2008-06-16 12:12:25+0000
Modified:
   dba/connectivity/source/parse/sqlnode.cxx

Log:
 INTEGRATION: CWS rptchart02 (1.54.18); FILE MERGED
 2008/05/27 08:58:48 oj 1.54.18.4: #i84290# correct range var of table
 2008/05/23 08:41:45 oj 1.54.18.3: unused var
 2008/05/23 08:26:43 oj 1.54.18.2: #i84290# change sql rule table_ref
 2008/05/20 08:29:11 oj 1.54.18.1: #i84290# range_variable changed

File Changes:

Directory: /dba/connectivity/source/parse/
==========================================

File [changed]: sqlnode.cxx
Url: 
http://dba.openoffice.org/source/browse/dba/connectivity/source/parse/sqlnode.cxx?r1=1.54&r2=1.55
Delta lines:  +30 -66
---------------------
--- sqlnode.cxx 2008-04-10 11:54:38+0000        1.54
+++ sqlnode.cxx 2008-06-16 12:12:23+0000        1.55
@@ -72,7 +72,9 @@
 #include "connectivity/sqlerror.hxx"
 #include <tools/diagnose_ex.h>
 #include <string.h>
-
+#include <boost/bind.hpp>
+#include <algorithm>
+#include <functional>
 
 using namespace ::com::sun::star::sdbc;
 using namespace ::com::sun::star::util;
@@ -349,47 +351,7 @@
 {
     bool lcl_isAliasNamePresent( const OSQLParseNode& _rTableNameNode )
     {
-        OSL_ENSURE( _rTableNameNode.getKnownRuleID() == 
OSQLParseNode::table_name, "lcl_isAliasNamePresent: Must be a 'table_name' 
rule!" );
-        OSL_ENSURE( _rTableNameNode.getParent()->getKnownRuleID() == 
OSQLParseNode::table_ref, "lcl_isAliasNamePresent: parent must be a 
'table_ref'!" );
-
-        const OSQLParseNode* pTableRef = _rTableNameNode.getParent();
-        if ( pTableRef->count() == 4 )
-        {
-            // table_ref := table_node as range_variable op_column_commalist
-            // table_node := table_name | ...
-            if ( pTableRef->getChild(1)->getKnownRuleID() == OSQLParseNode::as 
)
-                return true;
-
-            // table_ref := '{' SQL_TOKEN_OJ joined_table '}'
-            OSL_ENSURE( SQL_ISPUNCTUATION( pTableRef->getChild(0), "(" ), 
"lcl_isAliasNamePresent: grammar changed(1)!" );
-            return false;
-        }
-
-        if ( pTableRef->count() == 6 )
-        {   // '(' joined_table ')' as range_variable op_column_commalist
-            OSL_ENSURE( SQL_ISPUNCTUATION( pTableRef->getChild(2), "(" )
-                    &&  SQL_ISRULE( pTableRef->getChild(3), as ),
-                    "lcl_isAliasNamePresent: grammar changed(3)!" );
-            return true;
-        }
-
-        if ( pTableRef->count() == 3 )
-            // subquery as range_variable
-            return true;
-
-        if ( pTableRef->count() == 1 )
-            return false;
-
-#if OSL_DEBUG_LEVEL > 0
-        for ( size_t i=0; i<pTableRef->count(); ++i )
-        {
-            const OSQLParseNode* pChildNode = pTableRef->getChild( i );
-            OSQLParseNode::Rule eRuleID = pChildNode->getKnownRuleID();
-            OSL_UNUSED( eRuleID );
-        }
-#endif
-        OSL_ENSURE( false, "lcl_isAliasNamePresent: unreachable code - except 
you extended the production rules for table_ref!" );
-        return false;
+        return 
OSQLParseNode::getTableRange(_rTableNameNode.getParent()).getLength() != 0;
     }
 }
 
@@ -432,9 +394,7 @@
 
     // table refs
     case table_ref:
-        if  (   ( nCount == 4 )
-            ||  ( ( nCount == 6 ) &&  SQL_ISPUNCTUATION( m_aChilds[0], "(" ) )
-            )
+        if (  ( nCount == 2 ) || ( nCount == 3 ) || ( nCount == 5 ) )
         {
                    impl_parseTableRangeNodeToString_throw( rString, rParam );
             bHandled = true;
@@ -693,25 +653,11 @@
 //-----------------------------------------------------------------------------
 void OSQLParseNode::impl_parseTableRangeNodeToString_throw(::rtl::OUString& 
rString, const SQLParseNodeParameter& rParam) const
 {
-       sal_uInt32 nCount(count());
-       rString += ::rtl::OUString::createFromAscii(" ");
+    OSL_PRECOND(  ( count() == 2 ) || ( count() == 3 ) || ( count() == 5 ) 
,"Illegal count");
 
-       if (nCount == 4)
-       {
-               m_aChilds[0]->impl_parseNodeToString_throw( rString, rParam );
-               m_aChilds[1]->impl_parseNodeToString_throw( rString, rParam );
-               m_aChilds[2]->impl_parseNodeToString_throw( rString, rParam );
-               m_aChilds[3]->impl_parseNodeToString_throw( rString, rParam );
-       }
-       else if(nCount == 6 && SQL_ISPUNCTUATION(m_aChilds[0],"("))
-       {
-               m_aChilds[0]->impl_parseNodeToString_throw( rString, rParam );
-               m_aChilds[1]->impl_parseNodeToString_throw( rString, rParam );
-               m_aChilds[2]->impl_parseNodeToString_throw( rString, rParam );
-               m_aChilds[3]->impl_parseNodeToString_throw( rString, rParam );
-               m_aChilds[4]->impl_parseNodeToString_throw( rString, rParam );
-               m_aChilds[5]->impl_parseNodeToString_throw( rString, rParam );
-       }
+       // rString += ::rtl::OUString::createFromAscii(" ");
+    ::std::for_each(m_aChilds.begin(),m_aChilds.end(),
+        boost::bind( &OSQLParseNode::impl_parseNodeToString_throw, _1, 
boost::ref( rString ), boost::cref( rParam ) ));
 }
 
 //-----------------------------------------------------------------------------
@@ -1426,7 +1372,6 @@
             { OSQLParseNode::all_or_any_predicate, "all_or_any_predicate" },
             { OSQLParseNode::named_columns_join, "named_columns_join" },
             { OSQLParseNode::join_condition, "join_condition" },
-            { OSQLParseNode::joined_table, "joined_table" },
             { OSQLParseNode::boolean_factor, "boolean_factor" },
             { OSQLParseNode::sql_not, "sql_not" },
             { OSQLParseNode::boolean_test, "boolean_test" },
@@ -1450,7 +1395,8 @@
             { OSQLParseNode::column_def, "column_def" },
             { OSQLParseNode::table_node, "table_node" },
             { OSQLParseNode::as, "as" },
-            { OSQLParseNode::op_column_commalist, "op_column_commalist" }
+            { OSQLParseNode::op_column_commalist, "op_column_commalist" },
+            { OSQLParseNode::table_primary_as_range_column, 
"table_primary_as_range_column" }
         };
         size_t nRuleMapCount = sizeof( aRuleDescriptions ) / sizeof( 
aRuleDescriptions[0] );
         OSL_ENSURE( nRuleMapCount == size_t( OSQLParseNode::rule_count ), 
"OSQLParser::OSQLParser: added a new rule? Adjust this map!" );
@@ -2606,5 +2552,23 @@
         return UNKNOWN_RULE;
     return OSQLParser::RuleIDToRule( getRuleID() );
 }
+// 
-----------------------------------------------------------------------------
+::rtl::OUString OSQLParseNode::getTableRange(const OSQLParseNode* _pTableRef)
+{
+    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)
+    {
+        const OSQLParseNode* pNode = _pTableRef->getChild(nCount - (nCount == 
2 ? 1 : 2));
+        OSL_ENSURE(pNode && (pNode->getKnownRuleID() == 
OSQLParseNode::table_primary_as_range_column
+                          || pNode->getKnownRuleID() == 
OSQLParseNode::range_variable) 
+                         ,"SQL grammar changed!");
+        if ( !pNode->isLeaf() )
+            sTableRange = pNode->getChild(1)->getTokenValue();
+    } // if ( nCount == 2 || nCount == 3 || nCount == 5)
+
+    return sTableRange;
+}
 
 }   // namespace connectivity




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to