zorba-coders team mailing list archive
-
zorba-coders team
-
Mailing list archive
-
Message #21246
[Merge] lp:~zorba-coders/zorba/markos-scratch into lp:zorba
Markos Zaharioudakis has proposed merging lp:~zorba-coders/zorba/markos-scratch into lp:zorba.
Commit message:
added dynamic_function_invocation_expr to the exprs handled by expr_tools::match_exact()
Requested reviews:
Markos Zaharioudakis (markos-za)
For more details, see:
https://code.launchpad.net/~zorba-coders/zorba/markos-scratch/+merge/161292
added dynamic_function_invocation_expr to the exprs handled by expr_tools::match_exact()
--
https://code.launchpad.net/~zorba-coders/zorba/markos-scratch/+merge/161292
Your team Zorba Coders is subscribed to branch lp:zorba.
=== modified file 'src/compiler/expression/function_item_expr.h'
--- src/compiler/expression/function_item_expr.h 2013-04-24 01:35:58 +0000
+++ src/compiler/expression/function_item_expr.h 2013-04-27 16:45:32 +0000
@@ -95,7 +95,7 @@
const std::vector<expr*>& args);
public:
- const expr* get_function() const { return theExpr; }
+ expr* get_function() const { return theExpr; }
const std::vector<expr*>& get_args() const { return theArgs; }
=== modified file 'src/compiler/rewriter/tools/expr_tools.cpp'
--- src/compiler/rewriter/tools/expr_tools.cpp 2013-02-28 11:15:32 +0000
+++ src/compiler/rewriter/tools/expr_tools.cpp 2013-04-27 16:45:32 +0000
@@ -22,6 +22,7 @@
#include "compiler/expression/script_exprs.h"
#include "compiler/expression/ft_expr.h"
#include "compiler/expression/ftnode.h"
+#include "compiler/expression/function_item_expr.h"
#include "compiler/expression/expr_iter.h"
#include "compiler/api/compilercb.h"
@@ -368,6 +369,33 @@
return true;
}
+ case dynamic_function_invocation_expr_kind:
+ {
+ const dynamic_function_invocation_expr* qe =
+ static_cast<const dynamic_function_invocation_expr*>(query);
+
+ const dynamic_function_invocation_expr* ve =
+ static_cast<const dynamic_function_invocation_expr*>(view);
+
+ if (!match_exact(qe->get_function(), ve->get_function(), subst))
+ return false;
+
+ if (qe->get_args().size() != ve->get_args().size())
+ return false;
+
+ std::vector<expr*>::const_iterator qite = qe->get_args().begin();
+ std::vector<expr*>::const_iterator qend = qe->get_args().end();
+ std::vector<expr*>::const_iterator vite = ve->get_args().begin();
+
+ for (; qite != qend; ++qite, ++vite)
+ {
+ if (!match_exact(*qite, *vite, subst))
+ return false;
+ }
+
+ return true;
+ }
+
case relpath_expr_kind:
{
relpath_expr* qe = static_cast<relpath_expr*>(query);
=== added file 'test/rbkt/ExpCompilerResults/IterPlan/zorba/index/match_vrange_04.iter'
--- test/rbkt/ExpCompilerResults/IterPlan/zorba/index/match_vrange_04.iter 1970-01-01 00:00:00 +0000
+++ test/rbkt/ExpCompilerResults/IterPlan/zorba/index/match_vrange_04.iter 2013-04-27 16:45:32 +0000
@@ -0,0 +1,52 @@
+Iterator tree for index:
+<flwor::FLWORIterator>
+ <ForVariable name="$$context-item">
+ <ZorbaCollectionIterator>
+ <SingletonIterator value="xs:QName(http://28.io/collections,db28,foo)"/>
+ </ZorbaCollectionIterator>
+ </ForVariable>
+ <ReturnClause>
+ <ValueIndexEntryBuilderIterator>
+ <ForVarIterator varname="$$context-item"/>
+ <PromoteIterator type="xs:string">
+ <FnDataIterator>
+ <DynamicFnCallIterator>
+ <ForVarIterator varname="$$context-item"/>
+ <SingletonIterator value="xs:string(_id)"/>
+ </DynamicFnCallIterator>
+ </FnDataIterator>
+ </PromoteIterator>
+ </ValueIndexEntryBuilderIterator>
+ </ReturnClause>
+</flwor::FLWORIterator>
+
+Iterator tree for main query:
+<SequentialIterator>
+ <ApplyIterator>
+ <ZorbaCreateCollectionIterator>
+ <SingletonIterator value="xs:QName(http://28.io/collections,db28,foo)"/>
+ </ZorbaCreateCollectionIterator>
+ </ApplyIterator>
+ <ApplyIterator>
+ <CreateIndexIterator>
+ <SingletonIterator value="xs:QName(http://28.io/collections,db28,foo__id_)"/>
+ </CreateIndexIterator>
+ </ApplyIterator>
+ <flwor::FLWORIterator>
+ <ForVariable name="i">
+ <ProbeIndexRangeValueIterator>
+ <SingletonIterator value="xs:QName(http://28.io/collections,db28,foo__id_)"/>
+ <SingletonIterator value="xs:string(3)"/>
+ <SingletonIterator value="xs:string(3)"/>
+ <SingletonIterator value="xs:boolean(true)"/>
+ <SingletonIterator value="xs:boolean(true)"/>
+ <SingletonIterator value="xs:boolean(true)"/>
+ <SingletonIterator value="xs:boolean(true)"/>
+ </ProbeIndexRangeValueIterator>
+ </ForVariable>
+ <ReturnClause>
+ <ForVarIterator varname="i"/>
+ </ReturnClause>
+ </flwor::FLWORIterator>
+</SequentialIterator>
+
=== added file 'test/rbkt/ExpQueryResults/zorba/index/match_vrange_04.xml.res'
=== added file 'test/rbkt/Queries/zorba/index/match_vrange_04.xq'
--- test/rbkt/Queries/zorba/index/match_vrange_04.xq 1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/index/match_vrange_04.xq 2013-04-27 16:45:32 +0000
@@ -0,0 +1,20 @@
+
+import module namespace db28 = "http://28.io/collections" at "match_vrange_04.xqlib";
+
+import module namespace ddl =
+"http://www.zorba-xquery.com/modules/store/static/collections/ddl";
+
+import module namespace dml =
+"http://www.zorba-xquery.com/modules/store/static/collections/dml";
+
+import module namespace iddl =
+"http://www.zorba-xquery.com/modules/store/static/indexes/ddl";
+
+
+ddl:create(xs:QName("db28:foo"));
+
+iddl:create(xs:QName("db28:foo__id_"));
+
+for $i in dml:collection(xs:QName("db28:foo"))
+where $i("_id") eq "3"
+return $i
=== added file 'test/rbkt/Queries/zorba/index/match_vrange_04.xqlib'
--- test/rbkt/Queries/zorba/index/match_vrange_04.xqlib 1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/index/match_vrange_04.xqlib 2013-04-27 16:45:32 +0000
@@ -0,0 +1,12 @@
+
+module namespace db28 = "http://28.io/collections";
+
+import module namespace dml = "http://www.zorba-xquery.com/modules/store/static/collections/dml";
+
+declare namespace an = "http://www.zorba-xquery.com/annotations";
+
+declare %an:mutable %an:unordered %an:mutable-nodes collection db28:foo;
+
+declare %an:manual %an:value-range index db28:foo__id_
+on nodes dml:collection(xs:QName("db28:foo"))
+by .("_id") as Q{http://www.w3.org/2001/XMLSchema}string;
Follow ups