@@ -77706,6 +77706,10 @@ ecs_query_cache_t* flecs_query_cache_init(
7770677706 flecs_query_cache_group_by(result, result->query->terms[cascade_by - 1].id,
7770777707 flecs_query_cache_group_by_cascade);
7770877708 result->group_by_ctx = &result->query->terms[cascade_by - 1];
77709+ result->query->flags |= EcsQueryGroupByOrdered;
77710+ if (result->query->terms[cascade_by - 1].src.id & EcsDesc) {
77711+ result->query->flags |= EcsQueryGroupByDesc;
77712+ }
7770977713 }
7771077714
7771177715 if (const_desc->group_by_callback || const_desc->group_by) {
@@ -78855,14 +78859,16 @@ ecs_query_cache_group_t* flecs_query_cache_get_group(
7885578859static
7885678860void flecs_query_cache_group_insert(
7885778861 ecs_query_cache_t *cache,
78858- ecs_query_cache_group_t *group)
78862+ ecs_query_cache_group_t *group)
7885978863{
78860- bool desc = false; /* Descending order */
78861- if (cache->cascade_by) {
78862- desc = ( cache->query->terms[
78863- cache->cascade_by - 1].src.id & EcsDesc) != 0 ;
78864+ if (!(cache->query->flags & EcsQueryGroupByOrdered)) {
78865+ group->next = cache->first_group;
78866+ cache->first_group = group;
78867+ return ;
7886478868 }
7886578869
78870+ bool desc = (cache->query->flags & EcsQueryGroupByDesc) != 0;
78871+
7886678872 ecs_query_cache_group_t *cur = cache->first_group, *prev = NULL;
7886778873 do {
7886878874 ecs_assert(cur->info.id != group->info.id, ECS_INTERNAL_ERROR, NULL);
@@ -79572,7 +79578,7 @@ void flecs_query_rematch(
7957279578 /* Iterate all tables in cache, remove ones that weren't just matched */
7957379579 ecs_vec_t unmatched; ecs_vec_init_t(a, &unmatched, ecs_table_t*, 0);
7957479580 ecs_size_t elem_size = flecs_query_cache_elem_size(cache);
79575- ecs_query_cache_group_t *cur = & cache->default_group ;
79581+ ecs_query_cache_group_t *cur = cache->first_group ;
7957679582 do {
7957779583 int32_t i, count = ecs_vec_count(&cur->tables);
7957879584 for (i = 0; i < count; i ++) {
@@ -79824,7 +79830,7 @@ void flecs_query_cache_build_sorted_tables(
7982479830 ecs_vec_clear(&cache->table_slices);
7982579831
7982679832 /* Sort tables in group order */
79827- ecs_query_cache_group_t *cur = & cache->default_group ;
79833+ ecs_query_cache_group_t *cur = cache->first_group ;
7982879834 do {
7982979835 flecs_query_cache_build_sorted_table_range(cache, cur);
7983079836 } while ((cur = cur->next));
@@ -79850,7 +79856,7 @@ void flecs_query_cache_sort_tables(
7985079856
7985179857 bool tables_sorted = false;
7985279858
79853- ecs_query_cache_group_t *cur = & cache->default_group ;
79859+ ecs_query_cache_group_t *cur = cache->first_group ;
7985479860 do {
7985579861 int32_t i, count = ecs_vec_count(&cur->tables);
7985679862 for (i = 0; i < count; i ++) {
0 commit comments