zorba-coders team mailing list archive
-
zorba-coders team
-
Mailing list archive
-
Message #03334
[Merge] lp:~zorba-coders/zorba/bug911585 into lp:zorba
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;
}
Follow ups