/* -------------------------------------------------------------------------
 *  This file is part of the oGRAC project.
 * Copyright (c) 2024 Huawei Technologies Co.,Ltd.
 *
 * oGRAC is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *
 *          http://license.coscl.org.cn/MulanPSL2
 *
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 * -------------------------------------------------------------------------
 *
 * upgrade_struct_check.h
 *
 *
 * IDENTIFICATION
 * src/upgrade_check/upgrade_struct_check.h
 *
 * -------------------------------------------------------------------------
 */
#ifndef __UPGRADE_STRUCT_CHECK_H__
#define __UPGRADE_STRUCT_CHECK_H__

#include "cm_defs.h"
#include "cm_spinlock.h"
#include "srv_session.h"
#include "knl_temp.h"
#include "temp_btree.h"
#include "knl_ctrl_restore.h"
#include "dtc_database.h"

#ifdef __cplusplus
extern "C" {
#endif

/* define need check struct size */
#define DATAFILE_HEADER_T_SIZE  (uint32)8
#define SPACE_HEAD_T_SIZE  (uint32)4056
#define LOG_FILE_HEAD_T_SIZE  (uint32)512
#define LOG_FILE_CTRL_BK_T_SIZE  (uint32)336
#define PAGE_HEAD_T_SIZE  (uint32)32
#define PAGE_TAIL_T_SIZE  (uint32)8
#define COMPRESS_PAGE_HEAD_T_SIZE  (uint32)8
#define HEAP_SEGMENT_T_SIZE  (uint32)184
#define HEAP_PAGE_T_SIZE  (uint32)96
#define PCR_ITL_T_SIZE  (uint32)24
#define MAP_PAGE_T_SIZE  (uint32)84
#define BTREE_SEGMENT_T_SIZE  (uint32)184
#define BTREE_PAGE_T_SIZE  (uint32)80
#define PCRB_KEY_T_SIZE  (uint32)12
#define UNDO_SEGMENT_T_SIZE  (uint32)272
#define TXN_T_SIZE  (uint32)28
#define UNDO_PAGE_T_SIZE  (uint32)68
#define LOB_SEGMENT_T_SIZE  (uint32)96
#define LOB_DATA_PAGE_T_SIZE  (uint32)100
#define TEMP_HEAP_PAGE_T_SIZE  (uint32)104
#define TEMP_BTREE_PAGE_T_SIZE  (uint32)88
#define DF_MAP_HEAD_T_SIZE  (uint32)244
#define DF_MAP_PAGE_T_SIZE  (uint32)48
#define CORE_CTRL_T_SIZE  (uint32)2456
#define LOG_FILE_CTRL_T_SIZE  (uint32)328
#define DATAFILE_CTRL_T_SIZE  (uint32)328
#define SPACE_CTRL_T_SIZE  (uint32)4120
#define ARCH_CTRL_T_SIZE  (uint32)352
#define BAK_HEAD_T_SIZE  (uint32)8192
#define LOG_BATCH_T_SIZE  (uint32)72
#define LOG_GROUP_T_SIZE  (uint32)16
#define SPACE_CTRL_BK_T_SIZE  (uint32)120
#define DATAFILE_CTRL_BK_T_SIZE  (uint32)344
#define DTC_NODE_CTRL_T_SIZE  (uint32)176


CM_STATIC_ASSERT(sizeof(datafile_header_t) == DATAFILE_HEADER_T_SIZE);
CM_STATIC_ASSERT(sizeof(space_head_t) == SPACE_HEAD_T_SIZE);
CM_STATIC_ASSERT(sizeof(log_file_head_t) == LOG_FILE_HEAD_T_SIZE);
CM_STATIC_ASSERT(sizeof(log_file_ctrl_bk_t) == LOG_FILE_CTRL_BK_T_SIZE);
CM_STATIC_ASSERT(sizeof(page_head_t) == PAGE_HEAD_T_SIZE);
CM_STATIC_ASSERT(sizeof(page_tail_t) == PAGE_TAIL_T_SIZE);
CM_STATIC_ASSERT(sizeof(compress_page_head_t) == COMPRESS_PAGE_HEAD_T_SIZE);
CM_STATIC_ASSERT(sizeof(heap_segment_t) == HEAP_SEGMENT_T_SIZE);
CM_STATIC_ASSERT(sizeof(heap_page_t) == HEAP_PAGE_T_SIZE);
CM_STATIC_ASSERT(sizeof(pcr_itl_t) == PCR_ITL_T_SIZE);
CM_STATIC_ASSERT(sizeof(map_page_t) == MAP_PAGE_T_SIZE);
CM_STATIC_ASSERT(sizeof(btree_segment_t) == BTREE_SEGMENT_T_SIZE);
CM_STATIC_ASSERT(sizeof(btree_page_t) == BTREE_PAGE_T_SIZE);
CM_STATIC_ASSERT(sizeof(pcrb_key_t) == PCRB_KEY_T_SIZE);
CM_STATIC_ASSERT(sizeof(undo_segment_t) == UNDO_SEGMENT_T_SIZE);
CM_STATIC_ASSERT(sizeof(txn_t) == TXN_T_SIZE);
CM_STATIC_ASSERT(sizeof(undo_page_t) == UNDO_PAGE_T_SIZE);
CM_STATIC_ASSERT(sizeof(lob_segment_t) == LOB_SEGMENT_T_SIZE);
CM_STATIC_ASSERT(sizeof(lob_data_page_t) == LOB_DATA_PAGE_T_SIZE);
CM_STATIC_ASSERT(sizeof(temp_heap_page_t) == TEMP_HEAP_PAGE_T_SIZE);
CM_STATIC_ASSERT(sizeof(temp_btree_page_t) == TEMP_BTREE_PAGE_T_SIZE);
CM_STATIC_ASSERT(sizeof(df_map_head_t) == DF_MAP_HEAD_T_SIZE);
CM_STATIC_ASSERT(sizeof(df_map_page_t) == DF_MAP_PAGE_T_SIZE);
CM_STATIC_ASSERT(sizeof(core_ctrl_t) == CORE_CTRL_T_SIZE);
CM_STATIC_ASSERT(sizeof(log_file_ctrl_t) == LOG_FILE_CTRL_T_SIZE);
CM_STATIC_ASSERT(sizeof(datafile_ctrl_t) == DATAFILE_CTRL_T_SIZE);
CM_STATIC_ASSERT(sizeof(space_ctrl_t) == SPACE_CTRL_T_SIZE);
CM_STATIC_ASSERT(sizeof(arch_ctrl_t) == ARCH_CTRL_T_SIZE);
CM_STATIC_ASSERT(sizeof(bak_head_t) == BAK_HEAD_T_SIZE);
CM_STATIC_ASSERT(sizeof(log_batch_t) == LOG_BATCH_T_SIZE);
CM_STATIC_ASSERT(sizeof(log_group_t) == LOG_GROUP_T_SIZE);
CM_STATIC_ASSERT(sizeof(space_ctrl_bk_t) == SPACE_CTRL_BK_T_SIZE);
CM_STATIC_ASSERT(sizeof(datafile_ctrl_bk_t) == DATAFILE_CTRL_BK_T_SIZE);
CM_STATIC_ASSERT(sizeof(dtc_node_ctrl_t) == DTC_NODE_CTRL_T_SIZE);

#ifdef __cplusplus
}
#endif

#endif