blob: 3e82e57eeaeed9ec67958fed5f181606a10e1155 [file] [log] [blame]
package com.gemstone.gemfire.cache.query.functional;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import java.util.List;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import com.gemstone.gemfire.cache.AttributesFactory;
import com.gemstone.gemfire.cache.PartitionAttributesFactory;
import com.gemstone.gemfire.cache.Region;
import com.gemstone.gemfire.cache.query.CacheUtils;
import com.gemstone.gemfire.cache.query.Index;
import com.gemstone.gemfire.cache.query.IndexExistsException;
import com.gemstone.gemfire.cache.query.IndexInvalidException;
import com.gemstone.gemfire.cache.query.IndexNameConflictException;
import com.gemstone.gemfire.cache.query.IndexType;
import com.gemstone.gemfire.cache.query.Query;
import com.gemstone.gemfire.cache.query.QueryService;
import com.gemstone.gemfire.cache.query.RegionNotFoundException;
import com.gemstone.gemfire.cache.query.SelectResults;
import com.gemstone.gemfire.cache.query.Struct;
import com.gemstone.gemfire.cache.query.data.Portfolio;
import com.gemstone.gemfire.cache.query.data.Position;
import com.gemstone.gemfire.cache.query.dunit.QueryUsingPoolDUnitTest.TestObject;
import com.gemstone.gemfire.cache.query.internal.QueryObserverHolder;
import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
/**
*
* @author ashahid
*
*/
@Category(IntegrationTest.class)
public class OrderByPartitionedJUnitTest extends OrderByTestImplementation {
@Override
public Region createRegion(String regionName, Class valueConstraint) {
PartitionAttributesFactory paf = new PartitionAttributesFactory();
AttributesFactory af = new AttributesFactory();
af.setPartitionAttributes(paf.create());
af.setValueConstraint(valueConstraint);
Region r1 = CacheUtils.createRegion(regionName, af.create(), false);
return r1;
}
@Override
public Index createIndex(String indexName, IndexType indexType,
String indexedExpression, String fromClause)
throws IndexInvalidException, IndexNameConflictException,
IndexExistsException, RegionNotFoundException, UnsupportedOperationException {
return CacheUtils.getQueryService().createIndex(indexName, indexType, indexedExpression,
fromClause);
}
@Override
public Index createIndex(String indexName, String indexedExpression,
String regionPath) throws IndexInvalidException,
IndexNameConflictException, IndexExistsException,
RegionNotFoundException, UnsupportedOperationException {
return CacheUtils.getQueryService().createIndex(indexName, indexedExpression, regionPath);
}
@Override
public boolean assertIndexUsedOnQueryNode() {
return true;
}
// Asif: This test to me does not make sense as the bind parameter should be a
// constant
@Test
public void testBug() throws Exception {
// String queries[] =
// {"SELECT DISTINCT * FROM /test WHERE id < $1 ORDER BY $2" };
String queries[] = { "SELECT DISTINCT * FROM /test WHERE id < $1 ORDER BY id" };
Object r[][] = new Object[queries.length][2];
QueryService qs;
qs = CacheUtils.getQueryService();
Position.resetCounter();
// Create Regions
PartitionAttributesFactory paf = new PartitionAttributesFactory();
AttributesFactory af = new AttributesFactory();
// af.setPartitionAttributes(paf.create());
Region r1 = CacheUtils.createRegion("test", af.create(), false);
for (int i = 0; i < 100; i++) {
r1.put("key-" + i, new TestObject(i, "ibm"));
}
// Execute Queries without Indexes
for (int i = 0; i < queries.length; i++) {
Query q = null;
try {
q = CacheUtils.getQueryService().newQuery(queries[i]);
CacheUtils.getLogger().info("Executing query: " + queries[i]);
// r[i][0] = q.execute(new Object[]{new Integer(101),"id"});
r[i][0] = q.execute(new Object[] { new Integer(101) });
assertEquals(100, ((SelectResults) r[i][0]).size());
} catch (Exception e) {
e.printStackTrace();
fail(q.getQueryString());
}
}
}
@Test
public void testOrderedResultsPartitionedRegion_Bug43514_1() throws Exception {
String queries[] = {
// Test case No. IUMR021
"select distinct * from /portfolio1 p order by status, ID desc",
"select distinct * from /portfolio1 p, p.positions.values val order by p.ID, val.secId desc",
"select distinct p.status from /portfolio1 p order by p.status",
"select distinct status, ID from /portfolio1 order by status, ID",
"select distinct p.status, p.ID from /portfolio1 p order by p.status, p.ID",
"select distinct key.ID from /portfolio1.keys key order by key.ID",
"select distinct key.ID, key.status from /portfolio1.keys key order by key.status, key.ID",
"select distinct key.ID, key.status from /portfolio1.keys key order by key.status desc, key.ID",
"select distinct key.ID, key.status from /portfolio1.keys key order by key.status, key.ID desc",
"select distinct p.status, p.ID from /portfolio1 p order by p.status asc, p.ID",
"select distinct p.ID, p.status from /portfolio1 p order by p.ID desc, p.status asc",
"select distinct p.ID from /portfolio1 p, p.positions.values order by p.ID",
"select distinct p.ID, p.status from /portfolio1 p, p.positions.values order by p.status, p.ID",
"select distinct pos.secId from /portfolio1 p, p.positions.values pos order by pos.secId",
"select distinct p.ID, pos.secId from /portfolio1 p, p.positions.values pos order by pos.secId, p.ID",
"select distinct p.iD from /portfolio1 p order by p.iD",
"select distinct p.iD, p.status from /portfolio1 p order by p.iD",
"select distinct iD, status from /portfolio1 order by iD",
"select distinct p.getID() from /portfolio1 p order by p.getID()",
"select distinct p.names[1] from /portfolio1 p order by p.names[1]",
"select distinct p.position1.secId, p.ID from /portfolio1 p order by p.position1.secId desc, p.ID",
"select distinct p.ID, p.position1.secId from /portfolio1 p order by p.position1.secId, p.ID",
"select distinct e.key.ID from /portfolio1.entries e order by e.key.ID",
"select distinct e.key.ID, e.value.status from /portfolio1.entries e order by e.key.ID",
"select distinct e.key.ID, e.value.status from /portfolio1.entrySet e order by e.key.ID desc , e.value.status desc",
"select distinct e.key, e.value from /portfolio1.entrySet e order by e.key.ID, e.value.status desc",
"select distinct e.key from /portfolio1.entrySet e order by e.key.ID desc, e.key.pkid desc",
"select distinct p.ID, pos.secId from /portfolio1 p, p.positions.values pos order by p.ID, pos.secId",
"select distinct p.ID, pos.secId from /portfolio1 p, p.positions.values pos order by p.ID desc, pos.secId desc",
"select distinct p.ID, pos.secId from /portfolio1 p, p.positions.values pos order by p.ID desc, pos.secId",
};
Object r[][] = new Object[queries.length][2];
QueryService qs;
qs = CacheUtils.getQueryService();
Position.resetCounter();
// Create Regions
PartitionAttributesFactory paf = new PartitionAttributesFactory();
AttributesFactory af = new AttributesFactory();
af.setPartitionAttributes(paf.create());
Region r1 = CacheUtils.createRegion("portfolio1", af.create(), false);
for (int i = 0; i < 50; i++) {
r1.put(new Portfolio(i), new Portfolio(i));
}
// Execute Queries without Indexes
for (int i = 0; i < queries.length; i++) {
Query q = null;
try {
CacheUtils.getLogger().info("Executing query: " + queries[i]);
q = CacheUtils.getQueryService().newQuery(queries[i]);
// CacheUtils.getLogger().info("Executing query: " + queries[i]);
r[i][0] = q.execute();
} catch (Exception e) {
e.printStackTrace();
fail(q.getQueryString());
}
}
// Create Indexes
this.createIndex("i1", IndexType.FUNCTIONAL, "p.status", "/portfolio1 p");
this.createIndex("i2", IndexType.FUNCTIONAL, "p.ID", "/portfolio1 p");
this.createIndex("i3", IndexType.FUNCTIONAL, "p.position1.secId",
"/portfolio1 p");
this.createIndex("i4", IndexType.FUNCTIONAL, "key.ID", "/portfolio1.keys key");
this.createIndex("i5", IndexType.FUNCTIONAL, "key.status",
"/portfolio1.keys key");
// Execute Queries with Indexes
for (int i = 0; i < queries.length; i++) {
Query q = null;
try {
q = CacheUtils.getQueryService().newQuery(queries[i]);
CacheUtils.getLogger().info("Executing query: " + queries[i]);
QueryObserverImpl observer = new QueryObserverImpl();
QueryObserverHolder.setInstance(observer);
r[i][1] = q.execute();
} catch (Exception e) {
e.printStackTrace();
fail(q.getQueryString());
}
}
StructSetOrResultsSet ssOrrs = new StructSetOrResultsSet();
ssOrrs.CompareQueryResultsWithoutAndWithIndexes(r, queries.length, true,
queries);
}
@Test
public void testOrderedResultsPartitionedRegion_Bug43514_2() throws Exception {
String queries[] = {
// Test case No. IUMR021
"select distinct status as st from /portfolio1 where ID > 0 order by status",
"select distinct p.status as st from /portfolio1 p where ID > 0 and status = 'inactive' order by p.status",
"select distinct p.position1.secId as st from /portfolio1 p where p.ID > 0 and p.position1.secId != 'IBM' order by p.position1.secId",
"select distinct key.status as st from /portfolio1 key where key.ID > 5 order by key.status",
"select distinct key.ID,key.status as st from /portfolio1 key where key.status = 'inactive' order by key.status desc, key.ID",
"select distinct status, ID from /portfolio1 order by status",
"select distinct p.status, p.ID from /portfolio1 p order by p.status",
"select distinct p.position1.secId, p.ID from /portfolio1 p order by p.position1.secId",
"select distinct p.status, p.ID from /portfolio1 p order by p.status asc, p.ID",
"select distinct p.ID from /portfolio1 p, p.positions.values order by p.ID",
"select distinct * from /portfolio1 p, p.positions.values order by p.ID",
"select distinct p.iD, p.status from /portfolio1 p order by p.iD",
"select distinct iD, status from /portfolio1 order by iD",
"select distinct * from /portfolio1 p order by p.getID()",
"select distinct * from /portfolio1 p order by p.getP1().secId",
"select distinct p.position1.secId as st from /portfolio1 p order by p.position1.secId",
"select distinct p, pos from /portfolio1 p, p.positions.values pos order by p.ID",
"select distinct p, pos from /portfolio1 p, p.positions.values pos order by pos.secId",
"select distinct status from /portfolio1 where ID > 0 order by status",
"select distinct p.status as st from /portfolio1 p where ID > 0 and status = 'inactive' order by p.status",
"select distinct p.position1.secId as st from /portfolio1 p where p.ID > 0 and p.position1.secId != 'IBM' order by p.position1.secId"
};
Object r[][] = new Object[queries.length][2];
QueryService qs;
qs = CacheUtils.getQueryService();
Position.resetCounter();
// Create Regions
PartitionAttributesFactory paf = new PartitionAttributesFactory();
AttributesFactory af = new AttributesFactory();
af.setPartitionAttributes(paf.create());
Region r1 = CacheUtils.createRegion("portfolio1", af.create(), false);
for (int i = 0; i < 50; i++) {
r1.put(i + "", new Portfolio(i));
}
// Execute Queries without Indexes
for (int i = 0; i < queries.length; i++) {
Query q = null;
try {
q = CacheUtils.getQueryService().newQuery(queries[i]);
CacheUtils.getLogger().info("Executing query: " + queries[i]);
r[i][0] = q.execute();
} catch (Exception e) {
e.printStackTrace();
fail(q.getQueryString());
}
}
// Create Indexes
this.createIndex("i1", IndexType.FUNCTIONAL, "p.status", "/portfolio1 p");
this.createIndex("i2", IndexType.FUNCTIONAL, "p.ID", "/portfolio1 p");
this.createIndex("i3", IndexType.FUNCTIONAL, "p.position1.secId",
"/portfolio1 p");
// Execute Queries with Indexes
for (int i = 0; i < queries.length; i++) {
Query q = null;
try {
q = CacheUtils.getQueryService().newQuery(queries[i]);
CacheUtils.getLogger().info("Executing query: " + queries[i]);
QueryObserverImpl observer = new QueryObserverImpl();
QueryObserverHolder.setInstance(observer);
r[i][1] = q.execute();
} catch (Exception e) {
e.printStackTrace();
fail(q.getQueryString());
}
}
StructSetOrResultsSet ssOrrs = new StructSetOrResultsSet();
ssOrrs.CompareQueryResultsWithoutAndWithIndexes(r, queries.length, true,
queries);
}
@Test
public void testOrderByWithNullValues() throws Exception {
// IN ORDER BY NULL values are treated as smallest. E.g For an ascending order by field
// its null values are reported first and then the values in ascending order.
String queries[] = getQueriesForOrderByWithNullValues();
Object r[][] = new Object[queries.length][2];
QueryService qs;
qs = CacheUtils.getQueryService();
// Create Regions
final int size = 9;
final int numNullValues = 3;
Region r1 = createRegion("portfolio1", Portfolio.class);
for (int i = 1; i <= size; i++) {
Portfolio pf = new Portfolio(i);
// Add numNullValues null values.
if(i <= numNullValues) {
pf.pkid = null;
pf.status = "a" + i;
}
r1.put(i + "", pf);
}
Query q = null;
SelectResults results = null;
List list = null;
String str = "";
try {
// Query 0 - null values are first in the order.
str = queries[0];
q = CacheUtils.getQueryService().newQuery(str);
CacheUtils.getLogger().info("Executing query: " + str);
results = (SelectResults)q.execute();
r[0][0] = results;
list = results.asList();
for (int i = 1; i <= size; i++) {
Portfolio p = (Portfolio)list.get((i-1));
if (i <= numNullValues) {
assertNull( "Expected null value for pkid, p: " + p, p.pkid);
} else {
assertNotNull("Expected not null value for pkid", p.pkid);
if (!p.pkid.equals("" + i)) {
fail(" Value of pkid is not in expected order.");
}
}
}
// Query 1 - null values are first in the order.
str = queries[1];
q = CacheUtils.getQueryService().newQuery(str);
CacheUtils.getLogger().info("Executing query: " + str);
results = (SelectResults)q.execute();
list = results.asList();
for (int i = 1; i <= size; i++) {
Portfolio p = (Portfolio)list.get((i-1));
if (i <= numNullValues) {
assertNull( "Expected null value for pkid", p.pkid);
} else {
assertNotNull("Expected not null value for pkid", p.pkid);
if (!p.pkid.equals("" + i)) {
fail(" Value of pkid is not in expected order.");
}
}
}
// Query 2 - null values are last in the order.
str = queries[2];
q = CacheUtils.getQueryService().newQuery(str);
CacheUtils.getLogger().info("Executing query: " + str);
results = (SelectResults)q.execute();
list = results.asList();
for (int i = 1; i <= size; i++) {
Portfolio p = (Portfolio)list.get((i-1));
if (i > (size - numNullValues )) {
assertNull( "Expected null value for pkid", p.pkid);
} else {
assertNotNull("Expected not null value for pkid", p.pkid);
if (!p.pkid.equals("" + (size - (i-1)))) {
fail(" Value of pkid is not in expected order.");
}
}
}
// Query 3 - 1 distinct null value with pkid.
str = queries[3];
q = CacheUtils.getQueryService().newQuery(str);
CacheUtils.getLogger().info("Executing query: " + str);
results = (SelectResults)q.execute();
list = results.asList();
for (int i = 1; i <= list.size(); i++) {
String pkid = (String)list.get((i-1));
if (i == 1) {
assertNull( "Expected null value for pkid", pkid);
} else {
assertNotNull("Expected not null value for pkid", pkid);
if (!pkid.equals("" + (numNullValues + (i-1)))) {
fail(" Value of pkid is not in expected order.");
}
}
}
// Query 4 - 1 distinct null value with pkid.
str = queries[4];
q = CacheUtils.getQueryService().newQuery(str);
CacheUtils.getLogger().info("Executing query: " + str);
results = (SelectResults)q.execute();
list = results.asList();
for (int i = 1; i <= list.size(); i++) {
String pkid = (String)list.get((i-1));
if (i == 1) {
assertNull( "Expected null value for pkid", pkid);
} else {
assertNotNull("Expected not null value for pkid", pkid);
if (!pkid.equals("" + (numNullValues + (i-1)))) {
fail(" Value of pkid is not in expected order.");
}
}
}
// Query 5 - 1 distinct null value with pkid at the end.
str = queries[5];
q = CacheUtils.getQueryService().newQuery(str);
CacheUtils.getLogger().info("Executing query: " + str);
results = (SelectResults)q.execute();
list = results.asList();
for (int i = 1; i <= list.size(); i++) {
String pkid = (String)list.get((i-1));
if (i == (list.size())) {
assertNull( "Expected null value for pkid", pkid);
} else {
assertNotNull("Expected not null value for pkid", pkid);
if (!pkid.equals("" + (size - (i-1)))) {
fail(" Value of pkid is not in expected order.");
}
}
}
// Query 6 - ID field values should be in the same order.
str = queries[6];
q = CacheUtils.getQueryService().newQuery(str);
CacheUtils.getLogger().info("Executing query: " + str);
results = (SelectResults)q.execute();
list = results.asList();
for (int i = 1; i <= size; i++) {
int id = (Integer)((Struct)list.get((i-1))).getFieldValues()[0];
// ID should be one of 1, 2, 3 because of distinct
if (i <= numNullValues) {
if (!(id == 1 || id == 2 || id == 3)) {
fail(" Value of ID is not as expected " + id);
}
} else {
if (id != i) {
fail(" Value of ID is not as expected " + id);
}
}
}
// Query 7 - ID, pkid field values should be in the same order.
str = queries[7];
q = CacheUtils.getQueryService().newQuery(str);
CacheUtils.getLogger().info("Executing query: " + str);
results = (SelectResults)q.execute();
list = results.asList();
for (int i = 1; i <= list.size(); i++) {
Struct vals = (Struct)list.get((i-1));
int id = ((Integer)vals.get("ID")).intValue();
String pkid = (String)vals.get("pkid");
if (i <= numNullValues) {
assertNull( "Expected null value for pkid, " + pkid, pkid);
if (!(id == 1 || id == 2 || id == 3)) {
fail(" Value of ID is not as expected " + id);
}
} else {
if (!pkid .equals("" + i)) {
fail(" Value of pkid is not as expected, " + pkid);
}
if (id != i) {
fail(" Value of ID is not as expected, " + id);
}
}
}
// Query 8 - ID asc, pkid field values should be in the same order.
str = queries[8];
q = CacheUtils.getQueryService().newQuery(str);
CacheUtils.getLogger().info("Executing query: " + str);
results = (SelectResults)q.execute();
list = results.asList();
for (int i = 1; i <= list.size(); i++) {
Struct vals = (Struct)list.get((i-1));
int id = ((Integer)vals.get("ID")).intValue();
String pkid = (String)vals.get("pkid");
if (i <= numNullValues) {
assertNull( "Expected null value for pkid, " + pkid, pkid);
if (id != i) {
fail(" Value of ID is not as expected, it is: " + id + " expected :" + i);
}
} else {
if (!pkid .equals("" + i)) {
fail(" Value of pkid is not as expected, " + pkid);
}
if (id != i) {
fail(" Value of ID is not as expected, " + id);
}
}
}
// Query 9 - ID desc, pkid field values should be in the same order.
str = queries[9];
q = CacheUtils.getQueryService().newQuery(str);
CacheUtils.getLogger().info("Executing query: " + str);
results = (SelectResults)q.execute();
list = results.asList();
for (int i = 1; i <= list.size(); i++) {
Struct vals = (Struct)list.get((i-1));
int id = ((Integer)vals.get("ID")).intValue();
String pkid = (String)vals.get("pkid");
if (i <= numNullValues) {
assertNull( "Expected null value for pkid, " + pkid, pkid);
if (id != (numNullValues - (i -1))) {
fail(" Value of ID is not as expected " + id);
}
} else {
if (!pkid .equals("" + i)) {
fail(" Value of pkid is not as expected, " + pkid);
}
if (id != i) {
fail(" Value of ID is not as expected, " + id);
}
}
}
} catch (Exception e) {
e.printStackTrace();
fail(q.getQueryString());
}
}
public String[] getQueriesForOrderByWithNullValues() {
// IN ORDER BY NULL values are treated as smallest. E.g For an ascending
// order by field
// its null values are reported first and then the values in ascending
// order.
String queries[] = {
"SELECT distinct * FROM /portfolio1 pf1 order by pkid", // 0 null
// values are
// first in the
// order.
"SELECT distinct * FROM /portfolio1 pf1 order by pkid asc", // 1 same
// as
// above.
"SELECT distinct * FROM /portfolio1 order by pkid desc", // 2 null
// values are
// last in the
// order.
"SELECT distinct pkid FROM /portfolio1 pf1 order by pkid", // 3 null
// values
// are first
// in the
// order.
"SELECT distinct pkid FROM /portfolio1 pf1 where pkid != 'XXXX' order by pkid asc", // 4
"SELECT distinct pkid FROM /portfolio1 pf1 where pkid != 'XXXX' order by pkid desc", // 5
// null
// values
// are
// last
// in
// the
// order.
"SELECT distinct ID, pkid FROM /portfolio1 pf1 where ID < 1000 order by pkid", // 6
"SELECT distinct ID, pkid FROM /portfolio1 pf1 where ID > 0 order by pkid", // 7
"SELECT distinct ID, pkid FROM /portfolio1 pf1 where ID > 0 order by pkid, ID asc", // 8
"SELECT distinct ID, pkid FROM /portfolio1 pf1 where ID > 0 order by pkid, ID desc",// 9
};
return queries;
}
public String[] getQueriesForLimitNotAppliedIfOrderByNotUsingIndex() {
String queries[] = {
// Test case No. IUMR021
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid = '12' and ID > 10 order by ID desc, pkid asc ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid > '1' and ID > 10 order by ID asc, pkid desc ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid = '13'and ID > 10 and ID < 20 order by ID asc, pkid asc ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid <'9' and ID > 10 and ID < 20 order by ID desc , pkid desc",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid = '15' and ID >= 10 and ID <= 20 order by ID desc, pkid desc ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid > '1' and pkid <='9' and ID >= 10 and ID <= 20 order by ID asc, pkid asc",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid > '1' and ID != 10 order by ID asc, pkid asc ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid > '1' and ID != 10 order by ID desc, pkid desc ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid = '17' and ID > 10 order by ID desc, pkid asc limit 5",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid > '17' and ID > 10 order by ID asc, pkid desc limit 5",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid < '7' and ID > 10 and ID < 20 order by ID asc, pkid asc limit 5 ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid = '18' and ID > 10 and ID < 20 order by ID desc, pkid desc limit 5",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid > '1' and ID >= 10 and ID <= 20 order by ID desc, pkid asc limit 5",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid != '17' and ID >= 10 and ID <= 20 order by ID asc, pkid desc limit 5",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid > '0' and ID != 10 order by ID asc, pkid asc limit 10",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid > '1' and ID != 10 order by ID desc, pkid desc limit 10",
};
return queries;
}
public String[] getQueriesForMultiColOrderByWithIndexResultWithProjection() {
String queries[] = {
// Test case No. IUMR021
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where ID > 10 order by ID desc, pkid desc ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where ID > 10 order by ID asc, pkid asc ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where ID > 10 and ID < 20 order by ID asc, pkid asc ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where ID > 10 and ID < 20 order by ID desc , pkid desc",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where ID >= 10 and ID <= 20 order by ID desc, pkid asc ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where ID >= 10 and ID <= 20 order by ID asc, pkid desc",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where ID != 10 order by ID asc , pkid desc",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where ID != 10 order by ID desc, pkid asc ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where ID > 10 order by ID desc, pkid desc limit 5",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where ID > 10 order by ID asc, pkid asc limit 5",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where ID > 10 and ID < 20 order by ID asc, pkid desc limit 5 ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where ID > 10 and ID < 20 order by ID desc, pkid asc limit 5",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where ID >= 10 and ID <= 20 order by ID desc, pkid desc limit 5",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where ID >= 10 and ID <= 20 order by ID asc, pkid asc limit 5",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where ID != 10 order by ID asc , pkid desc limit 10",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where ID != 10 order by ID desc, pkid desc limit 10",
};
return queries;
}
public String[] getQueriesForMultiColOrderByWithMultiIndexResultProjection() {
String queries[] = {
// Test case No. IUMR021
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid = '12' and ID > 10 order by ID desc, pkid asc ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid > '1' and ID > 10 order by ID asc, pkid desc ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid = '13'and ID > 10 and ID < 20 order by ID asc, pkid asc ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid <'9' and ID > 10 and ID < 20 order by ID desc , pkid desc",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid = '15' and ID >= 10 and ID <= 20 order by ID desc, pkid desc ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid > '1' and pkid <='9' and ID >= 10 and ID <= 20 order by ID asc, pkid asc",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid > '1' and ID != 10 order by ID asc, pkid asc ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid > '1' and ID != 10 order by ID desc, pkid desc ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid = '17' and ID > 10 order by ID desc, pkid asc limit 5",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid > '17' and ID > 10 order by ID asc, pkid desc limit 5",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid < '7' and ID > 10 and ID < 20 order by ID asc, pkid asc limit 5 ",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid = '18' and ID > 10 and ID < 20 order by ID desc, pkid desc limit 5",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid > '1' and ID >= 10 and ID <= 20 order by ID desc, pkid asc limit 5",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid != '17' and ID >= 10 and ID <= 20 order by ID asc, pkid desc limit 5",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid > '0' and ID != 10 order by ID asc, pkid asc limit 10",
"SELECT distinct ID, description, createTime, pkid FROM /portfolio1 pf1 where pkid > '1' and ID != 10 order by ID desc, pkid desc limit 10",
};
return queries;
}
}