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