package com.orientechnologies.orient.test.database.auto;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.metadata.schema.OSchema;
import com.orientechnologies.orient.core.metadata.schema.OType;
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.orientechnologies.orient.core.sql.OCommandSQL;
import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;
@Test(groups = { "index" })
public class SQLSelectIndexReuseTest extends AbstractIndexReuseTest {
@Parameters(value = "url")
public SQLSelectIndexReuseTest(final String iURL) {
super(iURL);
}
@BeforeClass
public void beforeClass() throws Exception {
super.beforeClass();
if (database.isClosed()) {
database.open("admin", "admin");
}
final OSchema schema = database.getMetadata().getSchema();
final OClass oClass = schema.createClass("sqlSelectIndexReuseTestClass");
oClass.createProperty("prop1", OType.INTEGER);
oClass.createProperty("prop2", OType.INTEGER);
oClass.createProperty("prop3", OType.INTEGER);
oClass.createProperty("prop4", OType.INTEGER);
oClass.createProperty("prop5", OType.INTEGER);
oClass.createProperty("prop6", OType.INTEGER);
oClass.createProperty("prop7", OType.STRING);
oClass.createProperty("prop8", OType.INTEGER);
oClass.createProperty("prop9", OType.INTEGER);
oClass.createProperty("fEmbeddedMap", OType.EMBEDDEDMAP, OType.INTEGER);
oClass.createProperty("fEmbeddedMapTwo", OType.EMBEDDEDMAP, OType.INTEGER);
oClass.createProperty("fLinkMap", OType.LINKMAP);
oClass.createProperty("fEmbeddedList", OType.EMBEDDEDLIST, OType.INTEGER);
oClass.createProperty("fEmbeddedListTwo", OType.EMBEDDEDLIST, OType.INTEGER);
oClass.createProperty("fLinkList", OType.LINKLIST);
oClass.createProperty("fEmbeddedSet", OType.EMBEDDEDSET, OType.INTEGER);
oClass.createProperty("fEmbeddedSetTwo", OType.EMBEDDEDSET, OType.INTEGER);
oClass.createIndex("indexone", OClass.INDEX_TYPE.UNIQUE, "prop1", "prop2");
oClass.createIndex("indextwo", OClass.INDEX_TYPE.UNIQUE, "prop3");
oClass.createIndex("indexthree", OClass.INDEX_TYPE.NOTUNIQUE, "prop1", "prop2", "prop4");
oClass.createIndex("indexfour", OClass.INDEX_TYPE.NOTUNIQUE, "prop4", "prop1", "prop3");
oClass.createIndex("indexfive", OClass.INDEX_TYPE.NOTUNIQUE, "prop6", "prop1", "prop3");
oClass.createIndex("indexsix", OClass.INDEX_TYPE.FULLTEXT, "prop7");
oClass.createIndex("sqlSelectIndexReuseTestEmbeddedMapByKey", OClass.INDEX_TYPE.NOTUNIQUE, "fEmbeddedMap");
oClass.createIndex("sqlSelectIndexReuseTestEmbeddedMapByValue", OClass.INDEX_TYPE.NOTUNIQUE, "fEmbeddedMap by value");
oClass.createIndex("sqlSelectIndexReuseTestEmbeddedList", OClass.INDEX_TYPE.NOTUNIQUE, "fEmbeddedList");
oClass.createIndex("sqlSelectIndexReuseTestEmbeddedMapByKeyProp8", OClass.INDEX_TYPE.NOTUNIQUE, "fEmbeddedMapTwo", "prop8");
oClass.createIndex("sqlSelectIndexReuseTestEmbeddedMapByValueProp8", OClass.INDEX_TYPE.NOTUNIQUE, "fEmbeddedMapTwo by value",
"prop8");
oClass.createIndex("sqlSelectIndexReuseTestEmbeddedSetProp8", OClass.INDEX_TYPE.NOTUNIQUE, "fEmbeddedSetTwo", "prop8");
oClass.createIndex("sqlSelectIndexReuseTestProp9EmbeddedSetProp8", OClass.INDEX_TYPE.NOTUNIQUE, "prop9", "fEmbeddedSetTwo",
"prop8");
oClass.createIndex("sqlSelectIndexReuseTestEmbeddedListTwoProp8", OClass.INDEX_TYPE.NOTUNIQUE, "fEmbeddedListTwo", "prop8");
schema.save();
final String fullTextIndexStrings[] = { "Alice : What is the use of a book, without pictures or conversations?",
"Rabbit : Oh my ears and whiskers, how late it's getting!",
"Alice : If it had grown up, it would have made a dreadfully ugly child; but it makes rather a handsome pig, I think",
"The Cat : We're all mad here.", "The Hatter : Why is a raven like a writing desk?",
"The Hatter : Twinkle, twinkle, little bat! How I wonder what you're at.", "The Queen : Off with her head!",
"The Duchess : Tut, tut, child! Everything's got a moral, if only you can find it.",
"The Duchess : Take care of the sense, and the sounds will take care of themselves.",
"The King : Begin at the beginning and go on till you come to the end: then stop." };
for (int i = 0; i < 10; i++) {
final Map<String, Integer> embeddedMap = new HashMap<String, Integer>();
embeddedMap.put("key" + (i * 10 + 1), i * 10 + 1);
embeddedMap.put("key" + (i * 10 + 2), i * 10 + 2);
embeddedMap.put("key" + (i * 10 + 3), i * 10 + 3);
embeddedMap.put("key" + (i * 10 + 4), i * 10 + 1);
final List<Integer> embeddedList = new ArrayList<Integer>(3);
embeddedList.add(i * 3);
embeddedList.add(i * 3 + 1);
embeddedList.add(i * 3 + 2);
final Set<Integer> embeddedSet = new HashSet<Integer>();
embeddedSet.add(i * 10);
embeddedSet.add(i * 10 + 1);
embeddedSet.add(i * 10 + 2);
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument("sqlSelectIndexReuseTestClass");
document.field("prop1", i);
document.field("prop2", j);
document.field("prop3", i * 10 + j);
document.field("prop4", i);
document.field("prop5", i);
document.field("prop6", j);
document.field("prop7", fullTextIndexStrings[i]);
document.field("prop8", j);
document.field("prop9", j % 2);
document.field("fEmbeddedMap", embeddedMap);
document.field("fEmbeddedMapTwo", embeddedMap);
document.field("fEmbeddedList", embeddedList);
document.field("fEmbeddedListTwo", embeddedList);
document.field("fEmbeddedSet", embeddedSet);
document.field("fEmbeddedSetTwo", embeddedSet);
document.save();
}
}
database.close();
}
@AfterClass
public void afterClass() throws Exception {
if (database.isClosed()) {
database.open("admin", "admin");
}
database.command(new OCommandSQL("drop class sqlSelectIndexReuseTestClass")).execute();
database.getMetadata().getSchema().reload();
database.close();
super.afterClass();
}
@Test
public void testCompositeSearchEquals() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = 1 and prop2 = 2")).execute();
Assert.assertEquals(result.size(), 1);
final ODocument document = result.get(0);
Assert.assertEquals(document.<Integer> field("prop1").intValue(), 1);
Assert.assertEquals(document.<Integer> field("prop2").intValue(), 2);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchHasChainOperatorsEquals() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1.asInteger() = 1 and prop2 = 2"))
.execute();
Assert.assertEquals(result.size(), 1);
final ODocument document = result.get(0);
Assert.assertEquals(document.<Integer> field("prop1").intValue(), 1);
Assert.assertEquals(document.<Integer> field("prop2").intValue(), 2);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage);
}
@Test
public void testCompositeSearchEqualsOneField() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
long oldcompositeIndexUsed21 = profiler.getCounter("db.demo.query.compositeIndexUsed.2.1");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1)
oldcompositeIndexUsed2 = 0;
if (oldcompositeIndexUsed21 == -1)
oldcompositeIndexUsed21 = 0;
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = 1")).execute();
Assert.assertEquals(result.size(), 10);
for (int i = 0; i < 10; i++) {
final ODocument document = new ODocument();
document.field("prop1", 1);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2.1"), oldcompositeIndexUsed21 + 1);
}
@Test
public void testCompositeSearchEqualsOneFieldWithLimit() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
long oldcompositeIndexUsed21 = profiler.getCounter("db.demo.query.compositeIndexUsed.2.1");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1)
oldcompositeIndexUsed2 = 0;
if (oldcompositeIndexUsed21 == -1)
oldcompositeIndexUsed21 = 0;
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = 1 and prop3 = 18 limit 1"))
.execute();
Assert.assertEquals(result.size(), 1);
final ODocument document = new ODocument();
document.field("prop1", 1);
document.field("prop3", 18);
Assert.assertEquals(containsDocument(result, document), 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2.1"), oldcompositeIndexUsed21 + 1);
}
@Test
public void testCompositeSearchEqualsOneFieldMapIndexByKey() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
long oldcompositeIndexUsed21 = profiler.getCounter("db.demo.query.compositeIndexUsed.2.1");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1)
oldcompositeIndexUsed2 = 0;
if (oldcompositeIndexUsed21 == -1)
oldcompositeIndexUsed21 = 0;
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where fEmbeddedMapTwo containsKey 'key11'"))
.execute();
Assert.assertEquals(result.size(), 10);
final Map<String, Integer> embeddedMap = new HashMap<String, Integer>();
embeddedMap.put("key11", 11);
embeddedMap.put("key12", 12);
embeddedMap.put("key13", 13);
embeddedMap.put("key14", 11);
for (int i = 0; i < 10; i++) {
final ODocument document = new ODocument();
document.field("prop8", 1);
document.field("fEmbeddedMapTwo", embeddedMap);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2.1"), oldcompositeIndexUsed21 + 1);
}
@Test
public void testCompositeSearchEqualsMapIndexByKey() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
long oldcompositeIndexUsed22 = profiler.getCounter("db.demo.query.compositeIndexUsed.2.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
if (oldcompositeIndexUsed22 == -1)
oldcompositeIndexUsed22 = 0;
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass "
+ "where prop8 = 1 and fEmbeddedMapTwo containsKey 'key11'")).execute();
final Map<String, Integer> embeddedMap = new HashMap<String, Integer>();
embeddedMap.put("key11", 11);
embeddedMap.put("key12", 12);
embeddedMap.put("key13", 13);
embeddedMap.put("key14", 11);
Assert.assertEquals(result.size(), 1);
final ODocument document = new ODocument();
document.field("prop8", 1);
document.field("fEmbeddedMap", embeddedMap);
Assert.assertEquals(containsDocument(result, document), 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2.2"), oldcompositeIndexUsed22 + 1);
}
@Test
public void testCompositeSearchEqualsOneFieldMapIndexByValue() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
long oldcompositeIndexUsed21 = profiler.getCounter("db.demo.query.compositeIndexUsed.2.1");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
if (oldcompositeIndexUsed21 == -1) {
oldcompositeIndexUsed21 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass " + "where fEmbeddedMapTwo containsValue 22"))
.execute();
final Map<String, Integer> embeddedMap = new HashMap<String, Integer>();
embeddedMap.put("key21", 21);
embeddedMap.put("key22", 22);
embeddedMap.put("key23", 23);
embeddedMap.put("key24", 21);
Assert.assertEquals(result.size(), 10);
for (int i = 0; i < 10; i++) {
final ODocument document = new ODocument();
document.field("prop8", i);
document.field("fEmbeddedMapTwo", embeddedMap);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2.1"), oldcompositeIndexUsed21 + 1);
}
@Test
public void testCompositeSearchEqualsMapIndexByValue() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
long oldcompositeIndexUsed22 = profiler.getCounter("db.demo.query.compositeIndexUsed.2.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
if (oldcompositeIndexUsed22 == -1)
oldcompositeIndexUsed22 = 0;
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass "
+ "where prop8 = 1 and fEmbeddedMapTwo containsValue 22")).execute();
final Map<String, Integer> embeddedMap = new HashMap<String, Integer>();
embeddedMap.put("key21", 21);
embeddedMap.put("key22", 22);
embeddedMap.put("key23", 23);
embeddedMap.put("key24", 21);
Assert.assertEquals(result.size(), 1);
final ODocument document = new ODocument();
document.field("prop8", 1);
document.field("fEmbeddedMap", embeddedMap);
Assert.assertEquals(containsDocument(result, document), 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2.2"), oldcompositeIndexUsed22 + 1);
}
@Test
public void testCompositeSearchEqualsEmbeddedSetIndex() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
long oldcompositeIndexUsed22 = profiler.getCounter("db.demo.query.compositeIndexUsed.2.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
if (oldcompositeIndexUsed22 == -1)
oldcompositeIndexUsed22 = 0;
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass "
+ "where prop8 = 1 and fEmbeddedSetTwo contains 12")).execute();
final Set<Integer> embeddedSet = new HashSet<Integer>();
embeddedSet.add(10);
embeddedSet.add(11);
embeddedSet.add(12);
Assert.assertEquals(result.size(), 1);
final ODocument document = new ODocument();
document.field("prop8", 1);
document.field("fEmbeddedSet", embeddedSet);
Assert.assertEquals(containsDocument(result, document), 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2.2"), oldcompositeIndexUsed22 + 1);
}
@Test
public void testCompositeSearchEqualsEmbeddedSetInMiddleIndex() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
long oldcompositeIndexUsed3 = profiler.getCounter("db.demo.query.compositeIndexUsed.3");
long oldcompositeIndexUsed33 = profiler.getCounter("db.demo.query.compositeIndexUsed.3.3");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
if (oldcompositeIndexUsed3 == -1)
oldcompositeIndexUsed3 = 0;
if (oldcompositeIndexUsed33 == -1)
oldcompositeIndexUsed33 = 0;
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass "
+ "where prop9 = 0 and fEmbeddedSetTwo contains 92 and prop8 > 2")).execute();
final Set<Integer> embeddedSet = new HashSet<Integer>(3);
embeddedSet.add(90);
embeddedSet.add(91);
embeddedSet.add(92);
Assert.assertEquals(result.size(), 3);
for (int i = 0; i < 3; i++) {
final ODocument document = new ODocument();
document.field("prop8", i * 2 + 4);
document.field("prop9", 0);
document.field("fEmbeddedSet", embeddedSet);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.3"), oldcompositeIndexUsed3 + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.3.3"), oldcompositeIndexUsed33 + 1);
}
@Test
public void testCompositeSearchEqualsOneFieldEmbeddedListIndex() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
long oldcompositeIndexUsed21 = profiler.getCounter("db.demo.query.compositeIndexUsed.2.1");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1)
oldcompositeIndexUsed2 = 0;
if (oldcompositeIndexUsed21 == -1)
oldcompositeIndexUsed21 = 0;
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where fEmbeddedListTwo contains 4")).execute();
Assert.assertEquals(result.size(), 10);
final List<Integer> embeddedList = new ArrayList<Integer>(3);
embeddedList.add(3);
embeddedList.add(4);
embeddedList.add(5);
for (int i = 0; i < 10; i++) {
final ODocument document = new ODocument();
document.field("prop8", i);
document.field("fEmbeddedListTwo", embeddedList);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2.1"), oldcompositeIndexUsed21 + 1);
}
@Test
public void testCompositeSearchEqualsEmbeddedListIndex() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
long oldcompositeIndexUsed22 = profiler.getCounter("db.demo.query.compositeIndexUsed.2.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
if (oldcompositeIndexUsed22 == -1)
oldcompositeIndexUsed22 = 0;
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where"
+ " prop8 = 1 and fEmbeddedListTwo contains 4")).execute();
Assert.assertEquals(result.size(), 1);
final List<Integer> embeddedList = new ArrayList<Integer>(3);
embeddedList.add(3);
embeddedList.add(4);
embeddedList.add(5);
final ODocument document = new ODocument();
document.field("prop8", 1);
document.field("fEmbeddedListTwo", embeddedList);
Assert.assertEquals(containsDocument(result, document), 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2.2"), oldcompositeIndexUsed22 + 1);
}
@Test
public void testNoCompositeSearchEquals() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop2 = 1")).execute();
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage);
Assert.assertEquals(result.size(), 10);
for (int i = 0; i < 10; i++) {
final ODocument document = new ODocument();
document.field("prop1", i);
document.field("prop2", 1);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
@Test
public void testCompositeSearchEqualsWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = ? and prop2 = ?")).execute(1, 2);
Assert.assertEquals(result.size(), 1);
final ODocument document = result.get(0);
Assert.assertEquals(document.<Integer> field("prop1").intValue(), 1);
Assert.assertEquals(document.<Integer> field("prop2").intValue(), 2);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchEqualsOneFieldWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = ?")).execute(1);
Assert.assertEquals(result.size(), 10);
for (int i = 0; i < 10; i++) {
final ODocument document = new ODocument();
document.field("prop1", 1);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testNoCompositeSearchEqualsWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop2 = ?")).execute(1);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage);
Assert.assertEquals(result.size(), 10);
for (int i = 0; i < 10; i++) {
final ODocument document = new ODocument();
document.field("prop1", i);
document.field("prop2", 1);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
@Test
public void testCompositeSearchGT() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = 1 and prop2 > 2")).execute();
Assert.assertEquals(result.size(), 7);
for (int i = 3; i < 10; i++) {
final ODocument document = new ODocument();
document.field("prop1", 1);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchGTOneField() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 > 7")).execute();
Assert.assertEquals(result.size(), 20);
for (int i = 8; i < 10; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", i);
document.field("prop2", j);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchGTOneFieldNoSearch() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop2 > 7")).execute();
Assert.assertEquals(result.size(), 20);
for (int i = 8; i < 10; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", j);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage);
}
@Test
public void testCompositeSearchGTWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = ? and prop2 > ?")).execute(1, 2);
Assert.assertEquals(result.size(), 7);
for (int i = 3; i < 10; i++) {
final ODocument document = new ODocument();
document.field("prop1", 1);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchGTOneFieldWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 > ?")).execute(7);
Assert.assertEquals(result.size(), 20);
for (int i = 8; i < 10; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", i);
document.field("prop2", j);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchGTOneFieldNoSearchWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop2 > ?")).execute(7);
Assert.assertEquals(result.size(), 20);
for (int i = 8; i < 10; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", j);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage);
}
@Test
public void testCompositeSearchGTQ() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = 1 and prop2 >= 2")).execute();
Assert.assertEquals(result.size(), 8);
for (int i = 2; i < 10; i++) {
final ODocument document = new ODocument();
document.field("prop1", 1);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchGTQOneField() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 >= 7")).execute();
Assert.assertEquals(result.size(), 30);
for (int i = 7; i < 10; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", i);
document.field("prop2", j);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchGTQOneFieldNoSearch() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop2 >= 7")).execute();
Assert.assertEquals(result.size(), 30);
for (int i = 7; i < 10; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", j);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage);
}
@Test
public void testCompositeSearchGTQWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = ? and prop2 >= ?")).execute(1, 2);
Assert.assertEquals(result.size(), 8);
for (int i = 2; i < 10; i++) {
final ODocument document = new ODocument();
document.field("prop1", 1);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchGTQOneFieldWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 >= ?")).execute(7);
Assert.assertEquals(result.size(), 30);
for (int i = 7; i < 10; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", i);
document.field("prop2", j);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchGTQOneFieldNoSearchWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop2 >= ?")).execute(7);
Assert.assertEquals(result.size(), 30);
for (int i = 7; i < 10; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", j);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage);
}
@Test
public void testCompositeSearchLTQ() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = 1 and prop2 <= 2")).execute();
Assert.assertEquals(result.size(), 3);
for (int i = 0; i <= 2; i++) {
final ODocument document = new ODocument();
document.field("prop1", 1);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchLTQOneField() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 <= 7")).execute();
Assert.assertEquals(result.size(), 80);
for (int i = 0; i <= 7; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", i);
document.field("prop2", j);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchLTQOneFieldNoSearch() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop2 <= 7")).execute();
Assert.assertEquals(result.size(), 80);
for (int i = 0; i <= 7; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", j);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage);
}
@Test
public void testCompositeSearchLTQWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = ? and prop2 <= ?")).execute(1, 2);
Assert.assertEquals(result.size(), 3);
for (int i = 0; i <= 2; i++) {
final ODocument document = new ODocument();
document.field("prop1", 1);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchLTQOneFieldWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 <= ?")).execute(7);
Assert.assertEquals(result.size(), 80);
for (int i = 0; i <= 7; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", i);
document.field("prop2", j);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchLTQOneFieldNoSearchWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop2 <= ?")).execute(7);
Assert.assertEquals(result.size(), 80);
for (int i = 0; i <= 7; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", j);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage);
}
@Test
public void testCompositeSearchLT() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = 1 and prop2 < 2")).execute();
Assert.assertEquals(result.size(), 2);
for (int i = 0; i < 2; i++) {
final ODocument document = new ODocument();
document.field("prop1", 1);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchLTOneField() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 < 7")).execute();
Assert.assertEquals(result.size(), 70);
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", i);
document.field("prop2", j);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchLTOneFieldNoSearch() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop2 < 7")).execute();
Assert.assertEquals(result.size(), 70);
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", j);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage);
}
@Test
public void testCompositeSearchLTWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = ? and prop2 < ?")).execute(1, 2);
Assert.assertEquals(result.size(), 2);
for (int i = 0; i < 2; i++) {
final ODocument document = new ODocument();
document.field("prop1", 1);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchLTOneFieldWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 < ?")).execute(7);
Assert.assertEquals(result.size(), 70);
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", i);
document.field("prop2", j);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchLTOneFieldNoSearchWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop2 < ?")).execute(7);
Assert.assertEquals(result.size(), 70);
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", j);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage);
}
@Test
public void testCompositeSearchBetween() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = 1 and prop2 between 1 and 3"))
.execute();
Assert.assertEquals(result.size(), 3);
for (int i = 1; i <= 3; i++) {
final ODocument document = new ODocument();
document.field("prop1", 1);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchBetweenOneField() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 between 1 and 3")).execute();
Assert.assertEquals(result.size(), 30);
for (int i = 1; i <= 3; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", i);
document.field("prop2", j);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchBetweenOneFieldNoSearch() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop2 between 1 and 3")).execute();
Assert.assertEquals(result.size(), 30);
for (int i = 1; i <= 3; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", j);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage);
}
@Test
public void testCompositeSearchBetweenWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = 1 and prop2 between ? and ?"))
.execute(1, 3);
Assert.assertEquals(result.size(), 3);
for (int i = 1; i <= 3; i++) {
final ODocument document = new ODocument();
document.field("prop1", 1);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchBetweenOneFieldWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 between ? and ?")).execute(1, 3);
Assert.assertEquals(result.size(), 30);
for (int i = 1; i <= 3; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", i);
document.field("prop2", j);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCompositeSearchBetweenOneFieldNoSearchWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop2 between ? and ?")).execute(1, 3);
Assert.assertEquals(result.size(), 30);
for (int i = 1; i <= 3; i++) {
for (int j = 0; j < 10; j++) {
final ODocument document = new ODocument();
document.field("prop1", j);
document.field("prop2", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage);
}
@Test
public void testSingleSearchEquals() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop3 = 1")).execute();
Assert.assertEquals(result.size(), 1);
final ODocument document = result.get(0);
Assert.assertEquals(document.<Integer> field("prop3").intValue(), 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
}
@Test
public void testSingleSearchEqualsWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop3 = ?")).execute(1);
Assert.assertEquals(result.size(), 1);
final ODocument document = result.get(0);
Assert.assertEquals(document.<Integer> field("prop3").intValue(), 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
}
@Test
public void testSingleSearchGT() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop3 > 90")).execute();
Assert.assertEquals(result.size(), 9);
for (int i = 91; i < 100; i++) {
final ODocument document = new ODocument();
document.field("prop3", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
}
@Test
public void testSingleSearchGTWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop3 > ?")).execute(90);
Assert.assertEquals(result.size(), 9);
for (int i = 91; i < 100; i++) {
final ODocument document = new ODocument();
document.field("prop3", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
}
@Test
public void testSingleSearchGTQ() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop3 >= 90")).execute();
Assert.assertEquals(result.size(), 10);
for (int i = 90; i < 100; i++) {
final ODocument document = new ODocument();
document.field("prop3", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
}
@Test
public void testSingleSearchGTQWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop3 >= ?")).execute(90);
Assert.assertEquals(result.size(), 10);
for (int i = 90; i < 100; i++) {
final ODocument document = new ODocument();
document.field("prop3", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
}
@Test
public void testSingleSearchLTQ() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop3 <= 10")).execute();
Assert.assertEquals(result.size(), 11);
for (int i = 0; i <= 10; i++) {
final ODocument document = new ODocument();
document.field("prop3", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
}
@Test
public void testSingleSearchLTQWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop3 <= ?")).execute(10);
Assert.assertEquals(result.size(), 11);
for (int i = 0; i <= 10; i++) {
final ODocument document = new ODocument();
document.field("prop3", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
}
@Test
public void testSingleSearchLT() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop3 < 10")).execute();
Assert.assertEquals(result.size(), 10);
for (int i = 0; i < 10; i++) {
final ODocument document = new ODocument();
document.field("prop3", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
}
@Test
public void testSingleSearchLTWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop3 < ?")).execute(10);
Assert.assertEquals(result.size(), 10);
for (int i = 0; i < 10; i++) {
final ODocument document = new ODocument();
document.field("prop3", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
}
@Test
public void testSingleSearchBetween() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop3 between 1 and 10")).execute();
Assert.assertEquals(result.size(), 10);
for (int i = 1; i <= 10; i++) {
final ODocument document = new ODocument();
document.field("prop3", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
}
@Test
public void testSingleSearchBetweenWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop3 between ? and ?")).execute(1, 10);
Assert.assertEquals(result.size(), 10);
for (int i = 1; i <= 10; i++) {
final ODocument document = new ODocument();
document.field("prop3", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
}
@Test
public void testSingleSearchIN() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop3 in [0, 5, 10]")).execute();
Assert.assertEquals(result.size(), 3);
for (int i = 0; i <= 10; i += 5) {
final ODocument document = new ODocument();
document.field("prop3", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
}
@Test
public void testSingleSearchINWithArgs() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop3 in [?, ?, ?]")).execute(0, 5, 10);
Assert.assertEquals(result.size(), 3);
for (int i = 0; i <= 10; i += 5) {
final ODocument document = new ODocument();
document.field("prop3", i);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
}
@Test
public void testMostSpecificOnesProcessedFirst() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = 1 and prop2 = 1 and prop3 = 11"))
.execute();
Assert.assertEquals(result.size(), 1);
final ODocument document = result.get(0);
Assert.assertEquals(document.<Integer> field("prop1").intValue(), 1);
Assert.assertEquals(document.<Integer> field("prop2").intValue(), 1);
Assert.assertEquals(document.<Integer> field("prop3").intValue(), 11);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testTripleSearch() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed3 = profiler.getCounter("db.demo.query.compositeIndexUsed.3");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed3 == -1) {
oldcompositeIndexUsed3 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = 1 and prop2 = 1 and prop4 >= 1"))
.execute();
Assert.assertEquals(result.size(), 1);
final ODocument document = result.get(0);
Assert.assertEquals(document.<Integer> field("prop1").intValue(), 1);
Assert.assertEquals(document.<Integer> field("prop2").intValue(), 1);
Assert.assertEquals(document.<Integer> field("prop4").intValue(), 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.3"), oldcompositeIndexUsed3 + 1);
}
@Test
public void testTripleSearchLastFieldNotInIndexFirstCase() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = 1 and prop2 = 1 and prop5 >= 1"))
.execute();
Assert.assertEquals(result.size(), 1);
final ODocument document = result.get(0);
Assert.assertEquals(document.<Integer> field("prop1").intValue(), 1);
Assert.assertEquals(document.<Integer> field("prop2").intValue(), 1);
Assert.assertEquals(document.<Integer> field("prop5").intValue(), 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testTripleSearchLastFieldNotInIndexSecondCase() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = 1 and prop4 >= 1")).execute();
Assert.assertEquals(result.size(), 10);
for (int i = 0; i < 10; i++) {
final ODocument document = new ODocument();
document.field("prop1", 1);
document.field("prop2", i);
document.field("prop4", 1);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testTripleSearchLastFieldInIndex() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed3 = profiler.getCounter("db.demo.query.compositeIndexUsed.3");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed3 == -1) {
oldcompositeIndexUsed3 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = 1 and prop4 = 1")).execute();
Assert.assertEquals(result.size(), 10);
for (int i = 0; i < 10; i++) {
final ODocument document = new ODocument();
document.field("prop1", 1);
document.field("prop2", i);
document.field("prop4", 1);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.3"), oldcompositeIndexUsed3 + 1);
}
@Test
public void testTripleSearchLastFieldsCanNotBeMerged() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed3 = profiler.getCounter("db.demo.query.compositeIndexUsed.3");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed3 == -1) {
oldcompositeIndexUsed3 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop6 <= 1 and prop4 < 1")).execute();
Assert.assertEquals(result.size(), 2);
for (int i = 0; i < 2; i++) {
final ODocument document = new ODocument();
document.field("prop6", i);
document.field("prop4", 0);
Assert.assertEquals(containsDocument(result, document), 1);
}
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.3"), oldcompositeIndexUsed3 + 1);
}
@Test
public void testFullTextIndex() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop7 containstext 'Alice' ")).execute();
Assert.assertEquals(result.size(), 20);
final ODocument docOne = new ODocument();
docOne.field("prop7", "Alice : What is the use of a book, without pictures or conversations?");
Assert.assertEquals(containsDocument(result, docOne), 10);
final ODocument docTwo = new ODocument();
docTwo.field("prop7",
"Alice : If it had grown up, it would have made a dreadfully ugly child; but it makes rather a handsome pig, I think");
Assert.assertEquals(containsDocument(result, docTwo), 10);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
}
@Test
public void testLastFieldNotCompatibleOperator() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = 1 and prop2 + 1 = 3")).execute();
Assert.assertEquals(result.size(), 1);
final ODocument document = result.get(0);
Assert.assertEquals(document.<Integer> field("prop1").intValue(), 1);
Assert.assertEquals(document.<Integer> field("prop2").intValue(), 2);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testEmbeddedMapByKeyIndexReuse() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where fEmbeddedMap containskey 'key12'"))
.execute();
Assert.assertEquals(result.size(), 10);
final ODocument document = new ODocument();
final Map<String, Integer> embeddedMap = new HashMap<String, Integer>();
embeddedMap.put("key11", 11);
embeddedMap.put("key12", 12);
embeddedMap.put("key13", 13);
embeddedMap.put("key14", 11);
document.field("fEmbeddedMap", embeddedMap);
Assert.assertEquals(containsDocument(result, document), 10);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2);
}
@Test
public void testEmbeddedMapBySpecificKeyIndexReuse() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
final List<ODocument> result = database
.command(
new OSQLSynchQuery<ODocument>(
"select * from sqlSelectIndexReuseTestClass where ( fEmbeddedMap containskey 'key12' ) and ( fEmbeddedMap['key12'] = 12 )"))
.execute();
Assert.assertEquals(result.size(), 10);
final ODocument document = new ODocument();
final Map<String, Integer> embeddedMap = new HashMap<String, Integer>();
embeddedMap.put("key11", 11);
embeddedMap.put("key12", 12);
embeddedMap.put("key13", 13);
embeddedMap.put("key14", 11);
document.field("fEmbeddedMap", embeddedMap);
Assert.assertEquals(containsDocument(result, document), 10);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2);
}
@Test
public void testEmbeddedMapByValueIndexReuse() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where fEmbeddedMap containsvalue 11")).execute();
Assert.assertEquals(result.size(), 10);
final ODocument document = new ODocument();
final Map<String, Integer> embeddedMap = new HashMap<String, Integer>();
embeddedMap.put("key11", 11);
embeddedMap.put("key12", 12);
embeddedMap.put("key13", 13);
embeddedMap.put("key14", 11);
document.field("fEmbeddedMap", embeddedMap);
Assert.assertEquals(containsDocument(result, document), 10);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2);
}
@Test
public void testEmbeddedListIndexReuse() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where fEmbeddedList contains 7")).execute();
final List<Integer> embeddedList = new ArrayList<Integer>(3);
embeddedList.add(6);
embeddedList.add(7);
embeddedList.add(8);
final ODocument document = new ODocument();
document.field("fEmbeddedList", embeddedList);
Assert.assertEquals(containsDocument(result, document), 10);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2);
}
@Test
public void testNotIndexOperatorFirstCase() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>(
"select * from sqlSelectIndexReuseTestClass where prop1 = 1 and prop2 = 2 and ( prop4 = 3 or prop4 = 1 )")).execute();
Assert.assertEquals(result.size(), 1);
final ODocument document = result.get(0);
Assert.assertEquals(document.<Integer> field("prop1").intValue(), 1);
Assert.assertEquals(document.<Integer> field("prop2").intValue(), 2);
Assert.assertEquals(document.<Integer> field("prop4").intValue(), 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testNotIndexOperatorSecondCase() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>(
"select * from sqlSelectIndexReuseTestClass where ( prop1 = 1 and prop2 = 2 ) or ( prop4 = 1 and prop6 = 2 )"))
.execute();
Assert.assertEquals(result.size(), 1);
final ODocument document = result.get(0);
Assert.assertEquals(document.<Integer> field("prop1").intValue(), 1);
Assert.assertEquals(document.<Integer> field("prop2").intValue(), 2);
Assert.assertEquals(document.<Integer> field("prop4").intValue(), 1);
Assert.assertEquals(document.<Integer> field("prop6").intValue(), 2);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage);
}
private int containsDocument(final List<ODocument> docList, final ODocument document) {
int count = 0;
for (final ODocument docItem : docList) {
boolean containsAllFields = true;
for (final String fieldName : document.fieldNames()) {
if (!document.<Object> field(fieldName).equals(docItem.<Object> field(fieldName))) {
containsAllFields = false;
break;
}
}
if (containsAllFields) {
count++;
}
}
return count;
}
@Test
public void testCompositeIndexEmptyResult() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
if (oldIndexUsage == -1) {
oldIndexUsage = 0;
}
if (oldcompositeIndexUsed == -1) {
oldcompositeIndexUsed = 0;
}
if (oldcompositeIndexUsed2 == -1) {
oldcompositeIndexUsed2 = 0;
}
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestClass where prop1 = 1777 and prop2 = 2777")).execute();
Assert.assertEquals(result.size(), 0);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testReuseOfIndexOnSeveralClassesFields() {
final OSchema schema = database.getMetadata().getSchema();
final OClass superClass = schema.createClass("sqlSelectIndexReuseTestSuperClass");
superClass.createProperty("prop0", OType.INTEGER);
final OClass oClass = schema.createClass("sqlSelectIndexReuseTestChildClass", superClass);
oClass.createProperty("prop1", OType.INTEGER);
oClass.createIndex("sqlSelectIndexReuseTestOnPropertiesFromClassAndSuperclass", OClass.INDEX_TYPE.UNIQUE, "prop0", "prop1");
schema.save();
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
long oldcompositeIndexUsed2 = profiler.getCounter("db.demo.query.compositeIndexUsed.2");
final ODocument docOne = new ODocument("sqlSelectIndexReuseTestChildClass");
docOne.field("prop0", 0);
docOne.field("prop1", 1);
docOne.save();
final ODocument docTwo = new ODocument("sqlSelectIndexReuseTestChildClass");
docTwo.field("prop0", 2);
docTwo.field("prop1", 3);
docTwo.save();
final List<ODocument> result = database.command(
new OSQLSynchQuery<ODocument>("select * from sqlSelectIndexReuseTestChildClass where prop0 = 0 and prop1 = 1")).execute();
Assert.assertEquals(result.size(), 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed.2"), oldcompositeIndexUsed2 + 1);
}
@Test
public void testCountFunctionWithNotUniqueIndex() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
OClass klazz = database.getMetadata().getSchema().getOrCreateClass("CountFunctionWithNotUniqueIndexTest");
if (!klazz.existsProperty("a")) {
klazz.createProperty("a", OType.STRING);
klazz.createIndex("a", "NOTUNIQUE", "a");
}
database.newInstance("CountFunctionWithNotUniqueIndexTest").field("a", "a").field("b", "b").save();
database.newInstance("CountFunctionWithNotUniqueIndexTest").field("a", "a").field("b", "b").save();
database.newInstance("CountFunctionWithNotUniqueIndexTest").field("a", "a").field("b", "e").save();
database.newInstance("CountFunctionWithNotUniqueIndexTest").field("a", "c").field("b", "c").save();
ODocument result = (ODocument) database.query(
new OSQLSynchQuery<ODocument>("select count(*) from CountFunctionWithNotUniqueIndexTest where a = 'a' and b = 'c'")).get(0);
Assert.assertEquals(result.field("count", Long.class), 0l);
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
}
@Test
public void testCountFunctionWithUniqueIndex() {
long oldIndexUsage = profiler.getCounter("db.demo.query.indexUsed");
long oldcompositeIndexUsed = profiler.getCounter("db.demo.query.compositeIndexUsed");
OClass klazz = database.getMetadata().getSchema().getOrCreateClass("CountFunctionWithUniqueIndexTest");
if (!klazz.existsProperty("a")) {
klazz.createProperty("a", OType.STRING);
klazz.createIndex("testCountFunctionWithUniqueIndex", "NOTUNIQUE", "a");
}
database.newInstance("CountFunctionWithUniqueIndexTest").field("a", "a").field("b", "c").save();
database.newInstance("CountFunctionWithUniqueIndexTest").field("a", "a").field("b", "c").save();
database.newInstance("CountFunctionWithUniqueIndexTest").field("a", "a").field("b", "e").save();
ODocument doc = database.newInstance("CountFunctionWithUniqueIndexTest").field("a", "a").field("b", "b").save();
ODocument result = (ODocument) database.query(
new OSQLSynchQuery<ODocument>("select count(*) from CountFunctionWithUniqueIndexTest where a = 'a' and b = 'c'")).get(0);
Assert.assertEquals(result.field("count", Long.class), 2l);
doc.delete();
Assert.assertEquals(profiler.getCounter("db.demo.query.indexUsed"), oldIndexUsage + 1);
Assert.assertEquals(profiler.getCounter("db.demo.query.compositeIndexUsed"), oldcompositeIndexUsed);
}
}