zorba-coders team mailing list archive
-
zorba-coders team
-
Mailing list archive
-
Message #05726
[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/95897
fixed bug #944002
--
https://code.launchpad.net/~zorba-coders/zorba/markos-scratch/+merge/95897
Your team Zorba Coders is subscribed to branch lp:zorba.
=== modified file 'src/compiler/rewriter/rules/nodeid_rules.cpp'
--- src/compiler/rewriter/rules/nodeid_rules.cpp 2012-03-02 11:42:36 +0000
+++ src/compiler/rewriter/rules/nodeid_rules.cpp 2012-03-05 13:33:22 +0000
@@ -605,6 +605,9 @@
}
+/*******************************************************************************
+
+********************************************************************************/
void MarkNodeCopyProps::applyInternal(
RewriterContext& rCtx,
expr* node,
@@ -966,15 +969,13 @@
}
+/*******************************************************************************
+
+********************************************************************************/
void MarkNodeCopyProps::markSources(
const std::vector<expr*>& sources,
UDFCallChain& udfCaller)
{
- user_function* udf = NULL;
-
- if (udfCaller.theFo)
- udf = static_cast<user_function*>(udfCaller.theFo->get_func());
-
std::vector<expr*>::const_iterator ite = sources.begin();
std::vector<expr*>::const_iterator end = sources.end();
for (; ite != end; ++ite)
@@ -989,9 +990,6 @@
if (!e->copyInputNodes())
{
e->setCopyInputNodes();
-
- if (udf)
- udf->invalidatePlan();
}
break;
}
@@ -1001,9 +999,6 @@
if (!e->copyInputNodes())
{
e->setCopyInputNodes();
-
- if (udf)
- udf->invalidatePlan();
}
break;
}
=== modified file 'src/compiler/rewriter/tools/dataflow_annotations.cpp'
--- src/compiler/rewriter/tools/dataflow_annotations.cpp 2012-01-15 09:18:22 +0000
+++ src/compiler/rewriter/tools/dataflow_annotations.cpp 2012-03-05 13:33:22 +0000
@@ -813,6 +813,11 @@
UDFCallChain* udfCaller,
std::vector<expr*>& sources)
{
+ theStartingUdf = NULL;
+
+ if (udfCaller->theFo)
+ theStartingUdf = static_cast<user_function*>(udfCaller->theFo->get_func());
+
findNodeSourcesRec(node, sources, NULL);
for (csize i = 0; i < sources.size(); ++i)
@@ -847,11 +852,19 @@
{
ZORBA_ASSERT(source->get_expr_kind() == doc_expr_kind ||
source->get_expr_kind() == elem_expr_kind);
+
+ user_function* udf = theSourceUdfMap.find(source)->second;
+
+ if (udf)
+ udf->invalidatePlan();
}
}
}
+/*******************************************************************************
+
+********************************************************************************/
void SourceFinder::findNodeSourcesRec(
expr* node,
std::vector<expr*>& sources,
@@ -1014,8 +1027,13 @@
case elem_expr_kind:
{
if (std::find(sources.begin(), sources.end(), node) == sources.end())
+ {
sources.push_back(node);
+ theSourceUdfMap.
+ insert(SourceUdfMapPair(node, (currentUdf ? currentUdf : theStartingUdf)));
+ }
+
std::vector<expr*> enclosedExprs;
node->get_fo_exprs_of_kind(FunctionConsts::OP_ENCLOSED_1, false, enclosedExprs);
=== modified file 'src/compiler/rewriter/tools/dataflow_annotations.h'
--- src/compiler/rewriter/tools/dataflow_annotations.h 2012-01-15 09:18:22 +0000
+++ src/compiler/rewriter/tools/dataflow_annotations.h 2012-03-05 13:33:22 +0000
@@ -25,7 +25,9 @@
class UDFCallChain;
+/*******************************************************************************
+********************************************************************************/
class DataflowAnnotationsComputer
{
public:
@@ -69,6 +71,9 @@
};
+/*******************************************************************************
+
+********************************************************************************/
class SourceFinder
{
friend class MarkNodeCopyProps;
@@ -79,9 +84,15 @@
typedef std::map<user_function*, std::vector<expr*>* > UdfSourcesMap;
typedef std::pair<user_function*, std::vector<expr*>* > UdfSourcesPair;
+ typedef std::map<expr*, user_function*> SourceUdfMap;
+ typedef std::pair<expr*, user_function*> SourceUdfMapPair;
+
protected:
VarSourcesMap theVarSourcesMap;
UdfSourcesMap theUdfSourcesMap;
+ SourceUdfMap theSourceUdfMap;
+
+ user_function * theStartingUdf;
std::vector<fo_expr*> theUdfCallPath;
protected:
=== modified file 'src/functions/udf.cpp'
--- src/functions/udf.cpp 2012-03-02 11:42:36 +0000
+++ src/functions/udf.cpp 2012-03-05 13:33:22 +0000
@@ -324,6 +324,7 @@
void user_function::invalidatePlan()
{
thePlan = NULL;
+ theArgVarsRefs.clear();
}
=== added file 'test/rbkt/ExpQueryResults/zorba/eval/eval13.xml.res'
--- test/rbkt/ExpQueryResults/zorba/eval/eval13.xml.res 1970-01-01 00:00:00 +0000
+++ test/rbkt/ExpQueryResults/zorba/eval/eval13.xml.res 2012-03-05 13:33:22 +0000
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root><a><b><c/></b></a></root><root><a><b><c/></b></a></root><a><b><c/></b></a><b><c/></b>
=== added file 'test/rbkt/Queries/zorba/eval/eval13.xq'
--- test/rbkt/Queries/zorba/eval/eval13.xq 1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/eval/eval13.xq 2012-03-05 13:33:22 +0000
@@ -0,0 +1,34 @@
+import module namespace refl = "http://www.zorba-xquery.com/modules/reflection";
+
+
+declare function local:dummy($n as node())
+{
+};
+
+
+declare function local:foo($n as node()) as node()*
+{
+ local:dummy($n),
+ $n/ancestor::node()
+};
+
+
+declare function local:constr($n as node()) as node()*
+{
+ local:dummy($n),
+ <root>{$n}</root>
+};
+
+
+declare variable $doc :=
+<a>
+ <b>
+ <c/>
+ </b>
+</a>
+;
+
+
+local:constr($doc)
+,
+refl:eval("local:foo(local:constr($doc)//c)")
=== modified file 'test/rbkt/testdriver.cpp'
--- test/rbkt/testdriver.cpp 2012-03-02 11:42:36 +0000
+++ test/rbkt/testdriver.cpp 2012-03-05 13:33:22 +0000
@@ -26,7 +26,7 @@
#include <time.h>
#endif
-#define ZORBA_TEST_PLAN_SERIALIZATION
+//#define ZORBA_TEST_PLAN_SERIALIZATION
#include "testdriverconfig.h" // SRC and BIN dir definitions
#include "specification.h" // parsing spec files
Follow ups
-
[Merge] lp:~zorba-coders/zorba/markos-scratch into lp:zorba
From: noreply, 2012-03-05
-
[Merge] lp:~zorba-coders/zorba/markos-scratch into lp:zorba
From: Zorba Build Bot, 2012-03-05
-
[Merge] lp:~zorba-coders/zorba/markos-scratch into lp:zorba
From: Zorba Build Bot, 2012-03-05
-
[Merge] lp:~zorba-coders/zorba/markos-scratch into lp:zorba
From: Markos Zaharioudakis, 2012-03-05
-
[Merge] lp:~zorba-coders/zorba/markos-scratch into lp:zorba
From: Zorba Build Bot, 2012-03-05
-
Re: [Merge] lp:~zorba-coders/zorba/markos-scratch into lp:zorba
From: Zorba Build Bot, 2012-03-05
-
[Merge] lp:~zorba-coders/zorba/markos-scratch into lp:zorba
From: Markos Zaharioudakis, 2012-03-05
-
[Merge] lp:~zorba-coders/zorba/markos-scratch into lp:zorba
From: Zorba Build Bot, 2012-03-05
-
Re: [Merge] lp:~zorba-coders/zorba/markos-scratch into lp:zorba
From: Zorba Build Bot, 2012-03-05
-
[Merge] lp:~zorba-coders/zorba/markos-scratch into lp:zorba
From: Zorba Build Bot, 2012-03-05
-
[Merge] lp:~zorba-coders/zorba/markos-scratch into lp:zorba
From: Markos Zaharioudakis, 2012-03-05
-
Re: [Merge] lp:~zorba-coders/zorba/markos-scratch into lp:zorba
From: Markos Zaharioudakis, 2012-03-05