修复bug:删除group时,未检查virtual table id。make_group_set中,使用错误的下标,导致删除分组后不命中。

This commit is contained in:
zhengchao
2019-11-29 11:33:20 +08:00
parent ce2c64cb23
commit 08bf1e9228

View File

@@ -33,7 +33,7 @@
#include "stream_fuzzy_hash.h"
#include "gram_index_engine.h"
int MAAT_FRAME_VERSION_2_8_20191126=1;
int MAAT_FRAME_VERSION_2_8_20191129=1;
int is_valid_table_name(const char* str)
{
@@ -637,8 +637,8 @@ void make_group_set(struct Maat_compile_group_relation* relation, struct bool_ex
continue;
}
//high 32 bit is virtual table id, low 32 bit is group id.
a_set->items[j].item_id=(unsigned long long)relation->virtual_table_id[j]<<32|group->group_id;
a_set->items[j].not_flag=relation->not_flag[j];
a_set->items[j].item_id=TO_RELATION_ID(relation->virtual_table_id[i], group->group_id);
a_set->items[j].not_flag=relation->not_flag[i];
if(a_set->items[j].not_flag)
{
*has_not=1;
@@ -1481,7 +1481,7 @@ error_out:
return ret;
}
struct Maat_group_inner* del_group_from_compile(struct Maat_compile_group_relation*relation, int group_id)
struct Maat_group_inner* del_group_from_compile(struct Maat_compile_group_relation*relation, int group_id, int virual_table_id)
{
int i=0;
struct Maat_group_inner* group_rule=NULL;
@@ -1493,7 +1493,7 @@ struct Maat_group_inner* del_group_from_compile(struct Maat_compile_group_relati
{
continue;
}
if(group_rule->group_id==group_id)
if(group_rule->group_id==group_id && relation->virtual_table_id[i]==virual_table_id)
{
dynamic_array_write(relation->groups,i,NULL);
if(relation->not_flag[i]==1)
@@ -1501,6 +1501,7 @@ struct Maat_group_inner* del_group_from_compile(struct Maat_compile_group_relati
relation->not_group_cnt--;
relation->not_flag[i]=0;
}
relation->virtual_table_id[i]=0;
relation->group_cnt--;
break;
}
@@ -2099,7 +2100,7 @@ int del_group_rule(struct Maat_table_desc* table, struct db_group_rule_t* db_gro
db_group_rule->parent_id);
return 0;
}
group_rule=del_group_from_compile(relation, db_group_rule->group_id);
group_rule=del_group_from_compile(relation, db_group_rule->group_id, db_group_rule->virtual_table_id);
if(group_rule==NULL)
{
MESA_handle_runtime_log(logger, RLOG_LV_FATAL, maat_module,