[Libreoffice-commits] .: 6 commits - connectivity/inc connectivity/source dbaccess/source sal/inc

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Wed Jan 23 07:34:04 PST 2013


 connectivity/inc/connectivity/sqlnode.hxx             |   11 +-
 connectivity/source/parse/sqlbison.y                  |   13 ++
 connectivity/source/parse/sqlnode.cxx                 |   31 ++++--
 dbaccess/source/ui/dlg/sqlmessage.cxx                 |   11 ++
 dbaccess/source/ui/inc/sqlmessage.hxx                 |   12 ++
 dbaccess/source/ui/querydesign/QueryDesignView.cxx    |    8 +
 dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx |   89 ++++++++++--------
 dbaccess/source/ui/querydesign/SelectionBrowseBox.hxx |    2 
 sal/inc/sal/log-areas.dox                             |    1 
 9 files changed, 123 insertions(+), 55 deletions(-)

New commits:
commit d931b994a4bd2f8fe72f351a7d628a44a35f4abe
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date:   Wed Jan 23 16:17:39 2013 +0100

    show errors as errors, not warning
    
    Change-Id: I32e514fbfbd323b688b25b9e2165d0c76e3c4db5

diff --git a/dbaccess/source/ui/dlg/sqlmessage.cxx b/dbaccess/source/ui/dlg/sqlmessage.cxx
index 9c3ecc8..c46035c 100644
--- a/dbaccess/source/ui/dlg/sqlmessage.cxx
+++ b/dbaccess/source/ui/dlg/sqlmessage.cxx
@@ -751,7 +751,16 @@ IMPL_LINK( OSQLMessageBox, ButtonClickHdl, Button *, /*pButton*/ )
 //==================================================================
 OSQLWarningBox::OSQLWarningBox( Window* _pParent, const OUString& _rMessage, WinBits _nStyle,
     const ::dbtools::SQLExceptionInfo* _pAdditionalErrorInfo )
-    :OSQLMessageBox( _pParent, String( ModuleRes( STR_STAT_WARNING ) ), _rMessage, _nStyle, OSQLMessageBox::Warning, _pAdditionalErrorInfo )
+    :OSQLMessageBox( _pParent, String( ModuleRes( STR_EXCEPTION_WARNING ) ), _rMessage, _nStyle, OSQLMessageBox::Warning, _pAdditionalErrorInfo )
+{
+}
+
+//==================================================================
+// OSQLErrorBox
+//==================================================================
+OSQLErrorBox::OSQLErrorBox( Window* _pParent, const OUString& _rMessage, WinBits _nStyle,
+    const ::dbtools::SQLExceptionInfo* _pAdditionalErrorInfo )
+    :OSQLMessageBox( _pParent, String( ModuleRes( STR_EXCEPTION_ERROR ) ), _rMessage, _nStyle, OSQLMessageBox::Error, _pAdditionalErrorInfo )
 {
 }
 
diff --git a/dbaccess/source/ui/inc/sqlmessage.hxx b/dbaccess/source/ui/inc/sqlmessage.hxx
index da36617..76d896f 100644
--- a/dbaccess/source/ui/inc/sqlmessage.hxx
+++ b/dbaccess/source/ui/inc/sqlmessage.hxx
@@ -119,6 +119,18 @@ public:
                     const ::dbtools::SQLExceptionInfo* _pAdditionalErrorInfo = NULL );
 };
 
+//==================================================================
+// OSQLErrorBox
+//==================================================================
+class OSQLErrorBox : public OSQLMessageBox
+{
+public:
+    OSQLErrorBox( Window* _pParent,
+                  const OUString& _rMessage,
+                  WinBits _nStyle = WB_OK | WB_DEF_OK,
+                  const ::dbtools::SQLExceptionInfo* _pAdditionalErrorInfo = NULL );
+};
+
 //.........................................................................
 }   // namespace dbaui
 //.........................................................................
