zorba-coders team mailing list archive
-
zorba-coders team
-
Mailing list archive
-
Message #07961
[Merge] lp:~zorba-coders/zorba/markos-scratch into lp:zorba
Markos Zaharioudakis has proposed merging lp:~zorba-coders/zorba/markos-scratch into lp:zorba.
Requested reviews:
Markos Zaharioudakis (markos-za)
For more details, see:
https://code.launchpad.net/~zorba-coders/zorba/markos-scratch/+merge/102356
fix for bug #980526
--
https://code.launchpad.net/~zorba-coders/zorba/markos-scratch/+merge/102356
Your team Zorba Coders is subscribed to branch lp:zorba.
=== modified file 'ChangeLog'
--- ChangeLog 2012-04-16 20:56:43 +0000
+++ ChangeLog 2012-04-17 17:00:30 +0000
@@ -23,6 +23,7 @@
* Fixed bug #906494 (default compile with D_FILE_OFFSET_BITS=64)
* Fixed bug #912586, #912593 and #912722 (assertion failures with lax validation)
* Fixed bug #921458 (file:read-text-lines() blocking)
+ * Fixed bug #980526 (no-copy rule bug due to global var being set in "distant" udf)
* Fixed bug #949910 (has-children may be invoked on all nodes). Internally, zorba::store::Item::getChildren() now returns NULL on node classes without offspring (instead of raising an error).
=== modified file 'src/compiler/rewriter/tools/dataflow_annotations.cpp'
--- src/compiler/rewriter/tools/dataflow_annotations.cpp 2012-04-16 20:56:43 +0000
+++ src/compiler/rewriter/tools/dataflow_annotations.cpp 2012-04-17 17:00:30 +0000
@@ -834,12 +834,15 @@
sources.erase(sources.begin() + i);
--i;
- // If this method is called to find the sources of an expr within the
+ // Note: If this method is called to find the sources of an expr within the
// body of a function_item, then udfCaller->theFo will be NULL.
+ while(udfCaller->theFo && varExpr->get_udf() != udfCaller->theFo->get_func())
+ {
+ udfCaller = udfCaller->thePrev;
+ }
+
if (udfCaller->theFo)
- {
- ZORBA_ASSERT(varExpr->get_udf() == udfCaller->theFo->get_func());
-
+ {
fo_expr* foExpr = udfCaller->theFo;
expr* foArg = foExpr->get_arg(varExpr->get_param_pos());
std::vector<expr*> argSources;
=== modified file 'src/runtime/eval/eval.cpp'
--- src/runtime/eval/eval.cpp 2012-04-16 20:56:43 +0000
+++ src/runtime/eval/eval.cpp 2012-04-17 17:00:30 +0000
@@ -62,20 +62,6 @@
{
}
-/****************************************************************************//**
-
-********************************************************************************/
-void
-EvalIteratorState::reset(PlanState& aPlanState)
-{
- PlanIteratorState::reset(aPlanState);
- // When an exception is thrown during an EvalIterator::nextImpl invocation
- // or when the EvalIterator doesn't return all resulting items of an other reason,
- // the PlanWrapper is not properly destroyed. Therefore, we destroy it in the reset
- // to prevent troubles the next time the EvalIterator is used.
- thePlanWrapper = 0;
-}
-
/****************************************************************************//**
@@ -116,6 +102,7 @@
void EvalIterator::serialize(::zorba::serialization::Archiver& ar)
{
ar.set_serialize_everything();
+
serialize_baseclass(ar,
(NaryBaseIterator<EvalIterator, EvalIteratorState>*)this);
=== modified file 'src/runtime/eval/eval.h'
--- src/runtime/eval/eval.h 2012-04-16 20:56:43 +0000
+++ src/runtime/eval/eval.h 2012-04-17 17:00:30 +0000
@@ -34,11 +34,10 @@
std::auto_ptr<CompilerCB> ccb;
std::auto_ptr<dynamic_context> dctx;
+public:
EvalIteratorState();
~EvalIteratorState();
-
- void reset(PlanState&);
};
=== added file 'test/rbkt/ExpQueryResults/zorba/no-copy/q21.xml.res'
=== added file 'test/rbkt/Queries/zorba/no-copy/q21.xq'
--- test/rbkt/Queries/zorba/no-copy/q21.xq 1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/no-copy/q21.xq 2012-04-17 17:00:30 +0000
@@ -0,0 +1,86 @@
+import module namespace refl = "http://www.zorba-xquery.com/modules/reflection";
+
+declare namespace ann = "http://www.zorba-xquery.com/annotations";
+
+declare variable $serialization-params as element():=
+<serialization-parameters/>;
+
+
+declare %ann:sequential function
+local:set-serialization-parameters($params as element()) as empty-sequence()
+{
+ $serialization-params := $params;
+};
+
+
+declare %ann:sequential function local:set-redirect($url as xs:string) as xs:integer
+{
+ 1
+};
+
+
+declare %ann:sequential function local:save()
+{
+ variable $tmp := $serialization-params/..;
+ local:set-redirect("/wiki");
+};
+
+
+local:save()
+
+
+
+
+(:
+
+module namespace resp = "http://www.28msec.com/modules/response";
+
+declare namespace ann = "http://www.zorba-xquery.com/annotations";
+
+declare variable
+$resp:serialization-params as element(serialization-parameters) :=
+resp:serializer-defaults-xml();
+
+
+declare function
+resp:serializer-defaults-xml() as element(serialization-parameters)
+{
+ <serialization-parameters/>
+};
+
+
+declare %ann:sequential function
+resp:set-serialization-parameters($params as element(serialization-parameters)) as
+empty-sequence()
+{
+ $resp:serialization-params := $params;
+};
+
+
+declare %ann:sequential function resp:set-redirect($url as xs:string) as xs:integer
+{
+ 1
+};
+
+
+----------------------------------------
+
+
+import module namespace refl = "http://www.zorba-xquery.com/modules/reflection";
+
+import module namespace res = "http://www.28msec.com/modules/response" at "q21.xqlib";
+
+declare namespace ann = "http://www.zorba-xquery.com/annotations";
+
+
+declare %ann:sequential function local:save()
+{
+ variable $tmp := refl:eval-s('"blub"');
+ res:set-redirect("/wiki");
+};
+
+
+local:save()
+
+
+:)
Follow ups