}
scan.setFilter(filters);
String tableName = StorageTableNameBuilder.buildEntityTableName(plan.getTableDesc().getTableName());
AggregateType type = info.getAggregateType();
byte[] value = null;
DataType resultDataType = DataType.STRING;
try {
switch (type) {
case COUNT: {
long count = aggregationClient.count(Bytes.toBytes(tableName),
null, scan);
value = Bytes.toBytes(count);
resultDataType = DataType.INT64;
break;
}
case SUM: {
value = getSumValue(tableName, info.getField(), scan);
resultDataType = info.getField().getType();
break;
}
}
} catch (Throwable throwable) {
throw new ServiceException(throwable);
}
ClientProtos.QueryResultProto.Builder builder = ClientProtos.QueryResultProto.newBuilder();
builder.addResult(ProtobufUtil.toStringBytesPair(new KeyValue(Bytes.toBytes(type.getMethodName()),
Bytes.toBytes(info.getField().getFamily()), Bytes.toBytes(type.getMethodName()), value)));
queryResultProtos.add(builder.build());
MetaProtos.DataTypeProtos dataTypeProtos = DataType.convertDataTypeToDataTypeProtos(resultDataType) ;
ClientProtos.StringDataTypePair.Builder stringDataTypePairBuilder = ClientProtos.StringDataTypePair
.newBuilder();
stringDataTypePairBuilder.setDataType(dataTypeProtos);
stringDataTypePairBuilder.setName(type.getMethodName());
nameDataTypePairs.add(stringDataTypePairBuilder.build());
return new Pair<List<ClientProtos.QueryResultProto>, List<ClientProtos.StringDataTypePair>>(
queryResultProtos, nameDataTypePairs);
}