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/oriente
>>>>>> chnologies/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