Thanks everyone for your input on this.
I ended up separating my code into two transactions using semicolons.
I have to loop through the same data twice, but it's a very small loop so not a
big deal.
So rather than:
let $var ...
for ...
where ...
return
let $a ...
let $b ...
let $save := saveFunction($param)
return ($a, anotherFunction($b)...)
I now have:
(: This loop creates the document(s) :)
let $var ...
for ...
let $a ...
let $b ...
let $save := saveFunction($param)
where ...
return $save;
(: This loop uses the documents :)
let $var ...
for ...
let $a...
let $b...
where ...
return ($a, anotherFunction($b)...);
Thanks much,
-Chad
From: [email protected]
[mailto:[email protected]] On Behalf Of David Lee
Sent: Tuesday, April 16, 2013 3:16 PM
To: MarkLogic Developer Discussion
Subject: Re: [MarkLogic Dev General] Document insert
semicolons (;) can be useful too.
But the important part is to realize you will never "see" document updates in
the same transaction.
XQuery life is "frozen in time" to the point of the start of the query so all
code "sees" the same view of the database until a transaction is complete.
(This is different than typical RDBMS transactions where you will see changes
made on the same connection in an open transaction)
-----------------------------------------------------------------------------
David Lee
Lead Engineer
MarkLogic Corporation
[email protected]<mailto:[email protected]>
Phone: +1 812-482-5224
Cell: +1 812-630-7622
www.marklogic.com<http://www.marklogic.com/>
From:
[email protected]<mailto:[email protected]>
[mailto:[email protected]] On Behalf Of Dave Cassel
Sent: Tuesday, April 16, 2013 4:13 PM
To: MarkLogic Developer Discussion
Subject: Re: [MarkLogic Dev General] Document insert
For more details, the Understanding Transactions
chapter<http://docs.marklogic.com/guide/app-dev/transactions#chapter> of the
Application Developer's Guide is a good resource. What you'll probably need to
do is have saveFunction run in an eval statement as a separate transaction.
David Cassel
Vanguard Technical Manager
MarkLogic<http://www.marklogic.com>
From: David Lee <[email protected]<mailto:[email protected]>>
Reply-To: MarkLogic Developer Discussion
<[email protected]<mailto:[email protected]>>
Date: Tuesday, April 16, 2013 3:03 PM
To: MarkLogic Developer Discussion
<[email protected]<mailto:[email protected]>>
Subject: Re: [MarkLogic Dev General] Document insert
saveFunction and anotherFunction are run in the same transaction so
anotherFunction will not "see" the new document until you commit the
transaction.
-----------------------------------------------------------------------------
David Lee
Lead Engineer
MarkLogic Corporation
[email protected]<mailto:[email protected]>
Phone: +1 812-482-5224
Cell: +1 812-630-7622
www.marklogic.com<http://www.marklogic.com/>
From:
[email protected]<mailto:[email protected]>
[mailto:[email protected]] On Behalf Of Chad Bishop
Sent: Tuesday, April 16, 2013 2:57 PM
To: [email protected]<mailto:[email protected]>
Subject: [MarkLogic Dev General] Document insert
Greetings,
I have the following situation:
let $var ...
for ...
where ...
return
let $a ...
let $b ...
let $save := saveFunction($param)
return ($a, anotherFunction($b)...)
That saveFunction is inserting a document...or supposed to.
What I've found is it doesn't actually insert the document unless I:
return $save
Why is that? It matters in this situation because anotherFunction() depends on
the document existing.
Thank you for any help,
-Chad
_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general