Matthias Brantner has proposed merging lp:~zorba-coders/zorba/bug905035 into 
lp:zorba.

Requested reviews:
  Hybridum (hybridum)
  Markos Zaharioudakis (markos-za)
  Rodolfo Ochoa (rodolfo-ochoa)
Related bugs:
  Bug #905035 in Zorba: "there is no way to get the Namespace Prefixes"
  https://bugs.launchpad.net/zorba/+bug/905035

For more details, see:
https://code.launchpad.net/~zorba-coders/zorba/bug905035/+merge/89099

Implemented StaticContext::getNamespaceBindings to resolve bug #905035. In the 
same commit, the function getNamespaceURIByPrefix was deprecated because it's 
superseded by the new function.
-- 
https://code.launchpad.net/~zorba-coders/zorba/bug905035/+merge/89099
Your team Zorba Coders is subscribed to branch lp:zorba.
=== modified file 'ChangeLog'
--- ChangeLog	2012-01-18 12:18:59 +0000
+++ ChangeLog	2012-01-18 18:13:27 +0000
@@ -22,6 +22,8 @@
     support.
   * zerr is not predeclared anymore to be http://www.zorba-xquery.com/errors
   * Added API method Item::getNamespaceBindings().
+  * Added API method StaticContext::getNamespaceBindings() (see bug #905035)
+  * Deprecated StaticContext:getNamespaceURIByPrefix()
 
 version 2.1
 

=== modified file 'include/zorba/static_context.h'
--- include/zorba/static_context.h	2011-12-21 14:40:33 +0000
+++ include/zorba/static_context.h	2012-01-18 18:13:27 +0000
@@ -99,10 +99,21 @@
    *         could be found for the given prefix and an DiagnosticHandler has been
    *         registered.
    * @throw ZorbaException if an error occured (e.g. no URI could be found for the given prefix).
+   *
+   * @deprecated This function is deprecated. Use getNamespaceBindings instead.
    */
   virtual String
   getNamespaceURIByPrefix( const String& aPrefix ) const = 0;
 
+  /**
+   * \brief Get the list of all namespace bindings (prefix, uri)
+   *   declared in this and its parent static contexts.
+   *
+   * @param aBindings the bindings are added to this list
+   */
+  virtual void
+  getNamespaceBindings( NsBindings& aBindings ) const = 0;
+
   /** \brief Set the default element and type namespace
    *         (see http://www.w3.org/TR/xquery/#static_context)
    *

=== modified file 'src/api/item.cpp'
--- src/api/item.cpp	2012-01-11 17:30:25 +0000
+++ src/api/item.cpp	2012-01-18 18:13:27 +0000
@@ -389,12 +389,18 @@
 
       store::NsBindings lStoreBindings;
       m_item->getNamespaceBindings(lStoreBindings, aNsScoping);
+      aBindings.reserve(aBindings.size() + lStoreBindings.size());
+
       store::NsBindings::iterator ite = lStoreBindings.begin();
       store::NsBindings::iterator end = lStoreBindings.end();
       for (; ite != end; ++ite) {
         zstring& prefix = ite->first;
         zstring& nsuri = ite->second;
-        aBindings.push_back(std::pair<String, String>(prefix.str(), nsuri.str()));
+        aBindings.push_back(
+            std::pair<String, String>(
+              Unmarshaller::newString(prefix),
+              Unmarshaller::newString(nsuri))
+          );
       }
 
   ITEM_CATCH

=== modified file 'src/api/staticcontextimpl.cpp'
--- src/api/staticcontextimpl.cpp	2012-01-11 17:30:25 +0000
+++ src/api/staticcontextimpl.cpp	2012-01-18 18:13:27 +0000
@@ -215,6 +215,38 @@
   return "";
 }
 
+/*******************************************************************************
+
+********************************************************************************/
+void
+StaticContextImpl::getNamespaceBindings( NsBindings& aBindings ) const
+{
+  try
+  {
+    store::NsBindings lBindings;
+    theCtx->get_namespace_bindings(lBindings);
+    aBindings.reserve(aBindings.size() + lBindings.size());
+
+    for (store::NsBindings::const_iterator lIter = lBindings.begin();
+         lIter != lBindings.end(); ++lIter)
+    {
+      aBindings.push_back(
+        std::pair<zorba::String, zorba::String>(
+          Unmarshaller::newString(lIter->first),
+          Unmarshaller::newString(lIter->second)
+        )
+      );
+    }
+  }
+  catch (ZorbaException const& e)
+  {
+    ZorbaImpl::notifyError(theDiagnosticHandler, e);
+  }
+  catch (std::exception const& e)
+  {
+    ZorbaImpl::notifyError(theDiagnosticHandler, e.what());
+  }
+}
 
 /*******************************************************************************
 

=== modified file 'src/api/staticcontextimpl.h'
--- src/api/staticcontextimpl.h	2011-12-21 14:40:33 +0000
+++ src/api/staticcontextimpl.h	2012-01-18 18:13:27 +0000
@@ -78,6 +78,9 @@
 
   String getNamespaceURIByPrefix( const String& prefix ) const;
 
+  void
+  getNamespaceBindings( NsBindings& aBindings ) const;
+
   bool setDefaultElementAndTypeNamespace( const String& URI );
 
   String getDefaultElementAndTypeNamespace( ) const;

=== modified file 'test/unit/CMakeLists.txt'
--- test/unit/CMakeLists.txt	2012-01-11 17:30:25 +0000
+++ test/unit/CMakeLists.txt	2012-01-18 18:13:27 +0000
@@ -94,6 +94,7 @@
   xquery_functions.cpp
   xmldatamanager.cpp
   staticcollectionmanager.cpp
+  static_context.cpp
 )
 
 IF (NOT ZORBA_NO_FULL_TEXT)

=== added file 'test/unit/static_context.cpp'
--- test/unit/static_context.cpp	1970-01-01 00:00:00 +0000
+++ test/unit/static_context.cpp	2012-01-18 18:13:27 +0000
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2006-2012 The FLWOR Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <cassert>
+#include <iostream>
+#include <list>
+#include <map>
+
+#include <sstream>
+#include <zorba/store_manager.h>
+#include <zorba/zorba.h>
+#include <zorba/zorba_exception.h>
+
+using namespace std;
+using namespace zorba;
+using namespace zorba::locale;
+
+bool
+sctx_test_1(Zorba* const zorba)
+{
+  StaticContext_t lSctx = zorba->createStaticContext();
+
+  Zorba_CompilerHints_t lHints;
+
+  std::stringstream lProlog;
+  lProlog << "declare namespace foo = 'http://www.example.com';";
+
+  lSctx->loadProlog(lProlog.str(), lHints);
+
+  NsBindings lBindings;
+  lSctx->getNamespaceBindings(lBindings);
+
+  bool lFooFound = false;
+
+  for (NsBindings::const_iterator lIter = lBindings.begin();
+       lIter != lBindings.end(); ++lIter)
+  {
+    std::cout << "prefix: " << lIter->first << " bound to "
+      << lIter->second << std::endl;
+
+    if (lIter->first.compare("foo") == 0)
+    {
+      lFooFound = true;
+    }
+  }
+
+  return lFooFound && lBindings.size() == 6;
+}
+
+int static_context( int argc, char *argv[] ) {
+  void *const zstore = StoreManager::getStore();
+  Zorba *const zorba = Zorba::getInstance( zstore );
+
+  if (!sctx_test_1(zorba))
+    return 1;
+
+  zorba->shutdown();
+  StoreManager::shutdownStore( zstore );
+  return 0;
+}
+/* vim:set et sw=2 ts=2: */
+

-- 
Mailing list: https://launchpad.net/~zorba-coders
Post to     : zorba-coders@lists.launchpad.net
Unsubscribe : https://launchpad.net/~zorba-coders
More help   : https://help.launchpad.net/ListHelp

Reply via email to