use of org.apache.geode.cache.query.Struct in project geode by apache.
the class NonDistinctOrderByTestImplementation method testOrderByForUndefined.
@Test
public void testOrderByForUndefined() throws Exception {
String[] queries = { // 0
"SELECT position1.secId FROM /test ORDER BY position1.secId", // 1
"SELECT position1.secId FROM /test ORDER BY position1.secId desc", // 2
"SELECT position1.secId FROM /test where ID > 0 ORDER BY position1.secId", // 3
"SELECT position1.secId FROM /test where ID > 0 ORDER BY position1.secId desc", // 4
"SELECT position1.secId, ID FROM /test ORDER BY position1.secId, ID", // 5
"SELECT position1.secId, ID FROM /test ORDER BY position1.secId desc, ID" };
Region r1 = this.createRegion("test", Portfolio.class);
for (int i = 0; i < 10; i++) {
Portfolio pf = new Portfolio(i);
if (i % 2 == 0) {
pf.position1 = null;
}
r1.put(i + "", pf);
}
QueryService qs = CacheUtils.getQueryService();
SelectResults[][] sr = new SelectResults[queries.length][2];
Object[] srArr = null;
for (int i = 0; i < queries.length; i++) {
try {
sr[i][0] = (SelectResults) qs.newQuery(queries[i]).execute();
srArr = sr[i][0].toArray();
if (i == 0) {
assertEquals("First result should be undefined for query " + queries[i], QueryService.UNDEFINED, srArr[0]);
} else if (i == 1) {
assertEquals("Last result should be undefined for query " + queries[i], QueryService.UNDEFINED, srArr[srArr.length - 1]);
} else if (i == 2) {
assertEquals("First result should be undefined for query " + queries[i], QueryService.UNDEFINED, srArr[0]);
} else if (i == 3) {
assertEquals("Last result should be undefined for query " + queries[i], QueryService.UNDEFINED, srArr[srArr.length - 1]);
} else if (i == 4) {
for (int j = 0; j < srArr.length / 2; j++) {
assertEquals("Undefined should have been returned for query " + queries[i], QueryService.UNDEFINED, ((Struct) srArr[j]).getFieldValues()[0]);
}
} else if (i == 5) {
for (int j = srArr.length - 1; j > srArr.length / 2; j--) {
assertEquals("Undefined should have been returned for query " + queries[i], QueryService.UNDEFINED, ((Struct) srArr[j]).getFieldValues()[0]);
}
}
} catch (Exception e) {
fail("Query execution failed for: " + queries[i] + " : " + e);
}
}
this.createIndex("secIndex", "position1.secId", r1.getFullPath());
this.createIndex("IDIndex", "ID", r1.getFullPath());
for (int i = 0; i < queries.length; i++) {
try {
sr[i][1] = (SelectResults) qs.newQuery(queries[i]).execute();
srArr = sr[i][1].toArray();
if (i == 0) {
assertEquals("First result should be undefined for query " + queries[i], QueryService.UNDEFINED, srArr[0]);
} else if (i == 1) {
assertEquals("Last result should be undefined for query " + queries[i], QueryService.UNDEFINED, srArr[srArr.length - 1]);
} else if (i == 2) {
assertEquals("First result should be undefined for query " + queries[i], QueryService.UNDEFINED, srArr[0]);
} else if (i == 3) {
assertEquals("Last result should be undefined for query " + queries[i], QueryService.UNDEFINED, srArr[srArr.length - 1]);
} else if (i == 4) {
for (int j = 0; j < srArr.length / 2; j++) {
assertEquals("Undefined should have been returned for query " + queries[i], QueryService.UNDEFINED, ((Struct) srArr[j]).getFieldValues()[0]);
}
} else if (i == 5) {
for (int j = srArr.length - 1; j > srArr.length / 2; j--) {
assertEquals("Undefined should have been returned for query " + queries[i], QueryService.UNDEFINED, ((Struct) srArr[j]).getFieldValues()[0]);
}
}
} catch (Exception e) {
e.printStackTrace();
fail("Query execution failed for: " + queries[i] + " : " + e);
}
}
CacheUtils.compareResultsOfWithAndWithoutIndex(sr);
}
use of org.apache.geode.cache.query.Struct in project geode by apache.
the class MiscJUnitTest method testBug32763.
@Ignore("TODO: test is disabled")
@Test
public void testBug32763() throws Exception {
Region region = CacheUtils.createRegion("pos", Portfolio.class);
region.put("0", new Portfolio(0));
region.put("1", new Portfolio(1));
region.put("2", new Portfolio(2));
region.put("3", new Portfolio(3));
QueryService qs = CacheUtils.getQueryService();
String qStr = "SELECT DISTINCT key: key, iD: entry.value.iD, secId: posnVal.secId FROM /pos.entries entry, entry.value.positions.values posnVal WHERE entry.value.\"type\" = 'type0' AND posnVal.secId = 'YHOO'";
Query q = qs.newQuery(qStr);
SelectResults result = (SelectResults) q.execute();
StructType type = (StructType) result.getCollectionType().getElementType();
String[] names = type.getFieldNames();
List list = result.asList();
if (list.size() < 1)
fail("Test failed as the resultset's size is zero");
for (int i = 0; i < list.size(); ++i) {
Struct stc = (Struct) list.get(i);
if (!stc.get(names[2]).equals("YHOO")) {
fail("Test failed as the SecID value is not YHOO");
}
}
}
use of org.apache.geode.cache.query.Struct in project geode by apache.
the class MiscJUnitTest method testBug37723.
@Test
public void testBug37723() throws Exception {
Region region = CacheUtils.createRegion("portfolios", Portfolio.class);
region.put("0", new Portfolio(0));
region.put("1", new Portfolio(1));
region.put("2", new Portfolio(2));
region.put("3", new Portfolio(3));
QueryService qs = CacheUtils.getQueryService();
String qry = "select distinct getID, status from /portfolios pf where getID < 10 order by getID desc";
Query q = qs.newQuery(qry);
SelectResults result = (SelectResults) q.execute();
Iterator itr = result.iterator();
int j = 3;
while (itr.hasNext()) {
Struct struct = (Struct) itr.next();
assertEquals(j--, ((Integer) struct.get("getID")).intValue());
}
qry = "select distinct getID, status from /portfolios pf where getID < 10 order by getID asc";
q = qs.newQuery(qry);
result = (SelectResults) q.execute();
itr = result.iterator();
j = 0;
while (itr.hasNext()) {
Struct struct = (Struct) itr.next();
assertEquals(j++, ((Integer) struct.get("getID")).intValue());
}
}
use of org.apache.geode.cache.query.Struct in project geode by apache.
the class AbstractIndex method compareStructWithNonStruct.
/**
* This method compares two objects in which one could be StructType and other ObjectType. Fur
* conditions are possible, Object1 -> Struct Object2-> Struct Object1 -> Struct Object2-> Object
* Object1 -> Object Object2-> Struct Object1 -> Object Object2-> Object
*
* @return true if valueInRegion's all objects are part of valueInIndex.
*/
private boolean compareStructWithNonStruct(Object valueInRegion, Object valueInIndex) {
if (valueInRegion instanceof Struct && valueInIndex instanceof Struct) {
Object[] regFields = ((StructImpl) valueInRegion).getFieldValues();
List indFields = Arrays.asList(((StructImpl) valueInIndex).getFieldValues());
for (Object regField : regFields) {
if (!indFields.contains(regField)) {
return false;
}
}
return true;
} else if (valueInRegion instanceof Struct) {
Object[] fields = ((StructImpl) valueInRegion).getFieldValues();
for (Object field : fields) {
if (field.equals(valueInIndex)) {
return true;
}
}
} else if (valueInIndex instanceof Struct) {
Object[] fields = ((StructImpl) valueInIndex).getFieldValues();
for (Object field : fields) {
if (field.equals(valueInRegion)) {
return true;
}
}
} else {
return valueInRegion.equals(valueInIndex);
}
return false;
}
use of org.apache.geode.cache.query.Struct in project geode by apache.
the class GroupByTestImpl method testAggregateFuncCountDistinctStar_1.
@Test
public void testAggregateFuncCountDistinctStar_1() throws Exception {
Region region = this.createRegion("portfolio", Portfolio.class);
for (int i = 1; i < 200; ++i) {
Portfolio pf = new Portfolio(i);
pf.shortID = (short) ((short) i % 5);
region.put("" + i, pf);
}
String queryStr = "select p.status as status, count(distinct p.shortID) as countt from /portfolio p where p.ID > 0 group by status ";
QueryService qs = CacheUtils.getQueryService();
Query query = qs.newQuery(queryStr);
CompiledSelect cs = ((DefaultQuery) query).getSelect();
SelectResults sr = (SelectResults) query.execute();
assertTrue(sr.getCollectionType().getElementType().isStructType());
assertEquals(2, sr.size());
Iterator iter = sr.iterator();
Region rgn = CacheUtils.getRegion("portfolio");
Set<Object> distinctShortIDActive = new HashSet<Object>();
Set<Object> distinctShortIDInactive = new HashSet<Object>();
int inactiveCount = 0;
for (Object o : rgn.values()) {
Portfolio pf = (Portfolio) o;
if (pf.status.equals("active")) {
distinctShortIDActive.add(pf.shortID);
} else if (pf.status.equals("inactive")) {
distinctShortIDInactive.add(pf.shortID);
} else {
fail("unexpected status");
}
}
while (iter.hasNext()) {
Struct struct = (Struct) iter.next();
StructType structType = struct.getStructType();
ObjectType[] fieldTypes = structType.getFieldTypes();
assertEquals("String", fieldTypes[0].getSimpleClassName());
assertEquals("Integer", fieldTypes[1].getSimpleClassName());
if (struct.get("status").equals("active")) {
assertEquals(distinctShortIDActive.size(), ((Integer) struct.get("countt")).intValue());
} else if (struct.get("status").equals("inactive")) {
assertEquals(distinctShortIDInactive.size(), ((Integer) struct.get("countt")).intValue());
} else {
fail("unexpected value of status");
}
}
ObjectType elementType = sr.getCollectionType().getElementType();
assertTrue(elementType.isStructType());
StructType structType = (StructType) elementType;
ObjectType[] fieldTypes = structType.getFieldTypes();
assertEquals("String", fieldTypes[0].getSimpleClassName());
assertEquals("Integer", fieldTypes[1].getSimpleClassName());
}
Aggregations