Merge lp:~zorba-coders/zorba/feature-node-reference-management into lp:zorba
- feature-node-reference-management
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | Markos Zaharioudakis |
Approved revision: | 10900 |
Merged at revision: | 10901 |
Proposed branch: | lp:~zorba-coders/zorba/feature-node-reference-management |
Merge into: | lp:zorba |
Diff against target: |
636 lines (+419/-6) 19 files modified
src/functions/pregenerated/func_nodes.cpp (+45/-0) src/functions/pregenerated/func_nodes.h (+32/-0) src/functions/pregenerated/function_enum.h (+2/-0) src/runtime/nodes/nodes_impl.cpp (+52/-2) src/runtime/nodes/pregenerated/nodes.cpp (+56/-0) src/runtime/nodes/pregenerated/nodes.h (+64/-0) src/runtime/pregenerated/iterator_enum.h (+2/-0) src/runtime/spec/nodes/nodes.xml (+47/-0) src/runtime/visitors/pregenerated/planiter_visitor.h (+10/-0) src/runtime/visitors/pregenerated/printer_visitor.cpp (+28/-0) src/runtime/visitors/pregenerated/printer_visitor.h (+6/-0) src/store/api/store.h (+8/-0) src/store/naive/simple_store.cpp (+19/-4) src/store/naive/simple_store.h (+2/-0) test/rbkt/ExpQueryResults/zorba/reference/reference_coll_4.xml.res (+2/-0) test/rbkt/ExpQueryResults/zorba/reference/reference_coll_5.xml.res (+2/-0) test/rbkt/Queries/zorba/reference/collections.xqdata (+1/-0) test/rbkt/Queries/zorba/reference/reference_coll_4.xq (+20/-0) test/rbkt/Queries/zorba/reference/reference_coll_5.xq (+21/-0) |
To merge this branch: | bzr merge lp:~zorba-coders/zorba/feature-node-reference-management |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Markos Zaharioudakis | Approve | ||
Matthias Brantner | Approve | ||
Review via email: mp+112660@code.launchpad.net |
Commit message
add ref:has-
Description of the change
Add ref:has-
Zorba Build Bot (zorba-buildbot) wrote : | # |
Matthias Brantner (matthias-brantner) : | # |
Zorba Build Bot (zorba-buildbot) wrote : | # |
The attempt to merge lp:~zorba-coders/zorba/feature-node-reference-management into lp:zorba failed. Below is the output from the failed tests.
CMake Error at /home/ceej/
Validation queue job
feature-
The final status was:
1 tests did not succeed - changes not commited.
Error in read script: /home/ceej/
Markos Zaharioudakis (markos-za) : | # |
Zorba Build Bot (zorba-buildbot) wrote : | # |
Validation queue starting for merge proposal.
Log at: http://
Zorba Build Bot (zorba-buildbot) wrote : | # |
Validation queue job feature-
All tests succeeded!
Preview Diff
1 | === modified file 'src/functions/pregenerated/func_nodes.cpp' |
2 | --- src/functions/pregenerated/func_nodes.cpp 2012-06-28 04:14:03 +0000 |
3 | +++ src/functions/pregenerated/func_nodes.cpp 2012-06-28 22:02:21 +0000 |
4 | @@ -41,6 +41,26 @@ |
5 | return new NodeReferenceIterator(sctx, loc, argv); |
6 | } |
7 | |
8 | +PlanIter_t fn_zorba_ref_has_node_reference::codegen( |
9 | + CompilerCB*, |
10 | + static_context* sctx, |
11 | + const QueryLoc& loc, |
12 | + std::vector<PlanIter_t>& argv, |
13 | + expr& ann) const |
14 | +{ |
15 | + return new HasNodeReferenceIterator(sctx, loc, argv); |
16 | +} |
17 | + |
18 | +PlanIter_t fn_zorba_ref_assign_node_reference::codegen( |
19 | + CompilerCB*, |
20 | + static_context* sctx, |
21 | + const QueryLoc& loc, |
22 | + std::vector<PlanIter_t>& argv, |
23 | + expr& ann) const |
24 | +{ |
25 | + return new AssignNodeReferenceIterator(sctx, loc, argv); |
26 | +} |
27 | + |
28 | PlanIter_t fn_zorba_ref_node_by_reference::codegen( |
29 | CompilerCB*, |
30 | static_context* sctx, |
31 | @@ -258,6 +278,31 @@ |
32 | |
33 | |
34 | { |
35 | + DECL_WITH_KIND(sctx, fn_zorba_ref_has_node_reference, |
36 | + (createQName("http://www.zorba-xquery.com/modules/node-reference","","has-node-reference"), |
37 | + GENV_TYPESYSTEM.ANY_NODE_TYPE_ONE, |
38 | + GENV_TYPESYSTEM.BOOLEAN_TYPE_ONE), |
39 | + FunctionConsts::FN_ZORBA_REF_HAS_NODE_REFERENCE_1); |
40 | + |
41 | + } |
42 | + |
43 | + |
44 | + |
45 | + |
46 | + { |
47 | + DECL_WITH_KIND(sctx, fn_zorba_ref_assign_node_reference, |
48 | + (createQName("http://www.zorba-xquery.com/modules/node-reference","","assign-node-reference"), |
49 | + GENV_TYPESYSTEM.ANY_NODE_TYPE_ONE, |
50 | + GENV_TYPESYSTEM.ANY_URI_TYPE_ONE, |
51 | + GENV_TYPESYSTEM.BOOLEAN_TYPE_ONE), |
52 | + FunctionConsts::FN_ZORBA_REF_ASSIGN_NODE_REFERENCE_2); |
53 | + |
54 | + } |
55 | + |
56 | + |
57 | + |
58 | + |
59 | + { |
60 | DECL_WITH_KIND(sctx, fn_zorba_ref_node_by_reference, |
61 | (createQName("http://www.zorba-xquery.com/modules/node-reference","","node-by-reference"), |
62 | GENV_TYPESYSTEM.ANY_URI_TYPE_ONE, |
63 | |
64 | === modified file 'src/functions/pregenerated/func_nodes.h' |
65 | --- src/functions/pregenerated/func_nodes.h 2012-06-28 04:14:03 +0000 |
66 | +++ src/functions/pregenerated/func_nodes.h 2012-06-28 22:02:21 +0000 |
67 | @@ -55,6 +55,38 @@ |
68 | }; |
69 | |
70 | |
71 | +//fn-zorba-ref:has-node-reference |
72 | +class fn_zorba_ref_has_node_reference : public function |
73 | +{ |
74 | +public: |
75 | + fn_zorba_ref_has_node_reference(const signature& sig, FunctionConsts::FunctionKind kind) |
76 | + : |
77 | + function(sig, kind) |
78 | + { |
79 | + |
80 | + } |
81 | + |
82 | + CODEGEN_DECL(); |
83 | +}; |
84 | + |
85 | + |
86 | +//fn-zorba-ref:assign-node-reference |
87 | +class fn_zorba_ref_assign_node_reference : public function |
88 | +{ |
89 | +public: |
90 | + fn_zorba_ref_assign_node_reference(const signature& sig, FunctionConsts::FunctionKind kind) |
91 | + : |
92 | + function(sig, kind) |
93 | + { |
94 | + |
95 | + } |
96 | + |
97 | + unsigned short getScriptingKind() const { return SEQUENTIAL_FUNC_EXPR; } |
98 | + |
99 | + CODEGEN_DECL(); |
100 | +}; |
101 | + |
102 | + |
103 | //fn-zorba-ref:node-by-reference |
104 | class fn_zorba_ref_node_by_reference : public function |
105 | { |
106 | |
107 | === modified file 'src/functions/pregenerated/function_enum.h' |
108 | --- src/functions/pregenerated/function_enum.h 2012-06-28 04:14:03 +0000 |
109 | +++ src/functions/pregenerated/function_enum.h 2012-06-28 22:02:21 +0000 |
110 | @@ -288,6 +288,8 @@ |
111 | FN_ZORBA_POS_IN_COLLECTION_1, |
112 | FN_ZORBA_POS_IN_SAME_COLLECTION_OF_2, |
113 | FN_ZORBA_REF_NODE_REFERENCE_1, |
114 | + FN_ZORBA_REF_HAS_NODE_REFERENCE_1, |
115 | + FN_ZORBA_REF_ASSIGN_NODE_REFERENCE_2, |
116 | FN_ZORBA_REF_NODE_BY_REFERENCE_1, |
117 | FN_LOCAL_NAME_0, |
118 | FN_LOCAL_NAME_1, |
119 | |
120 | === modified file 'src/runtime/nodes/nodes_impl.cpp' |
121 | --- src/runtime/nodes/nodes_impl.cpp 2012-06-28 19:06:27 +0000 |
122 | +++ src/runtime/nodes/nodes_impl.cpp 2012-06-28 22:02:21 +0000 |
123 | @@ -40,8 +40,6 @@ |
124 | NodeReferenceIterator::nextImpl(store::Item_t& aResult, PlanState& aPlanState) const |
125 | { |
126 | store::Item_t lNode; |
127 | - store::Item_t lGenerateIdentifier; |
128 | - zstring lNodeId; |
129 | |
130 | PlanIteratorState* state; |
131 | DEFAULT_STACK_INIT(PlanIteratorState, state, aPlanState); |
132 | @@ -58,6 +56,58 @@ |
133 | |
134 | ********************************************************************************/ |
135 | bool |
136 | +HasNodeReferenceIterator::nextImpl(store::Item_t& aResult, PlanState& aPlanState) const |
137 | +{ |
138 | + store::Item_t lNode; |
139 | + xs_boolean lHasReference; |
140 | + |
141 | + PlanIteratorState* state; |
142 | + DEFAULT_STACK_INIT(PlanIteratorState, state, aPlanState); |
143 | + |
144 | + consumeNext(lNode, theChildren[0].getp(), aPlanState); |
145 | + |
146 | + lHasReference = GENV_STORE.hasReference(lNode); |
147 | + |
148 | + STACK_PUSH(GENV_ITEMFACTORY->createBoolean(aResult, lHasReference), state); |
149 | + |
150 | + STACK_END (state); |
151 | +} |
152 | + |
153 | + |
154 | +/******************************************************************************* |
155 | + |
156 | +********************************************************************************/ |
157 | +bool |
158 | +AssignNodeReferenceIterator::nextImpl(store::Item_t& aResult, PlanState& aPlanState) const |
159 | +{ |
160 | + store::Item_t lNode; |
161 | + store::Item_t lUUID; |
162 | + xs_boolean lHaveResult; |
163 | + |
164 | + PlanIteratorState* state; |
165 | + DEFAULT_STACK_INIT(PlanIteratorState, state, aPlanState); |
166 | + |
167 | + consumeNext(lNode, theChildren[0].getp(), aPlanState); |
168 | + consumeNext(lUUID, theChildren[1].getp(), aPlanState); |
169 | + try |
170 | + { |
171 | + lHaveResult = GENV_STORE.assignReference(lNode, lUUID->getStringValue()); |
172 | + } |
173 | + catch (ZorbaException& e) |
174 | + { |
175 | + set_source( e, loc ); |
176 | + throw; |
177 | + } |
178 | + STACK_PUSH(GENV_ITEMFACTORY->createBoolean(aResult, lHaveResult), state); |
179 | + |
180 | + STACK_END (state); |
181 | +} |
182 | + |
183 | + |
184 | +/******************************************************************************* |
185 | + |
186 | +********************************************************************************/ |
187 | +bool |
188 | NodeByReferenceIterator::nextImpl(store::Item_t& result, PlanState& planState) const |
189 | { |
190 | store::Item_t lUUID; |
191 | |
192 | === modified file 'src/runtime/nodes/pregenerated/nodes.cpp' |
193 | --- src/runtime/nodes/pregenerated/nodes.cpp 2012-06-28 04:14:03 +0000 |
194 | +++ src/runtime/nodes/pregenerated/nodes.cpp 2012-06-28 22:02:21 +0000 |
195 | @@ -60,6 +60,62 @@ |
196 | // </NodeReferenceIterator> |
197 | |
198 | |
199 | +// <HasNodeReferenceIterator> |
200 | +SERIALIZABLE_CLASS_VERSIONS(HasNodeReferenceIterator) |
201 | + |
202 | +void HasNodeReferenceIterator::serialize(::zorba::serialization::Archiver& ar) |
203 | +{ |
204 | + serialize_baseclass(ar, |
205 | + (NaryBaseIterator<HasNodeReferenceIterator, PlanIteratorState>*)this); |
206 | +} |
207 | + |
208 | + |
209 | +void HasNodeReferenceIterator::accept(PlanIterVisitor& v) const |
210 | +{ |
211 | + v.beginVisit(*this); |
212 | + |
213 | + std::vector<PlanIter_t>::const_iterator lIter = theChildren.begin(); |
214 | + std::vector<PlanIter_t>::const_iterator lEnd = theChildren.end(); |
215 | + for ( ; lIter != lEnd; ++lIter ){ |
216 | + (*lIter)->accept(v); |
217 | + } |
218 | + |
219 | + v.endVisit(*this); |
220 | +} |
221 | + |
222 | +HasNodeReferenceIterator::~HasNodeReferenceIterator() {} |
223 | + |
224 | +// </HasNodeReferenceIterator> |
225 | + |
226 | + |
227 | +// <AssignNodeReferenceIterator> |
228 | +SERIALIZABLE_CLASS_VERSIONS(AssignNodeReferenceIterator) |
229 | + |
230 | +void AssignNodeReferenceIterator::serialize(::zorba::serialization::Archiver& ar) |
231 | +{ |
232 | + serialize_baseclass(ar, |
233 | + (NaryBaseIterator<AssignNodeReferenceIterator, PlanIteratorState>*)this); |
234 | +} |
235 | + |
236 | + |
237 | +void AssignNodeReferenceIterator::accept(PlanIterVisitor& v) const |
238 | +{ |
239 | + v.beginVisit(*this); |
240 | + |
241 | + std::vector<PlanIter_t>::const_iterator lIter = theChildren.begin(); |
242 | + std::vector<PlanIter_t>::const_iterator lEnd = theChildren.end(); |
243 | + for ( ; lIter != lEnd; ++lIter ){ |
244 | + (*lIter)->accept(v); |
245 | + } |
246 | + |
247 | + v.endVisit(*this); |
248 | +} |
249 | + |
250 | +AssignNodeReferenceIterator::~AssignNodeReferenceIterator() {} |
251 | + |
252 | +// </AssignNodeReferenceIterator> |
253 | + |
254 | + |
255 | // <NodeByReferenceIterator> |
256 | SERIALIZABLE_CLASS_VERSIONS(NodeByReferenceIterator) |
257 | |
258 | |
259 | === modified file 'src/runtime/nodes/pregenerated/nodes.h' |
260 | --- src/runtime/nodes/pregenerated/nodes.h 2012-06-28 04:14:03 +0000 |
261 | +++ src/runtime/nodes/pregenerated/nodes.h 2012-06-28 22:02:21 +0000 |
262 | @@ -67,6 +67,70 @@ |
263 | |
264 | /** |
265 | * |
266 | + * declare function ref:has-node-reference($node as node()) as xs:boolean |
267 | + * |
268 | + * Author: Till Westmann |
269 | + */ |
270 | +class HasNodeReferenceIterator : public NaryBaseIterator<HasNodeReferenceIterator, PlanIteratorState> |
271 | +{ |
272 | +public: |
273 | + SERIALIZABLE_CLASS(HasNodeReferenceIterator); |
274 | + |
275 | + SERIALIZABLE_CLASS_CONSTRUCTOR2T(HasNodeReferenceIterator, |
276 | + NaryBaseIterator<HasNodeReferenceIterator, PlanIteratorState>); |
277 | + |
278 | + void serialize( ::zorba::serialization::Archiver& ar); |
279 | + |
280 | + HasNodeReferenceIterator( |
281 | + static_context* sctx, |
282 | + const QueryLoc& loc, |
283 | + std::vector<PlanIter_t>& children) |
284 | + : |
285 | + NaryBaseIterator<HasNodeReferenceIterator, PlanIteratorState>(sctx, loc, children) |
286 | + {} |
287 | + |
288 | + virtual ~HasNodeReferenceIterator(); |
289 | + |
290 | + void accept(PlanIterVisitor& v) const; |
291 | + |
292 | + bool nextImpl(store::Item_t& result, PlanState& aPlanState) const; |
293 | +}; |
294 | + |
295 | + |
296 | +/** |
297 | + * |
298 | + * declare function ref:assign-node-reference($node as node()) as xs:boolean |
299 | + * |
300 | + * Author: Till Westmann |
301 | + */ |
302 | +class AssignNodeReferenceIterator : public NaryBaseIterator<AssignNodeReferenceIterator, PlanIteratorState> |
303 | +{ |
304 | +public: |
305 | + SERIALIZABLE_CLASS(AssignNodeReferenceIterator); |
306 | + |
307 | + SERIALIZABLE_CLASS_CONSTRUCTOR2T(AssignNodeReferenceIterator, |
308 | + NaryBaseIterator<AssignNodeReferenceIterator, PlanIteratorState>); |
309 | + |
310 | + void serialize( ::zorba::serialization::Archiver& ar); |
311 | + |
312 | + AssignNodeReferenceIterator( |
313 | + static_context* sctx, |
314 | + const QueryLoc& loc, |
315 | + std::vector<PlanIter_t>& children) |
316 | + : |
317 | + NaryBaseIterator<AssignNodeReferenceIterator, PlanIteratorState>(sctx, loc, children) |
318 | + {} |
319 | + |
320 | + virtual ~AssignNodeReferenceIterator(); |
321 | + |
322 | + void accept(PlanIterVisitor& v) const; |
323 | + |
324 | + bool nextImpl(store::Item_t& result, PlanState& aPlanState) const; |
325 | +}; |
326 | + |
327 | + |
328 | +/** |
329 | + * |
330 | * declare function ref:node-by-reference($reference as xs:anyURI) as node()? |
331 | * |
332 | * Author: Federico Cavalieri |
333 | |
334 | === modified file 'src/runtime/pregenerated/iterator_enum.h' |
335 | --- src/runtime/pregenerated/iterator_enum.h 2012-06-27 14:07:46 +0000 |
336 | +++ src/runtime/pregenerated/iterator_enum.h 2012-06-28 22:02:21 +0000 |
337 | @@ -215,6 +215,8 @@ |
338 | TYPE_InCollectionPositionIterator, |
339 | TYPE_InSameCollectionPositionIterator, |
340 | TYPE_NodeReferenceIterator, |
341 | + TYPE_HasNodeReferenceIterator, |
342 | + TYPE_AssignNodeReferenceIterator, |
343 | TYPE_NodeByReferenceIterator, |
344 | TYPE_FnLocalNameIterator, |
345 | TYPE_FnNamespaceUriIterator, |
346 | |
347 | === modified file 'src/runtime/spec/nodes/nodes.xml' |
348 | --- src/runtime/spec/nodes/nodes.xml 2012-06-28 04:14:03 +0000 |
349 | +++ src/runtime/spec/nodes/nodes.xml 2012-06-28 22:02:21 +0000 |
350 | @@ -41,6 +41,53 @@ |
351 | /******************************************************************************* |
352 | ********************************************************************************/ |
353 | --> |
354 | + <zorba:iterator name="HasNodeReferenceIterator"> |
355 | + |
356 | + <zorba:description author="Till Westmann"> |
357 | + declare function ref:has-node-reference($node as node()) as xs:boolean |
358 | + </zorba:description> |
359 | + |
360 | + <zorba:function> |
361 | + |
362 | + <zorba:signature localname="has-node-reference" prefix="fn-zorba-ref"> |
363 | + <zorba:param>node()</zorba:param> |
364 | + <zorba:output>xs:boolean</zorba:output> |
365 | + </zorba:signature> |
366 | + |
367 | + </zorba:function> |
368 | + |
369 | + </zorba:iterator> |
370 | + |
371 | +<!-- |
372 | +/******************************************************************************* |
373 | +********************************************************************************/ |
374 | +--> |
375 | + <zorba:iterator name="AssignNodeReferenceIterator"> |
376 | + |
377 | + <zorba:description author="Till Westmann"> |
378 | + declare function ref:assign-node-reference($node as node()) as xs:boolean |
379 | + </zorba:description> |
380 | + |
381 | + <zorba:function> |
382 | + |
383 | + <zorba:signature localname="assign-node-reference" prefix="fn-zorba-ref"> |
384 | + <zorba:param>node()</zorba:param> |
385 | + <zorba:param>xs:anyURI</zorba:param> |
386 | + <zorba:output>xs:boolean</zorba:output> |
387 | + </zorba:signature> |
388 | + |
389 | + <zorba:methods> |
390 | + <zorba:getScriptingKind returnValue="SEQUENTIAL_FUNC_EXPR"/> |
391 | + </zorba:methods> |
392 | + |
393 | + </zorba:function> |
394 | + |
395 | + </zorba:iterator> |
396 | + |
397 | +<!-- |
398 | +/******************************************************************************* |
399 | +********************************************************************************/ |
400 | +--> |
401 | <zorba:iterator name="NodeByReferenceIterator"> |
402 | |
403 | <zorba:description author="Federico Cavalieri"> |
404 | |
405 | === modified file 'src/runtime/visitors/pregenerated/planiter_visitor.h' |
406 | --- src/runtime/visitors/pregenerated/planiter_visitor.h 2012-06-28 04:14:03 +0000 |
407 | +++ src/runtime/visitors/pregenerated/planiter_visitor.h 2012-06-28 22:02:21 +0000 |
408 | @@ -450,6 +450,10 @@ |
409 | |
410 | class NodeReferenceIterator; |
411 | |
412 | + class HasNodeReferenceIterator; |
413 | + |
414 | + class AssignNodeReferenceIterator; |
415 | + |
416 | class NodeByReferenceIterator; |
417 | |
418 | class FnLocalNameIterator; |
419 | @@ -1330,6 +1334,12 @@ |
420 | virtual void beginVisit ( const NodeReferenceIterator& ) = 0; |
421 | virtual void endVisit ( const NodeReferenceIterator& ) = 0; |
422 | |
423 | + virtual void beginVisit ( const HasNodeReferenceIterator& ) = 0; |
424 | + virtual void endVisit ( const HasNodeReferenceIterator& ) = 0; |
425 | + |
426 | + virtual void beginVisit ( const AssignNodeReferenceIterator& ) = 0; |
427 | + virtual void endVisit ( const AssignNodeReferenceIterator& ) = 0; |
428 | + |
429 | virtual void beginVisit ( const NodeByReferenceIterator& ) = 0; |
430 | virtual void endVisit ( const NodeByReferenceIterator& ) = 0; |
431 | |
432 | |
433 | === modified file 'src/runtime/visitors/pregenerated/printer_visitor.cpp' |
434 | --- src/runtime/visitors/pregenerated/printer_visitor.cpp 2012-06-28 04:14:03 +0000 |
435 | +++ src/runtime/visitors/pregenerated/printer_visitor.cpp 2012-06-28 22:02:21 +0000 |
436 | @@ -2873,6 +2873,34 @@ |
437 | // </NodeReferenceIterator> |
438 | |
439 | |
440 | +// <HasNodeReferenceIterator> |
441 | +void PrinterVisitor::beginVisit ( const HasNodeReferenceIterator& a) { |
442 | + thePrinter.startBeginVisit("HasNodeReferenceIterator", ++theId); |
443 | + printCommons( &a, theId ); |
444 | + thePrinter.endBeginVisit( theId ); |
445 | +} |
446 | + |
447 | +void PrinterVisitor::endVisit ( const HasNodeReferenceIterator& ) { |
448 | + thePrinter.startEndVisit(); |
449 | + thePrinter.endEndVisit(); |
450 | +} |
451 | +// </HasNodeReferenceIterator> |
452 | + |
453 | + |
454 | +// <AssignNodeReferenceIterator> |
455 | +void PrinterVisitor::beginVisit ( const AssignNodeReferenceIterator& a) { |
456 | + thePrinter.startBeginVisit("AssignNodeReferenceIterator", ++theId); |
457 | + printCommons( &a, theId ); |
458 | + thePrinter.endBeginVisit( theId ); |
459 | +} |
460 | + |
461 | +void PrinterVisitor::endVisit ( const AssignNodeReferenceIterator& ) { |
462 | + thePrinter.startEndVisit(); |
463 | + thePrinter.endEndVisit(); |
464 | +} |
465 | +// </AssignNodeReferenceIterator> |
466 | + |
467 | + |
468 | // <NodeByReferenceIterator> |
469 | void PrinterVisitor::beginVisit ( const NodeByReferenceIterator& a) { |
470 | thePrinter.startBeginVisit("NodeByReferenceIterator", ++theId); |
471 | |
472 | === modified file 'src/runtime/visitors/pregenerated/printer_visitor.h' |
473 | --- src/runtime/visitors/pregenerated/printer_visitor.h 2012-06-28 04:14:03 +0000 |
474 | +++ src/runtime/visitors/pregenerated/printer_visitor.h 2012-06-28 22:02:21 +0000 |
475 | @@ -692,6 +692,12 @@ |
476 | void beginVisit( const NodeReferenceIterator& ); |
477 | void endVisit ( const NodeReferenceIterator& ); |
478 | |
479 | + void beginVisit( const HasNodeReferenceIterator& ); |
480 | + void endVisit ( const HasNodeReferenceIterator& ); |
481 | + |
482 | + void beginVisit( const AssignNodeReferenceIterator& ); |
483 | + void endVisit ( const AssignNodeReferenceIterator& ); |
484 | + |
485 | void beginVisit( const NodeByReferenceIterator& ); |
486 | void endVisit ( const NodeByReferenceIterator& ); |
487 | |
488 | |
489 | === modified file 'src/store/api/store.h' |
490 | --- src/store/api/store.h 2012-06-28 04:14:03 +0000 |
491 | +++ src/store/api/store.h 2012-06-28 22:02:21 +0000 |
492 | @@ -120,6 +120,14 @@ |
493 | virtual bool hasReference(const Item* node) = 0; |
494 | |
495 | /** |
496 | + * Assigns a specific reference for the given node. |
497 | + * |
498 | + * @param item XDM node |
499 | + * @param reference an xs:anyURI item |
500 | + */ |
501 | + virtual bool assignReference(const Item* node, const zstring& reference) = 0; |
502 | + |
503 | + /** |
504 | * Returns the node which is identified by the given reference. |
505 | * If the given reference is not a valid reference, as generated by |
506 | * getReference, error ZAPI0028 is raised. |
507 | |
508 | === modified file 'src/store/naive/simple_store.cpp' |
509 | --- src/store/naive/simple_store.cpp 2012-06-28 04:14:03 +0000 |
510 | +++ src/store/naive/simple_store.cpp 2012-06-28 22:02:21 +0000 |
511 | @@ -292,10 +292,7 @@ |
512 | uuid_create(&uuid); |
513 | zstring uuidStr = uuidToURI(uuid); |
514 | |
515 | - const_cast<XmlNode*>(xmlNode)->setHaveReference(); |
516 | - |
517 | - theNodeToReferencesMap.insert(xmlNode, uuidStr); |
518 | - theReferencesToNodeMap[uuidStr] = node; |
519 | + assignReference(xmlNode, uuidStr); |
520 | |
521 | return theItemFactory->createAnyURI(result, uuidStr); |
522 | } |
523 | @@ -313,6 +310,24 @@ |
524 | } |
525 | |
526 | |
527 | +bool SimpleStore::assignReference(const store::Item* node, const zstring& reference) |
528 | +{ |
529 | + const XmlNode* xmlNode = static_cast<const XmlNode*>(node); |
530 | + zstring uuidStr = reference; |
531 | + |
532 | + if (xmlNode->haveReference()) |
533 | + { |
534 | + return false; |
535 | + } |
536 | + const_cast<XmlNode*>(xmlNode)->setHaveReference(); |
537 | + |
538 | + theNodeToReferencesMap.insert(xmlNode, uuidStr); |
539 | + theReferencesToNodeMap[uuidStr] = node; |
540 | + |
541 | + return true; |
542 | +} |
543 | + |
544 | + |
545 | /******************************************************************************* |
546 | Returns the node which is identified by the given reference. |
547 | |
548 | |
549 | === modified file 'src/store/naive/simple_store.h' |
550 | --- src/store/naive/simple_store.h 2012-06-28 04:14:03 +0000 |
551 | +++ src/store/naive/simple_store.h 2012-06-28 22:02:21 +0000 |
552 | @@ -108,6 +108,8 @@ |
553 | |
554 | bool hasReference(const store::Item* node); |
555 | |
556 | + bool assignReference(const store::Item* node, const zstring& reference); |
557 | + |
558 | bool getNodeByReference(store::Item_t& result, const zstring& reference); |
559 | |
560 | #ifdef ZORBA_WITH_JSON |
561 | |
562 | === added file 'test/rbkt/ExpQueryResults/zorba/reference/reference_coll_4.xml.res' |
563 | --- test/rbkt/ExpQueryResults/zorba/reference/reference_coll_4.xml.res 1970-01-01 00:00:00 +0000 |
564 | +++ test/rbkt/ExpQueryResults/zorba/reference/reference_coll_4.xml.res 2012-06-28 22:02:21 +0000 |
565 | @@ -0,0 +1,2 @@ |
566 | +<?xml version="1.0" encoding="UTF-8"?> |
567 | +false true |
568 | \ No newline at end of file |
569 | |
570 | === added file 'test/rbkt/ExpQueryResults/zorba/reference/reference_coll_5.xml.res' |
571 | --- test/rbkt/ExpQueryResults/zorba/reference/reference_coll_5.xml.res 1970-01-01 00:00:00 +0000 |
572 | +++ test/rbkt/ExpQueryResults/zorba/reference/reference_coll_5.xml.res 2012-06-28 22:02:21 +0000 |
573 | @@ -0,0 +1,2 @@ |
574 | +<?xml version="1.0" encoding="UTF-8"?> |
575 | +false true true |
576 | \ No newline at end of file |
577 | |
578 | === modified file 'test/rbkt/Queries/zorba/reference/collections.xqdata' |
579 | --- test/rbkt/Queries/zorba/reference/collections.xqdata 2012-06-28 04:14:03 +0000 |
580 | +++ test/rbkt/Queries/zorba/reference/collections.xqdata 2012-06-28 22:02:21 +0000 |
581 | @@ -3,3 +3,4 @@ |
582 | declare namespace ann = "http://www.zorba-xquery.com/annotations"; |
583 | |
584 | declare %ann:ordered collection ns:test as node()*; |
585 | +declare collection ns:test2 as node()*; |
586 | |
587 | === added file 'test/rbkt/Queries/zorba/reference/reference_coll_4.xq' |
588 | --- test/rbkt/Queries/zorba/reference/reference_coll_4.xq 1970-01-01 00:00:00 +0000 |
589 | +++ test/rbkt/Queries/zorba/reference/reference_coll_4.xq 2012-06-28 22:02:21 +0000 |
590 | @@ -0,0 +1,20 @@ |
591 | +import module namespace ddl = "http://www.zorba-xquery.com/modules/store/static/collections/ddl"; |
592 | +import module namespace dml = "http://www.zorba-xquery.com/modules/store/static/collections/dml"; |
593 | +import module namespace ns = "http://example.org/datamodule/" at "collections.xqdata"; |
594 | + |
595 | +import module namespace ref = "http://www.zorba-xquery.com/modules/node-reference"; |
596 | + |
597 | +declare namespace ann = "http://www.zorba-xquery.com/annotations"; |
598 | + |
599 | +declare %ann:sequential function local:test() |
600 | +{ |
601 | + ddl:create(xs:QName("ns:test2")); |
602 | + dml:insert-nodes(xs:QName("ns:test2"), <a><b><c d="e"></c></b></a>); |
603 | + variable $node := dml:collection(xs:QName("ns:test2"))/b/c/@d; |
604 | + variable $has1 := ref:has-node-reference($node); |
605 | + variable $ref := ref:node-reference($node); |
606 | + variable $has2 := ref:has-node-reference($node); |
607 | + ($has1, $has2) |
608 | +}; |
609 | + |
610 | +local:test() |
611 | |
612 | === added file 'test/rbkt/Queries/zorba/reference/reference_coll_5.xq' |
613 | --- test/rbkt/Queries/zorba/reference/reference_coll_5.xq 1970-01-01 00:00:00 +0000 |
614 | +++ test/rbkt/Queries/zorba/reference/reference_coll_5.xq 2012-06-28 22:02:21 +0000 |
615 | @@ -0,0 +1,21 @@ |
616 | +import module namespace ddl = "http://www.zorba-xquery.com/modules/store/static/collections/ddl"; |
617 | +import module namespace dml = "http://www.zorba-xquery.com/modules/store/static/collections/dml"; |
618 | +import module namespace ns = "http://example.org/datamodule/" at "collections.xqdata"; |
619 | + |
620 | +import module namespace ref = "http://www.zorba-xquery.com/modules/node-reference"; |
621 | + |
622 | +declare namespace ann = "http://www.zorba-xquery.com/annotations"; |
623 | + |
624 | +declare %ann:sequential function local:test() |
625 | +{ |
626 | + ddl:create(xs:QName("ns:test2")); |
627 | + variable $ref := xs:anyURI("urn:uuid:e35e9021-0a1c-48c7-8902-833105a2f013"); |
628 | + variable $node := dml:apply-insert-nodes(xs:QName("ns:test2"), <f><g><h i="j"></h></g></f>); |
629 | + variable $has1 := ref:has-node-reference($node); |
630 | + ref:assign-node-reference($node, $ref); |
631 | + variable $has2 := ref:has-node-reference($node); |
632 | + variable $find := ref:node-by-reference($ref); |
633 | + ($has1, $has2, $node is $find) |
634 | +}; |
635 | + |
636 | +local:test() |
Validation queue starting for merge proposal. zorbatest. lambda. nu:8080/ remotequeue/ feature- node-reference- management- 2012-06- 28T22-05- 56.705Z/ log.html
Log at: http://