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