Example #1
0
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;
}
Example #2
0
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;
}
Example #3
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;
}
Example #4
0
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));
 }