diff --git a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
index 8897a5d..342a341 100644
--- a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
+++ b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
@@ -633,7 +633,7 @@ sal_Bool OSelectionBrowseBox::fillColumnRef(const ::rtl::OUString& _sColumnName,
             {
                 String sErrorMsg(ModuleRes(RID_STR_FIELD_DOESNT_EXIST));
                 sErrorMsg.SearchAndReplaceAscii("$name$",_sColumnName);
-                OSQLWarningBox( this, sErrorMsg ).Execute();
+                OSQLErrorBox( this, sErrorMsg ).Execute();
                 bError = sal_True;
             }
             else
@@ -739,7 +739,8 @@ sal_Bool OSelectionBrowseBox::saveField(String& _sFieldName ,OTableFieldDescRef&
         // something different which we have to check
         String sErrorMessage( ModuleRes( STR_QRY_COLUMN_NOT_FOUND ) );
         sErrorMessage.SearchAndReplaceAscii("$name$",_sFieldName);
-        OSQLWarningBox( this, sErrorMessage ).Execute();
+        OSQLErrorBox( this, sErrorMessage ).Execute();
+
         return sal_True;
     }
 
@@ -895,7 +896,7 @@ sal_Bool OSelectionBrowseBox::saveField(String& _sFieldName ,OTableFieldDescRef&
             { // the field could not be inserted
                 String sErrorMessage( ModuleRes( RID_STR_FIELD_DOESNT_EXIST ) );
                 sErrorMessage.SearchAndReplaceAscii("$name$",aSelEntry->GetField());
-                OSQLWarningBox( this, sErrorMessage ).Execute();
+                OSQLErrorBox( this, sErrorMessage ).Execute();
                 bError = sal_True;
             }
         }
commit f1bde8cb0e00770e4f9a2e1cd2458906a7ec8a63
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date:   Wed Jan 23 15:36:35 2013 +0100

    fix handling of subqueries in query design
    
     - don't remove parentheses around subqueries
       (without the parentheses, it is not valid SQL)
       * when saving a Field (name value) typed by the user interactively
       * when parsing SQL and constructing the initial Query Design view
    
     - automatically add the necessary parentheses
       when a SELECT statement is entered as column name
    
    Also:
    
    In code saving a Field (name value) typed by the user interactively,
    factorise some common code
    
    Assorted minor fixes (typos in comments, etc)
    
    Change-Id: I3843258323c903cba23238b0730ec4eb5875f792

diff --git a/dbaccess/source/ui/querydesign/QueryDesignView.cxx b/dbaccess/source/ui/querydesign/QueryDesignView.cxx
index 8cc532f..fe780c9 100644
--- a/dbaccess/source/ui/querydesign/QueryDesignView.cxx
+++ b/dbaccess/source/ui/querydesign/QueryDesignView.cxx
@@ -2202,7 +2202,8 @@ namespace
                     pColumnRef = pColumnRef->getChild(0);
                     OTableFieldDescRef aInfo = new OTableFieldDesc();
 
-                    if (    pColumnRef->count() == 3 &&
+                    if (    pColumnRef->getKnownRuleID() != OSQLParseNode::subquery &&
+                            pColumnRef->count() == 3 &&
                             SQL_ISPUNCTUATION(pColumnRef->getChild(0),"(") &&
                             SQL_ISPUNCTUATION(pColumnRef->getChild(2),")")
                         )
diff --git a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
index c0532dc..8897a5d 100644
--- a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
+++ b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
@@ -649,7 +649,7 @@ sal_Bool OSelectionBrowseBox::fillColumnRef(const ::rtl::OUString& _sColumnName,
     return bError;
 }
 // -----------------------------------------------------------------------------
-sal_Bool OSelectionBrowseBox::saveField(const String& _sFieldName,OTableFieldDescRef& _pEntry,sal_Bool& _bListAction)
+sal_Bool OSelectionBrowseBox::saveField(String& _sFieldName ,OTableFieldDescRef& _pEntry, sal_Bool& _bListAction)
 {
     sal_Bool bError = sal_False;
 
@@ -680,50 +680,63 @@ sal_Bool OSelectionBrowseBox::saveField(const String& _sFieldName,OTableFieldDes
     // we have to look which entries  we should quote
 
     const ::rtl::OUString sFieldAlias = _pEntry->GetFieldAlias();
-    size_t nPass = 4;
     ::connectivity::OSQLParser& rParser( rController.getParser() );
+    {
+        // automatically add parentheses around subqueries
+        OSQLParseNode *pParseNode = NULL;
+        OUString devnull;
+        pParseNode = rParser.parseTree( devnull, _sFieldName, true );
+        if (pParseNode == NULL)
+            pParseNode = rParser.parseTree( devnull, _sFieldName, false );
+        if (pParseNode != NULL && SQL_ISRULE(pParseNode, select_statement))
+            _sFieldName = ::rtl::OUString("(") + _sFieldName + ")";
+    }
+
     OSQLParseNode* pParseNode = NULL;
-    // 4 passes in trying to interprete the field name
-    // - don't quote the field name, parse internationally
-    // - don't quote the field name, parse en-US
-    // - quote the field name, parse internationally
-    // - quote the field name, parse en-US
-    do
-    {
-        bool bQuote = ( nPass <= 2 );
-        bool bInternational = ( nPass % 2 ) == 0;
-
-        ::rtl::OUString sSql;
-        if ( bQuote )
-            sSql += ::dbtools::quoteName( xMetaData->getIdentifierQuoteString(), _sFieldName );
-        else
-            sSql += _sFieldName;
+    {
+        // 4 passes in trying to interprete the field name
+        // - don't quote the field name, parse internationally
+        // - don't quote the field name, parse en-US
+        // - quote the field name, parse internationally
+        // - quote the field name, parse en-US
+        size_t nPass = 4;
+        ::rtl::OUString sQuotedFullFieldName(::dbtools::quoteName( xMetaData->getIdentifierQuoteString(), _sFieldName ));
+        ::rtl::OUString sFullFieldName(_sFieldName);
 
         if  ( _pEntry->isAggreateFunction() )
         {
             OSL_ENSURE(!_pEntry->GetFunction().isEmpty(),"Functionname darf hier nicht leer sein! ;-(");
-            ::rtl::OUStringBuffer aTmpStr2( _pEntry->GetFunction());
-            aTmpStr2.appendAscii("(");
-            aTmpStr2.append(sSql);
-            aTmpStr2.appendAscii(")");
-            sSql = aTmpStr2.makeStringAndClear();
+            sQuotedFullFieldName = _pEntry->GetFunction() + "(" + sQuotedFullFieldName + ")";
+            sFullFieldName = _pEntry->GetFunction() + "(" + sFullFieldName + ")";
         }
 
-        sSql = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SELECT ")) + sSql;
-        if ( !sFieldAlias.isEmpty() )
-        { // always quote the alias name there canbe no function in it
-            sSql += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" "));
-            sSql += ::dbtools::quoteName( xMetaData->getIdentifierQuoteString(), sFieldAlias );
-        }
-        sSql += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" FROM x"));
+        do
+        {
+            bool bQuote = ( nPass <= 2 );
+            bool bInternational = ( nPass % 2 ) == 0;
 
-        pParseNode = rParser.parseTree( sErrorMsg, sSql, bInternational );
+            ::rtl::OUString sSql;
+            if ( bQuote )
+                sSql += sQuotedFullFieldName;
+            else
+                sSql += sFullFieldName;
+
+            sSql = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SELECT ")) + sSql;
+            if ( !sFieldAlias.isEmpty() )
+            { // always quote the alias name: there cannot be a function in it
+                sSql += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" "));
+                sSql += ::dbtools::quoteName( xMetaData->getIdentifierQuoteString(), sFieldAlias );
+            }
+            sSql += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" FROM x"));
+
+            pParseNode = rParser.parseTree( sErrorMsg, sSql, bInternational );
+        }
+        while ( ( pParseNode == NULL ) && ( --nPass > 0 ) );
     }
