修复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 "stream_fuzzy_hash.h"
#include "gram_index_engine.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) 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; continue;
} }
//high 32 bit is virtual table id, low 32 bit is group id. //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].item_id=TO_RELATION_ID(relation->virtual_table_id[i], group->group_id);
a_set->items[j].not_flag=relation->not_flag[j]; a_set->items[j].not_flag=relation->not_flag[i];
if(a_set->items[j].not_flag) if(a_set->items[j].not_flag)
{ {
*has_not=1; *has_not=1;
@@ -1481,7 +1481,7 @@ error_out:
return ret; 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; int i=0;
struct Maat_group_inner* group_rule=NULL; 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; 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); dynamic_array_write(relation->groups,i,NULL);
if(relation->not_flag[i]==1) 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_group_cnt--;
relation->not_flag[i]=0; relation->not_flag[i]=0;
} }
relation->virtual_table_id[i]=0;
relation->group_cnt--; relation->group_cnt--;
break; 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); db_group_rule->parent_id);
return 0; 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) if(group_rule==NULL)
{ {
MESA_handle_runtime_log(logger, RLOG_LV_FATAL, maat_module, MESA_handle_runtime_log(logger, RLOG_LV_FATAL, maat_module,