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.
