package com.orientechnologies.orient.core.db.document;
import com.orientechnologies.orient.core.db.ODatabase;
import com.orientechnologies.orient.core.exception.ODatabaseException;
import com.orientechnologies.orient.core.id.ORecordId;
import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.metadata.schema.OSchemaProxy;
import com.orientechnologies.orient.core.metadata.schema.OType;
import com.orientechnologies.orient.core.record.ORecord;
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;
import org.testng.Assert;
import org.testng.annotations.Test;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ODatabaseDocumentTxTest {
@Test
public void testMultipleReads() {
String url = "memory:" + ODatabaseDocumentTxTest.class.getSimpleName();
ODatabaseDocumentTx db = new ODatabaseDocumentTx(url).create();
try {
db.getMetadata().getSchema().createClass("TestMultipleRead1");
db.getMetadata().getSchema().createClass("TestMultipleRead2");
final HashSet<ORecordId> rids = new HashSet<ORecordId>();
for (int i = 0; i < 100; ++i) {
final ODocument rec = new ODocument("TestMultipleRead1").field("id", i).save();
rids.add((ORecordId) rec.getIdentity());
final ODocument rec2 = new ODocument("TestMultipleRead2").field("id", i).save();
rids.add((ORecordId) rec2.getIdentity());
}
Set<ORecord> result = db.executeReadRecords(rids, false);
Assert.assertEquals(result.size(), 200);
for (ORecord rec : result) {
Assert.assertTrue(rec instanceof ODocument);
}
Set<ORecord> result2 = db.executeReadRecords(rids, true);
Assert.assertEquals(result2.size(), 200);
for (ORecord rec : result2) {
Assert.assertTrue(rec instanceof ODocument);
}
} finally {
db.close();
}
}
@Test
public void testCountClass() throws Exception {
String url = "memory:" + ODatabaseDocumentTxTest.class.getSimpleName() + "-testCountClass";
ODatabaseDocumentTx db = new ODatabaseDocumentTx(url).create();
try {
OClass testSuperclass = db.getMetadata().getSchema().createClass("TestSuperclass");
db.getMetadata().getSchema().createClass("TestSubclass", testSuperclass);
ODocument toDelete = new ODocument("TestSubclass").field("id", 1).save();
// 1 SUB, 0 SUPER
Assert.assertEquals(db.countClass("TestSubclass", false), 1);
Assert.assertEquals(db.countClass("TestSubclass", true), 1);
Assert.assertEquals(db.countClass("TestSuperclass", false), 0);
Assert.assertEquals(db.countClass("TestSuperclass", true), 1);
db.begin();
try {
new ODocument("TestSuperclass").field("id", 1).save();
new ODocument("TestSubclass").field("id", 1).save();
// 2 SUB, 1 SUPER
Assert.assertEquals(db.countClass("TestSuperclass", false), 1);
Assert.assertEquals(db.countClass("TestSuperclass", true), 3);
Assert.assertEquals(db.countClass("TestSubclass", false), 2);
Assert.assertEquals(db.countClass("TestSubclass", true), 2);
toDelete.delete().save();
// 1 SUB, 1 SUPER
Assert.assertEquals(db.countClass("TestSuperclass", false), 1);
Assert.assertEquals(db.countClass("TestSuperclass", true), 2);
Assert.assertEquals(db.countClass("TestSubclass", false), 1);
Assert.assertEquals(db.countClass("TestSubclass", true), 1);
} finally {
db.commit();
}
} finally {
db.close();
}
}
@Test
public void testTimezone() {
String url = "memory:" + ODatabaseDocumentTxTest.class.getSimpleName() + "Timezone";
ODatabaseDocumentTx db = new ODatabaseDocumentTx(url).create();
try {
db.set(ODatabase.ATTRIBUTES.TIMEZONE, "Europe/Rome");
Object newTimezone = db.get(ODatabase.ATTRIBUTES.TIMEZONE);
Assert.assertEquals(newTimezone, "Europe/Rome");
db.set(ODatabase.ATTRIBUTES.TIMEZONE, "foobar");
newTimezone = db.get(ODatabase.ATTRIBUTES.TIMEZONE);
Assert.assertEquals(newTimezone, "GMT");
} finally {
db.close();
}
}
@Test(expectedExceptions = ODatabaseException.class)
public void testSaveInvalidRid() {
ODatabaseDocumentTx db = new ODatabaseDocumentTx("memory: rid_" + ODatabaseDocumentTxTest.class.getSimpleName());
db.create();
try {
ODocument doc = new ODocument();
doc.field("test", new ORecordId(-2, 10));
db.save(doc);
} finally {
db.drop();
}
}
@Test
public void testDocFromJsonEmbedded() {
ODatabaseDocumentTx db = new ODatabaseDocumentTx("memory: testDocFromJsonEmbedded_" + ODatabaseDocumentTxTest.class.getSimpleName());
db.create();
try {
OSchemaProxy schema = db.getMetadata().getSchema();
OClass c0 = schema.createClass("Class0");
OClass c1 = schema.createClass("Class1");
c1.createProperty("account", OType.STRING);
c1.createProperty("meta", OType.EMBEDDED, c0);
ODocument doc = new ODocument("Class1");
doc.fromJSON("{\n" + " \"account\": \"#25:0\",\n" + " "
+ "\"meta\": {"
+ " \"created\": \"2016-10-03T21:10:21.77-07:00\",\n" + " \"ip\": \"0:0:0:0:0:0:0:1\",\n"
+ " \"contentType\": \"application/x-www-form-urlencoded\","
+ " \"userAgent\": \"PostmanRuntime/2.5.2\""
+ "},"
+ "\"data\": \"firstName=Jessica&lastName=Smith\"\n" + "}");
db.save(doc);
List<ODocument> result = db.query(new OSQLSynchQuery<Object>("select from Class0"));
Assert.assertEquals(result.size(), 0);
result = db.query(new OSQLSynchQuery<Object>("select from Class1"));
Assert.assertEquals(result.size(), 1);
ODocument item = result.get(0);
ODocument meta = item.field("meta");
Assert.assertEquals(meta.getClassName(), "Class0");
Assert.assertEquals(meta.field("ip"), "0:0:0:0:0:0:0:1");
} finally {
db.drop();
}
}
}