[FEATURE]add maat_state_get_last_hit_group_ids API => TSG-17831

This commit is contained in:
刘文坛
2023-12-07 08:08:25 +00:00
parent 59ee9364c9
commit 972d3a1219
5 changed files with 70 additions and 19 deletions

View File

@@ -119,6 +119,10 @@ size_t compile_state_get_indirect_hit_groups(struct compile_state *compile_state
size_t compile_state_get_indirect_hit_group_cnt(struct compile_state *compile_state);
size_t compile_state_get_last_hit_group_id(struct compile_state *compile_state,
long long *group_id_arary,
size_t array_size);
int compile_state_get_compile_table_id(struct compile_state *compile_state,
long long compile_id);

View File

@@ -2139,4 +2139,16 @@ size_t maat_state_get_indirect_hit_group_cnt(struct maat_state *state)
}
return compile_state_get_indirect_hit_group_cnt(state->compile_state);
}
int maat_state_get_last_hit_group_ids(struct maat_state *state,
long long *group_id_array,
size_t array_size)
{
if (NULL == state || NULL == state->compile_state) {
return 0;
}
return compile_state_get_last_hit_group_id(state->compile_state,
group_id_array, array_size);
}

View File

@@ -179,6 +179,7 @@ struct compile_state {
UT_array *exclude_not_clauses;
UT_array *direct_hit_groups;
UT_array *indirect_hit_groups;
UT_array *last_hit_group_ids;
UT_array *hit_compile_table_ids;
struct table_group *hit_not_tbl_groups;
};
@@ -1464,6 +1465,7 @@ struct compile_state *compile_state_new(void)
utarray_new(compile_state->exclude_not_clauses, &ut_clause_id_icd);
utarray_new(compile_state->direct_hit_groups, &ut_maat_hit_group_icd);
utarray_new(compile_state->indirect_hit_groups, &ut_maat_hit_group_icd);
utarray_new(compile_state->last_hit_group_ids, &ut_compile_group_id_icd);
utarray_new(compile_state->hit_compile_table_ids, &ut_hit_compile_table_id_icd);
compile_state->hit_not_tbl_groups = NULL;
@@ -1508,6 +1510,7 @@ void compile_state_reset(struct compile_state *compile_state)
utarray_clear(compile_state->exclude_not_clauses);
utarray_clear(compile_state->direct_hit_groups);
utarray_clear(compile_state->indirect_hit_groups);
utarray_clear(compile_state->last_hit_group_ids);
utarray_clear(compile_state->hit_compile_table_ids);
struct table_group *tbl_group = NULL, *tmp_tbl_group = NULL;
@@ -1567,6 +1570,12 @@ void compile_state_free(struct compile_state *compile_state,
compile_state->indirect_hit_groups = NULL;
}
if (compile_state->last_hit_group_ids != NULL) {
free_bytes += utarray_size(compile_state->last_hit_group_ids) * sizeof(long long);
utarray_free(compile_state->last_hit_group_ids);
compile_state->last_hit_group_ids = NULL;
}
if (compile_state->hit_compile_table_ids != NULL) {
free_bytes += utarray_size(compile_state->hit_compile_table_ids) * sizeof(struct compile2table_id);
utarray_free(compile_state->hit_compile_table_ids);
@@ -2396,13 +2405,15 @@ int compile_state_update(struct compile_state *compile_state, struct maat *maat_
size_t i = 0, j = 0;
size_t hit_cnt = n_hit_item;
long long hit_group_ids[MAX_HIT_GROUP_NUM];
utarray_clear(compile_state->this_scan_hit_clauses);
utarray_clear(compile_state->last_hit_group_ids);
compile_state->this_scan_not_logic = 0;
compile_state->Nth_scan = Nth_scan;
for (i = 0; i < hit_cnt; i++) {
hit_group_ids[i] = hit_items[i].group_id;
utarray_push_back(compile_state->last_hit_group_ids, &hit_items[i].group_id);
}
int g2g_table_id = table_manager_get_group2group_table_id(maat_inst->tbl_mgr);
@@ -2412,11 +2423,14 @@ int compile_state_update(struct compile_state *compile_state, struct maat *maat_
size_t super_group_cnt = group2group_runtime_get_super_groups(g2g_rt, hit_group_ids,
hit_cnt, super_group_ids,
MAX_HIT_GROUP_NUM);
for (i = 0; i < super_group_cnt; i++) {
utarray_push_back(compile_state->last_hit_group_ids, &super_group_ids[i]);
}
if (1 == maat_inst->opts.hit_path_on && hit_cnt > 0) {
for (i = 0; i < hit_cnt; i++) {
compile_state_add_internal_hit_path(compile_state, hit_items[i].item_id,
hit_items[i].group_id, vtable_id,
0, Nth_scan);
hit_items[i].group_id, vtable_id, 0, Nth_scan);
}
}
@@ -2493,10 +2507,6 @@ size_t compile_state_get_indirect_hit_groups(struct compile_state *compile_state
struct maat_hit_group *group_array,
size_t array_size)
{
if (NULL == compile_state) {
return 0;
}
size_t i = 0;
struct maat_hit_group *hit_group = NULL;
for (i = 0; i < utarray_len(compile_state->indirect_hit_groups) && i < array_size; i++) {
@@ -2513,21 +2523,26 @@ size_t compile_state_get_indirect_hit_groups(struct compile_state *compile_state
size_t compile_state_get_indirect_hit_group_cnt(struct compile_state *compile_state)
{
if (NULL == compile_state) {
return 0;
return utarray_len(compile_state->indirect_hit_groups);
}
size_t compile_state_get_last_hit_group_id(struct compile_state *compile_state,
long long *group_id_array,
size_t array_size)
{
size_t i = 0;
for (i = 0; i < utarray_len(compile_state->last_hit_group_ids) && i < array_size; i++) {
group_id_array[i] = *(long long *)utarray_eltptr(compile_state->last_hit_group_ids, i);
}
return utarray_len(compile_state->indirect_hit_groups);
return i;
}
size_t compile_state_get_direct_hit_groups(struct compile_state *compile_state,
struct maat_hit_group *group_array,
size_t array_size)
{
if (NULL == compile_state) {
return 0;
}
UT_array *direct_hit_group = compile_state->direct_hit_groups;
size_t i = 0;
@@ -2546,10 +2561,6 @@ size_t compile_state_get_direct_hit_groups(struct compile_state *compile_state,
size_t compile_state_get_direct_hit_group_cnt(struct compile_state *compile_state)
{
if (NULL == compile_state) {
return 0;
}
return utarray_len(compile_state->direct_hit_groups);
}