Special forms are a good way to think of it (and cts:highlight and cts:walk are also special). Personally I've grown to appreciate having control over when expressions are sent to the d-hosts in a cluster. Would you trust an optimizer to do the right thing in every instance?
-- Mike On 18 Jul 2011, at 15:11 , Evan Lenz wrote: > cts:search() and xdmp:estimate() are not functions per se, since their first > argument must be an "expression" (and a searchable one at that). For > cts:search(), the expression you provide is combined with the query you > provide (in the second argument) to get the results from the index. Unlike a > normal function, you can't pass just any evaluated node sequence as the first > "argument." So they look like functions but aren't really. :-) (They're more > like what are called "special forms" in Lisp.) > > Elsewhere, such expressions are evaluated normally, directly returning their > results, which means that xdmp:directory() returns all the documents in the > given directory. I agree that optimization of let clauses would be good, > whether through lazy evaluation or some other approach. > > Evan Lenz > Software Developer, Community > http://developer.marklogic.com > > From: Geert Josten <geert.jos...@daidalos.nl> > Reply-To: General MarkLogic Developer Discussion > <general@developer.marklogic.com> > Date: Mon, 18 Jul 2011 08:25:05 -0700 > To: General MarkLogic Developer Discussion <general@developer.marklogic.com> > Subject: Re: [MarkLogic Dev General] Async behavior of HTTP request > > Hi David, > > Well, one of the ML experts (Kelly or Jason perhaps?) remarked that > searchable expressions are treated rather differently. They are not evaluated > before being passed into functions like cts:search. Instead, they are somehow > passed in as-is, and evaluated directly against indexes. Variables require > evaluation before being passed in, so that would null the benefit of being > evaluated against indexes. > > It might still be possible to optimize this, but it is different from lazy > evaluation.. > > Kind regards, > Geert > > Van: general-boun...@developer.marklogic.com > [mailto:general-boun...@developer.marklogic.com] Namens Lee, David > Verzonden: maandag 18 juli 2011 17:15 > Aan: General MarkLogic Developer Discussion > Onderwerp: Re: [MarkLogic Dev General] Async behavior of HTTP request > > This is very interesting, and also a source of confusion for me. > > Apparently ( and please correct me if I'm wrong) ... the runtime can lazily > reference some kinds of variables (e.g. the one returned by xdmp:http-get()) > but not others (say xdmp:directory() ) ... > > Example, if I put an otherwise searchable expression into a variable it > becomes non-searchable > > return xdmp:directory(...)//node (: searchable :) > vs. > > let $files := xdmp:directory( ...) , > return $files//node (: not searchable :) > > > Yet xdmp:http-get results are differed until referenced. (sweet). > > > I understand this is a subtlety of optimization implementations but it would > be really really nice if it were consistent (in the good way :) That is, > assigning a searchable expression to a variable shouldn't make it > non-searchable. > > Waiting for this feature in N.M(+1) :) > > > > > > ---------------------------------------- > David A. Lee > Senior Principal Software Engineer > Epocrates, Inc. > d...@epocrates.com > 812-482-5224 > > From: general-boun...@developer.marklogic.com > [mailto:general-boun...@developer.marklogic.com] On Behalf Of Abhishek53 S > Sent: Friday, July 15, 2011 1:28 AM > To: General MarkLogic Developer Discussion > Subject: Re: [MarkLogic Dev General] Async behavior of HTTP request > > > Thanks Danny ! Now the concept is much clear to me . > > Abhishek Srivastav > Tata Consultancy Services > Cell:- +91-9883389968 > Mailto: abhishek5...@tcs.com > Website: http://www.tcs.com > ____________________________________________ > Experience certainty. IT Services > Business Solutions > Outsourcing > ____________________________________________ > > From: > Danny Sokolsky <danny.sokol...@marklogic.com> > To: > General MarkLogic Developer Discussion <general@developer.marklogic.com> > Date: > 07/14/2011 11:41 PM > Subject: > Re: [MarkLogic Dev General] Async behavior of HTTP request > Sent by: > general-boun...@developer.marklogic.com > > > > > Hi Abhishek, > > So it turns out the xdmp:http-gets will begin to evaluate asyncrounously. > The sleeps that I put in that query forced them to block. They key is if you > need to use the response or not. So this query does not wait for the > http-gets to complete before logging in the return clause: > > xquery version "1.0-ml"; > xdmp:log("Req # 1"), xdmp:sleep(1000), > let $x := xdmp:http-get("http://marklogic.com") > let $y := xdmp:http-get("http://marklogic.com") > return > xdmp:log("Process completed") > > I guess the question for you is do you need the query to use the output of > the http-get. If so, then you have to wait for it to complete in order to > complete the x-action. > > -Danny > > From: general-boun...@developer.marklogic.com > [mailto:general-boun...@developer.marklogic.com] On Behalf Of Abhishek53 S > Sent: Thursday, July 14, 2011 12:45 AM > To: General MarkLogic Developer Discussion > Subject: Re: [MarkLogic Dev General] Async behavior of HTTP request > > > Danny > > Thanks for reply . Referring the link > (http://www.marklogicevents.com/file/presentations/Effective_XQuery_in_MarkLogic_Heitkamp_Koul.pdf) > where on slide 36 it is mentioned that HTTP interfaces executes > asynchronously. Let me know If I misunderstood. > > Can It be possible to run child some transaction asynchronously. I am > thinking of one way to achieve it where the child module is written into > separate xqy file and then use xdmp:spawn to invoke the module. In this case > the parent transaction will not wait for the response from the spawned > module. Let me know If I am wrong here. > > Any separate way to achieve the asynchronous child transaction? > > Thanks > Abhishek Srivastav > Tata Consultancy Services > Cell:- +91-9883389968 > Mailto: abhishek5...@tcs.com > Website: http://www.tcs.com > ____________________________________________ > Experience certainty. IT Services > Business Solutions > Outsourcing > ____________________________________________ > From: > Danny Sokolsky <danny.sokol...@marklogic.com> > To: > General MarkLogic Developer Discussion <general@developer.marklogic.com> > Date: > 07/14/2011 06:27 AM > Subject: > Re: [MarkLogic Dev General] Async behavior of HTTP request > Sent by: > general-boun...@developer.marklogic.com > > > > > > > > > Hi Abhishek, > > I think the http-get requests are *synchronous*, not asynchronous; that is, > they will wait until they get the results to move on to the next thing in the > query. So I am not sure I understand your question. For example, if you run > the following: > > let $x := (xdmp:http-get("http://marklogic.com"), xdmp:log("Req # 1"), > xdmp:sleep(1000)) > let $y := (xdmp:http-get("http://marklogic.com"), xdmp:log("Req # 1"), > xdmp:sleep(1000)) > return > xdmp:log("Process completed") > > You will see 3 log messages in your log, and they will be about 1 second > apart from each other. > > 2011-07-13 17:53:48.395 Info: danny: Req # 1 > 2011-07-13 17:53:49.462 Info: danny: Req # 1 > 2011-07-13 17:53:50.462 Info: danny: Process completed > > -Danny > > From: general-boun...@developer.marklogic.com > [mailto:general-boun...@developer.marklogic.com] On Behalf Of Abhishek53 S > Sent: Wednesday, July 13, 2011 12:36 PM > To: General MarkLogic Developer Discussion > Subject: [MarkLogic Dev General] Async behavior of HTTP request > > Hi Folks, > > As per my understanding of HTTP request through Marklogic HTTP APIs is that > they are asynchronous by nature.Between the HTTP service requests the > behavior is asynchronous. > > Is the calling module execute asynchronously with invoked HTTP requests ie > sample query > > let $x := xdmp:http-get($uri1,()) > let $y := xdmp:http-get($uri2,()) > return > xdmp:log("Process completed") > Can the logging be done irrespective to wait for the response from both the > requests? > > Your suggestions will be appreciated. > Thanks in advance > Abhishek Srivastav > Tata Consultancy Services > Cell:- +91-9883389968 > Mailto: abhishek5...@tcs.com > Website: http://www.tcs.com > ____________________________________________ > Experience certainty. IT Services > Business Solutions > Outsourcing > ____________________________________________ > =====-----=====-----===== > Notice: The information contained in this e-mail > message and/or attachments to it may contain > confidential or privileged information. If you are > not the intended recipient, any dissemination, use, > review, distribution, printing or copying of the > information contained in this e-mail message > and/or attachments to it are strictly prohibited. If > you have received this communication in error, > please notify us by reply e-mail or telephone and > immediately and permanently delete the message > and any attachments. Thank you > _______________________________________________ > General mailing list > General@developer.marklogic.com > http://developer.marklogic.com/mailman/listinfo/general > _______________________________________________ > General mailing list > General@developer.marklogic.com > http://developer.marklogic.com/mailman/listinfo/general > > _______________________________________________ > General mailing list > General@developer.marklogic.com > http://developer.marklogic.com/mailman/listinfo/general _______________________________________________ General mailing list General@developer.marklogic.com http://developer.marklogic.com/mailman/listinfo/general