@Test
public void testCreateRollback() {
String name = null;
try {
name = UUID.randomUUID();
MyClass newClass = new MyClass();
myClass.setName(name);
db.begin();
// Remove from here
String q = "SELECT FROM (SELECT expand(out('" + RandomEdge.class.getSimpleName() + "')) FROM #21:0)";
db.command(new OSQLSynchQuery(q)).execute();
// Remove to here
MyClass savedClass = db.save(newClass);
db.rollback();
List<ODocument> oDocs = db.getUnderlying().command(new OSQLSynchQuery("SELECT FROM MyClass WHERE name = '" + name + "'")).execute();
Assert.assertTrue(oDocs.isEmpty());
if (oDocs.isEmpty()) {
name = null;
}
} finally {
if (name != null) {
db.command(new OCommandSQL("DELETE VERTEX MyClass WHERE name = '" + name + "'")).execute();
}
}
}
Consider the test case above. I'm running an embedded plocal server using the object API.
If I run this test, it fails. If I run this test and remove the code marked by the comments, it works.
In other words, the transaction doesn't rollback when I expand a completly random edge.
I'm not even using the result of the select (in this code), but it still cases the rollback to fail. Super weird behavior..
Am I missing something with transactions or is this a weird and severe bug?