Just some more info: I'm updating a balance (decreasing the value of the balance) and need to mark the movement as "processed"
I tried this SQL command: " UPDATE #20:11 INCREMENT Balance = '-1000' ; UPDATE #21:7 SET IsProcessed = 'true' " and the Balance might give an error since the minimum value is 0. The problem occurs when the Balance goes below 0, the first update fails (as expected) but the second update is performed! I guessed performing everything on the same SQL command would make it on the same transaction but it doesn't. How can I perform these operations on the same transaction? Thank you and kind regards, Manuel Coutinho On Saturday, June 2, 2012 at 6:40:29 PM UTC+1, Salvatore Piccione wrote: > > Hello, > > I've defined some tests on transactions (both Blueprints and Orient native > ones) in order to verify if SQL statements are aware of the transaction > context in which they are executed. > You can find a test case about the execution of SQL INSERTs into an index > and a class inside a transaction at https://gist.github.com/2859180. > It seems that such SQL statements are not aware of the transaction scope > defined in the code. In particular I found the following issues: > > - the graph element created through a SQL INSERT is not deleted when > the transaction is rolled back > - the SQL INSERT into an index doesn't work if the graph element to be > added has been defined in a transaction by using Java API (it's got a > temporary RID). In particular I get [1] if the vertex has been defined > through Blueprints API while I get [2] if the vertex has been defined > through native API. Additionally, I've discovered that: > - if you use the Blueprints API to define the vertex, you get a > temporary RID with the right cluster id (6 for Vertex and 7 for Edge) > - if you use native graph API to define the vertex, you get a > temporary RID with a temporary (i.e. negative) cluster id. This happens > even passing the name of the class in the method > OGraphDatabase.createVertex(). Any idea about this? > > I'd like to know if the SQL statement's unawareness of the transaction > scope is a known issue or I did something wrong in mt code. At the moment, > I'm forced to use only Java API to change (insert, modify and delete) my > data inside a transaction to make transaction working fine. > > TIA, > > Salvatore > > [1] Stack trace got using Blueprints API > com.orientechnologies.orient.core.exception.OCommandExecutionException: > Error on execution of command: OCommandSQL [text=INSERT INTO > index:aManualIdx(key,rid) VALUES (52,#6:-2)] > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > Method) > at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown > Source) > at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown > Source) > at java.lang.reflect.Constructor.newInstance(Unknown Source) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinary.createException(OChannelBinary.java:409) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinary.handleStatus(OChannelBinary.java:364) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinaryAsynch.beginResponse(OChannelBinaryAsynch.java:145) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinaryAsynch.beginResponse(OChannelBinaryAsynch.java:60) > at > com.orientechnologies.orient.client.remote.OStorageRemote.beginResponse(OStorageRemote.java:1492) > at > com.orientechnologies.orient.client.remote.OStorageRemote.command(OStorageRemote.java:703) > at > com.orientechnologies.orient.client.remote.OStorageRemoteThread.command(OStorageRemoteThread.java:191) > at > com.orientechnologies.orient.core.command.OCommandRequestTextAbstract.execute(OCommandRequestTextAbstract.java:60) > at > org.example.orientdb.TestIndexUsageInTransaction.testBlueprintsAPI(TestIndexUsageInTransaction.java:117) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) > at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) > at java.lang.reflect.Method.invoke(Unknown Source) > at > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) > at > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) > at > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) > at > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) > at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) > at org.junit.runners.ParentRunner.run(ParentRunner.java:300) > at > org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) > at > org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) > Caused by: java.lang.NullPointerException > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > Method) > at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown > Source) > at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown > Source) > at java.lang.reflect.Constructor.newInstance(Unknown Source) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinary.createException(OChannelBinary.java:411) > ... 32 more > > [2] Stack trace got using native API > com.orientechnologies.orient.core.exception.OCommandExecutionException: > Error on execution of command: OCommandSQL [text=INSERT INTO > index:aManualIdx(key,rid) VALUES (52,#-1:-1)] > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > Method) > at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown > Source) > at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown > Source) > at java.lang.reflect.Constructor.newInstance(Unknown Source) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinary.createException(OChannelBinary.java:409) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinary.handleStatus(OChannelBinary.java:364) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinaryAsynch.beginResponse(OChannelBinaryAsynch.java:145) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinaryAsynch.beginResponse(OChannelBinaryAsynch.java:60) > at > com.orientechnologies.orient.client.remote.OStorageRemote.beginResponse(OStorageRemote.java:1492) > at > com.orientechnologies.orient.client.remote.OStorageRemote.command(OStorageRemote.java:703) > at > com.orientechnologies.orient.client.remote.OStorageRemoteThread.command(OStorageRemoteThread.java:191) > at > com.orientechnologies.orient.core.command.OCommandRequestTextAbstract.execute(OCommandRequestTextAbstract.java:60) > at > org.example.orientdb.TestIndexUsageInTransaction.testNativeAPI(TestIndexUsageInTransaction.java:164) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) > at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) > at java.lang.reflect.Method.invoke(Unknown Source) > at > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) > at > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) > at > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) > at > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) > at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) > at org.junit.runners.ParentRunner.run(ParentRunner.java:300) > at > org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) > at > org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) > Caused by: java.lang.ClassCastException > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > Method) > at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown > Source) > at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown > Source) > at java.lang.reflect.Constructor.newInstance(Unknown Source) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinary.createException(OChannelBinary.java:411) > ... 32 more > > > -- --- 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.
