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.