declare variable Š is lazily evaluated, which is great unless you never access the variable but expect it to cause a side-effect.
On 19/06/2014 16:28, "Retter, Adam (RBI-UK)" <[email protected]> wrote: >Given a main module with no user defined functions, is it considered >better practice to use `declare variable` as opposed to `let`, the reason >I ask is twofold: > >1) I have started on a large code-base that seems to eschew `let` in >favour of using `declare variable`. This seems somewhat strange to me. > >2) We have seen different evaluation strategies, whereby a function which >returns an empty-sequence which is bound in a declare variable clause, is >never executed. Yet when we re-write that as a let binding, the code is >executed. I think perhaps the query optimiser in ML is being too >aggressive here? > > >For example - > >declare variable $content-type as xs:string := >slib:validated-bulk-load-content-type(); > >and then a few lines later we have - > >slib:normal-bulk-load-response ($etag-map, fn:count >($etag-map/store:etag-entry), $content-type) > >Subsequently the `slib:normal-bulk-load-response` calls >xdmp:set-response-content-type($content-type). However the >`slib:validated-bulk-content-type()` function is never evaluated, we are >certain of this because it eventually calls `fn:error`, yet the error >never occurs! > >If we switch the `declare variable $content-type` for a `let >$content-type` then we do see the error occurring! > >Cheers Adam. > >DISCLAIMER >This message is intended only for the use of the person(s) ("Intended >Recipient") to whom it is addressed. It may contain information, which is >privileged and confidential. Accordingly any dissemination, distribution, >copying or other use of this message or any of its content by any person >other than the Intended Recipient may constitute a breach of civil or >criminal law and is strictly prohibited. If you are not the Intended >Recipient, please contact the sender as soon as possible. >Reed Business Information Limited. Registered Office: Quadrant House, The >Quadrant, Sutton, Surrey, SM2 5AS, UK. >Registered in England under Company No. 151537 > >_______________________________________________ >General mailing list >[email protected] >http://developer.marklogic.com/mailman/listinfo/general _______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
