use of org.apache.geode.cache.query.Struct in project geode by apache.
the class JsonWriter method writeValueAsJson.
public static void writeValueAsJson(JsonGenerator generator, Object value, String pdxField) throws JsonGenerationException, IOException {
if (value == null) {
generator.writeNull();
} else if (value.getClass().equals(Boolean.class)) {
boolean b = (Boolean) value;
generator.writeBoolean(b);
} else if (value.getClass().equals(Byte.class)) {
Byte b = (Byte) value;
generator.writeNumber(b);
} else if (value.getClass().equals(Short.class)) {
Short b = (Short) value;
generator.writeNumber(b);
} else if (value.getClass().equals(Integer.class)) {
int i = (Integer) value;
generator.writeNumber(i);
} else if (value.getClass().equals(Long.class)) {
long i = (Long) value;
generator.writeNumber(i);
} else if (value.getClass().equals(BigInteger.class)) {
BigInteger i = (BigInteger) value;
generator.writeNumber(i);
} else if (value.getClass().equals(Float.class)) {
float i = (Float) value;
generator.writeNumber(i);
} else if (value.getClass().equals(BigDecimal.class)) {
BigDecimal i = (BigDecimal) value;
generator.writeNumber(i);
} else if (value.getClass().equals(Double.class)) {
double d = (Double) value;
generator.writeNumber(d);
} else if (value.getClass().equals(String.class)) {
String s = (String) value;
generator.writeString(s);
} else if (value.getClass().isArray()) {
writeArrayAsJson(generator, value, pdxField);
} else if (value.getClass().equals(Link.class)) {
writeLinkAsJson(generator, (Link) value, pdxField);
// } else if (value.getClass().equals(Date.class)) {
// generator.writeObject((Date) value);
} else if (value.getClass().equals(EnumInfo.class)) {
/*
* try { generator.writeString(((EnumInfo)value).getEnum().name()); } catch
* (ClassNotFoundException e) { throw new
* IllegalStateException("PdxInstance returns unknwon pdxfield " + pdxField + " for type " +
* value); }
*/
generator.writeString(value.toString());
} else if (value.getClass().equals(PdxInstanceEnumInfo.class)) {
generator.writeString(value.toString());
} else {
if (value instanceof Struct) {
writeStructAsJson(generator, (StructImpl) value);
} else if (value instanceof PdxInstance) {
writePdxInstanceAsJson(generator, (PdxInstance) value);
} else if (value instanceof Collection) {
writeCollectionAsJson(generator, (Collection<?>) value);
} else if (value instanceof Map) {
writeMapAsJson(generator, (Map) value, pdxField);
} else {
generator.writeObject(value);
}
}
}
use of org.apache.geode.cache.query.Struct in project geode by apache.
the class ZRangeByScoreExecutor method getKeys.
private Collection<?> getKeys(ByteArrayWrapper key, Region<ByteArrayWrapper, DoubleWrapper> keyRegion, ExecutionHandlerContext context, double start, double stop, boolean startInclusive, boolean stopInclusive, int offset, int limit) throws FunctionDomainException, TypeMismatchException, NameResolutionException, QueryInvocationTargetException {
if (start == Double.POSITIVE_INFINITY || stop == Double.NEGATIVE_INFINITY || start > stop || (start == stop && (!startInclusive || !stopInclusive)))
return null;
if (start == Double.NEGATIVE_INFINITY && stop == Double.POSITIVE_INFINITY)
return new HashSet(keyRegion.entrySet());
Query query;
Object[] params;
if (isReverse()) {
if (startInclusive) {
if (stopInclusive) {
query = getQuery(key, SortedSetQuery.ZREVRBSSTISI, context);
} else {
query = getQuery(key, SortedSetQuery.ZREVRBSSTI, context);
}
} else {
if (stopInclusive) {
query = getQuery(key, SortedSetQuery.ZREVRBSSI, context);
} else {
query = getQuery(key, SortedSetQuery.ZREVRBS, context);
}
}
params = new Object[] { start, stop, INFINITY_LIMIT };
} else {
if (startInclusive) {
if (stopInclusive) {
query = getQuery(key, SortedSetQuery.ZRBSSTISI, context);
} else {
query = getQuery(key, SortedSetQuery.ZRBSSTI, context);
}
} else {
if (stopInclusive) {
query = getQuery(key, SortedSetQuery.ZRBSSI, context);
} else {
query = getQuery(key, SortedSetQuery.ZRBS, context);
}
}
params = new Object[] { start, stop, INFINITY_LIMIT };
}
if (limit > 0)
params[params.length - 1] = (limit + offset);
SelectResults<?> results = (SelectResults<?>) query.execute(params);
if (offset < results.size())
return (Collection<Struct>) results.asList().subList(offset, results.size());
else
return null;
}
use of org.apache.geode.cache.query.Struct in project geode by apache.
the class ZRemRangeByRankExecutor method executeCommand.
@Override
public void executeCommand(Command command, ExecutionHandlerContext context) {
List<byte[]> commandElems = command.getProcessedCommand();
if (commandElems.size() < 4) {
command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.ZREMRANGEBYRANK));
return;
}
ByteArrayWrapper key = command.getKey();
checkDataType(key, RedisDataType.REDIS_SORTEDSET, context);
Region<ByteArrayWrapper, DoubleWrapper> keyRegion = getRegion(context, key);
if (keyRegion == null) {
command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), NONE_REMOVED));
return;
}
int startRank;
int stopRank;
try {
startRank = Coder.bytesToInt(commandElems.get(2));
stopRank = Coder.bytesToInt(commandElems.get(3));
} catch (NumberFormatException e) {
command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_NOT_NUMERIC));
return;
}
int sSetSize = keyRegion.size();
startRank = getBoundedStartIndex(startRank, sSetSize);
stopRank = getBoundedEndIndex(stopRank, sSetSize);
if (stopRank > sSetSize - 1)
stopRank = sSetSize - 1;
if (startRank > stopRank) {
command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), 0));
return;
}
int numRemoved = 0;
List<?> removeList = null;
try {
if (startRank == 0 && stopRank == sSetSize - 1) {
numRemoved = keyRegion.size();
context.getRegionProvider().removeKey(key);
} else {
removeList = getRemoveKeys(context, key, startRank, stopRank);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
if (removeList != null) {
for (Object entry : removeList) {
ByteArrayWrapper removeKey;
if (entry instanceof Entry)
removeKey = (ByteArrayWrapper) ((Entry<?, ?>) entry).getKey();
else
removeKey = (ByteArrayWrapper) ((Struct) entry).getFieldValues()[0];
Object oldVal = keyRegion.remove(removeKey);
if (oldVal != null)
numRemoved++;
}
if (keyRegion.isEmpty())
context.getRegionProvider().removeKey(key);
}
command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), numRemoved));
}
use of org.apache.geode.cache.query.Struct in project geode by apache.
the class LRangeExecutor method executeCommand.
@Override
public void executeCommand(Command command, ExecutionHandlerContext context) {
List<byte[]> commandElems = command.getProcessedCommand();
if (commandElems.size() < 4) {
command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.LRANGE));
return;
}
ByteArrayWrapper key = command.getKey();
byte[] startArray = commandElems.get(2);
byte[] stopArray = commandElems.get(3);
int redisStart;
int redisStop;
checkDataType(key, RedisDataType.REDIS_LIST, context);
Region<Integer, ByteArrayWrapper> keyRegion = getRegion(context, key);
if (keyRegion == null) {
command.setResponse(Coder.getEmptyArrayResponse(context.getByteBufAllocator()));
return;
}
int listSize = keyRegion.size() - LIST_EMPTY_SIZE;
if (listSize == 0) {
command.setResponse(Coder.getEmptyArrayResponse(context.getByteBufAllocator()));
return;
}
try {
redisStart = Coder.bytesToInt(startArray);
redisStop = Coder.bytesToInt(stopArray);
} catch (NumberFormatException e) {
command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ERROR_NOT_NUMERIC));
return;
}
redisStart = getBoundedStartIndex(redisStart, listSize);
redisStop = getBoundedEndIndex(redisStop, listSize);
if (redisStart > redisStop) {
command.setResponse(Coder.getEmptyArrayResponse(context.getByteBufAllocator()));
return;
}
redisStart = Math.min(redisStart, listSize - 1);
redisStop = Math.min(redisStop, listSize - 1);
List<Struct> range;
try {
range = getRange(context, key, redisStart, redisStop, keyRegion);
} catch (Exception e) {
throw new RuntimeException(e);
}
if (range == null)
command.setResponse(Coder.getEmptyArrayResponse(context.getByteBufAllocator()));
else
command.setResponse(Coder.getBulkStringArrayResponseOfValues(context.getByteBufAllocator(), range));
}
use of org.apache.geode.cache.query.Struct in project geode by apache.
the class LRemExecutor method getRemoveList.
private List<Struct> getRemoveList(ExecutionHandlerContext context, ByteArrayWrapper key, ByteArrayWrapper value, int count) throws Exception {
Object[] params;
Query query;
if (count > 0) {
query = getQuery(key, ListQuery.LREMG, context);
params = new Object[] { value, Integer.valueOf(count) };
} else if (count < 0) {
query = getQuery(key, ListQuery.LREML, context);
params = new Object[] { value, Integer.valueOf(-count) };
} else {
query = getQuery(key, ListQuery.LREME, context);
params = new Object[] { value };
}
SelectResults<Struct> results = (SelectResults<Struct>) query.execute(params);
if (results == null || results.isEmpty()) {
return null;
}
return results.asList();
}
Aggregations