54 #define CHKSUM_DEFAULT_LIST_SIZE 10 55 #define CHKSUM_MIN_CHUNK_SIZE 100 56 #define CHKSUM_DEFAULT_TABLE_NAME "db_ha_checksum" 57 #define CHKSUM_SCHEMA_TABLE_SUFFIX "_schema" 59 #define CHKSUM_TABLE_CLASS_NAME_COL "class_name" 60 #define CHKSUM_TABLE_CHUNK_ID_COL "chunk_id" 61 #define CHKSUM_TABLE_LOWER_BOUND_COL "chunk_lower_bound" 62 #define CHKSUM_TABLE_CHUNK_CHECKSUM_COL "chunk_checksum" 63 #define CHKSUM_TABLE_COUNT_COL "chunk_count" 64 #define CHKSUM_TABLE_MASTER_CHEKSUM_COL "master_checksum" 65 #define CHKSUM_TABLE_BEGINS_AT_COL "begins_at" 66 #define CHKSUM_TABLE_ELAPSED_TIME_COL "elapsed_time" 68 #define CHKSUM_TABLE_MASTER_SCHEMA_COL "master_schema_def" 69 #define CHKSUM_TABLE_SCHEMA_COL "schema_def" 70 #define CHKSUM_TABLE_SCHEMA_TIME_COL "collected_time" 71 #define CHKSUM_TABLE_SCHEMA_REPID_COL "representation_id" 73 #define CHKSUM_STOP_ON_ERROR(err, arg) (((err) != NO_ERROR) && \ 74 ((ER_IS_SERVER_DOWN_ERROR(err) == true) || \ 75 ((arg)->cont_on_err == false))) 77 #define CHKSUM_PRINT_AND_LOG(fp, ...) \ 79 fprintf(stdout, __VA_ARGS__);\ 80 fprintf(fp, __VA_ARGS__);\ 126 int chunk_id,
int chunk_size);
134 int chunk_size,
int *exec_error);
140 int chunk_id,
int master_checksum);
143 const OID * class_oidp);
150 static int chksum_report (
const char *command_name,
const char *database);
162 char file_name[PATH_MAX];
163 char file_path[PATH_MAX];
165 snprintf (file_name, PATH_MAX,
"%s_report.log", command_name);
168 fp = fopen (file_path,
"a");
177 struct tm *report_tm_p;
180 report_time = time (
NULL);
181 report_tm_p = localtime (&report_time);
185 CHKSUM_PRINT_AND_LOG (fp,
"=================================" "===============================\n");
187 CHKSUM_PRINT_AND_LOG (fp,
" report time: %04d-%02d-%02d %02d:%02d:%02d\n", report_tm_p->tm_year + 1900,
188 report_tm_p->tm_mon + 1, report_tm_p->tm_mday, report_tm_p->tm_hour, report_tm_p->tm_min,
189 report_tm_p->tm_sec);
191 CHKSUM_PRINT_AND_LOG (fp,
"=================================" "===============================\n\n");
199 #define QUERY_BUF_SIZE 1024 210 snprintf (query_buf,
sizeof (query_buf),
215 res =
db_execute (query_buf, &query_result, &query_error);
218 int pos, out_val_idx;
247 snprintf (time_buf,
sizeof (time_buf),
"UNKNOWN");
299 "* Due to schema inconsistency, the checksum " 300 "difference of the above table(s) may not be reported.\n");
314 #undef QUERY_BUF_SIZE 320 #define QUERY_BUF_SIZE 1024 327 CHKSUM_PRINT_AND_LOG (fp,
"-------------------------------" "---------------------------------\n");
329 CHKSUM_PRINT_AND_LOG (fp,
"-------------------------------" "---------------------------------\n");
331 snprintf (query_buf,
sizeof (query_buf),
336 res =
db_execute (query_buf, &query_result, &query_error);
339 int pos, out_val_idx;
393 #undef QUERY_BUF_SIZE 399 #define QUERY_BUF_SIZE 1024 408 "-------------------------------------------------" "-------------------------------------\n");
409 CHKSUM_PRINT_AND_LOG (fp,
"table name\ttotal # of chunks\t# of diff chunks\t" "total/avg/min/max time\n");
411 "-------------------------------------------------" "-------------------------------------\n");
413 snprintf (query_buf,
sizeof (query_buf),
420 res =
db_execute (query_buf, &query_result, &query_error);
423 int pos,
error, out_val_idx;
512 #undef QUERY_BUF_SIZE 519 char err_msg[LINE_MAX];
520 char *missing_table =
NULL;
540 if (missing_table !=
NULL)
542 snprintf (err_msg,
sizeof (err_msg),
"Cannot find table %s", missing_table);
581 char err_msg[LINE_MAX];
583 char *invalid_table =
NULL;
584 char *missing_table =
NULL;
588 if (classobj !=
NULL)
604 else if (resume ==
true)
614 if (classobj !=
NULL)
627 else if (resume ==
true)
639 snprintf (err_msg,
sizeof (err_msg),
"Failed to drop and create checksum tables");
646 if (invalid_table !=
NULL)
648 snprintf (err_msg,
sizeof (err_msg),
"Invalid checksum table [%s] exists", invalid_table);
650 else if (missing_table !=
NULL && resume ==
true)
652 snprintf (err_msg,
sizeof (err_msg),
"Failed to resume calculation. Table [%s] not found", missing_table);
669 #define QUERY_BUF_SIZE 2048 675 snprintf (query_buf,
sizeof (query_buf),
"DROP TABLE IF EXISTS %s;" 677 "(%s VARCHAR (255) NOT NULL," 683 " %s DATETIME DEFAULT sys_datetime," 685 " CONSTRAINT UNIQUE INDEX (%s, %s));" 686 "DROP TABLE IF EXISTS %s;" 688 "(%s VARCHAR (255) NOT NULL," 693 " PRIMARY KEY (%s, %s));",
716 res =
db_execute (query_buf, &query_result, &query_error);
729 #undef QUERY_BUF_SIZE 746 next_res = res->
next;
772 if (chksum_Prev_results ==
NULL || table_name ==
NULL)
780 if (strcmp (res->
class_name, table_name) == 0)
799 #define QUERY_BUF_SIZE 2048 808 if (chksum_Prev_results !=
NULL)
813 snprintf (query_buf,
sizeof (query_buf),
821 res =
db_execute (query_buf, &query_result, &query_error);
826 const char *db_string_p =
NULL;
834 if (checksum_result ==
NULL)
852 if (db_string_p !=
NULL)
878 if (db_string_p !=
NULL)
896 chksum_Prev_results = checksum_result;
908 #undef QUERY_BUF_SIZE 934 if (prev_result !=
NULL)
965 const int *asc_desc =
NULL;
974 if (pk_attrs ==
NULL)
980 if (asc_desc ==
NULL)
985 for (i = 0; pk_attrs[
i] !=
NULL; i++)
994 if (include_decs ==
true && asc_desc[i] == 1)
1000 if (pk_col_cnt !=
NULL)
1031 sprintf (limit_str,
"%d", limit);
1039 if (prev_lower_bound !=
NULL)
1072 char chunk_id_str[15];
1073 char chunk_size_str[15];
1077 sprintf (chunk_id_str,
"%d", chunk_id);
1078 sprintf (chunk_size_str,
"%d", chunk_size);
1099 "', " " count (*), " " BIT_XOR (crc32_result), " " SYS_DATETIME " "FROM" 1100 " (SELECT CRC32(CONCAT_WS('', ");
1143 const int *asc_desc =
NULL;
1153 if (pk_attrs ==
NULL)
1159 if (asc_desc ==
NULL)
1164 col_cnt = pk_col_cnt;
1170 if (col_cnt < pk_col_cnt)
1176 for (i = 0; pk_attrs[
i] !=
NULL && i < col_cnt; i++)
1185 if (asc_desc[i] == 1)
1194 if (col_cnt == pk_col_cnt || i < (col_cnt - 1))
1257 char *start, *end, *pos;
1262 start = (
char *) orig_lower_bound->
bytes;
1263 end = (
char *) orig_lower_bound->
bytes + orig_lower_bound->
length;
1268 while (pos !=
NULL && pos < end && (*pos) !=
'\'')
1276 length = pos - start + 1;
1304 PARSER_VARCHAR * prev_lower_bound,
int chunk_size,
int *exec_error)
1313 char err_msg[LINE_MAX];
1314 char chunk_size_str[15];
1321 sprintf (chunk_size_str,
"%d", chunk_size);
1330 res =
db_execute (query, &query_result, &query_error);
1332 if (prev_lower_bound !=
NULL && res < chunk_size)
1341 int pos,
error, col_cnt;
1348 assert (col_cnt == pk_col_cnt);
1351 if (out_values ==
NULL)
1378 snprintf (err_msg, LINE_MAX,
"Failed to get lower bound condition " "for table %s", table_name);
1384 if (out_values !=
NULL)
1386 for (i = 0; i < pk_col_cnt; i++)
1394 return lower_bound_str;
1425 char chunk_id_str[15];
1427 snprintf (chunk_id_str,
sizeof (chunk_id_str),
"%d", chunk_id);
1450 char chunk_id_str[15];
1451 char master_checksum_str[15];
1453 snprintf (chunk_id_str,
sizeof (chunk_id_str),
"%d", chunk_id);
1454 snprintf (master_checksum_str,
sizeof (master_checksum_str),
"%d", master_checksum);
1486 int master_checksum = 0;
1489 char err_msg[LINE_MAX];
1492 if (select_checksum_query ==
NULL)
1498 res =
db_execute (query, &query_result, &query_error);
1527 if (update_checksum_query ==
NULL)
1533 res =
db_execute (query, &query_result, &query_error);
1542 snprintf (err_msg, LINE_MAX,
"Failed to update master checksum. " "(table name: %s, chunk id: %d)", table_name,
1567 repl_stmt.
name = (
char *) table_name;
1568 repl_stmt.
stmt_text = (
char *) checksum_query;
1573 repl_info.
info = (
char *) &repl_stmt;
1588 #define QUERY_BUF_SIZE 2048 1594 snprintf (query_buf,
sizeof (query_buf),
"UPDATE /*+ USE_SBR */ %s " 1600 table_name, table_name, repid);
1602 res =
db_execute (query_buf, &query_result, &query_error);
1614 #undef QUERY_BUF_SIZE 1629 #define QUERY_BUF_SIZE 2048 1635 snprintf (query_buf,
sizeof (query_buf),
"REPLACE INTO %s " "SELECT '%s', %d, NULL, SCHEMA_DEF ('%s'), NULL;",
1638 res =
db_execute (query_buf, &query_result, &query_error);
1656 #undef QUERY_BUF_SIZE 1677 char err_msg[LINE_MAX];
1683 if (checksum_query ==
NULL)
1697 snprintf (err_msg, LINE_MAX,
1698 "Failed to write a checksum replication log." " (table name: %s, chunk id: %d, lower bound: %s)",
1704 res =
db_execute (query, &query_result, &query_error);
1717 snprintf (err_msg, LINE_MAX,
"Failed to calculate checksum. " "(table name: %s, chunk id: %d, lower bound: %s)",
1737 bool match_need_skip =
false;
1758 match_need_skip =
true;
1765 for (i = 0; i <
da_size (list); i++)
1767 da_get (list, i, table_in_list);
1768 if (strcmp (table_name, table_in_list) == 0)
1770 return match_need_skip;
1774 return !match_need_skip;
1793 char err_msg[LINE_MAX];
1794 const char *table_name =
NULL;
1798 int prev_repid = -1;
1799 bool force_refetch_class_info;
1808 if (chksum_arg->
resume ==
true)
1813 snprintf (err_msg, LINE_MAX,
"Failed to load previous checksum result");
1829 for (tbl = tbl_list; tbl !=
NULL; tbl = tbl->next)
1838 if (table_name ==
NULL)
1852 force_refetch_class_info =
false;
1864 else if (repid != prev_repid || force_refetch_class_info ==
true)
1869 if (table_name ==
NULL || attributes ==
NULL)
1873 "Failed to load table information", error);
1878 if (constraints ==
NULL)
1885 if (pk_cons ==
NULL)
1890 if (prev_repid != repid)
1900 snprintf (err_msg, LINE_MAX,
"Failed to update schema definition" " of [%s]", table_name);
1921 force_refetch_class_info =
false;
1926 snprintf (err_msg, LINE_MAX,
"Failed to acquire a table READ lock for [%s]", table_name);
1933 class_oidp =
ws_oid (classobj);
1937 if (chunk_id == 0 && lower_bound ==
NULL)
1951 force_refetch_class_info =
true;
1957 if (lower_bound ==
NULL)
1980 force_refetch_class_info =
true;
1998 force_refetch_class_info =
true;
2004 lower_bound = next_lower_bound;
2012 if (lower_bound ==
NULL)
2035 snprintf (err_msg,
sizeof (err_msg),
"Table [%s] skipped due to error", table_name);
2041 if (tbl_list !=
NULL)
2046 if (chksum_Prev_results !=
NULL)
2070 #if defined (WINDOWS) 2075 return EXIT_FAILURE;
2077 #if defined (CS_MODE) 2079 char er_msg_file[PATH_MAX];
2082 char *incl_class_file =
NULL;
2083 char *excl_class_file =
NULL;
2084 char *checksum_table =
NULL;
2085 bool report_only =
false;
2089 memset (&chksum_arg, 0,
sizeof (
CHKSUM_ARG));
2093 goto print_checksumdb_usage;
2097 if (database_name ==
NULL)
2099 goto print_checksumdb_usage;
2125 if (report_only ==
true)
2133 if (incl_class_file !=
NULL && excl_class_file !=
NULL)
2136 goto print_checksumdb_usage;
2139 if (incl_class_file !=
NULL)
2151 if (excl_class_file !=
NULL)
2166 goto print_checksumdb_usage;
2188 snprintf (er_msg_file,
sizeof (er_msg_file) - 1,
"%s_%s.err", database_name, arg->
command_name);
2227 if (report_only ==
true)
2268 return EXIT_SUCCESS;
2270 print_checksumdb_usage:
2286 return EXIT_FAILURE;
2293 return EXIT_FAILURE;
char * envvar_logdir_file(char *path, size_t size, const char *filename)
#define SLEEP_MILISEC(sec, msec)
DB_OBJECT * db_find_class(const char *name)
char chksum_schema_Table_name[SM_MAX_IDENTIFIER_LENGTH]
static bool chksum_need_skip_table(const char *table_name, CHKSUM_ARG *chksum_arg)
static PARSER_VARCHAR * chksum_print_attribute_list(PARSER_CONTEXT *parser, DB_ATTRIBUTE *attributes)
void db_set_client_type(int client_type)
#define PRINT_AND_LOG_ERR_MSG(...)
const char * db_get_class_name(DB_OBJECT *class_)
static PARSER_VARCHAR * chksum_print_select_master_checksum(PARSER_CONTEXT *parser, const char *table_name, int chunk_id)
DB_ATTRIBUTE * db_get_attributes(DB_OBJECT *obj)
#define CHKSUM_DEFAULT_TABLE_NAME
int db_login(const char *name, const char *password)
static void begin(char *test_name)
int da_destroy(dynamic_array *da)
#define CHECKSUM_RESUME_S
static PARSER_VARCHAR * chksum_print_checksum_query(PARSER_CONTEXT *parser, const char *table_name, DB_ATTRIBUTE *attributes, PARSER_VARCHAR *lower_bound, int chunk_id, int chunk_size)
PARSER_VARCHAR * pt_append_nulstring(const PARSER_CONTEXT *parser, PARSER_VARCHAR *bstring, const char *nulstring)
int db_get_int(const DB_VALUE *value)
char class_name[SM_MAX_IDENTIFIER_LENGTH]
int db_is_vclass(DB_OBJECT *op)
#define AU_DISABLE_PASSWORDS
DB_CONSTRAINT * db_constraint_find_primary_key(DB_CONSTRAINT *constraint)
static CHKSUM_RESULT * chksum_get_checksum_result(const char *table_name)
static int chksum_init_checksum_tables(bool resume)
int db_query_end(DB_QUERY_RESULT *result)
int util_get_table_list_from_file(char *fname, dynamic_array *darray)
#define SM_MAX_IDENTIFIER_LENGTH
static int chksum_drop_and_create_checksum_table(void)
DB_CONSTRAINT * db_get_constraints(DB_OBJECT *obj)
PARSER_CONTEXT * parser_create_parser(void)
DB_ATTRIBUTE ** db_constraint_attributes(DB_CONSTRAINT *constraint)
PARSER_VARCHAR * pt_append_bytes(const PARSER_CONTEXT *parser, PARSER_VARCHAR *old_string, const char *new_tail, const int new_tail_length)
int check_database_name(const char *name)
#define CHECKSUM_EXCLUDE_CLASS_FILE_S
int util_log_write_errid(int message_id,...)
const char * db_attribute_name(DB_ATTRIBUTE *attribute)
CHKSUM_RESULT * chksum_Prev_results
#define ER_CHKSUM_GENERIC_ERR
int db_set_lock_timeout(int seconds)
int er_init(const char *msglog_filename, int exit_ask)
static int chksum_update_current_schema_definition(const char *table_name, int repid)
int utility_get_option_int_value(UTIL_ARG_MAP *arg_map, int arg_ch)
#define CHKSUM_TABLE_BEGINS_AT_COL
static int chksum_set_initial_chunk_id_and_lower_bound(PARSER_CONTEXT *parser, const char *table_name, DB_CONSTRAINT *pk_cons, int *chunk_id, PARSER_VARCHAR **lower_bound)
void describe_value(const db_value *value)
void parser_free_parser(PARSER_CONTEXT *parser)
static PARSER_VARCHAR * chksum_get_initial_lower_bound(PARSER_CONTEXT *parser, const char *table_name, DB_CONSTRAINT *pk_cons, int *exec_error)
MOBJ locator_fetch_class(MOP class_mop, DB_FETCH_MODE purpose)
#define CHKSUM_MIN_CHUNK_SIZE
#define CHKSUM_PRINT_AND_LOG(fp,...)
DB_ATTRIBUTE * db_get_attribute(DB_OBJECT *obj, const char *name)
int db_restart(const char *program, int print_version, const char *volume)
int sm_get_class_repid(MOP classop)
void er_set(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
static int chksum_calculate_checksum(PARSER_CONTEXT *parser, const OID *class_oidp, const char *table_name, DB_ATTRIBUTE *attributes, PARSER_VARCHAR *lower_bound, int chunk_id, int chunk_size)
#define CHKSUM_TABLE_COUNT_COL
bool utility_get_option_bool_value(UTIL_ARG_MAP *arg_map, int arg_ch)
int db_query_last_tuple(DB_QUERY_RESULT *result)
static void chksum_free_results(CHKSUM_RESULT *results)
#define CHKSUM_TABLE_SCHEMA_TIME_COL
int da_get(dynamic_array *da, int pos, void *data)
static PARSER_VARCHAR * chksum_print_pk_list(PARSER_CONTEXT *parser, DB_CONSTRAINT *pk, int *pk_col_cnt, bool include_decs)
int db_query_first_tuple(DB_QUERY_RESULT *result)
#define ER_OUT_OF_VIRTUAL_MEMORY
void db_objlist_free(DB_OBJLIST *list)
int sysprm_load_and_init(const char *db_name, const char *conf_file, const int load_flags)
const char * css_ha_server_state_string(HA_SERVER_STATE state)
const char * db_error_string(int level)
int checksumdb(UTIL_FUNCTION_ARG *arg)
int da_size(dynamic_array *da)
DB_ATTRIBUTE * db_attribute_next(DB_ATTRIBUTE *attribute)
#define CHKSUM_TABLE_CLASS_NAME_COL
PARSER_VARCHAR * pt_append_varchar(const PARSER_CONTEXT *parser, PARSER_VARCHAR *old_string, const PARSER_VARCHAR *new_tail)
#define CHKSUM_TABLE_CHUNK_ID_COL
int db_abort_transaction(void)
static PARSER_VARCHAR * chksum_print_select_last_chunk(PARSER_CONTEXT *parser, const char *table_name, PARSER_VARCHAR *pk_list, PARSER_VARCHAR *pk_orderby, PARSER_VARCHAR *prev_lower_bound, int limit)
dynamic_array * da_create(int count, size_t len)
static PARSER_VARCHAR * chksum_get_quote_escaped_lower_bound(PARSER_CONTEXT *parser, PARSER_VARCHAR *orig_lower_bound)
int db_execute(const char *CSQL_query, DB_QUERY_RESULT **result, DB_QUERY_ERROR *query_error)
#define CHKSUM_TABLE_LOWER_BOUND_COL
dynamic_array * exclude_list
#define CHECKSUM_REPORT_ONLY_S
int sm_check_name(const char *name)
const char * get_buffer() const
#define CHKSUM_TABLE_SCHEMA_REPID_COL
static int chksum_report_diff(FILE *fp)
int db_is_system_class(MOP op)
char * db_get_user_name(void)
int db_query_get_tuple_valuelist(DB_QUERY_RESULT *result, int size, DB_VALUE *value_list)
int db_set_isolation(DB_TRAN_ISOLATION isolation)
#define CHKSUM_TABLE_SCHEMA_COL
int utility_get_option_string_table_size(UTIL_ARG_MAP *arg_map)
static PARSER_VARCHAR * chksum_get_next_lower_bound(PARSER_CONTEXT *parser, const char *table_name, DB_CONSTRAINT *pk_cons, PARSER_VARCHAR *prev_lower_bound, int chunk_size, int *exec_error)
static PARSER_VARCHAR * chksum_print_lower_bound_string(PARSER_CONTEXT *parser, DB_VALUE values[], DB_CONSTRAINT *pk, int pk_col_cnt)
int db_datetime_to_string(char *buf, int bufsize, DB_DATETIME *datetime)
static void chksum_report_header(FILE *fp, const char *database)
int db_query_column_count(DB_QUERY_RESULT *result)
#define CHKSUM_STOP_ON_ERROR(err, arg)
#define CHECKSUM_SCHEMA_ONLY_S
static void error(const char *msg)
#define CHKSUM_TABLE_MASTER_SCHEMA_COL
#define CHKSUM_TABLE_MASTER_CHEKSUM_COL
static int chksum_get_prev_checksum_results(void)
const unsigned char * pt_get_varchar_bytes(const PARSER_VARCHAR *string)
#define CHKSUM_SCHEMA_TABLE_SUFFIX
int db_query_next_tuple(DB_QUERY_RESULT *result)
static char database_name[MAX_HA_DBINFO_LENGTH]
static int chksum_report(const char *command_name, const char *database)
void tran_set_query_timeout(int)
static PARSER_VARCHAR * chksum_print_update_master_checksum(PARSER_CONTEXT *parser, const char *table_name, int chunk_id, int master_checksum)
#define CHKSUM_DEFAULT_LIST_SIZE
#define free_and_init(ptr)
static int chksum_insert_schema_definition(const char *table_name, int repid)
const int * db_constraint_asc_desc(DB_CONSTRAINT *constraint)
#define CHECKSUM_CHUNK_SIZE_S
#define DB_CURSOR_SUCCESS
static int chksum_report_summary(FILE *fp)
HA_SERVER_STATE css_ha_server_state(void)
char * basename(const char *path)
#define CHECKSUM_TABLE_NAME_S
static int chksum_report_schema_diff(FILE *fp)
#define CHECKSUM_INCLUDE_CLASS_FILE_S
char * msgcat_message(int cat_id, int set_id, int msg_id)
dynamic_array * include_list
#define DB_IS_NULL(value)
static int chksum_set_repl_info_and_demote_table_lock(const char *table_name, const char *checksum_query, const OID *class_oidp)
char chksum_result_Table_name[SM_MAX_IDENTIFIER_LENGTH]
char * strdup(const char *str)
DB_DATETIME * db_get_datetime(const DB_VALUE *value)
int chksum_insert_repl_log_and_demote_table_lock(REPL_INFO *repl_info, const OID *class_oidp)
static FILE * chksum_report_open_file(const char *command_name)
static int chksum_update_master_checksum(PARSER_CONTEXT *parser, const char *table_name, int chunk_id)
int db_value_clear(DB_VALUE *value)
int db_query_get_tuple_value(DB_QUERY_RESULT *result, int index, DB_VALUE *value)
#define OPTION_STRING_TABLE
#define CHKSUM_TABLE_ELAPSED_TIME_COL
enum ha_server_state HA_SERVER_STATE
#define CHKSUM_TABLE_CHUNK_CHECKSUM_COL
DB_OBJLIST * db_fetch_all_classes(DB_FETCH_MODE purpose)
static int chksum_start(CHKSUM_ARG *chksum_arg)
#define CHECKSUM_TIMEOUT_S
const char * command_name
char * utility_get_option_string_value(UTIL_ARG_MAP *arg_map, int arg_ch, int index)
DB_CONST_C_CHAR db_get_string(const DB_VALUE *value)
#define CHECKSUM_CONT_ON_ERROR_S
int db_commit_transaction(void)
#define MSGCAT_CATALOG_UTILS