diff --git a/distr/flecs.c b/distr/flecs.c index 807c02250..83d13d254 100644 --- a/distr/flecs.c +++ b/distr/flecs.c @@ -13849,7 +13849,8 @@ void flecs_emit( if (count) { storage_i = tr->column; bool is_sparse = idr->flags & EcsIdIsSparse; - if (storage_i != -1 || is_sparse) { + + if (!ecs_id_is_wildcard(id) && (storage_i != -1 || is_sparse)) { void *ptr; ecs_size_t size = idr->type_info->size; @@ -36230,7 +36231,7 @@ void flecs_table_init_columns( int16_t *s2t = &table->column_map[ids_count]; for (i = 0; i < ids_count; i ++) { - ecs_id_t id = table->type.array[i]; + ecs_id_t id = ids[i]; ecs_table_record_t *tr = &records[i]; ecs_id_record_t *idr = (ecs_id_record_t*)tr->hdr.cache; const ecs_type_info_t *ti = idr->type_info; @@ -36250,17 +36251,21 @@ void flecs_table_init_columns( table->component_map[id] = flecs_ito(int16_t, cur + 1); } - if (ECS_IS_PAIR(ids[i])) { - ecs_table_record_t *wc_tr = flecs_id_record_get_table( - idr->parent, table); - if (wc_tr->index == tr->index) { - wc_tr->column = tr->column; - } - } - table->flags |= flecs_type_info_flags(ti); cur ++; } + + int32_t record_count = table->_->record_count; + for (; i < record_count; i ++) { + ecs_table_record_t *tr = &records[i]; + ecs_id_record_t *idr = (ecs_id_record_t*)tr->hdr.cache; + ecs_id_t id = idr->id; + + if (ecs_id_is_wildcard(id)) { + ecs_table_record_t *first_tr = &records[tr->index]; + tr->column = first_tr->column; + } + } } /* Initialize table storage */ @@ -68951,7 +68956,7 @@ bool flecs_query_with( { ecs_query_and_ctx_t *op_ctx = flecs_op_ctx(ctx, and); ecs_id_record_t *idr = op_ctx->idr; - const ecs_table_record_t *tr; + ecs_table_record_t *tr; ecs_table_t *table = flecs_query_get_table(op, &op->src, EcsQuerySrc, ctx); if (!table) { @@ -68974,6 +68979,7 @@ bool flecs_query_with( op_ctx->column = flecs_ito(int16_t, tr->index); op_ctx->remaining = flecs_ito(int16_t, tr->count); + op_ctx->it.cur = &tr->hdr; } else { ecs_assert((op_ctx->remaining + op_ctx->column - 1) < table->type.count, ECS_INTERNAL_ERROR, NULL); @@ -69120,16 +69126,6 @@ bool flecs_query_self_up( } } -static -bool flecs_query_select_any( - const ecs_query_op_t *op, - bool redo, - const ecs_query_run_ctx_t *ctx) -{ - return flecs_query_select_w_id(op, redo, ctx, EcsAny, - (EcsTableNotQueryable|EcsTableIsPrefab|EcsTableIsDisabled)); -} - static bool flecs_query_and_any( const ecs_query_op_t *op, @@ -69153,8 +69149,9 @@ bool flecs_query_and_any( remaining = 0; } + ecs_query_and_ctx_t *op_ctx = flecs_op_ctx(ctx, and); + if (!redo) { - ecs_query_and_ctx_t *op_ctx = flecs_op_ctx(ctx, and); if (match_flags & EcsTermMatchAny && op_ctx->remaining) { op_ctx->remaining = flecs_ito(int16_t, remaining); } @@ -69165,6 +69162,8 @@ bool flecs_query_and_any( ctx->it->ids[field] = flecs_query_op_get_id(op, ctx); } + ctx->it->trs[field] = (ecs_table_record_t*)op_ctx->it.cur; + return result; } @@ -69178,7 +69177,8 @@ bool flecs_query_only_any( if (flecs_ref_is_written(op, &op->src, EcsQuerySrc, written)) { return flecs_query_and_any(op, redo, ctx); } else { - return flecs_query_select_any(op, redo, ctx); + return flecs_query_select_w_id(op, redo, ctx, EcsAny, + (EcsTableNotQueryable|EcsTableIsPrefab|EcsTableIsDisabled)); } } diff --git a/src/observable.c b/src/observable.c index 13dbee09f..69974fdfe 100644 --- a/src/observable.c +++ b/src/observable.c @@ -1345,7 +1345,8 @@ void flecs_emit( if (count) { storage_i = tr->column; bool is_sparse = idr->flags & EcsIdIsSparse; - if (storage_i != -1 || is_sparse) { + + if (!ecs_id_is_wildcard(id) && (storage_i != -1 || is_sparse)) { void *ptr; ecs_size_t size = idr->type_info->size; diff --git a/src/query/engine/eval.c b/src/query/engine/eval.c index 3ee02e9e1..4700a1572 100644 --- a/src/query/engine/eval.c +++ b/src/query/engine/eval.c @@ -95,7 +95,7 @@ bool flecs_query_with( { ecs_query_and_ctx_t *op_ctx = flecs_op_ctx(ctx, and); ecs_id_record_t *idr = op_ctx->idr; - const ecs_table_record_t *tr; + ecs_table_record_t *tr; ecs_table_t *table = flecs_query_get_table(op, &op->src, EcsQuerySrc, ctx); if (!table) { @@ -118,6 +118,7 @@ bool flecs_query_with( op_ctx->column = flecs_ito(int16_t, tr->index); op_ctx->remaining = flecs_ito(int16_t, tr->count); + op_ctx->it.cur = &tr->hdr; } else { ecs_assert((op_ctx->remaining + op_ctx->column - 1) < table->type.count, ECS_INTERNAL_ERROR, NULL); @@ -264,16 +265,6 @@ bool flecs_query_self_up( } } -static -bool flecs_query_select_any( - const ecs_query_op_t *op, - bool redo, - const ecs_query_run_ctx_t *ctx) -{ - return flecs_query_select_w_id(op, redo, ctx, EcsAny, - (EcsTableNotQueryable|EcsTableIsPrefab|EcsTableIsDisabled)); -} - static bool flecs_query_and_any( const ecs_query_op_t *op, @@ -297,8 +288,9 @@ bool flecs_query_and_any( remaining = 0; } + ecs_query_and_ctx_t *op_ctx = flecs_op_ctx(ctx, and); + if (!redo) { - ecs_query_and_ctx_t *op_ctx = flecs_op_ctx(ctx, and); if (match_flags & EcsTermMatchAny && op_ctx->remaining) { op_ctx->remaining = flecs_ito(int16_t, remaining); } @@ -309,6 +301,8 @@ bool flecs_query_and_any( ctx->it->ids[field] = flecs_query_op_get_id(op, ctx); } + ctx->it->trs[field] = (ecs_table_record_t*)op_ctx->it.cur; + return result; } @@ -322,7 +316,8 @@ bool flecs_query_only_any( if (flecs_ref_is_written(op, &op->src, EcsQuerySrc, written)) { return flecs_query_and_any(op, redo, ctx); } else { - return flecs_query_select_any(op, redo, ctx); + return flecs_query_select_w_id(op, redo, ctx, EcsAny, + (EcsTableNotQueryable|EcsTableIsPrefab|EcsTableIsDisabled)); } } diff --git a/src/storage/table.c b/src/storage/table.c index ee2178855..13156ea70 100644 --- a/src/storage/table.c +++ b/src/storage/table.c @@ -152,7 +152,7 @@ void flecs_table_init_columns( int16_t *s2t = &table->column_map[ids_count]; for (i = 0; i < ids_count; i ++) { - ecs_id_t id = table->type.array[i]; + ecs_id_t id = ids[i]; ecs_table_record_t *tr = &records[i]; ecs_id_record_t *idr = (ecs_id_record_t*)tr->hdr.cache; const ecs_type_info_t *ti = idr->type_info; @@ -172,17 +172,21 @@ void flecs_table_init_columns( table->component_map[id] = flecs_ito(int16_t, cur + 1); } - if (ECS_IS_PAIR(ids[i])) { - ecs_table_record_t *wc_tr = flecs_id_record_get_table( - idr->parent, table); - if (wc_tr->index == tr->index) { - wc_tr->column = tr->column; - } - } - table->flags |= flecs_type_info_flags(ti); cur ++; } + + int32_t record_count = table->_->record_count; + for (; i < record_count; i ++) { + ecs_table_record_t *tr = &records[i]; + ecs_id_record_t *idr = (ecs_id_record_t*)tr->hdr.cache; + ecs_id_t id = idr->id; + + if (ecs_id_is_wildcard(id)) { + ecs_table_record_t *first_tr = &records[tr->index]; + tr->column = first_tr->column; + } + } } /* Initialize table storage */ diff --git a/test/query/project.json b/test/query/project.json index 278b5da17..d721b1d68 100644 --- a/test/query/project.json +++ b/test/query/project.json @@ -681,7 +681,17 @@ "ref_fields_up_src", "ref_fields_self_up_src", "0_src_match_nothing", - "0_terms_match_nothing" + "0_terms_match_nothing", + "any_record", + "pair_rel_any_record", + "pair_tgt_any_record", + "pair_any_any_record", + "written_any_record", + "written_pair_rel_any_record", + "written_pair_tgt_any_record", + "written_pair_any_any_record", + "pair_rel_any_record_component", + "pair_tgt_any_record_component" ] }, { "id": "Combinations", diff --git a/test/query/src/Basic.c b/test/query/src/Basic.c index acf172b61..868a6475f 100644 --- a/test/query/src/Basic.c +++ b/test/query/src/Basic.c @@ -10776,3 +10776,443 @@ void Basic_0_terms_match_nothing(void) { ecs_fini(world); } + +void Basic_any_record(void) { + test_quarantine("25 Sept 2024"); + + ecs_world_t *world = ecs_mini(); + + ECS_COMPONENT(world, Position); + ECS_TAG(world, RelX); + ECS_TAG(world, RelY); + ECS_TAG(world, TgtA); + ECS_TAG(world, TgtB); + ECS_TAG(world, TgtC); + + ecs_query_t *q = ecs_query(world, { + .expr = "_", + .cache_kind = cache_kind + }); + + test_assert(q != NULL); + + ecs_entity_t e = ecs_new(world); + ecs_add(world, e, Position); + ecs_add_pair(world, e, RelX, TgtA); + ecs_add_pair(world, e, RelX, TgtB); + ecs_add_pair(world, e, RelX, TgtC); + ecs_add_pair(world, e, RelY, TgtA); + ecs_add_pair(world, e, RelY, TgtB); + + bool matched = false; + + ecs_iter_t it = ecs_query_iter(world, q); + while (ecs_query_next(&it)) { + if (it.count == 1 && it.entities[0] == e) { + test_uint(EcsWildcard, ecs_field_id(&it, 0)); + const ecs_table_record_t *tr = it.trs[0]; + test_assert(tr != NULL); + test_int(tr->index, 0); + test_int(tr->column, -1); + test_int(tr->count, 6); + matched = true; + } + } + + test_bool(true, matched); + + ecs_query_fini(q); + + ecs_fini(world); +} + +void Basic_pair_rel_any_record(void) { + ecs_world_t *world = ecs_mini(); + + ECS_COMPONENT(world, Position); + ECS_TAG(world, RelX); + ECS_TAG(world, RelY); + ECS_TAG(world, TgtA); + ECS_TAG(world, TgtB); + ECS_TAG(world, TgtC); + + ecs_query_t *q = ecs_query(world, { + .expr = "(_, TgtB)", + .cache_kind = cache_kind + }); + + test_assert(q != NULL); + + ecs_entity_t e = ecs_new(world); + ecs_add(world, e, Position); + ecs_add_pair(world, e, RelX, TgtA); + ecs_add_pair(world, e, RelX, TgtB); + ecs_add_pair(world, e, RelX, TgtC); + ecs_add_pair(world, e, RelY, TgtA); + ecs_add_pair(world, e, RelY, TgtB); + + ecs_iter_t it = ecs_query_iter(world, q); + test_bool(true, ecs_query_next(&it)); + test_uint(1, it.count); + test_uint(e, it.entities[0]); + test_uint(ecs_pair(EcsWildcard, TgtB), ecs_field_id(&it, 0)); + const ecs_table_record_t *tr = it.trs[0]; + test_assert(tr != NULL); + test_int(tr->index, 2); + test_int(tr->column, -1); + test_int(tr->count, 2); + test_bool(false, ecs_query_next(&it)); + + ecs_query_fini(q); + + ecs_fini(world); +} + +void Basic_pair_tgt_any_record(void) { + ecs_world_t *world = ecs_mini(); + + ECS_COMPONENT(world, Position); + ECS_TAG(world, RelX); + ECS_TAG(world, RelY); + ECS_TAG(world, TgtA); + ECS_TAG(world, TgtB); + ECS_TAG(world, TgtC); + + ecs_query_t *q = ecs_query(world, { + .expr = "(RelX, _)", + .cache_kind = cache_kind + }); + + test_assert(q != NULL); + + ecs_entity_t e = ecs_new(world); + ecs_add(world, e, Position); + ecs_add_pair(world, e, RelX, TgtA); + ecs_add_pair(world, e, RelX, TgtB); + ecs_add_pair(world, e, RelX, TgtC); + ecs_add_pair(world, e, RelY, TgtA); + ecs_add_pair(world, e, RelY, TgtB); + + ecs_iter_t it = ecs_query_iter(world, q); + test_bool(true, ecs_query_next(&it)); + test_uint(1, it.count); + test_uint(e, it.entities[0]); + test_uint(ecs_pair(RelX, EcsWildcard), ecs_field_id(&it, 0)); + const ecs_table_record_t *tr = it.trs[0]; + test_assert(tr != NULL); + test_int(tr->index, 1); + test_int(tr->column, -1); + test_int(tr->count, 3); + test_bool(false, ecs_query_next(&it)); + + ecs_query_fini(q); + + ecs_fini(world); +} + +void Basic_pair_any_any_record(void) { + ecs_world_t *world = ecs_mini(); + + ECS_COMPONENT(world, Position); + ECS_TAG(world, RelX); + ECS_TAG(world, RelY); + ECS_TAG(world, TgtA); + ECS_TAG(world, TgtB); + ECS_TAG(world, TgtC); + + ecs_query_t *q = ecs_query(world, { + .expr = "(_, _)", + .cache_kind = cache_kind + }); + + test_assert(q != NULL); + + ecs_entity_t e = ecs_new(world); + ecs_add(world, e, Position); + ecs_add_pair(world, e, RelX, TgtA); + ecs_add_pair(world, e, RelX, TgtB); + ecs_add_pair(world, e, RelX, TgtC); + ecs_add_pair(world, e, RelY, TgtA); + ecs_add_pair(world, e, RelY, TgtB); + + bool matched = false; + + ecs_iter_t it = ecs_query_iter(world, q); + while (ecs_query_next(&it)) { + if (it.count == 1 && it.entities[0] == e) { + test_uint(ecs_pair(EcsWildcard, EcsWildcard), ecs_field_id(&it, 0)); + const ecs_table_record_t *tr = it.trs[0]; + test_assert(tr != NULL); + test_int(tr->index, 1); + test_int(tr->column, -1); + test_int(tr->count, 5); + matched = true; + } + } + + test_bool(true, matched); + + ecs_query_fini(q); + + ecs_fini(world); +} + +void Basic_written_any_record(void) { + test_quarantine("25 Sept 2024"); + + ecs_world_t *world = ecs_mini(); + + ECS_COMPONENT(world, Position); + ECS_TAG(world, RelX); + ECS_TAG(world, RelY); + ECS_TAG(world, TgtA); + ECS_TAG(world, TgtB); + ECS_TAG(world, TgtC); + + ecs_query_t *q = ecs_query(world, { + .expr = "Position, _", + .cache_kind = cache_kind + }); + + test_assert(q != NULL); + + ecs_entity_t e = ecs_new(world); + ecs_add(world, e, Position); + ecs_add_pair(world, e, RelX, TgtA); + ecs_add_pair(world, e, RelX, TgtB); + ecs_add_pair(world, e, RelX, TgtC); + ecs_add_pair(world, e, RelY, TgtA); + ecs_add_pair(world, e, RelY, TgtB); + + ecs_iter_t it = ecs_query_iter(world, q); + test_bool(true, ecs_query_next(&it)); + test_uint(1, it.count); + test_uint(e, it.entities[0]); + test_uint(EcsWildcard, ecs_field_id(&it, 1)); + const ecs_table_record_t *tr = it.trs[1]; + test_assert(tr != NULL); + test_int(tr->index, 0); + test_int(tr->column, -1); + test_int(tr->count, 6); + test_bool(false, ecs_query_next(&it)); + + ecs_query_fini(q); + + ecs_fini(world); +} + +void Basic_written_pair_rel_any_record(void) { + ecs_world_t *world = ecs_mini(); + + ECS_COMPONENT(world, Position); + ECS_TAG(world, RelX); + ECS_TAG(world, RelY); + ECS_TAG(world, TgtA); + ECS_TAG(world, TgtB); + ECS_TAG(world, TgtC); + + ecs_query_t *q = ecs_query(world, { + .expr = "Position, (_, TgtB)", + .cache_kind = cache_kind + }); + + test_assert(q != NULL); + + ecs_entity_t e = ecs_new(world); + ecs_add(world, e, Position); + ecs_add_pair(world, e, RelX, TgtA); + ecs_add_pair(world, e, RelX, TgtB); + ecs_add_pair(world, e, RelX, TgtC); + ecs_add_pair(world, e, RelY, TgtA); + ecs_add_pair(world, e, RelY, TgtB); + + ecs_iter_t it = ecs_query_iter(world, q); + test_bool(true, ecs_query_next(&it)); + test_uint(1, it.count); + test_uint(e, it.entities[0]); + test_uint(ecs_pair(EcsWildcard, TgtB), ecs_field_id(&it, 1)); + const ecs_table_record_t *tr = it.trs[1]; + test_assert(tr != NULL); + test_int(tr->index, 2); + test_int(tr->column, -1); + test_int(tr->count, 2); + test_bool(false, ecs_query_next(&it)); + + ecs_query_fini(q); + + ecs_fini(world); +} + +void Basic_written_pair_tgt_any_record(void) { + ecs_world_t *world = ecs_mini(); + + ECS_COMPONENT(world, Position); + ECS_TAG(world, RelX); + ECS_TAG(world, RelY); + ECS_TAG(world, TgtA); + ECS_TAG(world, TgtB); + ECS_TAG(world, TgtC); + + ecs_query_t *q = ecs_query(world, { + .expr = "Position, (RelX, _)", + .cache_kind = cache_kind + }); + + test_assert(q != NULL); + + ecs_entity_t e = ecs_new(world); + ecs_add(world, e, Position); + ecs_add_pair(world, e, RelX, TgtA); + ecs_add_pair(world, e, RelX, TgtB); + ecs_add_pair(world, e, RelX, TgtC); + ecs_add_pair(world, e, RelY, TgtA); + ecs_add_pair(world, e, RelY, TgtB); + + ecs_iter_t it = ecs_query_iter(world, q); + test_bool(true, ecs_query_next(&it)); + test_uint(1, it.count); + test_uint(e, it.entities[0]); + test_uint(ecs_pair(RelX, EcsWildcard), ecs_field_id(&it, 1)); + const ecs_table_record_t *tr = it.trs[1]; + test_assert(tr != NULL); + test_int(tr->index, 1); + test_int(tr->column, -1); + test_int(tr->count, 3); + test_bool(false, ecs_query_next(&it)); + + ecs_query_fini(q); + + ecs_fini(world); +} + +void Basic_written_pair_any_any_record(void) { + ecs_world_t *world = ecs_mini(); + + ECS_COMPONENT(world, Position); + ECS_TAG(world, RelX); + ECS_TAG(world, RelY); + ECS_TAG(world, TgtA); + ECS_TAG(world, TgtB); + ECS_TAG(world, TgtC); + + ecs_query_t *q = ecs_query(world, { + .expr = "Position, (_, _)", + .cache_kind = cache_kind + }); + + test_assert(q != NULL); + + ecs_entity_t e = ecs_new(world); + ecs_add(world, e, Position); + ecs_add_pair(world, e, RelX, TgtA); + ecs_add_pair(world, e, RelX, TgtB); + ecs_add_pair(world, e, RelX, TgtC); + ecs_add_pair(world, e, RelY, TgtA); + ecs_add_pair(world, e, RelY, TgtB); + + ecs_iter_t it = ecs_query_iter(world, q); + test_bool(true, ecs_query_next(&it)); + test_uint(1, it.count); + test_uint(e, it.entities[0]); + test_uint(ecs_pair(EcsWildcard, EcsWildcard), ecs_field_id(&it, 1)); + const ecs_table_record_t *tr = it.trs[1]; + test_assert(tr != NULL); + test_int(tr->index, 1); + test_int(tr->column, -1); + test_int(tr->count, 5); + test_bool(false, ecs_query_next(&it)); + + ecs_query_fini(q); + + ecs_fini(world); +} + +void Basic_pair_rel_any_record_component(void) { + ecs_world_t *world = ecs_mini(); + + ECS_COMPONENT(world, Position); + ECS_TAG(world, RelX); + ECS_TAG(world, RelY); + ECS_TAG(world, TgtA); + ECS_TAG(world, TgtB); + ECS_TAG(world, TgtC); + + ecs_query_t *q = ecs_query(world, { + .expr = "(_, Position)", + .cache_kind = cache_kind + }); + + test_assert(q != NULL); + + ecs_entity_t e = ecs_new(world); + ecs_add(world, e, Position); + ecs_set_pair_second(world, e, RelX, Position, {10, 20}); + ecs_set_pair_second(world, e, RelY, Position, {20, 0}); + + ecs_iter_t it = ecs_query_iter(world, q); + test_bool(true, ecs_query_next(&it)); + test_uint(1, it.count); + test_uint(e, it.entities[0]); + test_uint(ecs_pair(EcsWildcard, ecs_id(Position)), ecs_field_id(&it, 0)); + const ecs_table_record_t *tr = it.trs[0]; + test_assert(tr != NULL); + test_int(tr->index, 1); + test_int(tr->column, 1); + test_int(tr->count, 2); + { + Position *p = ecs_field(&it, Position, 0); + test_assert(p != NULL); + test_int(p->x, 10); + test_int(p->y, 20); + } + test_bool(false, ecs_query_next(&it)); + + ecs_query_fini(q); + + ecs_fini(world); +} + +void Basic_pair_tgt_any_record_component(void) { + ecs_world_t *world = ecs_mini(); + + ECS_COMPONENT(world, Position); + ECS_TAG(world, RelX); + ECS_TAG(world, RelY); + ECS_TAG(world, TgtA); + ECS_TAG(world, TgtB); + ECS_TAG(world, TgtC); + + ecs_query_t *q = ecs_query(world, { + .expr = "(Position, _)", + .cache_kind = cache_kind + }); + + test_assert(q != NULL); + + ecs_entity_t e = ecs_new(world); + ecs_add(world, e, Position); + ecs_set_pair(world, e, Position, RelX, {10, 20}); + ecs_set_pair(world, e, Position, RelY, {20, 30}); + + ecs_iter_t it = ecs_query_iter(world, q); + test_bool(true, ecs_query_next(&it)); + test_uint(1, it.count); + test_uint(e, it.entities[0]); + test_uint(ecs_pair_t(Position, EcsWildcard), ecs_field_id(&it, 0)); + const ecs_table_record_t *tr = it.trs[0]; + test_assert(tr != NULL); + test_int(tr->index, 1); + test_int(tr->column, 1); + test_int(tr->count, 2); + { + Position *p = ecs_field(&it, Position, 0); + test_assert(p != NULL); + test_int(p->x, 10); + test_int(p->y, 20); + } + test_bool(false, ecs_query_next(&it)); + + ecs_query_fini(q); + + ecs_fini(world); +} diff --git a/test/query/src/main.c b/test/query/src/main.c index 79c7d9b85..55a1e3fc5 100644 --- a/test/query/src/main.c +++ b/test/query/src/main.c @@ -670,6 +670,16 @@ void Basic_ref_fields_up_src(void); void Basic_ref_fields_self_up_src(void); void Basic_0_src_match_nothing(void); void Basic_0_terms_match_nothing(void); +void Basic_any_record(void); +void Basic_pair_rel_any_record(void); +void Basic_pair_tgt_any_record(void); +void Basic_pair_any_any_record(void); +void Basic_written_any_record(void); +void Basic_written_pair_rel_any_record(void); +void Basic_written_pair_tgt_any_record(void); +void Basic_written_pair_any_any_record(void); +void Basic_pair_rel_any_record_component(void); +void Basic_pair_tgt_any_record_component(void); // Testsuite 'Combinations' void Combinations_setup(void); @@ -4727,6 +4737,46 @@ bake_test_case Basic_testcases[] = { { "0_terms_match_nothing", Basic_0_terms_match_nothing + }, + { + "any_record", + Basic_any_record + }, + { + "pair_rel_any_record", + Basic_pair_rel_any_record + }, + { + "pair_tgt_any_record", + Basic_pair_tgt_any_record + }, + { + "pair_any_any_record", + Basic_pair_any_any_record + }, + { + "written_any_record", + Basic_written_any_record + }, + { + "written_pair_rel_any_record", + Basic_written_pair_rel_any_record + }, + { + "written_pair_tgt_any_record", + Basic_written_pair_tgt_any_record + }, + { + "written_pair_any_any_record", + Basic_written_pair_any_any_record + }, + { + "pair_rel_any_record_component", + Basic_pair_rel_any_record_component + }, + { + "pair_tgt_any_record_component", + Basic_pair_tgt_any_record_component } }; @@ -10357,7 +10407,7 @@ static bake_test_suite suites[] = { "Basic", Basic_setup, NULL, - 214, + 224, Basic_testcases, 1, Basic_params