use of com.amazonaws.services.simpledb.model.SelectResult in project camel by apache.
the class SelectCommand method execute.
public void execute() {
SelectRequest request = new SelectRequest().withSelectExpression(determineSelectExpression()).withConsistentRead(determineConsistentRead()).withNextToken(determineNextToken());
log.trace("Sending request [{}] for exchange [{}]...", request, exchange);
SelectResult result = this.sdbClient.select(request);
log.trace("Received result [{}]", result);
Message msg = getMessageForResponse(exchange);
msg.setHeader(SdbConstants.ITEMS, result.getItems());
msg.setHeader(SdbConstants.NEXT_TOKEN, result.getNextToken());
}
use of com.amazonaws.services.simpledb.model.SelectResult in project SimianArmy by Netflix.
the class SimpleDBRecorder method findEvents.
/**
* Find events.
*
* @param queryMap
* the query map
* @param after
* the start time to query for all events after
* @return the list
*/
protected List<Event> findEvents(Map<String, String> queryMap, long after) {
StringBuilder query = new StringBuilder(String.format("select * from `%s` where region = '%s'", domain, region));
for (Map.Entry<String, String> pair : queryMap.entrySet()) {
query.append(String.format(" and %s = '%s'", pair.getKey(), pair.getValue()));
}
query.append(String.format(" and eventTime > '%d'", after));
// always return with most recent record first
query.append(" order by eventTime desc");
List<Event> list = new LinkedList<Event>();
SelectRequest request = new SelectRequest(query.toString());
request.setConsistentRead(Boolean.TRUE);
SelectResult result = new SelectResult();
do {
result = sdbClient().select(request.withNextToken(result.getNextToken()));
for (Item item : result.getItems()) {
Map<String, String> fields = new HashMap<String, String>();
Map<String, String> res = new HashMap<String, String>();
for (Attribute attr : item.getAttributes()) {
if (Keys.KEYSET.contains(attr.getName())) {
res.put(attr.getName(), attr.getValue());
} else {
fields.put(attr.getName(), attr.getValue());
}
}
String eid = res.get(Keys.id.name());
String ereg = res.get(Keys.region.name());
MonkeyType monkeyType = valueToEnum(MonkeyType.class, res.get(Keys.monkeyType.name()));
EventType eventType = valueToEnum(EventType.class, res.get(Keys.eventType.name()));
long eventTime = Long.parseLong(res.get(Keys.eventTime.name()));
list.add(new BasicRecorderEvent(monkeyType, eventType, ereg, eid, eventTime).addFields(fields));
}
} while (result.getNextToken() != null);
return list;
}
use of com.amazonaws.services.simpledb.model.SelectResult in project siena by mandubian.
the class SdbPersistenceManager method rawGet.
protected <T> int rawGet(Iterable<T> models) {
StringBuffer domainBuf = new StringBuffer();
SelectRequest req = SdbMappingUtils.buildBatchGetQuery(models, prefix, domainBuf);
req.setConsistentRead(isReadConsistent());
try {
checkDomain(domainBuf.toString());
SelectResult res = sdb.select(req);
int nb = SdbMappingUtils.mapSelectResult(res, models);
// join management
// gets class
Class<?> clazz = null;
for (T obj : models) {
if (clazz == null) {
clazz = obj.getClass();
break;
}
}
if (!ClassInfo.getClassInfo(clazz).joinFields.isEmpty()) {
mapJoins(models);
}
return nb;
} catch (AmazonClientException ex) {
throw new SienaException(ex);
}
}
use of com.amazonaws.services.simpledb.model.SelectResult in project siena by mandubian.
the class SdbPersistenceManager method doFetchList.
protected <T> void doFetchList(Query<T> query, int limit, int offset, List<T> resList, int depth) {
if (depth >= MAX_DEPTH) {
throw new SienaException("Reached maximum depth of recursion when retrieving more data (" + MAX_DEPTH + ")");
}
preFetch(query, limit, offset, !resList.isEmpty());
QueryOptionSdbContext sdbCtx = (QueryOptionSdbContext) query.option(QueryOptionSdbContext.ID);
QueryOptionFetchType fetchType = (QueryOptionFetchType) query.option(QueryOptionFetchType.ID);
QueryOptionOffset off = (QueryOptionOffset) query.option(QueryOptionOffset.ID);
// if previousPage has detected there is no more data, simply returns an empty list
if (sdbCtx.noMoreDataBefore || sdbCtx.noMoreDataAfter) {
return;
}
// manages cursor limitations for IN and != operators with offsets
if (!sdbCtx.isActive()) {
StringBuffer domainBuf = new StringBuffer();
SelectRequest req = SdbMappingUtils.buildQuery(query, prefix, domainBuf);
req.setConsistentRead(isReadConsistent());
checkDomain(domainBuf.toString());
SelectResult res = sdb.select(req);
// activates the SdbCtx now that it is really initialised
sdbCtx.activate();
postFetch(query, res);
// cursor not yet created
switch(fetchType.fetchType) {
case KEYS_ONLY:
if (off.isActive()) {
SdbMappingUtils.mapSelectResultToListKeysOnly(res, resList, query.getQueriedClass(), off.offset);
} else {
SdbMappingUtils.mapSelectResultToListKeysOnly(res, resList, query.getQueriedClass());
}
break;
case NORMAL:
default:
if (off.isActive()) {
SdbMappingUtils.mapSelectResultToList(res, resList, query.getQueriedClass(), off.offset);
} else {
SdbMappingUtils.mapSelectResultToList(res, resList, query.getQueriedClass());
}
// join management
if (!query.getJoins().isEmpty() || !ClassInfo.getClassInfo(query.getQueriedClass()).joinFields.isEmpty())
mapJoins(query, resList);
}
continueFetchNextToken(query, resList, depth);
postMapping(query);
} else {
// we prepare the query each time
StringBuffer domainBuf = new StringBuffer();
SelectRequest req = SdbMappingUtils.buildQuery(query, prefix, domainBuf);
req.setConsistentRead(isReadConsistent());
checkDomain(domainBuf.toString());
// we can't use real asynchronous function with cursors
// so the page is extracted at once and wrapped into a SienaFuture
String token = sdbCtx.currentToken();
if (token != null) {
req.setNextToken(token);
}
SelectResult res = sdb.select(req);
postFetch(query, res);
switch(fetchType.fetchType) {
case KEYS_ONLY:
if (off.isActive()) {
SdbMappingUtils.mapSelectResultToListKeysOnly(res, resList, query.getQueriedClass(), off.offset);
} else {
SdbMappingUtils.mapSelectResultToListKeysOnly(res, resList, query.getQueriedClass());
}
break;
case NORMAL:
default:
if (off.isActive()) {
SdbMappingUtils.mapSelectResultToList(res, resList, query.getQueriedClass(), off.offset);
} else {
SdbMappingUtils.mapSelectResultToList(res, resList, query.getQueriedClass());
}
// join management
if (!query.getJoins().isEmpty() || !ClassInfo.getClassInfo(query.getQueriedClass()).joinFields.isEmpty())
mapJoins(query, resList);
}
continueFetchNextToken(query, resList, depth);
postMapping(query);
}
}
use of com.amazonaws.services.simpledb.model.SelectResult in project siena by mandubian.
the class SdbPersistenceManager method doFetchIterable.
protected <T> Iterable<T> doFetchIterable(Query<T> query, int limit, int offset, boolean recursing) {
preFetch(query, limit, offset, recursing);
QueryOptionSdbContext sdbCtx = (QueryOptionSdbContext) query.option(QueryOptionSdbContext.ID);
// if previousPage has detected there is no more data, simply returns an empty list
if (sdbCtx.noMoreDataBefore || sdbCtx.noMoreDataAfter) {
return new ArrayList<T>();
}
// manages cursor limitations for IN and != operators with offsets
if (!sdbCtx.isActive()) {
StringBuffer domainBuf = new StringBuffer();
SelectRequest req = SdbMappingUtils.buildQuery(query, prefix, domainBuf);
req.setConsistentRead(isReadConsistent());
checkDomain(domainBuf.toString());
SelectResult res = sdb.select(req);
// activates the SdbCtx now that it is initialised
sdbCtx.activate();
postFetch(query, res);
return new SdbSienaIterable<T>(this, res.getItems(), query);
} else {
// we prepare the query each time
StringBuffer domainBuf = new StringBuffer();
SelectRequest req = SdbMappingUtils.buildQuery(query, prefix, domainBuf);
req.setConsistentRead(isReadConsistent());
checkDomain(domainBuf.toString());
// we can't use real asynchronous function with cursors
// so the page is extracted at once and wrapped into a SienaFuture
String token = sdbCtx.currentToken();
if (token != null) {
req.setNextToken(token);
}
SelectResult res = sdb.select(req);
postFetch(query, res);
return new SdbSienaIterable<T>(this, res.getItems(), query);
}
}
Aggregations