zorba-coders team mailing list archive
-
zorba-coders team
-
Mailing list archive
-
Message #11531
[Merge] lp:~zorba-coders/zorba/feature-node-reference-management into lp:zorba
Till Westmann has proposed merging lp:~zorba-coders/zorba/feature-node-reference-management into lp:zorba.
Requested reviews:
Matthias Brantner (matthias-brantner)
For more details, see:
https://code.launchpad.net/~zorba-coders/zorba/feature-node-reference-management/+merge/112660
Add ref:has-node-reference and ref:assign-node-reference to the node reference module that can be used to actively manage node references. As node-references are usually created on-demand, these functions are not needed for the usual lifecycle of node references. Therefore these functions are not part of the documentation.
--
https://code.launchpad.net/~zorba-coders/zorba/feature-node-reference-management/+merge/112660
Your team Zorba Coders is subscribed to branch lp:zorba.
=== modified file 'src/functions/pregenerated/func_nodes.cpp'
--- src/functions/pregenerated/func_nodes.cpp 2012-06-28 04:14:03 +0000
+++ src/functions/pregenerated/func_nodes.cpp 2012-06-28 22:02:21 +0000
@@ -41,6 +41,26 @@
return new NodeReferenceIterator(sctx, loc, argv);
}
+PlanIter_t fn_zorba_ref_has_node_reference::codegen(
+ CompilerCB*,
+ static_context* sctx,
+ const QueryLoc& loc,
+ std::vector<PlanIter_t>& argv,
+ expr& ann) const
+{
+ return new HasNodeReferenceIterator(sctx, loc, argv);
+}
+
+PlanIter_t fn_zorba_ref_assign_node_reference::codegen(
+ CompilerCB*,
+ static_context* sctx,
+ const QueryLoc& loc,
+ std::vector<PlanIter_t>& argv,
+ expr& ann) const
+{
+ return new AssignNodeReferenceIterator(sctx, loc, argv);
+}
+
PlanIter_t fn_zorba_ref_node_by_reference::codegen(
CompilerCB*,
static_context* sctx,
@@ -258,6 +278,31 @@
{
+ DECL_WITH_KIND(sctx, fn_zorba_ref_has_node_reference,
+ (createQName("http://www.zorba-xquery.com/modules/node-reference","","has-node-reference"),
+ GENV_TYPESYSTEM.ANY_NODE_TYPE_ONE,
+ GENV_TYPESYSTEM.BOOLEAN_TYPE_ONE),
+ FunctionConsts::FN_ZORBA_REF_HAS_NODE_REFERENCE_1);
+
+ }
+
+
+
+
+ {
+ DECL_WITH_KIND(sctx, fn_zorba_ref_assign_node_reference,
+ (createQName("http://www.zorba-xquery.com/modules/node-reference","","assign-node-reference"),
+ GENV_TYPESYSTEM.ANY_NODE_TYPE_ONE,
+ GENV_TYPESYSTEM.ANY_URI_TYPE_ONE,
+ GENV_TYPESYSTEM.BOOLEAN_TYPE_ONE),
+ FunctionConsts::FN_ZORBA_REF_ASSIGN_NODE_REFERENCE_2);
+
+ }
+
+
+
+
+ {
DECL_WITH_KIND(sctx, fn_zorba_ref_node_by_reference,
(createQName("http://www.zorba-xquery.com/modules/node-reference","","node-by-reference"),
GENV_TYPESYSTEM.ANY_URI_TYPE_ONE,
=== modified file 'src/functions/pregenerated/func_nodes.h'
--- src/functions/pregenerated/func_nodes.h 2012-06-28 04:14:03 +0000
+++ src/functions/pregenerated/func_nodes.h 2012-06-28 22:02:21 +0000
@@ -55,6 +55,38 @@
};
+//fn-zorba-ref:has-node-reference
+class fn_zorba_ref_has_node_reference : public function
+{
+public:
+ fn_zorba_ref_has_node_reference(const signature& sig, FunctionConsts::FunctionKind kind)
+ :
+ function(sig, kind)
+ {
+
+ }
+
+ CODEGEN_DECL();
+};
+
+
+//fn-zorba-ref:assign-node-reference
+class fn_zorba_ref_assign_node_reference : public function
+{
+public:
+ fn_zorba_ref_assign_node_reference(const signature& sig, FunctionConsts::FunctionKind kind)
+ :
+ function(sig, kind)
+ {
+
+ }
+
+ unsigned short getScriptingKind() const { return SEQUENTIAL_FUNC_EXPR; }
+
+ CODEGEN_DECL();
+};
+
+
//fn-zorba-ref:node-by-reference
class fn_zorba_ref_node_by_reference : public function
{
=== modified file 'src/functions/pregenerated/function_enum.h'
--- src/functions/pregenerated/function_enum.h 2012-06-28 04:14:03 +0000
+++ src/functions/pregenerated/function_enum.h 2012-06-28 22:02:21 +0000
@@ -288,6 +288,8 @@
FN_ZORBA_POS_IN_COLLECTION_1,
FN_ZORBA_POS_IN_SAME_COLLECTION_OF_2,
FN_ZORBA_REF_NODE_REFERENCE_1,
+ FN_ZORBA_REF_HAS_NODE_REFERENCE_1,
+ FN_ZORBA_REF_ASSIGN_NODE_REFERENCE_2,
FN_ZORBA_REF_NODE_BY_REFERENCE_1,
FN_LOCAL_NAME_0,
FN_LOCAL_NAME_1,
=== modified file 'src/runtime/nodes/nodes_impl.cpp'
--- src/runtime/nodes/nodes_impl.cpp 2012-06-28 19:06:27 +0000
+++ src/runtime/nodes/nodes_impl.cpp 2012-06-28 22:02:21 +0000
@@ -40,8 +40,6 @@
NodeReferenceIterator::nextImpl(store::Item_t& aResult, PlanState& aPlanState) const
{
store::Item_t lNode;
- store::Item_t lGenerateIdentifier;
- zstring lNodeId;
PlanIteratorState* state;
DEFAULT_STACK_INIT(PlanIteratorState, state, aPlanState);
@@ -58,6 +56,58 @@
********************************************************************************/
bool
+HasNodeReferenceIterator::nextImpl(store::Item_t& aResult, PlanState& aPlanState) const
+{
+ store::Item_t lNode;
+ xs_boolean lHasReference;
+
+ PlanIteratorState* state;
+ DEFAULT_STACK_INIT(PlanIteratorState, state, aPlanState);
+
+ consumeNext(lNode, theChildren[0].getp(), aPlanState);
+
+ lHasReference = GENV_STORE.hasReference(lNode);
+
+ STACK_PUSH(GENV_ITEMFACTORY->createBoolean(aResult, lHasReference), state);
+
+ STACK_END (state);
+}
+
+
+/*******************************************************************************
+
+********************************************************************************/
+bool
+AssignNodeReferenceIterator::nextImpl(store::Item_t& aResult, PlanState& aPlanState) const
+{
+ store::Item_t lNode;
+ store::Item_t lUUID;
+ xs_boolean lHaveResult;
+
+ PlanIteratorState* state;
+ DEFAULT_STACK_INIT(PlanIteratorState, state, aPlanState);
+
+ consumeNext(lNode, theChildren[0].getp(), aPlanState);
+ consumeNext(lUUID, theChildren[1].getp(), aPlanState);
+ try
+ {
+ lHaveResult = GENV_STORE.assignReference(lNode, lUUID->getStringValue());
+ }
+ catch (ZorbaException& e)
+ {
+ set_source( e, loc );
+ throw;
+ }
+ STACK_PUSH(GENV_ITEMFACTORY->createBoolean(aResult, lHaveResult), state);
+
+ STACK_END (state);
+}
+
+
+/*******************************************************************************
+
+********************************************************************************/
+bool
NodeByReferenceIterator::nextImpl(store::Item_t& result, PlanState& planState) const
{
store::Item_t lUUID;
=== modified file 'src/runtime/nodes/pregenerated/nodes.cpp'
--- src/runtime/nodes/pregenerated/nodes.cpp 2012-06-28 04:14:03 +0000
+++ src/runtime/nodes/pregenerated/nodes.cpp 2012-06-28 22:02:21 +0000
@@ -60,6 +60,62 @@
// </NodeReferenceIterator>
+// <HasNodeReferenceIterator>
+SERIALIZABLE_CLASS_VERSIONS(HasNodeReferenceIterator)
+
+void HasNodeReferenceIterator::serialize(::zorba::serialization::Archiver& ar)
+{
+ serialize_baseclass(ar,
+ (NaryBaseIterator<HasNodeReferenceIterator, PlanIteratorState>*)this);
+}
+
+
+void HasNodeReferenceIterator::accept(PlanIterVisitor& v) const
+{
+ v.beginVisit(*this);
+
+ std::vector<PlanIter_t>::const_iterator lIter = theChildren.begin();
+ std::vector<PlanIter_t>::const_iterator lEnd = theChildren.end();
+ for ( ; lIter != lEnd; ++lIter ){
+ (*lIter)->accept(v);
+ }
+
+ v.endVisit(*this);
+}
+
+HasNodeReferenceIterator::~HasNodeReferenceIterator() {}
+
+// </HasNodeReferenceIterator>
+
+
+// <AssignNodeReferenceIterator>
+SERIALIZABLE_CLASS_VERSIONS(AssignNodeReferenceIterator)
+
+void AssignNodeReferenceIterator::serialize(::zorba::serialization::Archiver& ar)
+{
+ serialize_baseclass(ar,
+ (NaryBaseIterator<AssignNodeReferenceIterator, PlanIteratorState>*)this);
+}
+
+
+void AssignNodeReferenceIterator::accept(PlanIterVisitor& v) const
+{
+ v.beginVisit(*this);
+
+ std::vector<PlanIter_t>::const_iterator lIter = theChildren.begin();
+ std::vector<PlanIter_t>::const_iterator lEnd = theChildren.end();
+ for ( ; lIter != lEnd; ++lIter ){
+ (*lIter)->accept(v);
+ }
+
+ v.endVisit(*this);
+}
+
+AssignNodeReferenceIterator::~AssignNodeReferenceIterator() {}
+
+// </AssignNodeReferenceIterator>
+
+
// <NodeByReferenceIterator>
SERIALIZABLE_CLASS_VERSIONS(NodeByReferenceIterator)
=== modified file 'src/runtime/nodes/pregenerated/nodes.h'
--- src/runtime/nodes/pregenerated/nodes.h 2012-06-28 04:14:03 +0000
+++ src/runtime/nodes/pregenerated/nodes.h 2012-06-28 22:02:21 +0000
@@ -67,6 +67,70 @@
/**
*
+ * declare function ref:has-node-reference($node as node()) as xs:boolean
+ *
+ * Author: Till Westmann
+ */
+class HasNodeReferenceIterator : public NaryBaseIterator<HasNodeReferenceIterator, PlanIteratorState>
+{
+public:
+ SERIALIZABLE_CLASS(HasNodeReferenceIterator);
+
+ SERIALIZABLE_CLASS_CONSTRUCTOR2T(HasNodeReferenceIterator,
+ NaryBaseIterator<HasNodeReferenceIterator, PlanIteratorState>);
+
+ void serialize( ::zorba::serialization::Archiver& ar);
+
+ HasNodeReferenceIterator(
+ static_context* sctx,
+ const QueryLoc& loc,
+ std::vector<PlanIter_t>& children)
+ :
+ NaryBaseIterator<HasNodeReferenceIterator, PlanIteratorState>(sctx, loc, children)
+ {}
+
+ virtual ~HasNodeReferenceIterator();
+
+ void accept(PlanIterVisitor& v) const;
+
+ bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
+};
+
+
+/**
+ *
+ * declare function ref:assign-node-reference($node as node()) as xs:boolean
+ *
+ * Author: Till Westmann
+ */
+class AssignNodeReferenceIterator : public NaryBaseIterator<AssignNodeReferenceIterator, PlanIteratorState>
+{
+public:
+ SERIALIZABLE_CLASS(AssignNodeReferenceIterator);
+
+ SERIALIZABLE_CLASS_CONSTRUCTOR2T(AssignNodeReferenceIterator,
+ NaryBaseIterator<AssignNodeReferenceIterator, PlanIteratorState>);
+
+ void serialize( ::zorba::serialization::Archiver& ar);
+
+ AssignNodeReferenceIterator(
+ static_context* sctx,
+ const QueryLoc& loc,
+ std::vector<PlanIter_t>& children)
+ :
+ NaryBaseIterator<AssignNodeReferenceIterator, PlanIteratorState>(sctx, loc, children)
+ {}
+
+ virtual ~AssignNodeReferenceIterator();
+
+ void accept(PlanIterVisitor& v) const;
+
+ bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
+};
+
+
+/**
+ *
* declare function ref:node-by-reference($reference as xs:anyURI) as node()?
*
* Author: Federico Cavalieri
=== modified file 'src/runtime/pregenerated/iterator_enum.h'
--- src/runtime/pregenerated/iterator_enum.h 2012-06-27 14:07:46 +0000
+++ src/runtime/pregenerated/iterator_enum.h 2012-06-28 22:02:21 +0000
@@ -215,6 +215,8 @@
TYPE_InCollectionPositionIterator,
TYPE_InSameCollectionPositionIterator,
TYPE_NodeReferenceIterator,
+ TYPE_HasNodeReferenceIterator,
+ TYPE_AssignNodeReferenceIterator,
TYPE_NodeByReferenceIterator,
TYPE_FnLocalNameIterator,
TYPE_FnNamespaceUriIterator,
=== modified file 'src/runtime/spec/nodes/nodes.xml'
--- src/runtime/spec/nodes/nodes.xml 2012-06-28 04:14:03 +0000
+++ src/runtime/spec/nodes/nodes.xml 2012-06-28 22:02:21 +0000
@@ -41,6 +41,53 @@
/*******************************************************************************
********************************************************************************/
-->
+ <zorba:iterator name="HasNodeReferenceIterator">
+
+ <zorba:description author="Till Westmann">
+ declare function ref:has-node-reference($node as node()) as xs:boolean
+ </zorba:description>
+
+ <zorba:function>
+
+ <zorba:signature localname="has-node-reference" prefix="fn-zorba-ref">
+ <zorba:param>node()</zorba:param>
+ <zorba:output>xs:boolean</zorba:output>
+ </zorba:signature>
+
+ </zorba:function>
+
+ </zorba:iterator>
+
+<!--
+/*******************************************************************************
+********************************************************************************/
+-->
+ <zorba:iterator name="AssignNodeReferenceIterator">
+
+ <zorba:description author="Till Westmann">
+ declare function ref:assign-node-reference($node as node()) as xs:boolean
+ </zorba:description>
+
+ <zorba:function>
+
+ <zorba:signature localname="assign-node-reference" prefix="fn-zorba-ref">
+ <zorba:param>node()</zorba:param>
+ <zorba:param>xs:anyURI</zorba:param>
+ <zorba:output>xs:boolean</zorba:output>
+ </zorba:signature>
+
+ <zorba:methods>
+ <zorba:getScriptingKind returnValue="SEQUENTIAL_FUNC_EXPR"/>
+ </zorba:methods>
+
+ </zorba:function>
+
+ </zorba:iterator>
+
+<!--
+/*******************************************************************************
+********************************************************************************/
+-->
<zorba:iterator name="NodeByReferenceIterator">
<zorba:description author="Federico Cavalieri">
=== modified file 'src/runtime/visitors/pregenerated/planiter_visitor.h'
--- src/runtime/visitors/pregenerated/planiter_visitor.h 2012-06-28 04:14:03 +0000
+++ src/runtime/visitors/pregenerated/planiter_visitor.h 2012-06-28 22:02:21 +0000
@@ -450,6 +450,10 @@
class NodeReferenceIterator;
+ class HasNodeReferenceIterator;
+
+ class AssignNodeReferenceIterator;
+
class NodeByReferenceIterator;
class FnLocalNameIterator;
@@ -1330,6 +1334,12 @@
virtual void beginVisit ( const NodeReferenceIterator& ) = 0;
virtual void endVisit ( const NodeReferenceIterator& ) = 0;
+ virtual void beginVisit ( const HasNodeReferenceIterator& ) = 0;
+ virtual void endVisit ( const HasNodeReferenceIterator& ) = 0;
+
+ virtual void beginVisit ( const AssignNodeReferenceIterator& ) = 0;
+ virtual void endVisit ( const AssignNodeReferenceIterator& ) = 0;
+
virtual void beginVisit ( const NodeByReferenceIterator& ) = 0;
virtual void endVisit ( const NodeByReferenceIterator& ) = 0;
=== modified file 'src/runtime/visitors/pregenerated/printer_visitor.cpp'
--- src/runtime/visitors/pregenerated/printer_visitor.cpp 2012-06-28 04:14:03 +0000
+++ src/runtime/visitors/pregenerated/printer_visitor.cpp 2012-06-28 22:02:21 +0000
@@ -2873,6 +2873,34 @@
// </NodeReferenceIterator>
+// <HasNodeReferenceIterator>
+void PrinterVisitor::beginVisit ( const HasNodeReferenceIterator& a) {
+ thePrinter.startBeginVisit("HasNodeReferenceIterator", ++theId);
+ printCommons( &a, theId );
+ thePrinter.endBeginVisit( theId );
+}
+
+void PrinterVisitor::endVisit ( const HasNodeReferenceIterator& ) {
+ thePrinter.startEndVisit();
+ thePrinter.endEndVisit();
+}
+// </HasNodeReferenceIterator>
+
+
+// <AssignNodeReferenceIterator>
+void PrinterVisitor::beginVisit ( const AssignNodeReferenceIterator& a) {
+ thePrinter.startBeginVisit("AssignNodeReferenceIterator", ++theId);
+ printCommons( &a, theId );
+ thePrinter.endBeginVisit( theId );
+}
+
+void PrinterVisitor::endVisit ( const AssignNodeReferenceIterator& ) {
+ thePrinter.startEndVisit();
+ thePrinter.endEndVisit();
+}
+// </AssignNodeReferenceIterator>
+
+
// <NodeByReferenceIterator>
void PrinterVisitor::beginVisit ( const NodeByReferenceIterator& a) {
thePrinter.startBeginVisit("NodeByReferenceIterator", ++theId);
=== modified file 'src/runtime/visitors/pregenerated/printer_visitor.h'
--- src/runtime/visitors/pregenerated/printer_visitor.h 2012-06-28 04:14:03 +0000
+++ src/runtime/visitors/pregenerated/printer_visitor.h 2012-06-28 22:02:21 +0000
@@ -692,6 +692,12 @@
void beginVisit( const NodeReferenceIterator& );
void endVisit ( const NodeReferenceIterator& );
+ void beginVisit( const HasNodeReferenceIterator& );
+ void endVisit ( const HasNodeReferenceIterator& );
+
+ void beginVisit( const AssignNodeReferenceIterator& );
+ void endVisit ( const AssignNodeReferenceIterator& );
+
void beginVisit( const NodeByReferenceIterator& );
void endVisit ( const NodeByReferenceIterator& );
=== modified file 'src/store/api/store.h'
--- src/store/api/store.h 2012-06-28 04:14:03 +0000
+++ src/store/api/store.h 2012-06-28 22:02:21 +0000
@@ -120,6 +120,14 @@
virtual bool hasReference(const Item* node) = 0;
/**
+ * Assigns a specific reference for the given node.
+ *
+ * @param item XDM node
+ * @param reference an xs:anyURI item
+ */
+ virtual bool assignReference(const Item* node, const zstring& reference) = 0;
+
+ /**
* Returns the node which is identified by the given reference.
* If the given reference is not a valid reference, as generated by
* getReference, error ZAPI0028 is raised.
=== modified file 'src/store/naive/simple_store.cpp'
--- src/store/naive/simple_store.cpp 2012-06-28 04:14:03 +0000
+++ src/store/naive/simple_store.cpp 2012-06-28 22:02:21 +0000
@@ -292,10 +292,7 @@
uuid_create(&uuid);
zstring uuidStr = uuidToURI(uuid);
- const_cast<XmlNode*>(xmlNode)->setHaveReference();
-
- theNodeToReferencesMap.insert(xmlNode, uuidStr);
- theReferencesToNodeMap[uuidStr] = node;
+ assignReference(xmlNode, uuidStr);
return theItemFactory->createAnyURI(result, uuidStr);
}
@@ -313,6 +310,24 @@
}
+bool SimpleStore::assignReference(const store::Item* node, const zstring& reference)
+{
+ const XmlNode* xmlNode = static_cast<const XmlNode*>(node);
+ zstring uuidStr = reference;
+
+ if (xmlNode->haveReference())
+ {
+ return false;
+ }
+ const_cast<XmlNode*>(xmlNode)->setHaveReference();
+
+ theNodeToReferencesMap.insert(xmlNode, uuidStr);
+ theReferencesToNodeMap[uuidStr] = node;
+
+ return true;
+}
+
+
/*******************************************************************************
Returns the node which is identified by the given reference.
=== modified file 'src/store/naive/simple_store.h'
--- src/store/naive/simple_store.h 2012-06-28 04:14:03 +0000
+++ src/store/naive/simple_store.h 2012-06-28 22:02:21 +0000
@@ -108,6 +108,8 @@
bool hasReference(const store::Item* node);
+ bool assignReference(const store::Item* node, const zstring& reference);
+
bool getNodeByReference(store::Item_t& result, const zstring& reference);
#ifdef ZORBA_WITH_JSON
=== added file 'test/rbkt/ExpQueryResults/zorba/reference/reference_coll_4.xml.res'
--- test/rbkt/ExpQueryResults/zorba/reference/reference_coll_4.xml.res 1970-01-01 00:00:00 +0000
+++ test/rbkt/ExpQueryResults/zorba/reference/reference_coll_4.xml.res 2012-06-28 22:02:21 +0000
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+false true
\ No newline at end of file
=== added file 'test/rbkt/ExpQueryResults/zorba/reference/reference_coll_5.xml.res'
--- test/rbkt/ExpQueryResults/zorba/reference/reference_coll_5.xml.res 1970-01-01 00:00:00 +0000
+++ test/rbkt/ExpQueryResults/zorba/reference/reference_coll_5.xml.res 2012-06-28 22:02:21 +0000
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+false true true
\ No newline at end of file
=== modified file 'test/rbkt/Queries/zorba/reference/collections.xqdata'
--- test/rbkt/Queries/zorba/reference/collections.xqdata 2012-06-28 04:14:03 +0000
+++ test/rbkt/Queries/zorba/reference/collections.xqdata 2012-06-28 22:02:21 +0000
@@ -3,3 +3,4 @@
declare namespace ann = "http://www.zorba-xquery.com/annotations";
declare %ann:ordered collection ns:test as node()*;
+declare collection ns:test2 as node()*;
=== added file 'test/rbkt/Queries/zorba/reference/reference_coll_4.xq'
--- test/rbkt/Queries/zorba/reference/reference_coll_4.xq 1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/reference/reference_coll_4.xq 2012-06-28 22:02:21 +0000
@@ -0,0 +1,20 @@
+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 ns = "http://example.org/datamodule/" at "collections.xqdata";
+
+import module namespace ref = "http://www.zorba-xquery.com/modules/node-reference";
+
+declare namespace ann = "http://www.zorba-xquery.com/annotations";
+
+declare %ann:sequential function local:test()
+{
+ ddl:create(xs:QName("ns:test2"));
+ dml:insert-nodes(xs:QName("ns:test2"), <a><b><c d="e"></c></b></a>);
+ variable $node := dml:collection(xs:QName("ns:test2"))/b/c/@d;
+ variable $has1 := ref:has-node-reference($node);
+ variable $ref := ref:node-reference($node);
+ variable $has2 := ref:has-node-reference($node);
+ ($has1, $has2)
+};
+
+local:test()
=== added file 'test/rbkt/Queries/zorba/reference/reference_coll_5.xq'
--- test/rbkt/Queries/zorba/reference/reference_coll_5.xq 1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/reference/reference_coll_5.xq 2012-06-28 22:02:21 +0000
@@ -0,0 +1,21 @@
+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 ns = "http://example.org/datamodule/" at "collections.xqdata";
+
+import module namespace ref = "http://www.zorba-xquery.com/modules/node-reference";
+
+declare namespace ann = "http://www.zorba-xquery.com/annotations";
+
+declare %ann:sequential function local:test()
+{
+ ddl:create(xs:QName("ns:test2"));
+ variable $ref := xs:anyURI("urn:uuid:e35e9021-0a1c-48c7-8902-833105a2f013");
+ variable $node := dml:apply-insert-nodes(xs:QName("ns:test2"), <f><g><h i="j"></h></g></f>);
+ variable $has1 := ref:has-node-reference($node);
+ ref:assign-node-reference($node, $ref);
+ variable $has2 := ref:has-node-reference($node);
+ variable $find := ref:node-by-reference($ref);
+ ($has1, $has2, $node is $find)
+};
+
+local:test()
Follow ups
-
[Merge] lp:~zorba-coders/zorba/feature-node-reference-management into lp:zorba
From: noreply, 2012-06-29
-
[Merge] lp:~zorba-coders/zorba/feature-node-reference-management into lp:zorba
From: Zorba Build Bot, 2012-06-29
-
[Merge] lp:~zorba-coders/zorba/feature-node-reference-management into lp:zorba
From: Zorba Build Bot, 2012-06-29
-
[Merge] lp:~zorba-coders/zorba/feature-node-reference-management into lp:zorba
From: Markos Zaharioudakis, 2012-06-29
-
Re: [Merge] lp:~zorba-coders/zorba/feature-node-reference-management into lp:zorba
From: Markos Zaharioudakis, 2012-06-29
-
[Merge] lp:~zorba-coders/zorba/feature-node-reference-management into lp:zorba
From: Zorba Build Bot, 2012-06-28
-
Re: [Merge] lp:~zorba-coders/zorba/feature-node-reference-management into lp:zorba
From: Zorba Build Bot, 2012-06-28
-
Re: [Merge] lp:~zorba-coders/zorba/feature-node-reference-management into lp:zorba
From: Matthias Brantner, 2012-06-28
-
[Merge] lp:~zorba-coders/zorba/feature-node-reference-management into lp:zorba
From: Zorba Build Bot, 2012-06-28
-
[Merge] lp:~zorba-coders/zorba/feature-node-reference-management into lp:zorba
From: Till Westmann, 2012-06-28