Markos Zaharioudakis has proposed merging lp:~zorba-coders/zorba/bug911585 into 
lp:zorba.

Requested reviews:
  Markos Zaharioudakis (markos-za)
Related bugs:
  Bug #911585 in Zorba: "eval + staticcollectionmanager fails"
  https://bugs.launchpad.net/zorba/+bug/911585

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

fixed bug #911585 (management of variables during eval)
-- 
https://code.launchpad.net/~zorba-coders/zorba/bug911585/+merge/87615
Your team Zorba Coders is subscribed to branch lp:zorba.
=== modified file 'src/compiler/expression/script_exprs.cpp'
--- src/compiler/expression/script_exprs.cpp	2012-01-05 12:49:30 +0000
+++ src/compiler/expression/script_exprs.cpp	2012-01-05 13:03:26 +0000
@@ -80,6 +80,11 @@
 }
 
 
+block_expr::~block_expr()
+{
+}
+
+
 void block_expr::serialize(::zorba::serialization::Archiver& ar)
 {
   serialize_baseclass(ar, (expr*)this);

=== modified file 'src/compiler/expression/script_exprs.h'
--- src/compiler/expression/script_exprs.h	2012-01-05 12:49:30 +0000
+++ src/compiler/expression/script_exprs.h	2012-01-05 13:03:26 +0000
@@ -136,6 +136,8 @@
       std::vector<expr_t>& seq,
       std::vector<var_expr*>* assignedVars);
 
+  ~block_expr();
+
   void add_at(csize pos, const expr_t& arg);
 
   csize size() const { return theArgs.size(); }

=== modified file 'src/runtime/eval/eval.cpp'
--- src/runtime/eval/eval.cpp	2012-01-03 12:10:06 +0000
+++ src/runtime/eval/eval.cpp	2012-01-05 13:03:26 +0000
@@ -237,7 +237,7 @@
     store::Item_t itemValue;
     store::TempSeq_t seqValue;
 
-    if (!outerDctx->exists_variable(globalVarId))
+    if (!outerDctx->is_set_variable(globalVarId))
       continue;
 
     outerDctx->get_variable(globalVarId,
@@ -296,7 +296,7 @@
 
   for (; sctxIte != sctxEnd; ++sctxIte)
   {
-    sctxIte->second->getVariables(innerVars);
+    sctxIte->second->getVariables(innerVars, true, false, true);
   }
 
   FOR_EACH(std::vector<var_expr_t>, ite, innerVars)

=== added file 'test/rbkt/ExpQueryResults/zorba/eval/eval9.xml.res'
--- test/rbkt/ExpQueryResults/zorba/eval/eval9.xml.res	1970-01-01 00:00:00 +0000
+++ test/rbkt/ExpQueryResults/zorba/eval/eval9.xml.res	2012-01-05 13:03:26 +0000
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+2

=== added file 'test/rbkt/Queries/zorba/eval/eval9.xq'
--- test/rbkt/Queries/zorba/eval/eval9.xq	1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/eval/eval9.xq	2012-01-05 13:03:26 +0000
@@ -0,0 +1,6 @@
+import module namespace refl = "http://www.zorba-xquery.com/modules/reflection";;
+
+declare variable $x external;
+
+
+refl:eval("1+1")

=== modified file 'test/unit/CMakeLists.txt'
--- test/unit/CMakeLists.txt	2011-12-22 19:11:30 +0000
+++ test/unit/CMakeLists.txt	2012-01-05 13:03:26 +0000
@@ -53,6 +53,9 @@
 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/main_sequential.xq ${CMAKE_CURRENT_BINARY_DIR}/main_sequential.xq)
 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/main_sequential.xqlib ${CMAKE_CURRENT_BINARY_DIR}/main_sequential.xqlib)
 
