public CalciteSQLResult getCalciteSQLResult()

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");
        });
    }