The following example illustrates how to apply the value of the aggregation property to handle COUNT() queries.
// Handle COUNT() queries if (context.tableSelection.columnsSelected.size() == 1 && context.tableSelection.columnsSelected.get(0).aggregation == QueryAggregation.COUNT) { List<Map<String, Object>> countResponse = new List<Map<String, Object>>(); Map<String, Object> countRow = new Map<String, Object>(); countRow.put(context.tableSelection.columnsSelected.get(0).columnName, response.size()); countResponse.add(countRow); return countResponse; }
An aggregate query can still have filters, so your query method can be implemented like the following example to support basic aggregation queries, with or without filters.
override global DataSource.TableResult query(DataSource.QueryContext context) { List<Map<String,Object>> rows = retrieveData(context); List<Map<String,Object>> response = postFilterRecords( context.tableSelection.filter, rows); if (context.tableSelection.columnsSelected.size() == 1 && context.tableSelection.columnsSelected.get(0).aggregation == DataSource.QueryAggregation.COUNT) { List<Map<String, Object>> countResponse = new List<Map<String, Object>>(); Map<String, Object> countRow = new Map<String, Object>(); countRow.put(context.tableSelection.columnsSelected.get(0).columnName, response.size()); countResponse.add(countRow); return DataSource.TableResult.get(context, countResponse); } return DataSource.TableResult.get(context, response); }