+# belongs to the staticcollectionmanager test
+CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/main_invoke.xq ${CMAKE_CURRENT_BINARY_DIR}/main_invoke.xq)
+
 #belongs to test context_item
 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/context_item1.xq ${CMAKE_CURRENT_BINARY_DIR}/context_item1.xq)
 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/context_item2.xq ${CMAKE_CURRENT_BINARY_DIR}/context_item2.xq)
@@ -65,6 +68,7 @@
 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/module1.xq ${CMAKE_CURRENT_BINARY_DIR}/module1.xq)
 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/module2.xq ${CMAKE_CURRENT_BINARY_DIR}/module2.xq)
 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/module3.xq ${CMAKE_CURRENT_BINARY_DIR}/module3.xq)
+CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/module4.xq ${CMAKE_CURRENT_BINARY_DIR}/module4.xq)
 
 SET(UNIT_TESTS_SRCS
   path_resolver.cpp

=== added file 'test/unit/main_invoke.xq'
--- test/unit/main_invoke.xq	1970-01-01 00:00:00 +0000
+++ test/unit/main_invoke.xq	2012-01-05 13:03:26 +0000
@@ -0,0 +1,9 @@
+xquery version '3.0';
+
+import module namespace invoke = 'http://www.zorba-xquery.com/modules/reflection';
+
+import module namespace foo = "http://foo.com/"; at "${CMAKE_CURRENT_BINARY_DIR}/module4.xq";
+
+declare variable $local:function as xs:string external := "foo";
+
+1+1

=== added file 'test/unit/module4.xq'
--- test/unit/module4.xq	1970-01-01 00:00:00 +0000
+++ test/unit/module4.xq	2012-01-05 13:03:26 +0000
@@ -0,0 +1,6 @@
+module namespace foo = "http://foo.com/";;
+
+declare variable $foo:blub1 := 1;
+declare variable $foo:blub2 := 1;
+
+declare collection foo:bar;

=== modified file 'test/unit/staticcollectionmanager.cpp'
--- test/unit/staticcollectionmanager.cpp	2011-12-21 14:40:33 +0000
+++ test/unit/staticcollectionmanager.cpp	2012-01-05 13:03:26 +0000
@@ -25,6 +25,8 @@
 #include <zorba/singleton_item_sequence.h>
 #include <zorba/static_collection_manager.h>
 
+#include "system/properties.h"
+
 using namespace zorba;
 
 bool
@@ -225,12 +227,46 @@
   return true;
 }
 
+
+bool
+staticcollectionamanger4(zorba::Zorba* z)
+{
+  std::ifstream lIn("main_invoke.xq");
+  assert(lIn.good());
+
+  zorba::XQuery_t lQuery = z->createQuery();
+  Zorba_CompilerHints lHints;
+  lQuery->compile(lIn, lHints);
+
+  size_t i = 0;
+
+  StaticCollectionManager* lMgr = lQuery->getStaticCollectionManager();
+
+  zorba::ItemSequence_t lSeq = lMgr->declaredCollections();
+  zorba::Iterator_t lIter = lSeq->getIterator();
+  lIter->open();
+  zorba::Item lName;
+  while (lIter->next(lName))
+  {
+    if (!lMgr->isAvailableCollection(lName))
+    {
+      lMgr->createCollection(lName);
+      std::cout << "created collection " << lName.getStringValue() << std::endl;
+      ++i;
+    }
+  }
+
+  return i == 1;
+}
+
 int
 staticcollectionmanager(int argc, char* argv[])
 {
   void* store = zorba::StoreManager::getStore();
   zorba::Zorba* z = zorba::Zorba::getInstance(store);
 
+  zorba::Properties::load(0, NULL);
+
   std::cout << "executing example 1" << std::endl;
   if (!staticcollectionamanger1(z))
     return 1;
@@ -246,6 +282,11 @@
     return 3;
   std::cout << std::endl;
 
+  std::cout << "executing example 4" << std::endl;
+  if (!staticcollectionamanger4(z))
+    return 4;
+  std::cout << std::endl;
+
   return 0;
 }
 

-- 
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