This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
tango-maat/src/maat_virtual.c

73 lines
2.1 KiB
C
Raw Normal View History

2023-01-30 21:59:35 +08:00
/*
**********************************************************************************************
2023-05-04 17:10:19 +08:00
* File: maat_virtual.c
2023-01-30 21:59:35 +08:00
* Description:
* Authors: Liu WenTan <liuwentan@geedgenetworks.com>
* Date: 2022-10-31
2023-05-04 17:10:19 +08:00
* Copyright: (c) Since 2022 Geedge Networks, Ltd. All rights reserved.
2023-01-30 21:59:35 +08:00
***********************************************************************************************
*/
#include <assert.h>
2023-01-30 21:59:35 +08:00
#include "maat_kv.h"
#include "maat_utils.h"
#include "log/log.h"
#include "maat_virtual.h"
#include "maat_rule.h"
#include "maat_table.h"
2023-01-30 21:59:35 +08:00
#define MODULE_VIRTUAL module_name_str("maat.virtual")
struct virtual_schema {
char physical_table[NAME_MAX];
2023-02-03 17:28:14 +08:00
int table_id;
2023-02-09 22:13:15 +08:00
struct table_manager *ref_tbl_mgr;
2023-01-30 21:59:35 +08:00
};
2023-02-03 17:28:14 +08:00
void *virtual_schema_new(cJSON *json, struct table_manager *tbl_mgr,
const char *table_name, struct log_handle *logger)
2023-01-30 21:59:35 +08:00
{
struct virtual_schema *schema = ALLOC(struct virtual_schema, 1);
schema->ref_tbl_mgr = tbl_mgr;
cJSON *item = cJSON_GetObjectItem(json, "table_id");
if (NULL == item || item->type != cJSON_Number) {
log_error(logger, MODULE_VIRTUAL,
2023-03-02 14:52:31 +08:00
"[%s:%d] virtual table %s has no table_id column",
__FUNCTION__, __LINE__, table_name);
goto error;
}
schema->table_id = item->valueint;
item = cJSON_GetObjectItem(json, "physical_table");
if (NULL == item || item->type != cJSON_String) {
2023-02-03 17:28:14 +08:00
log_error(logger, MODULE_VIRTUAL,
2023-03-02 14:52:31 +08:00
"[%s:%d] virtual table %s has no physical_table column",
__FUNCTION__, __LINE__, table_name);
goto error;
2023-01-30 21:59:35 +08:00
}
2023-01-31 20:39:53 +08:00
memcpy(schema->physical_table, item->valuestring, strlen(item->valuestring));
return schema;
error:
FREE(schema);
return NULL;
2023-01-30 21:59:35 +08:00
}
2023-01-31 20:39:53 +08:00
void virtual_schema_free(void *virtual_schema)
{
FREE(virtual_schema);
}
int virtual_table_get_physical_table_id(void *virtual_schema)
{
if (NULL == virtual_schema) {
return 0;
}
struct virtual_schema *schema = (struct virtual_schema *)virtual_schema;
return table_manager_get_table_id(schema->ref_tbl_mgr, schema->physical_table);
2023-01-31 20:39:53 +08:00
}