Yep. Definitely RETURN <expression> is more elegant.
Thanks!
Pawel

On Tuesday, May 6, 2014 12:04:00 AM UTC+2, Lvc@ wrote:
>
> 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] <javascript:>> 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/
>>>>>>>> orientechnologies/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] <javascript:>.
>> 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.

Reply via email to