in analysis/heap-dump/impl/src/main/java/org/eclipse/jifa/hda/impl/HeapDumpAnalyzerImpl.java [1224:1284]
public CalciteSQLResult getCalciteSQLResult(String sql, String sortBy, boolean ascendingOrder, int page, int pageSize) {
return $(() -> {
Map<String, Object> args = new HashMap<>();
args.put("sql", sql);
IResult result;
try {
result = queryByCommand(context, "calcite", args);
} catch (Throwable t) {
return new CalciteSQLResult.TextResult(t.getMessage());
}
if (result instanceof IResultTree) {
return new CalciteSQLResult.TreeResult(
PageViewBuilder.build(
((IResultTree) result).getElements(),
new PagingRequest(page, pageSize),
e -> $(() -> context.snapshot.getObject(((IResultTree) result).getContext(e).getObjectId())),
o -> $(() -> {
JavaObject jo = new JavaObject();
jo.setObjectId(o.getObjectId());
jo.setLabel(o.getDisplayName());
jo.setSuffix(Helper.suffix(o.getGCRootInfo()));
jo.setShallowSize(o.getUsedHeapSize());
jo.setRetainedSize(o.getRetainedHeapSize());
jo.setGCRoot(context.snapshot.isGCRoot(o.getObjectId()));
jo.setObjectType(typeOf(o));
jo.setHasOutbound(true);
return jo;
}), IObjectSortHelper.sortBy(sortBy, ascendingOrder)));
} else if (result instanceof IResultTable) {
IResultTable table = (IResultTable) result;
Column[] columns = table.getColumns();
List<String> cs = Arrays.stream(columns).map(Column::getLabel).collect(Collectors.toList());
PageView<CalciteSQLResult.TableResult.Entry> pv =
PageViewBuilder.build(new PageViewBuilder.Callback<Object>() {
@Override
public int totalSize() {
return table.getRowCount();
}
@Override
public Object get(int index) {
return table.getRow(index);
}
}, new PagingRequest(page, pageSize), o -> {
List<Object> l = new ArrayList<>();
for (int i = 0; i < columns.length; i++) {
Object columnValue = table.getColumnValue(o, i);
l.add(columnValue != null ? EscapeUtil.unescapeJava(columnValue.toString()) : null);
}
IContextObject co = table.getContext(o);
return new CalciteSQLResult.TableResult.Entry(co != null ? co.getObjectId() : Helper.ILLEGAL_OBJECT_ID,
l);
});
return new CalciteSQLResult.TableResult(cs, pv);
} else if (result instanceof TextResult) {
return new CalciteSQLResult.TextResult(((TextResult) result).getText());
}
return new CalciteSQLResult.TextResult("Unsupported Calcite SQL result type");
});
}