zorba-coders team mailing list archive
-
zorba-coders team
-
Mailing list archive
-
Message #11630
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
Matthias Brantner has proposed merging lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba.
Requested reviews:
Matthias Brantner (matthias-brantner)
For more details, see:
https://code.launchpad.net/~zorba-coders/zorba/feature-pragma_no_copy/+merge/112816
pragma for preventing copying of nodes in functions that insert into collections
For example
declare namespace ext = "http://www.zorba-xquery.com/extensions";
(# ext:no-copy #) {
dml:insert-nodes-last(xs:QName("local:foo"), $node)
};
--
https://code.launchpad.net/~zorba-coders/zorba/feature-pragma_no_copy/+merge/112816
Your team Zorba Coders is subscribed to branch lp:zorba.
=== modified file 'src/compiler/api/compilercb.h'
--- src/compiler/api/compilercb.h 2012-06-28 04:14:03 +0000
+++ src/compiler/api/compilercb.h 2012-06-29 17:23:20 +0000
@@ -29,6 +29,7 @@
// without having the definition of static_context availble.
# include "context/static_context.h"
#endif
+#include "compiler/expression/pragma.h"
#include "zorbaserialization/class_serializer.h"
@@ -157,6 +158,9 @@
typedef std::map<csize, static_context_t> SctxMap;
+ typedef std::multimap<expr*, pragma_t> PragmaMap;
+ typedef PragmaMap::const_iterator PragmaMapIter;
+
public:
XQueryDiagnostics * theXQueryDiagnostics;
@@ -186,6 +190,8 @@
config theConfig;
+ PragmaMap thePragmas;
+
public:
SERIALIZABLE_CLASS(CompilerCB);
CompilerCB(::zorba::serialization::Archiver& ar);
=== modified file 'src/compiler/expression/CMakeLists.txt'
--- src/compiler/expression/CMakeLists.txt 2012-06-28 04:14:03 +0000
+++ src/compiler/expression/CMakeLists.txt 2012-06-29 17:23:20 +0000
@@ -26,7 +26,8 @@
fo_expr.cpp
script_exprs.cpp
update_exprs.cpp
- function_item_expr.cpp)
+ function_item_expr.cpp
+ pragma.cpp)
IF (NOT ZORBA_NO_FULL_TEXT)
LIST(APPEND EXPRESSION_SRCS
=== modified file 'src/compiler/expression/expr.cpp'
--- src/compiler/expression/expr.cpp 2012-06-28 04:14:03 +0000
+++ src/compiler/expression/expr.cpp 2012-06-29 17:23:20 +0000
@@ -955,14 +955,6 @@
/*******************************************************************************
********************************************************************************/
-pragma::pragma(store::Item_t name, std::string const& content)
- :
- theQName(name),
- theContent(content)
-{
-}
-
-
extension_expr::extension_expr(
static_context* sctx,
const QueryLoc& loc)
=== modified file 'src/compiler/expression/expr.h'
--- src/compiler/expression/expr.h 2012-06-28 04:14:03 +0000
+++ src/compiler/expression/expr.h 2012-06-29 17:23:20 +0000
@@ -29,6 +29,7 @@
#include "functions/signature.h"
#include "compiler/expression/var_expr.h"
+#include "compiler/expression/pragma.h"
#include "context/static_context.h"
#include "context/namespace_context.h"
@@ -765,22 +766,6 @@
/***************************************************************************//**
********************************************************************************/
-class pragma : public SimpleRCObject
-{
- friend class expr;
-
-public:
- store::Item_t theQName;
- std::string theContent;
-
-public:
- pragma(store::Item_t name, std::string const& content);
-};
-
-
-/***************************************************************************//**
-
-********************************************************************************/
class extension_expr : public expr
{
friend class ExprIterator;
=== modified file 'src/compiler/expression/expr_base.cpp'
--- src/compiler/expression/expr_base.cpp 2012-06-28 04:14:03 +0000
+++ src/compiler/expression/expr_base.cpp 2012-06-29 17:23:20 +0000
@@ -541,6 +541,30 @@
/*******************************************************************************
+
+********************************************************************************/
+BoolAnnotationValue expr::getContainsPragma() const
+{
+ return (BoolAnnotationValue)
+ ((theFlags1 & CONTAINS_PRAGMA_MASK) >> CONTAINS_PRAGMA);
+}
+
+
+void expr::setContainsPragma(BoolAnnotationValue v)
+{
+ theFlags1 &= ~CONTAINS_PRAGMA_MASK;
+ theFlags1 |= (v << CONTAINS_PRAGMA);
+}
+
+
+bool expr::containsPragma() const
+{
+ BoolAnnotationValue v = getContainsPragma();
+ return (v == ANNOTATION_TRUE || v == ANNOTATION_TRUE_FIXED);
+}
+
+
+/*******************************************************************************
This annotation tells whether the expr must produce nodes that belong to
"standalone" trees or not. A tree is standalone if it does not contain
references to other trees. Such references are created when the optimizer
=== modified file 'src/compiler/expression/expr_base.h'
--- src/compiler/expression/expr_base.h 2012-06-28 04:14:03 +0000
+++ src/compiler/expression/expr_base.h 2012-06-29 17:23:20 +0000
@@ -151,7 +151,8 @@
CONTAINS_RECURSIVE_CALL = 12,
PROPAGATES_INPUT_NODES = 14,
WILL_BE_SERIALIZED = 16,
- MUST_COPY_NODES = 18
+ MUST_COPY_NODES = 18,
+ CONTAINS_PRAGMA = 20
} Annotationkey;
typedef enum
@@ -165,7 +166,8 @@
CONTAINS_RECURSIVE_CALL_MASK = 0x3000,
PROPAGATES_INPUT_NODES_MASK = 0xC000,
WILL_BE_SERIALIZED_MASK = 0x30000,
- MUST_COPY_NODES_MASK = 0xC0000
+ MUST_COPY_NODES_MASK = 0xC0000,
+ CONTAINS_PRAGMA_MASK = 0x300000
} AnnotationMask;
@@ -316,6 +318,13 @@
bool willBeSerialized() const;
+ // Annotation : containsPragma
+ BoolAnnotationValue getContainsPragma() const;
+
+ void setContainsPragma(BoolAnnotationValue v);
+
+ bool containsPragma() const;
+
// Annotation : free vars
const FreeVars& getFreeVars() const { return theFreeVars; }
=== added file 'src/compiler/expression/pragma.cpp'
--- src/compiler/expression/pragma.cpp 1970-01-01 00:00:00 +0000
+++ src/compiler/expression/pragma.cpp 2012-06-29 17:23:20 +0000
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2006-2012 The FLWOR Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "pragma.h"
+#include "zorbatypes/rchandle.h"
+#include "store/api/item.h"
+
+namespace zorba
+{
+
+/*******************************************************************************
+
+*******************************************************************************/
+pragma::pragma(const store::Item_t& name, zstring const& content)
+ :
+ theQName(name),
+ theContent(content)
+{
+}
+
+pragma::~pragma()
+{
+}
+
+}
=== added file 'src/compiler/expression/pragma.h'
--- src/compiler/expression/pragma.h 1970-01-01 00:00:00 +0000
+++ src/compiler/expression/pragma.h 2012-06-29 17:23:20 +0000
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2006-2012 The FLWOR Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#pragma once
+#ifndef ZORBA_COMPILER_PRAGMA_H
+#define ZORBA_COMPILER_PRAGMA_H
+
+#include "zorbatypes/rchandle.h"
+#include "store/api/item.h"
+
+namespace zorba
+{
+
+/***************************************************************************//**
+
+********************************************************************************/
+class pragma : public SimpleRCObject
+{
+ friend class expr;
+
+public:
+ store::Item_t theQName;
+ zstring theContent;
+
+public:
+ pragma(const store::Item_t& name, zstring const& content);
+
+ ~pragma();
+};
+
+typedef rchandle<pragma> pragma_t;
+
+} /* namespace zorba */
+
+#endif
=== modified file 'src/compiler/parsetree/parsenodes.cpp'
--- src/compiler/parsetree/parsenodes.cpp 2012-06-28 04:14:03 +0000
+++ src/compiler/parsetree/parsenodes.cpp 2012-06-29 17:23:20 +0000
@@ -2807,8 +2807,8 @@
void ExtensionExpr::accept( parsenode_visitor &v ) const
{
BEGIN_VISITOR();
+ ACCEPT (expr_);
ACCEPT (pragmas_);
- ACCEPT (expr_);
END_VISITOR();
}
=== modified file 'src/compiler/translator/translator.cpp'
--- src/compiler/translator/translator.cpp 2012-06-28 04:14:03 +0000
+++ src/compiler/translator/translator.cpp 2012-06-29 17:23:20 +0000
@@ -56,6 +56,7 @@
#include "compiler/expression/flwor_expr.h"
#include "compiler/expression/path_expr.h"
#include "compiler/expression/function_item_expr.h"
+#include "compiler/expression/pragma.h"
#include "compiler/rewriter/framework/rewriter_context.h"
#include "compiler/rewriter/framework/rewriter.h"
#include "compiler/xqddf/value_index.h"
@@ -8261,12 +8262,21 @@
{
TRACE_VISIT_OUT();
- // may raise XPST0081
- if (!v.get_name()->is_eqname())
+ store::Item_t lQName;
+ expand_no_default_qname(lQName, v.get_name(), v.get_name()->get_location());
+
+ if (lQName->getPrefix().empty() && lQName->getNamespace().empty())
+ RAISE_ERROR(err::XPST0081, loc, ERROR_PARAMS(lQName->getStringValue()));
+
+ if (lQName->getNamespace() == ZORBA_EXTENSIONS_NS)
{
- zstring ns;
- theSctx->lookup_ns(ns, v.get_name()->get_prefix(), loc);
+ pragma_t lPragma = new pragma(lQName, v.get_pragma_lit());
+ expr_t lExpr = top_nodestack();
+
+ theCCB->thePragmas.insert(std::make_pair(lExpr.getp(), lPragma));
+ lExpr->setContainsPragma(ANNOTATION_TRUE);
}
+
}
=== modified file 'src/functions/func_collections_impl.cpp'
--- src/functions/func_collections_impl.cpp 2012-06-28 04:14:03 +0000
+++ src/functions/func_collections_impl.cpp 2012-06-29 17:23:20 +0000
@@ -19,6 +19,9 @@
#include "runtime/collections/collections.h"
#include "compiler/expression/expr_consts.h"
+#include "compiler/expression/expr_base.h"
+#include "compiler/expression/pragma.h"
+#include "compiler/api/compilercb.h"
namespace zorba
{
@@ -26,6 +29,26 @@
/*******************************************************************************
********************************************************************************/
+bool
+mustCopyNodes(CompilerCB* ccb, expr& e)
+{
+ if (e.containsPragma())
+ {
+ CompilerCB::PragmaMapIter lIter = ccb->thePragmas.find(&e);
+ while (lIter != ccb->thePragmas.end())
+ {
+ if (lIter->second->theQName->getLocalName() == "no-copy")
+ return true;
+ ++lIter;
+ }
+ }
+ return false;
+}
+
+
+/*******************************************************************************
+
+********************************************************************************/
PlanIter_t static_collections_dml_collection::codegen(
CompilerCB*,
static_context* sctx,
@@ -103,7 +126,7 @@
********************************************************************************/
PlanIter_t static_collections_dml_insert_nodes::codegen(
- CompilerCB*,
+ CompilerCB* cb,
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& argv,
@@ -114,7 +137,9 @@
bool const dynamic =
ns == static_context::ZORBA_STORE_DYNAMIC_COLLECTIONS_DML_FN_NS;
- return new ZorbaInsertNodesIterator(sctx, loc, argv, dynamic);
+ bool const copy = mustCopyNodes(cb, ann);
+
+ return new ZorbaInsertNodesIterator(sctx, loc, argv, dynamic, copy);
}
@@ -122,7 +147,7 @@
********************************************************************************/
PlanIter_t static_collections_dml_insert_nodes_first::codegen(
- CompilerCB*,
+ CompilerCB* cb,
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& argv,
@@ -133,7 +158,9 @@
bool const dynamic =
ns == static_context::ZORBA_STORE_DYNAMIC_COLLECTIONS_DML_FN_NS;
- return new ZorbaInsertNodesFirstIterator(sctx, loc, argv, dynamic);
+ bool const copy = mustCopyNodes(cb, ann);
+
+ return new ZorbaInsertNodesFirstIterator(sctx, loc, argv, dynamic, copy);
}
@@ -141,7 +168,7 @@
********************************************************************************/
PlanIter_t static_collections_dml_insert_nodes_last::codegen(
- CompilerCB*,
+ CompilerCB* cb,
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& argv,
@@ -152,7 +179,9 @@
bool const dynamic =
ns == static_context::ZORBA_STORE_DYNAMIC_COLLECTIONS_DML_FN_NS;
- return new ZorbaInsertNodesLastIterator(sctx, loc, argv, dynamic);
+ bool const copy = mustCopyNodes(cb, ann);
+
+ return new ZorbaInsertNodesLastIterator(sctx, loc, argv, dynamic, copy);
}
@@ -160,7 +189,7 @@
********************************************************************************/
PlanIter_t static_collections_dml_insert_nodes_before::codegen(
- CompilerCB*,
+ CompilerCB* cb,
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& argv,
@@ -171,7 +200,9 @@
bool const dynamic =
ns == static_context::ZORBA_STORE_DYNAMIC_COLLECTIONS_DML_FN_NS;
- return new ZorbaInsertNodesBeforeIterator(sctx, loc, argv, dynamic);
+ bool const copy = mustCopyNodes(cb, ann);
+
+ return new ZorbaInsertNodesBeforeIterator(sctx, loc, argv, dynamic, copy);
}
@@ -179,7 +210,7 @@
********************************************************************************/
PlanIter_t static_collections_dml_insert_nodes_after::codegen(
- CompilerCB*,
+ CompilerCB* cb,
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& argv,
@@ -190,7 +221,9 @@
bool const dynamic =
ns == static_context::ZORBA_STORE_DYNAMIC_COLLECTIONS_DML_FN_NS;
- return new ZorbaInsertNodesAfterIterator(sctx, loc, argv, dynamic);
+ bool const copy = mustCopyNodes(cb, ann);
+
+ return new ZorbaInsertNodesAfterIterator(sctx, loc, argv, dynamic, copy);
}
@@ -198,7 +231,7 @@
********************************************************************************/
PlanIter_t static_collections_dml_apply_insert_nodes::codegen(
- CompilerCB*,
+ CompilerCB* cb,
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& argv,
@@ -209,7 +242,9 @@
bool const dynamic =
ns == static_context::ZORBA_STORE_DYNAMIC_COLLECTIONS_DML_FN_NS;
- return new ZorbaApplyInsertNodesIterator(sctx, loc, argv, dynamic);
+ bool const copy = mustCopyNodes(cb, ann);
+
+ return new ZorbaApplyInsertNodesIterator(sctx, loc, argv, dynamic, copy);
}
@@ -225,7 +260,7 @@
********************************************************************************/
PlanIter_t static_collections_dml_apply_insert_nodes_first::codegen(
- CompilerCB*,
+ CompilerCB* cb,
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& argv,
@@ -236,7 +271,9 @@
bool const dynamic =
ns == static_context::ZORBA_STORE_DYNAMIC_COLLECTIONS_DML_FN_NS;
- return new ZorbaApplyInsertNodesFirstIterator(sctx, loc, argv, dynamic);
+ bool const copy = mustCopyNodes(cb, ann);
+
+ return new ZorbaApplyInsertNodesFirstIterator(sctx, loc, argv, dynamic, copy);
}
@@ -252,7 +289,7 @@
********************************************************************************/
PlanIter_t static_collections_dml_apply_insert_nodes_last::codegen(
- CompilerCB*,
+ CompilerCB* cb,
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& argv,
@@ -263,7 +300,9 @@
bool const dynamic =
ns == static_context::ZORBA_STORE_DYNAMIC_COLLECTIONS_DML_FN_NS;
- return new ZorbaApplyInsertNodesLastIterator(sctx, loc, argv, dynamic);
+ bool const copy = mustCopyNodes(cb, ann);
+
+ return new ZorbaApplyInsertNodesLastIterator(sctx, loc, argv, dynamic, copy);
}
@@ -279,7 +318,7 @@
********************************************************************************/
PlanIter_t static_collections_dml_apply_insert_nodes_before::codegen(
- CompilerCB*,
+ CompilerCB* cb,
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& argv,
@@ -290,7 +329,9 @@
bool const dynamic =
ns == static_context::ZORBA_STORE_DYNAMIC_COLLECTIONS_DML_FN_NS;
- return new ZorbaApplyInsertNodesBeforeIterator(sctx, loc, argv, dynamic);
+ bool const copy = mustCopyNodes(cb, ann);
+
+ return new ZorbaApplyInsertNodesBeforeIterator(sctx, loc, argv, dynamic, copy);
}
@@ -307,7 +348,7 @@
********************************************************************************/
PlanIter_t static_collections_dml_apply_insert_nodes_after::codegen(
- CompilerCB*,
+ CompilerCB* cb,
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& argv,
@@ -318,7 +359,9 @@
bool const dynamic =
ns == static_context::ZORBA_STORE_DYNAMIC_COLLECTIONS_DML_FN_NS;
- return new ZorbaApplyInsertNodesAfterIterator(sctx, loc, argv, dynamic);
+ bool const copy = mustCopyNodes(cb, ann);
+
+ return new ZorbaApplyInsertNodesAfterIterator(sctx, loc, argv, dynamic, copy);
}
=== modified file 'src/runtime/collections/collections_base.h'
--- src/runtime/collections/collections_base.h 2012-06-28 04:14:03 +0000
+++ src/runtime/collections/collections_base.h 2012-06-29 17:23:20 +0000
@@ -59,6 +59,7 @@
{
protected:
bool theIsDynamic;
+ bool theMustCopyInput;
protected:
@@ -103,8 +104,9 @@
getCopyMode(lCopyMode, this->theSctx);
- lCopyMode.theDoCopy = !
- this->theChildren[this->theChildren.size()-1]->isConstructor();
+ lCopyMode.theDoCopy =
+ this->theChildren[this->theChildren.size()-1]->isConstructor() ||
+ !theMustCopyInput;
while (this->consumeNext(node,
this->theChildren[this->theChildren.size()-1].getp(),
@@ -144,10 +146,12 @@
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& children,
- bool isDynamic)
+ bool isDynamic,
+ bool mustCopyNodes)
:
NaryBaseIterator<Iter, State>(sctx, loc, children),
- theIsDynamic(isDynamic)
+ theIsDynamic(isDynamic),
+ theMustCopyInput(mustCopyNodes)
{
}
=== modified file 'src/runtime/collections/pregenerated/collections.h'
--- src/runtime/collections/pregenerated/collections.h 2012-06-29 13:25:20 +0000
+++ src/runtime/collections/pregenerated/collections.h 2012-06-29 17:23:20 +0000
@@ -379,9 +379,10 @@
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& children,
- bool isDynamic)
+ bool isDynamic,
+ bool mustCopyNodes)
:
- ZorbaCollectionIteratorHelper<ZorbaInsertNodesIterator, PlanIteratorState>(sctx, loc, children, isDynamic)
+ ZorbaCollectionIteratorHelper<ZorbaInsertNodesIterator, PlanIteratorState>(sctx, loc, children, isDynamic, mustCopyNodes)
{}
virtual ~ZorbaInsertNodesIterator();
@@ -414,9 +415,10 @@
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& children,
- bool isDynamic)
+ bool isDynamic,
+ bool mustCopyNodes)
:
- ZorbaCollectionIteratorHelper<ZorbaInsertNodesFirstIterator, PlanIteratorState>(sctx, loc, children, isDynamic)
+ ZorbaCollectionIteratorHelper<ZorbaInsertNodesFirstIterator, PlanIteratorState>(sctx, loc, children, isDynamic, mustCopyNodes)
{}
virtual ~ZorbaInsertNodesFirstIterator();
@@ -449,9 +451,10 @@
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& children,
- bool isDynamic)
+ bool isDynamic,
+ bool mustCopyNodes)
:
- ZorbaCollectionIteratorHelper<ZorbaInsertNodesLastIterator, PlanIteratorState>(sctx, loc, children, isDynamic)
+ ZorbaCollectionIteratorHelper<ZorbaInsertNodesLastIterator, PlanIteratorState>(sctx, loc, children, isDynamic, mustCopyNodes)
{}
virtual ~ZorbaInsertNodesLastIterator();
@@ -484,9 +487,10 @@
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& children,
- bool isDynamic)
+ bool isDynamic,
+ bool mustCopyNodes)
:
- ZorbaCollectionIteratorHelper<ZorbaInsertNodesBeforeIterator, PlanIteratorState>(sctx, loc, children, isDynamic)
+ ZorbaCollectionIteratorHelper<ZorbaInsertNodesBeforeIterator, PlanIteratorState>(sctx, loc, children, isDynamic, mustCopyNodes)
{}
virtual ~ZorbaInsertNodesBeforeIterator();
@@ -521,9 +525,10 @@
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& children,
- bool isDynamic)
+ bool isDynamic,
+ bool mustCopyNodes)
:
- ZorbaCollectionIteratorHelper<ZorbaInsertNodesAfterIterator, PlanIteratorState>(sctx, loc, children, isDynamic),
+ ZorbaCollectionIteratorHelper<ZorbaInsertNodesAfterIterator, PlanIteratorState>(sctx, loc, children, isDynamic, mustCopyNodes),
theIsDynamic(isDynamic)
{}
@@ -571,9 +576,10 @@
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& children,
- bool isDynamic)
+ bool isDynamic,
+ bool mustCopyNodes)
:
- ZorbaCollectionIteratorHelper<ZorbaApplyInsertNodesIterator, ZorbaApplyInsertNodesIteratorState>(sctx, loc, children, isDynamic)
+ ZorbaCollectionIteratorHelper<ZorbaApplyInsertNodesIterator, ZorbaApplyInsertNodesIteratorState>(sctx, loc, children, isDynamic, mustCopyNodes)
{}
virtual ~ZorbaApplyInsertNodesIterator();
@@ -620,9 +626,10 @@
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& children,
- bool isDynamic)
+ bool isDynamic,
+ bool mustCopyNodes)
:
- ZorbaCollectionIteratorHelper<ZorbaApplyInsertNodesFirstIterator, ZorbaApplyInsertNodesFirstIteratorState>(sctx, loc, children, isDynamic)
+ ZorbaCollectionIteratorHelper<ZorbaApplyInsertNodesFirstIterator, ZorbaApplyInsertNodesFirstIteratorState>(sctx, loc, children, isDynamic, mustCopyNodes)
{}
virtual ~ZorbaApplyInsertNodesFirstIterator();
@@ -669,9 +676,10 @@
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& children,
- bool isDynamic)
+ bool isDynamic,
+ bool mustCopyNodes)
:
- ZorbaCollectionIteratorHelper<ZorbaApplyInsertNodesLastIterator, ZorbaApplyInsertNodesLastIteratorState>(sctx, loc, children, isDynamic)
+ ZorbaCollectionIteratorHelper<ZorbaApplyInsertNodesLastIterator, ZorbaApplyInsertNodesLastIteratorState>(sctx, loc, children, isDynamic, mustCopyNodes)
{}
virtual ~ZorbaApplyInsertNodesLastIterator();
@@ -718,9 +726,10 @@
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& children,
- bool isDynamic)
+ bool isDynamic,
+ bool mustCopyNodes)
:
- ZorbaCollectionIteratorHelper<ZorbaApplyInsertNodesBeforeIterator, ZorbaApplyInsertNodesBeforeIteratorState>(sctx, loc, children, isDynamic)
+ ZorbaCollectionIteratorHelper<ZorbaApplyInsertNodesBeforeIterator, ZorbaApplyInsertNodesBeforeIteratorState>(sctx, loc, children, isDynamic, mustCopyNodes)
{}
virtual ~ZorbaApplyInsertNodesBeforeIterator();
@@ -767,9 +776,10 @@
static_context* sctx,
const QueryLoc& loc,
std::vector<PlanIter_t>& children,
- bool isDynamic)
+ bool isDynamic,
+ bool mustCopyNodes)
:
- ZorbaCollectionIteratorHelper<ZorbaApplyInsertNodesAfterIterator, ZorbaApplyInsertNodesAfterIteratorState>(sctx, loc, children, isDynamic)
+ ZorbaCollectionIteratorHelper<ZorbaApplyInsertNodesAfterIterator, ZorbaApplyInsertNodesAfterIteratorState>(sctx, loc, children, isDynamic, mustCopyNodes)
{}
virtual ~ZorbaApplyInsertNodesAfterIterator();
=== modified file 'src/runtime/spec/collections/collections.xml'
--- src/runtime/spec/collections/collections.xml 2012-06-29 13:25:20 +0000
+++ src/runtime/spec/collections/collections.xml 2012-06-29 17:23:20 +0000
@@ -402,6 +402,7 @@
<zorba:constructor>
<zorba:parameter type="bool" name="isDynamic" base="true"/>
+ <zorba:parameter type="bool" name="mustCopyNodes" base="true"/>
</zorba:constructor>
<zorba:method const="true" name="getCollection"
@@ -460,6 +461,7 @@
<zorba:constructor>
<zorba:parameter type="bool" name="isDynamic" base="true"/>
+ <zorba:parameter type="bool" name="mustCopyNodes" base="true"/>
</zorba:constructor>
<zorba:method const="true" name="getCollection"
@@ -517,6 +519,7 @@
<zorba:constructor>
<zorba:parameter type="bool" name="isDynamic" base="true"/>
+ <zorba:parameter type="bool" name="mustCopyNodes" base="true"/>
</zorba:constructor>
<zorba:method const="true" name="getCollection"
@@ -578,6 +581,7 @@
<zorba:constructor>
<zorba:parameter type="bool" name="isDynamic" base="true"/>
+ <zorba:parameter type="bool" name="mustCopyNodes" base="true"/>
</zorba:constructor>
<zorba:method const="true" name="getCollection"
@@ -639,6 +643,7 @@
<zorba:constructor>
<zorba:parameter type="bool" name="isDynamic" base="true"/>
+ <zorba:parameter type="bool" name="mustCopyNodes" base="true"/>
</zorba:constructor>
<zorba:member type="bool" name="theIsDynamic"/>
@@ -695,6 +700,7 @@
<zorba:constructor>
<zorba:parameter type="bool" name="isDynamic" base="true"/>
+ <zorba:parameter type="bool" name="mustCopyNodes" base="true"/>
</zorba:constructor>
<zorba:method const="true" name="getCollection"
@@ -762,6 +768,7 @@
<zorba:constructor>
<zorba:parameter type="bool" name="isDynamic" base="true"/>
+ <zorba:parameter type="bool" name="mustCopyNodes" base="true"/>
</zorba:constructor>
<zorba:method const="true" name="getCollection"
@@ -829,6 +836,7 @@
<zorba:constructor>
<zorba:parameter type="bool" name="isDynamic" base="true"/>
+ <zorba:parameter type="bool" name="mustCopyNodes" base="true"/>
</zorba:constructor>
<zorba:method const="true" name="getCollection"
@@ -900,6 +908,7 @@
<zorba:constructor>
<zorba:parameter type="bool" name="isDynamic" base="true"/>
+ <zorba:parameter type="bool" name="mustCopyNodes" base="true"/>
</zorba:constructor>
<zorba:method const="true" name="getCollection"
@@ -971,6 +980,7 @@
<zorba:constructor>
<zorba:parameter type="bool" name="isDynamic" base="true"/>
+ <zorba:parameter type="bool" name="mustCopyNodes" base="true"/>
</zorba:constructor>
<zorba:method const="true" name="getCollection"
=== modified file 'src/zorbamisc/ns_consts.h'
--- src/zorbamisc/ns_consts.h 2012-06-28 04:14:03 +0000
+++ src/zorbamisc/ns_consts.h 2012-06-29 17:23:20 +0000
@@ -56,6 +56,7 @@
#define ZORBA_FEATURES_NS ZORBA_NS "features"
#define ZORBA_ANNOTATIONS_NS ZORBA_NS "annotations"
#define ZORBA_COLLATION_NS_BASE ZORBA_NS "collations/"
+#define ZORBA_EXTENSIONS_NS ZORBA_NS "extensions"
// TODO these probably should not be in "ns_consts"
#define ZORBA_OPTION_ENABLE_DTD "enable-dtd"
Follow ups
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: noreply, 2012-09-19
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-09-19
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-09-19
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Matthias Brantner, 2012-09-19
-
Re: [Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Markos Zaharioudakis, 2012-09-19
-
Re: [Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Markos Zaharioudakis, 2012-09-19
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-09-19
-
Re: [Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-09-19
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Matthias Brantner, 2012-09-19
-
Re: [Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Markos Zaharioudakis, 2012-09-19
-
Re: [Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Markos Zaharioudakis, 2012-09-19
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-09-12
-
Re: [Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-09-12
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-09-12
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-09-12
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Matthias Brantner, 2012-09-12
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-09-12
-
Re: [Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-09-12
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-09-12
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-09-12
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Matthias Brantner, 2012-09-12
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-09-12
-
Re: [Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-09-12
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-09-12
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Matthias Brantner, 2012-09-12
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-07-10
-
Re: [Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-07-10
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-07-10
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-07-10
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Matthias Brantner, 2012-07-10
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-06-29
-
Re: [Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-06-29
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Matthias Brantner, 2012-06-29
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-06-29
-
Re: [Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-06-29
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-06-29
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Matthias Brantner, 2012-06-29
-
Re: [Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Matthias Brantner, 2012-06-29
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-06-29
-
Re: [Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-06-29
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-06-29
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Zorba Build Bot, 2012-06-29
-
[Merge] lp:~zorba-coders/zorba/feature-pragma_no_copy into lp:zorba
From: Matthias Brantner, 2012-06-29