Skip to Content
Advanced Features

Advanced Features

Group Intervals

DevExtreme supports grouping fields by various intervals for dates, numbers, and strings.

Date Grouping

{ "group": [ { "selector": "orderDate", "groupInterval": "month" } ] }

Supported Date Intervals:

  • year - Group by year (2024, 2025, etc.)
  • quarter - Group by quarter (Q1, Q2, Q3, Q4)
  • month - Group by month (2024-01, 2024-02, etc.)
  • day - Group by day (2024-01-15)
  • dayOfWeek - Group by day of week (0-6)
  • hour - Group by hour
  • minute - Group by minute

Numeric Grouping

{ "group": [ { "selector": "price", "groupInterval": 1000 } ] }

Results in ranges: 0-999, 1000-1999, 2000-2999, etc.

String Grouping

{ "group": [ { "selector": "productName", "groupInterval": 3 } ] }

Groups by first 3 characters: “App” (Apple, Application), “Ban” (Banana, Band), etc.

UUID Support

DEV1.0 Picnic provides native UUID support across all databases.

import java.util.UUID; @Table("users") public class User { @Id @Column("user_id") private UUID id; // Native UUID support @Column("external_id") private UUID externalId; // PostgreSQL: UUID array support @ArrayColumn(type = ArrayType.POSTGRESQL_ARRAY) private List<UUID> relatedUserIds; } // Filtering by UUID // {"filter": ["id", "=", "550e8400-e29b-41d4-a716-446655440000"]}

Export Mode

Optimize queries for full data exports without pagination:

{ "isLoadingAll": true, "filter": ["active", "=", true], "sort": [{"selector": "lastName", "desc": false}] }
DevExtremeLoadOptions options = DevExtremeLoadOptionsParser.fromJson(jsonRequest); // Check if exporting if (Boolean.TRUE.equals(options.getIsLoadingAll())) { gridDataProvider.setQueryTimeout(300); // 5 minutes for large exports } DevExtremeResult<Employee> result = gridDataProvider .query(Employee.class) .loadOptions(options) .executeDevExtreme(); // Returns all matching records without pagination List<Employee> allEmployees = (List<Employee>) result.getData();

Multi-Level Grouping

{ "group": [ { "selector": "departmentId", "isExpanded": true }, { "selector": "managerId", "isExpanded": true }, { "selector": "active", "isExpanded": false } ], "groupSummary": [ {"selector": "salary", "summaryType": "sum"}, {"selector": "id", "summaryType": "count"} ] }

Count Semantics:

  • Single-level collapsed groups: count = number of items
  • Multi-level expanded parent groups: count = number of immediate child groups
  • Summary counts: Always reflect actual item counts

Testing

Unit Tests

mvn test

Integration Tests

Integration tests use TestContainers for real database testing:

mvn verify

Code Coverage

Generate JaCoCo coverage report:

mvn test jacoco:report

Report location: target/site/jacoco/index.html

Last updated on