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

Reply via email to