in java/ws-server/src/main/java/com/epam/deltix/tbwg/webapp/services/grafana/GrafanaServiceImpl.java [323:392]
private SelectBuilder2 constructQuery(String streamKey, TimeRange range, SelectQuery query)
throws NoSuchStreamException, NoSuchSymbolsException, SelectBuilder2.NoSuchFieldException, WrongTypeException, NoSuchTypeException {
DXTickDB db = timebase.getConnection();
DXTickStream stream = db.getStream(streamKey);
if (stream == null) {
throw new NoSuchStreamException(streamKey);
}
checkSymbols(stream, query.getSymbols());
SelectBuilder2 selectBuilder = SelectBuilder2.builder(db, stream)
.setSymbols(query.getSymbols())
.timeBetween(range.getFrom(), range.getTo());
if (query.getFields() != null) {
for (Map.Entry<String, List<TBField>> entry : query.getFields().entrySet()) {
selectBuilder.type(entry.getKey())
.selectFields(entry.getValue().stream().map(TBField::getName).collect(Collectors.toList()));
}
}
if (query.getFilters() != null) {
for (Map.Entry<String, List<FieldFilter>> entry : query.getFilters().entrySet()) {
Type type = selectBuilder.type(entry.getKey());
for (FieldFilter fieldFilter : entry.getValue()) {
Type.Field field = type.field(fieldFilter.getFieldName());
switch (fieldFilter.getFilterType()) {
case EQUAL:
field.equalTo(fieldFilter.getValues().get(0));
break;
case NOTEQUAL:
field.notEqualTo(fieldFilter.getValues().get(0));
break;
case GREATER:
field.greaterThan(fieldFilter.getValues().get(0));
break;
case NOTGREATER:
field.notGreaterThan(fieldFilter.getValues().get(0));
break;
case LESS:
field.lessThan(fieldFilter.getValues().get(0));
break;
case NOTLESS:
field.notLessThan(fieldFilter.getValues().get(0));
break;
case IN:
field.equalTo(fieldFilter.getValues());
break;
case NULL:
field.isNull();
break;
case NOTNULL:
field.notNull();
break;
case STARTS_WITH:
field.startsWith(fieldFilter.getValues().get(0));
break;
case ENDS_WITH:
field.endsWith(fieldFilter.getValues().get(0));
break;
case CONTAINS:
field.contains(fieldFilter.getValues().get(0));
break;
case NOT_CONTAINS:
field.notContains(fieldFilter.getValues().get(0));
break;
default:
throw new UnsupportedOperationException();
}
}
}
}
return selectBuilder;
}