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.

Reply via email to