#17 通过MAAT_SET_SCAN_LAST_REGION决定何时返回包含“非”分组的编译配置命中。
This commit is contained in:
@@ -155,8 +155,9 @@ int region_compile(_Maat_feather_t*feather,struct _INNER_scan_status_t *_mid,int
|
|||||||
scan_ret=shortcut_avilable_cnt;
|
scan_ret=shortcut_avilable_cnt;
|
||||||
alignment_int64_array_add(feather->orphan_group_saving, thread_num, 1);
|
alignment_int64_array_add(feather->orphan_group_saving, thread_num, 1);
|
||||||
}
|
}
|
||||||
else if(shortcut_avilable_cnt==0&®ion_hit_num==1&&_mid->hit_group_cnt==1&&is_last_region==1)
|
else if(0&&shortcut_avilable_cnt==0&®ion_hit_num==1&&_mid->hit_group_cnt==1&&is_last_region==1)
|
||||||
{
|
{
|
||||||
|
//This shortcut is NO longger valid after bool macher support NOT-logic.
|
||||||
//short cut for last scan and combination rules
|
//short cut for last scan and combination rules
|
||||||
//region_hit_num==1 : for current scan hitted rules, one and each other group may statisfy a compile rule.
|
//region_hit_num==1 : for current scan hitted rules, one and each other group may statisfy a compile rule.
|
||||||
//_mid->hit_group_cnt==1: With pre scan hitted group rules, one group may staisfy a compile rule
|
//_mid->hit_group_cnt==1: With pre scan hitted group rules, one group may staisfy a compile rule
|
||||||
@@ -179,7 +180,7 @@ int region_compile(_Maat_feather_t*feather,struct _INNER_scan_status_t *_mid,int
|
|||||||
|
|
||||||
if(0==pthread_rwlock_tryrdlock(&(_mi_rule->rwlock)))
|
if(0==pthread_rwlock_tryrdlock(&(_mi_rule->rwlock)))
|
||||||
{
|
{
|
||||||
if(_mi_rule->is_valid==1)
|
if(_mi_rule->is_valid==1 && !(_mi_rule->not_group_cnt>0 && !is_last_region))
|
||||||
{
|
{
|
||||||
make_group_set(_mi_rule, &(rs_result[result_cnt].group_set), &has_not_flag);
|
make_group_set(_mi_rule, &(rs_result[result_cnt].group_set), &has_not_flag);
|
||||||
r_in_c_cnt=pickup_hit_region_from_compile(&(rs_result[result_cnt].group_set), _mid->cur_hit_id, _mid->cur_hit_cnt,
|
r_in_c_cnt=pickup_hit_region_from_compile(&(rs_result[result_cnt].group_set), _mid->cur_hit_id, _mid->cur_hit_cnt,
|
||||||
|
|||||||
@@ -1802,6 +1802,7 @@ int add_group_to_compile(struct Maat_compile_inner_t*a_compile_rule,struct Maat_
|
|||||||
if(not_flag)
|
if(not_flag)
|
||||||
{
|
{
|
||||||
a_compile_rule->not_flag[write_pos]=1;
|
a_compile_rule->not_flag[write_pos]=1;
|
||||||
|
a_compile_rule->not_group_cnt++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1853,7 +1854,11 @@ struct Maat_group_inner_t* del_group_from_compile(struct Maat_compile_inner_t*a_
|
|||||||
{
|
{
|
||||||
group_rule->ref_cnt--;
|
group_rule->ref_cnt--;
|
||||||
dynamic_array_write(a_compile_rule->groups,i,NULL);
|
dynamic_array_write(a_compile_rule->groups,i,NULL);
|
||||||
|
if(a_compile_rule->not_flag[i]==1)
|
||||||
|
{
|
||||||
|
a_compile_rule->not_group_cnt--;
|
||||||
a_compile_rule->not_flag[i]=0;
|
a_compile_rule->not_flag[i]=0;
|
||||||
|
}
|
||||||
a_compile_rule->group_cnt--;
|
a_compile_rule->group_cnt--;
|
||||||
pthread_rwlock_unlock(&(a_compile_rule->rwlock));
|
pthread_rwlock_unlock(&(a_compile_rule->rwlock));
|
||||||
return group_rule;
|
return group_rule;
|
||||||
|
|||||||
@@ -147,7 +147,8 @@ struct Maat_compile_inner_t
|
|||||||
struct db_compile_rule_t *db_c_rule;
|
struct db_compile_rule_t *db_c_rule;
|
||||||
dynamic_array_t *groups; //element is struct Maat_group_inner_t*
|
dynamic_array_t *groups; //element is struct Maat_group_inner_t*
|
||||||
char not_flag[MAX_ITEMS_PER_BOOL_EXPR];
|
char not_flag[MAX_ITEMS_PER_BOOL_EXPR];
|
||||||
int is_valid;
|
char not_group_cnt;
|
||||||
|
char is_valid;
|
||||||
int compile_id;//equal to db_c_rule->m_rule.config_id
|
int compile_id;//equal to db_c_rule->m_rule.config_id
|
||||||
const struct Maat_table_desc* ref_table;
|
const struct Maat_table_desc* ref_table;
|
||||||
int group_boundary;
|
int group_boundary;
|
||||||
|
|||||||
@@ -303,12 +303,14 @@ TEST(Boolmatcher, NotFlagGroup)
|
|||||||
table_id=Maat_table_register(g_feather,table_name);
|
table_id=Maat_table_register(g_feather,table_name);
|
||||||
ASSERT_GT(table_id, 0);
|
ASSERT_GT(table_id, 0);
|
||||||
|
|
||||||
|
Maat_set_scan_status(g_feather, &mid, MAAT_SET_SCAN_LAST_REGION, NULL, 0);
|
||||||
ret=Maat_full_scan_string(g_feather, table_id,CHARSET_GBK, string_should_hit, strlen(string_should_hit),
|
ret=Maat_full_scan_string(g_feather, table_id,CHARSET_GBK, string_should_hit, strlen(string_should_hit),
|
||||||
result,found_pos, 4, &mid, 0);
|
result,found_pos, 4, &mid, 0);
|
||||||
|
|
||||||
EXPECT_GE(ret, 1);
|
EXPECT_GE(ret, 1);
|
||||||
Maat_clean_status(&mid);
|
Maat_clean_status(&mid);
|
||||||
|
|
||||||
|
Maat_set_scan_status(g_feather, &mid, MAAT_SET_SCAN_LAST_REGION, NULL, 0);
|
||||||
ret=Maat_full_scan_string(g_feather, table_id,CHARSET_GBK, string_should_not_hit, strlen(string_should_not_hit),
|
ret=Maat_full_scan_string(g_feather, table_id,CHARSET_GBK, string_should_not_hit, strlen(string_should_not_hit),
|
||||||
result,found_pos, 4, &mid, 0);
|
result,found_pos, 4, &mid, 0);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user