No, it is for any parameter.

Function mapping only occurs for singleton parameters, so if you want it not to 
happen and it is OK for your function to take the empty sequence, then type it 
as a ? (for example, as xs:string?) instead of as a singleton.  Then the empty 
sequence is a valid parameter to the function and function mapping will not 
happen.

-Danny

From: general-boun...@developer.marklogic.com 
[mailto:general-boun...@developer.marklogic.com] On Behalf Of spig
Sent: Friday, April 02, 2010 2:30 PM
To: General Mark Logic Developer Discussion
Subject: Re: [MarkLogic Dev General] Unexpected behavior

Yeah - I guess I read that line and didn't think much about it until now.

So, when other parameters in the same call aren't the empty sequence, could it 
be considered a bug that the entire function isn't called?

Steve
On Fri, Apr 2, 2010 at 3:25 PM, Danny Sokolsky 
<danny.sokol...@marklogic.com<mailto:danny.sokol...@marklogic.com>> wrote:
What is happening is that, as a result of function mapping, when you pass in 
the empty sequence the function is being called 0 times.

Here is what the documentation says to try and explain this (from the 
"MarkLogic Server Enhanced XQuery Language" chapter of the XQuery Reference 
Guide):

One consequence of function mapping, which can be surprising the first time you 
see it, is that if the value passed for a parameter is the empty sequence, it 
could result in the function being called 0 times (that is, in the function 
never runs and results in the empty sequence. For example, if you entered the 
empty sequence as the parameter to the above function call, it returns empty, 
as follows:

xquery version "1.0-ml";
declare function local:print-word ($word as xs:string) { $word };

local:print-word( () )
(:
   evaluates the print-word function zero times, resulting
   in the empty sequence
:)

The local:print-word function is never called in this case, because it is 
iterating over the empty sequence, which causes zero invocations of the 
function. If your function calls are fed by code that can return the empty 
sequence (an XPath expression, for example), then you might see this behavior.

-Danny

From: 
general-boun...@developer.marklogic.com<mailto:general-boun...@developer.marklogic.com>
 
[mailto:general-boun...@developer.marklogic.com<mailto:general-boun...@developer.marklogic.com>]
 On Behalf Of spig
Sent: Friday, April 02, 2010 2:19 PM
To: General Mark Logic Developer Discussion
Subject: Re: [MarkLogic Dev General] Unexpected behavior

Yes, with xdmp:mapping set to "false" it does throw an expected coercion error.

So, how come?

I was under the impression that xdmp:mapping applies the function's logic to 
each parameter. Does xdmp:mapping also not call functions under certain 
circumstances? Is there someone who can help explain this functionality or a 
document I can read?

Steve

So, can someone explain, or point me to a document where xdmp:mapping is 
explained? I've read the xdmp:mapping section in the MarkLogic
On Fri, Apr 2, 2010 at 3:05 PM, Micah Dubinko 
<micah.dubi...@marklogic.com<mailto:micah.dubi...@marklogic.com>> wrote:
Try turning off function mapping with this declration at the top (after any 
module imports)

declare option xdmp:mapping "false";

Does that at least allow the function to get called (or cause a coercion error 
involving ())?

-m

On Apr 2, 2010, at 2:01 PM, spig wrote:

> The point is that the function is never called (it is throwing fn:error just 
> to prove that it's not called, errors or not). Also, there is no warning that 
> the function is not being called, or that there is an error in the parameter. 
> Anyone know why this is? Try running the code and you'll see what I mean. 
> It's almost like there is a hidden try/catch around my code - no errors 
> raised and doesn't show that nothing was called.
>
> Steve
>
> On Fri, Apr 2, 2010 at 2:55 PM, Ruth Stryker 
> <ruth.stry...@marklogic.com<mailto:ruth.stry...@marklogic.com>> wrote:
> Hi spig,
>
>
> Not sure about fn:error(). Maybe approach with try get instead.?
>
>
> try {
>  1 div 0
> }
> catch ($e) {
>  $e
> }
>
> Or just use an if then else for checking if your field exists.?
>
>
> if(xdmp:get-request-field("q"))
>
>          then local:search-results()
>
>          else .
>
>
>
>
> From: 
> general-boun...@developer.marklogic.com<mailto:general-boun...@developer.marklogic.com>
>  
> [mailto:general-boun...@developer.marklogic.com<mailto:general-boun...@developer.marklogic.com>]
>  On Behalf Of spig
> Sent: Friday, April 02, 2010 1:43 PM
> To: general@developer.marklogic.com<mailto:general@developer.marklogic.com>
> Subject: [MarkLogic Dev General] Unexpected behavior
>
>
> If I run the following code, my function is never called and no errors are 
> raised. Any ideas?
>
>
> xquery version "1.0-ml";
>
> declare function local:test($param1 as xs:string, $param2 as xs:string, 
> $param3 as xs:string) {
>   fn:error()
> };
>
> let $var := xdmp:get-request-field("non-existent-param")
>
> let $blah := local:test("", "", $var)
>
> return "Function Call Successful"
>
>
>
> Thanks,
> Steve Spigarelli
>
>
> _______________________________________________
> General mailing list
> General@developer.marklogic.com<mailto:General@developer.marklogic.com>
> http://xqzone.com/mailman/listinfo/general
>
>
> _______________________________________________
> General mailing list
> General@developer.marklogic.com<mailto:General@developer.marklogic.com>
> http://xqzone.com/mailman/listinfo/general

_______________________________________________
General mailing list
General@developer.marklogic.com<mailto:General@developer.marklogic.com>
http://xqzone.com/mailman/listinfo/general

_______________________________________________
General mailing list
General@developer.marklogic.com<mailto:General@developer.marklogic.com>
http://xqzone.com/mailman/listinfo/general

_______________________________________________
General mailing list
General@developer.marklogic.com
http://xqzone.com/mailman/listinfo/general

Reply via email to