zorba-coders team mailing list archive
-
zorba-coders team
-
Mailing list archive
-
Message #03911
[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/89501
fix for bug #866423
--
https://code.launchpad.net/~zorba-coders/zorba/markos-scratch/+merge/89501
Your team Zorba Coders is subscribed to branch lp:zorba.
=== modified file 'ChangeLog'
--- ChangeLog 2012-01-20 13:37:12 +0000
+++ ChangeLog 2012-01-20 21:54:37 +0000
@@ -12,6 +12,8 @@
* Fixed bug in destruction of exit_catcher_expr
* Types-related optimization for the comparison operators
* Fixed bug #911585 (management of variables during eval)
+ * Fixed bug #866423 (fn:empty and fn:exists iterators must reset their input in
+ case of early-out)
* Added index management function to the C++ api's StaticCollectionManager.
* Fixed bug #905041 (allow for the default element and function namespaces to be
set multiple times via the c++ api).
=== modified file 'src/runtime/sequences/sequences_impl.cpp'
--- src/runtime/sequences/sequences_impl.cpp 2011-10-12 08:45:07 +0000
+++ src/runtime/sequences/sequences_impl.cpp 2012-01-20 21:54:37 +0000
@@ -21,7 +21,9 @@
#include <sstream>
#include <zorbautils/fatal.h>
-#include <diagnostics/xquery_diagnostics.h>
+#include "diagnostics/xquery_diagnostics.h"
+#include "diagnostics/util_macros.h"
+
#include <zorbatypes/URI.h>
#include <zorbamisc/ns_consts.h>
@@ -154,11 +156,7 @@
if (!consumeNext(state->theSearchItem, theChildren[1].getp(), planState))
{
- throw XQUERY_EXCEPTION(
- err::FORG0006,
- ERROR_PARAMS( ZED( EmptySeqNoSearchItem ) ),
- ERROR_LOC( loc )
- );
+ RAISE_ERROR(err::FORG0006, loc, ERROR_PARAMS(ZED(EmptySeqNoSearchItem)));
}
if ( theChildren.size() == 3 )
@@ -213,11 +211,12 @@
if ( !consumeNext(lSequenceItem, theChildren[0].getp(), planState))
{
- STACK_PUSH (GENV_ITEMFACTORY->createBoolean ( result, true ), state);
+ STACK_PUSH(GENV_ITEMFACTORY->createBoolean(result, true), state);
}
else
{
- STACK_PUSH (GENV_ITEMFACTORY->createBoolean ( result, false ), state);
+ theChildren[0]->reset(planState);
+ STACK_PUSH (GENV_ITEMFACTORY->createBoolean(result, false), state);
}
STACK_END (state);
@@ -235,6 +234,7 @@
if ( consumeNext(lSequenceItem, theChildren[0].getp(), planState) )
{
+ theChildren[0]->reset(planState);
STACK_PUSH (GENV_ITEMFACTORY->createBoolean ( result, true ), state);
}
else
Follow ups