package com.orientechnologies.orient.core.sql;
import com.orientechnologies.orient.core.db.document.ODatabaseDocument;
import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.metadata.schema.OClass.INDEX_TYPE;
import com.orientechnologies.orient.core.metadata.schema.OType;
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.util.List;
import static org.testng.AssertJUnit.assertEquals;
public class TestOrderByIndexPropDesc {
private static final String DOCUMENT_CLASS_NAME = "MyDocument";
private static final String PROP_INDEXED_STRING = "dateProperty";
private ODatabaseDocument db;
@BeforeMethod
public void init() throws Exception {
db = new ODatabaseDocumentTx("memory:TestOrderByIndexPropDesc");
db.create();
OClass oclass = db.getMetadata().getSchema().createClass(DOCUMENT_CLASS_NAME);
oclass.createProperty(PROP_INDEXED_STRING, OType.INTEGER);
oclass.createIndex("index", INDEX_TYPE.NOTUNIQUE, PROP_INDEXED_STRING);
}
@AfterMethod
public void drop() {
if (db != null) {
db.drop();
}
}
@Test
public void worksFor1000() {
test(1000);
}
@Test
public void worksFor10000() {
test(50000);
}
private void test(int count) {
ODocument doc = db.newInstance();
for (int i = 0; i < count; i++) {
doc.reset();
doc.setClassName(DOCUMENT_CLASS_NAME);
doc.field(PROP_INDEXED_STRING, i);
db.save(doc);
}
List<ODocument> result = db.query(new OSQLSynchQuery<ODocument>("select from " + DOCUMENT_CLASS_NAME + " order by "
+ PROP_INDEXED_STRING + " desc"));
for (ODocument d : result) {
// System.out.println(d.<Integer>field(PROP_INDEXED_STRING));
}
assertEquals(count, result.size());
}
}