int ssa_db_attach(struct ssa_db *dest, struct ssa_db *src, const char *tbl_name) { struct db_dataset *dataset_src, *dataset_dest; int id_src, id_dest; if (!dest || !src || !tbl_name) goto err; id_src = get_table_id(tbl_name, &src->db_table_def, src->p_def_tbl); if (id_src < 0) goto err; dataset_src = &src->p_db_tables[id_src]; if (!dataset_src->set_size || !src->pp_tables[id_src]) goto skip_attach; id_dest = get_table_id(tbl_name, &dest->db_table_def, dest->p_def_tbl); if (id_dest < 0) goto err; dataset_dest = &dest->p_db_tables[id_dest]; if (dataset_dest->set_size > 0 || dataset_dest->set_count > 0 || dest->pp_tables[id_dest]) goto err; if (dataset_dest->version != dataset_src->version || dataset_dest->size != dataset_src->size || dataset_dest->access != dataset_src->access) goto err; dest->pp_tables[id_dest] = malloc(ntohll(dataset_src->set_size)); if (!dest->pp_tables[id_dest]) goto err; memcpy(dest->pp_tables[id_dest], src->pp_tables[id_src], ntohll(dataset_src->set_size)); dataset_dest->epoch = dataset_src->epoch; dataset_dest->set_size = dataset_src->set_size; dataset_dest->set_count = dataset_src->set_count; skip_attach: return 0; err: return -1; }
int CTableMapLogEvent::tune(uint8_t* data, size_t size, const CFormatDescriptionLogEvent& fmt) { CLogEvent::tune(data, size, fmt); if( _data ) delete [] _data; _size = size; _data = new uint8_t[_size]; memcpy(_data, data, _size); _table_id = get_table_id(_data, size, fmt); uint8_t* p; uint8_t len = 0; // db name p = _data + fmt._common_header_len + fmt._post_header_len[TABLE_MAP_EVENT-1]; len = *p++; strcpy(_db_name, (const char*)p); p += len + 1; // table name len = *p++; strcpy(_table_name, (const char*)p); p += len + 1; // column count _column_count = __net_field_length(&p); _column_types = p; p += _column_count; // metadata ptr _metadata_length = __net_field_length(&p); _metadata = _metadata_length ? p : NULL; return 0; }
/* * Return values: * 0 - equal ssa_db structures * 1 - different ssa_db structures * -1 - invalid input */ int ssa_db_tbl_cmp(struct ssa_db *ssa_db1, struct ssa_db *ssa_db2, const char *name) { struct db_dataset *dataset1, *dataset2; void *tbl1, *tbl2; int id; if (!ssa_db1 || !ssa_db2 || !name) goto err; id = get_table_id(name, &ssa_db1->db_table_def, ssa_db1->p_def_tbl); if (id < 0) goto err; dataset1 = &ssa_db1->p_db_tables[id]; tbl1 = ssa_db1->pp_tables[id]; id = get_table_id(name, &ssa_db2->db_table_def, ssa_db2->p_def_tbl); if (id < 0) goto err; dataset2 = &ssa_db2->p_db_tables[id]; tbl2 = ssa_db2->pp_tables[id]; if ((dataset1->size != dataset2->size) || (dataset1->version != dataset2->version) || (dataset1->access != dataset2->access) || (dataset1->set_size != dataset2->set_size) || (dataset1->set_count != dataset2->set_count)) return 1; if (!tbl1 && !tbl2) goto equal; if ((!tbl1 && tbl2) || (tbl1 && !tbl2)) return 1; if (memcmp(tbl1, tbl2, ntohll(dataset1->set_size))) return 1; equal: return 0; err: return -1; }
void ssa_db_detach(struct ssa_db *ssa_db, const char *tbl_name) { struct db_dataset *dataset; int id; if (!ssa_db || !tbl_name) goto out; id = get_table_id(tbl_name, &ssa_db->db_table_def, ssa_db->p_def_tbl); if (id < 0) goto out; dataset = &ssa_db->p_db_tables[id]; dataset->set_size = 0; dataset->set_count = 0; if (!ssa_db->pp_tables[id]) goto out; free(ssa_db->pp_tables[id]); ssa_db->pp_tables[id] = NULL; out: return; }
int l_variables_context::get_function_id(l_function* f_context,l_syntactic_tree::function_def_node* c_node) { return get_table_id(f_context,function_index(c_node)); }
int l_variables_context::get_const_id(l_function* f_context,l_syntactic_tree::constant_node* c_node) { return get_table_id(f_context,const_index(c_node)); }
//get int l_variables_context::get_var_id(l_function* f_context,l_syntactic_tree::variable_node* node) { return get_table_id(f_context,variable_index(node)); }