Hi Pawel,
We've introduced the keyword "RETURN" in UPDATE command to decide what to
return. We could do the same by introducing the RETURN <expression>.
In your case would be:
let var1 = INSERT INTO DbPedResource CONTENT {out_DbPedLinks:[],Uri:
"Applicationprogramminginterface",@fieldTypes:"out_DbPedLinks=g"} *RETURN
@rid*
let var2 = INSERT INTO DbPedResource CONTENT {in_DbPedLinks:[],Uri:
"ListaAPIMicrosoft",@fieldTypes:"in_DbPedLinks=g"} *RETURN @rid*
let var6 = CREATE EDGE DbPedLinks FROM $var1 TO $var2 RETRY 5 WAIT 1
WDYT? Could you open a new issue for this?
Lvc@
On 5 May 2014 20:50, Pawel K. <[email protected]> wrote:
> Luca,
>
> One comment. I tried to execute following script
>
> let var1 = INSERT INTO DbPedResource CONTENT {out_DbPedLinks:[],Uri:
> "Applicationprogramminginterface",@fieldTypes:"out_DbPedLinks=g"}
> let var2 = INSERT INTO DbPedResource CONTENT {in_DbPedLinks:[],Uri:
> "ListaAPIMicrosoft",@fieldTypes:"in_DbPedLinks=g"}
> /**... HAZARD TIME SLOT **/
> let var6 = CREATE EDGE DbPedLinks FROM $var1 TO $var2 RETRY 5 WAIT 1
> return 1
>
> This script under multithreaded scenario shows one issue, that variable is
> bound not to RecordId but to whole versioned record.
> It means that if in "HAZARD TIME SLOT" records var1,var2 will be changed
> (adding another edge) all RETRIES will always fail. This is one scenario
> but the problem appears even in LOCK RECORD updates (INSERTS& LOCK RECORD
> UPDATES produces CME).
> So proposal is to have ability to refer to recently created RIDs which
> means recent available record version.
> What do you think about double $$ operator which is translated to RID not
> to specified version of record from the context.
>
> let var1 = INSERT INTO DbPedResource CONTENT {out_DbPedLinks:[],Uri:
> "Applicationprogramminginterface",@fieldTypes:"out_DbPedLinks=g"}
> let var2 = INSERT INTO DbPedResource CONTENT {in_DbPedLinks:[],Uri:
> "ListaAPIMicrosoft",@fieldTypes:"in_DbPedLinks=g"}
> /**... HAZARD TIME SLOT **/
> let var6 = CREATE EDGE DbPedLinks FROM $$var1 TO $$var2 RETRY 5 WAIT 1 /*
> IMMUNE TO HAZARD TIME SLOT, RETRIES WORKS*/
>
> WDYT?
>
> Pawel
>
>
>
>
>
>
>
>
>
>
>
>
>
> On Wednesday, April 16, 2014 12:40:39 AM UTC+2, Pawel K. wrote:
>>
>> Thanks Luca! Arrays works great.
>>
>> On Sunday, April 13, 2014 8:56:19 PM UTC+2, Lvc@ wrote:
>>>
>>> Hi Pawel,
>>> good idea. It's already in "develop" branch. Usage:
>>>
>>> return [ $a, $b ]
>>>
>>> and also maps:
>>>
>>> return [ 'first' : $a, 'second' : $b ]
>>>
>>> Lvc@
>>>
>>>
>>>
>>> On 13 April 2014 13:40, Pawel K. <[email protected]> wrote:
>>>
>>>> Thanks Luca. I checked it in my code and works as expected.
>>>> btw. It would be nice to have ability to return array of records (or
>>>> records versions) in RETURN clause. It would give an ability to refresh
>>>> client side objects without going back to the database.
>>>> Also is needed for multi records creations in the script (i.e. couple
>>>> of edges).
>>>>
>>>> Pawel
>>>>
>>>>
>>>>
>>>> On Saturday, April 12, 2014 1:18:26 AM UTC+2, Lvc@ wrote:
>>>>
>>>>> Hi Pawel,
>>>>> that was a problem of re-using of context variables on SQL UPDATE. Now
>>>>> It's fixed in "develop" branch.
>>>>>
>>>>> I've created also the new command "script <language>" in console
>>>>> allowing multi-lines commands. Example:
>>>>>
>>>>> orientdb {pawel}> script sql
>>>>> [Started multi-line command. Type just 'end' to finish and execute]
>>>>> begin
>>>>> let var1 = INSERT INTO Address CONTENT {Town:"Wroclaw",Zip:0}
>>>>> let var2 = INSERT INTO University CONTENT {Name:"Pwr"}
>>>>> let var3 = UPDATE $var1 ADD in_EHasCorrespondenceAddress = $var2 RETURN
>>>>> AFTER
>>>>> let var3a = UPDATE $var2 ADD out_EHasCorrespondenceAddress = $var1
>>>>> RETURN AFTER
>>>>> commit
>>>>> return 1
>>>>> end
>>>>>
>>>>> Server side script executed in 0,006000 sec(s). Value returned is: 1
>>>>>
>>>>>
>>>>> Issue https://github.com/orientechnologies/orientdb/issues/2216
>>>>>
>>>>> Lvc@
>>>>>
>>>>>
>>>>>
>>>>> On 5 April 2014 22:08, Pawel K. <[email protected]> wrote:
>>>>>
>>>>>> Guys,
>>>>>> Do you see any reason why such sql batch, does NOT create
>>>>>> bidirectional link?
>>>>>>
>>>>>> begin
>>>>>> let var1 = INSERT INTO Address CONTENT {Town:"Wroclaw",Zip:0}
>>>>>> let var2 = INSERT INTO University CONTENT {Name:"Pwr"}
>>>>>> let var3 = UPDATE $var1 ADD in_EHasCorrespondenceAddress = $var2
>>>>>> RETURN AFTER
>>>>>> let var3a = UPDATE $var2 ADD out_EHasCorrespondenceAddress = $var1
>>>>>> RETURN AFTER
>>>>>> commit
>>>>>> return 1
>>>>>>
>>>>>> It produces 2 records, but second does NOT have the link. When I
>>>>>> replace the ordering in the script always second created vertex has
>>>>>> missed
>>>>>> link.
>>>>>>
>>>>>> #18:0 v1 Address@Town:"Wroclaw",Zip:0,in_EHasCorrespondenceAddress:[#
>>>>>> 56:0]
>>>>>> #56:0 v1 University@Name:"Pwr"
>>>>>>
>>>>>> Thanks in advance
>>>>>> Pawel
>>>>>>
>>>>>> PS. I know that I can use CREATE EDGE in that case but for some
>>>>>> reason Im using provided case.
>>>>>>
>>>>>>
>>>>>> On Friday, April 4, 2014 4:19:36 PM UTC+2, Lvc@ wrote:
>>>>>>
>>>>>>> Hi Stefano,
>>>>>>> if you need a more complex language set "javascript" and use JS as
>>>>>>> language allowing more complex thing: https://github.com/orientechno
>>>>>>> logies/orientdb/wiki/SQL-batch
>>>>>>>
>>>>>>> About rollback, if any exception occurs, the tx is automatically
>>>>>>> rollbacked.
>>>>>>>
>>>>>>> Lvc@
>>>>>>>
>>>>>>>
>>>>>>> On 4 April 2014 16:02, Stefano Migliucci <[email protected]> wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>> how is possible to use "rollback" command?
>>>>>>>> Do we need something like IF, TRY/CATCH, etc?
>>>>>>>> Can you post an example?
>>>>>>>>
>>>>>>>> Stefano
>>>>>>>>
>>>>>>>> Il giorno lunedì 31 marzo 2014 20:46:31 UTC+2, Lvc@ ha scritto:
>>>>>>>>
>>>>>>>>> Hi all,
>>>>>>>>> OrientDB allowed to execute arbitrary script written in Javascript
>>>>>>>>> or any scripting language installed in the JVM. Well, starting from
>>>>>>>>> now we
>>>>>>>>> created a minimal SQL engine to allow batch of commands.
>>>>>>>>>
>>>>>>>>> Batch of commands are very useful when you have to execute
>>>>>>>>> multiple things at the server side avoiding the network roundtrip for
>>>>>>>>> each
>>>>>>>>> command.
>>>>>>>>>
>>>>>>>>> Example to create a new vertex in a transaction and attach it to
>>>>>>>>> an existent vertex by creating a new edge between them:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> *beginlet account = create vertex Account set name = 'Luke'let
>>>>>>>>> city = select from City where name = 'London'let edge = create edge
>>>>>>>>> Lives
>>>>>>>>> from $account to $city retry 100 commitreturn $edge*
>>>>>>>>>
>>>>>>>>> It's plain OrientDB SQL, but with few news:
>>>>>>>>>
>>>>>>>>> - *begin* -> begins a transaction
>>>>>>>>> - *rollback* -> rollbacks an active transaction
>>>>>>>>> - *commit* -> commits an active transaction
>>>>>>>>> - *let <variable> = <command>* -> executes a command and
>>>>>>>>> assign it in the context as . That variable can be used in further
>>>>>>>>> commands
>>>>>>>>> by prefixing it with $
>>>>>>>>> - *return* <variable>|<value>|null -> returns a value instead
>>>>>>>>> of last command result (default
>>>>>>>>>
>>>>>>>>> Note also the usage of* $account *and* $city* on further SQL
>>>>>>>>> commands.
>>>>>>>>>
>>>>>>>>> *Java API*
>>>>>>>>>
>>>>>>>>> This can be used by Java API with:
>>>>>>>>>
>>>>>>>>> database.open("admin", "admin");
>>>>>>>>> String cmd = "begin\n";cmd += "let a = create vertex set script =
>>>>>>>>> true\n";cmd += "let b = select from v limit 1\n";cmd += "let e =
>>>>>>>>> create edge from $a to $b retry 100\n";cmd += "commit\n";cmd +=
>>>>>>>>> "return $e";
>>>>>>>>>
>>>>>>>>> OIdentifiable edge = database.command(new OCommandScript("sql",
>>>>>>>>> cmd)).execute();
>>>>>>>>>
>>>>>>>>> Remember to put one command per line (postfix it with \n).
>>>>>>>>>
>>>>>>>>> *HTTP REST API*
>>>>>>>>>
>>>>>>>>> And via HTTP REST interface (https://github.com/orientechn
>>>>>>>>> ologies/orientdb/issues/2056). Execute a POST against /batch URL
>>>>>>>>> by sending this payload:
>>>>>>>>>
>>>>>>>>> { "transaction" : true,
>>>>>>>>> "operations" : [
>>>>>>>>> {
>>>>>>>>> "type" : "script",
>>>>>>>>> "language" : "sql",
>>>>>>>>> "script" : [ "let account = create vertex Account set name =
>>>>>>>>> 'Luke'",
>>>>>>>>> "let city =select from City where name = 'London'",
>>>>>>>>> "create edge Lives from $account to $city retry
>>>>>>>>> 100" ]
>>>>>>>>> }
>>>>>>>>> ]}
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Hope this new feature will simplify your development improving
>>>>>>>>> performance.
>>>>>>>>>
>>>>>>>>> What about having more complex constructs like IF, FOR, etc? If
>>>>>>>>> you need more complexity, I suggest you to use Javascript as language
>>>>>>>>> that
>>>>>>>>> already support all these concepts.
>>>>>>>>>
>>>>>>>>> Lvc@
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> PS: For more information look at issues -> https://github.com/
>>>>>>>>> orientechnologies/orientdb/issues/2176 and https://github.com/
>>>>>>>>> orientechnologies/orientdb/issues/2056
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>
>>>>>>>> ---
>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>> Groups "OrientDB" group.
>>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>>> send an email to [email protected].
>>>>>>>>
>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>
>>>>>> ---
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "OrientDB" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to [email protected].
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>> --
>>>>
>>>> ---
>>>> You received this message because you are subscribed to the Google
>>>> Groups "OrientDB" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>> --
>
> ---
> You received this message because you are subscribed to the Google Groups
> "OrientDB" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>
--
---
You received this message because you are subscribed to the Google Groups
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.