[xquery-talk] Setting global variables

John Snelson john.snelson at oracle.com
Wed Oct 31 09:05:57 PST 2007


Hi Ronald,

There is no way to do what you're asking, since XQuery is a functional 
language and variable values cannot be changed.

What's wrong with something like this:

declare variable $foo:listOfNames := fn:doc("mydoc.xml")//Name;

declare function foo:firstFunctionCalled(...)
{
   ...
};

declare function foo:functionCalled MuchLater(...)
{
   ...
   if ($name = $foo:listOfNames)
   ...
};

John

Ronald Bourret wrote:
> Is there any way to set a global variable from inside a function? (By 
> "global variable", I mean a variable declared in the prolog of a 
> function library.)
> 
> Basically, I'd like to read a document and save a subset of the document 
> in a global variable, then refer to it later when doing lookups. For 
> example, I'd like to do something like the following:
> 
>    declare variable $foo:listOfNames external;
> 
>    declare function foo:firstFunctionCalled(...)
>    {
>       let $foo:listOfNames := fn:doc("mydoc.xml")//Name
>       ...
>    };
> 
>    declare function foo:functionCalledMuchLater(...)
>    {
>       ...
>       if ($name = $foo:listOfNames)
>       ...
>    };
> 
> Currently, I pass such information from function to function until it is 
> finally used. While this works (and some would argue is the correct 
> style), it has the following drawbacks:
> 
> 1) It is difficult to follow the information through the chain of 
> functions.
> 
> 2) It can be confusing to read the intermediate functions, as these 
> never really use the information.
> 
> 3) It is brittle when refactoring the intermediate functions. Because 
> the information is not really used -- it's just passed along -- it is 
> easy to accidentally drop.
> 
> Thanks,
> 
> -- Ron
> 
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk


-- 
John Snelson, Oracle Corporation
Berkeley DB XML:        http://www.oracle.com/database/berkeley-db/xml
XQilla:                                  http://xqilla.sourceforge.net


More information about the talk mailing list