-    while ( ( pParseNode == NULL ) && ( --nPass > 0 ) );
 
     if ( pParseNode == NULL )
     {
-        // something different which we have to check (may be a select statement)
+        // something different which we have to check
         String sErrorMessage( ModuleRes( STR_QRY_COLUMN_NOT_FOUND ) );
         sErrorMessage.SearchAndReplaceAscii("$name$",_sFieldName);
         OSQLWarningBox( this, sErrorMessage ).Execute();
@@ -737,8 +750,8 @@ sal_Bool OSelectionBrowseBox::saveField(const String& _sFieldName,OTableFieldDes
     {
         _pEntry->SetField(_sFieldName);
         clearEntryFunctionField(_sFieldName,_pEntry,_bListAction,_pEntry->GetColumnId());
-    } // travel through the select column parse node
-    else
+    }
+    else // travel through the select column parse node
     {
         ::comphelper::UStringMixEqual bCase(xMetaData->supportsMixedCaseQuotedIdentifiers());
 
@@ -777,6 +790,7 @@ sal_Bool OSelectionBrowseBox::saveField(const String& _sFieldName,OTableFieldDes
 
             ::connectivity::OSQLParseNode* pColumnRef = pChild->getChild(0);
             if (
+                    pColumnRef->getKnownRuleID() != OSQLParseNode::subquery &&
                     pColumnRef->count() == 3 &&
                     SQL_ISPUNCTUATION(pColumnRef->getChild(0),"(") &&
                     SQL_ISPUNCTUATION(pColumnRef->getChild(2),")")
diff --git a/dbaccess/source/ui/querydesign/SelectionBrowseBox.hxx b/dbaccess/source/ui/querydesign/SelectionBrowseBox.hxx
index b3b2c98..55bf270 100644
--- a/dbaccess/source/ui/querydesign/SelectionBrowseBox.hxx
+++ b/dbaccess/source/ui/querydesign/SelectionBrowseBox.hxx
@@ -246,7 +246,7 @@ namespace dbaui
             @return
                 <TRUE/> if an error occurred otherwise <FALSE/>
         */
-        sal_Bool        saveField(const String& _sFieldName,OTableFieldDescRef& _pEntry,sal_Bool& _bListAction);
+        sal_Bool        saveField(String& _sFieldName, OTableFieldDescRef& _pEntry, sal_Bool& _bListAction);
 
         /** sets the table window at the _pEntry
             @param  _pEntry
commit 5214bda61e413b5b2907bcffbbf0211c254b878f
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date:   Wed Jan 23 15:30:33 2013 +0100

    SQL parser: no "as" rule anymore; now as_clause and opt_as
    
    Change-Id: Ib0c7151b311029318c213abb86e6541e3b27d040

diff --git a/connectivity/inc/connectivity/sqlnode.hxx b/connectivity/inc/connectivity/sqlnode.hxx
index 4082375..a74c8ab 100644
--- a/connectivity/inc/connectivity/sqlnode.hxx
+++ b/connectivity/inc/connectivity/sqlnode.hxx
@@ -219,7 +219,8 @@ namespace connectivity
             data_type,
             column_def,
             table_node,
-            as,
+            as_clause,
+            opt_as,
             op_column_commalist,
             table_primary_as_range_column,
             datetime_primary,
diff --git a/connectivity/source/parse/sqlnode.cxx b/connectivity/source/parse/sqlnode.cxx
index ca2281a..5ab87fa 100644
--- a/connectivity/source/parse/sqlnode.cxx
+++ b/connectivity/source/parse/sqlnode.cxx
@@ -392,9 +392,19 @@ void OSQLParseNode::impl_parseNodeToString_throw(::rtl::OUStringBuffer& rString,
         bHandled = impl_parseTableNameNodeToString_throw( rString, rParam );
         break;
 
-    case as:
-        if ( rParam.aMetaData.generateASBeforeCorrelationName() )
-            rString.append(::rtl::OUString(" AS"));
+    case as_clause:
+        assert(nCount == 0 || nCount == 2);
+        if (nCount == 2)
+        {
+            if ( rParam.aMetaData.generateASBeforeCorrelationName() )
+                rString.append(::rtl::OUString(" AS "));
+            m_aChildren[1]->impl_parseNodeToString_throw( rString, rParam );
+        }
+        bHandled = true;
+        break;
+
+    case opt_as:
+        assert(nCount == 0);
         bHandled = true;
         break;
 
@@ -1386,7 +1396,8 @@ OSQLParser::OSQLParser(const ::com::sun::star::uno::Reference< ::com::sun::star:
             { OSQLParseNode::data_type, "data_type" },
             { OSQLParseNode::column_def, "column_def" },
             { OSQLParseNode::table_node, "table_node" },
-            { OSQLParseNode::as, "as" },
+            { OSQLParseNode::as_clause, "as_clause" },
+            { OSQLParseNode::opt_as, "opt_as" },
             { OSQLParseNode::op_column_commalist, "op_column_commalist" },
             { OSQLParseNode::table_primary_as_range_column, "table_primary_as_range_column" },
             { OSQLParseNode::datetime_primary, "datetime_primary" },
diff --git a/dbaccess/source/ui/querydesign/QueryDesignView.cxx b/dbaccess/source/ui/querydesign/QueryDesignView.cxx
index 1cf9b47..8cc532f 100644
--- a/dbaccess/source/ui/querydesign/QueryDesignView.cxx
+++ b/dbaccess/source/ui/querydesign/QueryDesignView.cxx
@@ -3388,7 +3388,8 @@ void OQueryDesignView::fillFunctionInfo(  const ::connectivity::OSQLParseNode* p
         case OSQLParseNode::data_type:
         case OSQLParseNode::column_def:
         case OSQLParseNode::table_node:
-        case OSQLParseNode::as:  // Seems to never be generated?
+        case OSQLParseNode::as_clause:
+        case OSQLParseNode::opt_as:
         case OSQLParseNode::op_column_commalist:
         case OSQLParseNode::table_primary_as_range_column:
         case OSQLParseNode::character_string_type:
commit ce59b1b3978cc148090385e086c8d48d742801d0
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date:   Wed Jan 23 15:21:33 2013 +0100

    ISO8859-1 -> UTF8 in comment
    
    Change-Id: I8a67235e5110618f45fe9d9467bbb7ff90c7c712

diff --git a/dbaccess/source/ui/querydesign/QueryDesignView.cxx b/dbaccess/source/ui/querydesign/QueryDesignView.cxx
index 5507634..1cf9b47 100644
--- a/dbaccess/source/ui/querydesign/QueryDesignView.cxx
+++ b/dbaccess/source/ui/querydesign/QueryDesignView.cxx
@@ -2168,7 +2168,7 @@ namespace
             return eNoSelectStatement;
 
         ::connectivity::OSQLParseNode* pParseTree = pNode->getChild(2); // selection
-        sal_Bool bFirstField = sal_True;    // bei der Initialisierung mu� auf alle Faelle das erste Feld neu aktiviert werden
+        sal_Bool bFirstField = sal_True;    // bei der Initialisierung muß auf alle Faelle das erste Feld neu aktiviert werden
 
         SqlParseError eErrorCode = eOk;
 
commit 09109f3dcde24fcd13426ce5b77bb40032f58947
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date:   Wed Jan 23 15:20:24 2013 +0100

    OSQLParser::RuleIDToRule should not silently change s_aReverseRuleIDLookup
    
    Change-Id: I2b408a23162b1200bbcd530be7acb42435388b04

diff --git a/connectivity/source/parse/sqlbison.y b/connectivity/source/parse/sqlbison.y
index 96d0782..a0f7d43 100644
--- a/connectivity/source/parse/sqlbison.y
+++ b/connectivity/source/parse/sqlbison.y
@@ -4772,7 +4772,18 @@ sal_uInt32 OSQLParser::StrToRuleID(const ::rtl::OString & rValue)
 //-----------------------------------------------------------------------------
 OSQLParseNode::Rule OSQLParser::RuleIDToRule( sal_uInt32 _nRule )
 {
-    return s_aReverseRuleIDLookup[ _nRule ];
+    OSQLParser::RuleIDMap::const_iterator i (s_aReverseRuleIDLookup.find(_nRule));
+    if (i == s_aReverseRuleIDLookup.end())
+    {
+        SAL_WARN("connectivity.parse",
+		 "connectivity::OSQLParser::RuleIDToRule cannot reverse-lookup rule. "
+		 "Reverse mapping incomplete? "
+		 "_nRule='" << _nRule << "' "
+		 "yytname[_nRule]='" << yytname[_nRule] << "'");
+        return OSQLParseNode::UNKNOWN_RULE;
+    }
+    else
+        return i->second;
 }
 
 //-----------------------------------------------------------------------------
diff --git a/sal/inc/sal/log-areas.dox b/sal/inc/sal/log-areas.dox
index 5232778..eeb1d60 100644
--- a/sal/inc/sal/log-areas.dox
+++ b/sal/inc/sal/log-areas.dox
@@ -37,6 +37,7 @@ certain functionality.
 @section connectivity
 
 @li @c connectivity.mork
+ at li @c connectivity.parse
 
 @section cui
 
commit 22fef9910ecfcbbd7bd4c4c8268be2c4b4a5a96a
Author: Lionel Elie Mamane <lionel at mamane.lu>
Date:   Wed Jan 23 15:19:07 2013 +0100

    Make UNKNOWN_RULE the default value of connectivity::OSQLParseNode::Rule
    
    Change-Id: I4e56da8820d5c92d3b6e2ff2c749bdc0cef46d73

diff --git a/connectivity/inc/connectivity/sqlnode.hxx b/connectivity/inc/connectivity/sqlnode.hxx
index e21e06e..4082375 100644
--- a/connectivity/inc/connectivity/sqlnode.hxx
+++ b/connectivity/inc/connectivity/sqlnode.hxx
@@ -130,7 +130,10 @@ namespace connectivity
     public:
         enum Rule
         {
-            select_statement = 0,
+            UNKNOWN_RULE = 0,  // ID indicating that a node is no rule with a matching Rule-enum value (see getKnownRuleID)
+                               // we make sure it is 0 so that it is the default-constructor value of this enum
+                               // and std::map<foo,Rule>::operator[](bar) default-inserts UNKNOWN_RULE rather than select_statement (!)
+            select_statement,
             table_exp,
             table_ref_commalist,
             table_ref,
@@ -229,8 +232,7 @@ namespace connectivity
             other_like_predicate_part_2,
             between_predicate_part_2,
             cast_spec,
-            rule_count,             // last value
-            UNKNOWN_RULE = -1       // ID indicating that a node is no rule with a matching Rule-enum value (see getKnownRuleID)
+            rule_count             // last value
         };
 
         // must be ascii encoding for the value
diff --git a/connectivity/source/parse/sqlnode.cxx b/connectivity/source/parse/sqlnode.cxx
index ae9f3f1f..ca2281a 100644
--- a/connectivity/source/parse/sqlnode.cxx
+++ b/connectivity/source/parse/sqlnode.cxx
@@ -59,6 +59,7 @@
 #include <tools/diagnose_ex.h>
 #include <string.h>
 #include <boost/bind.hpp>
+#include <boost/static_assert.hpp>
 #include <algorithm>
 #include <functional>
 #include <rtl/logfile.hxx>
@@ -1289,8 +1290,9 @@ OSQLParser::OSQLParser(const ::com::sun::star::uno::Reference< ::com::sun::star:
         if(!s_xLocaleData.is())
             s_xLocaleData = LocaleData::create(m_xContext);
 
-        // reset to 0
-        memset(OSQLParser::s_nRuleIDs,0,sizeof(OSQLParser::s_nRuleIDs[0]) * (OSQLParseNode::rule_count+1));
+        // reset to UNKNOWN_RULE
+        BOOST_STATIC_ASSERT(OSQLParseNode::UNKNOWN_RULE==0);
+        memset(OSQLParser::s_nRuleIDs,0,sizeof(OSQLParser::s_nRuleIDs));
 
         struct
         {
@@ -1398,8 +1400,10 @@ OSQLParser::OSQLParser(const ::com::sun::star::uno::Reference< ::com::sun::star:
             { OSQLParseNode::between_predicate_part_2, "between_predicate_part_2" },
             { OSQLParseNode::cast_spec, "cast_spec" }
         };
-        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!" );
+        const size_t nRuleMapCount = sizeof( aRuleDescriptions ) / sizeof( aRuleDescriptions[0] );
+        // added a new rule? Adjust this map!
+        // +1 for UNKNOWN_RULE
+        BOOST_STATIC_ASSERT( nRuleMapCount + 1 == static_cast<size_t>(OSQLParseNode::rule_count) );
 
         for ( size_t mapEntry = 0; mapEntry < nRuleMapCount; ++mapEntry )
         {


More information about the Libreoffice-commits mailing list