From 8685e39f14f38608f4a357e96a45d40634b86eda Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Tue, 11 Jul 2023 07:12:41 -0900 Subject: [PATCH] ctdldump: export visit table --- citadel/utils/ctdldump.c | 95 ++++++++++++++-------------------------- 1 file changed, 33 insertions(+), 62 deletions(-) diff --git a/citadel/utils/ctdldump.c b/citadel/utils/ctdldump.c index d2d370d18..96c989305 100644 --- a/citadel/utils/ctdldump.c +++ b/citadel/utils/ctdldump.c @@ -234,81 +234,52 @@ void export_floor(int which_cdb, DBT *in_key, DBT *in_data) { } -#if 0 // export function for a msglist or a fulltext index record // (both are indexed by a long and the data is arrays of longs) -void export_msglists(int which_cdb, DBT *in_key, DBT *in_data, DBT *out_key, DBT *out_data) { +void export_msglist(int which_cdb, DBT *in_key, DBT *in_data) { int i; - - char *table = (which_cdb == CDB_FULLTEXT) ? "FullText" : "Msglist"; + int num_msgs; + long msg; // records are indexed by a single "long" and contains an array of zero or more "long"s - // and remember ... "long" is int32_t on the source system - int32_t in_roomnum; - long out_roomnum; - memcpy(&in_roomnum, in_key->data, sizeof(in_roomnum)); - out_roomnum = (long) in_roomnum; + long roomnum; + memcpy(&roomnum, in_key->data, sizeof(long)); - if (in_key->size != 4) { - fprintf(stderr, "\033[31m\033[1m *** SOURCE DATABASE IS NOT 32-BIT *** ABORTING *** \033[0m\n"); - abort(); - } - - int num_msgs = in_data->size / sizeof(int32_t); - // printf("\033[32m\033[1m%s: key %ld (%d messages)\033[0m\n", table, out_roomnum, num_msgs); + printf("msglist|%ld|", roomnum); - // the key is a "long" - out_key->size = sizeof(out_roomnum); - out_key->data = realloc(out_key->data, out_key->size); - memcpy(out_key->data, &out_roomnum, sizeof(out_roomnum)); - - // the data is another array, but a wider type - out_data->size = sizeof(long) * num_msgs; - out_data->data = realloc(out_data->data, out_data->size); - - int32_t in_msg = 0; - long out_msg = 0; - for (i=0; idata + (i * sizeof(int32_t))), sizeof(int32_t)); - out_msg = (long) in_msg; - memcpy((out_data->data + (i * sizeof(long))), &out_msg, sizeof(long)); - // printf("msg#%ld\n", out_msg); + if (in_data->size > 0) { + num_msgs = in_data->size / sizeof(long); + for (i=0; idata + (i * sizeof(long))), sizeof(long)); + if (i != 0) { + printf(","); + } + printf("%ld", msg); + } } + printf("\n"); } // export function for a visit record -void export_visits(int which_cdb, DBT *in_key, DBT *in_data, DBT *out_key, DBT *out_data) { - - // data - struct visit_32 *visit32 = (struct visit_32 *)in_data->data; - out_data->size = sizeof(struct visit); - out_data->data = realloc(out_data->data, out_data->size); - struct visit *visit64 = (struct visit *)out_data->data; - - // the data (zero it out so it will compress well) - memset(visit64, 0, sizeof(struct visit)); - visit64->v_roomnum = (long) visit32->v_roomnum; - visit64->v_roomgen = (long) visit32->v_roomgen; - visit64->v_usernum = (long) visit32->v_usernum; - visit64->v_lastseen = (long) visit32->v_lastseen; - visit64->v_flags = (unsigned) visit32->v_flags; - strcpy(visit64->v_seen, visit32->v_seen); - strcpy(visit64->v_answered, visit32->v_answered); - visit64->v_view = (int) visit32->v_view; - - // printf("\033[32m\033[1mVisit: room %10ld, gen %10ld, user %10ld\033[0m\n", visit64->v_roomnum, visit64->v_roomgen, visit64->v_usernum); - - // create the key (which is based on the data, so there is no need to convert the old key) - out_key->size = sizeof(struct visit_index); - out_key->data = realloc(out_key->data, out_key->size); - struct visit_index *newvisitindex = (struct visit_index *) out_key->data; - newvisitindex->iRoomID = visit64->v_roomnum; - newvisitindex->iRoomGen = visit64->v_roomgen; - newvisitindex->iUserID = visit64->v_usernum; +void export_visit(int which_cdb, DBT *in_key, DBT *in_data) { + + struct visit *visit = (struct visit *)in_data->data; + + printf("visit|%ld|%ld|%ld|%ld|%u|%s|%s|%d\n", + visit->v_roomnum, + visit->v_roomgen, + visit->v_usernum, + visit->v_lastseen, + visit->v_flags, + visit->v_seen, + visit->v_answered, + visit->v_view + ); } +#if 0 // export function for a directory record void export_dir(int which_cdb, DBT *in_key, DBT *in_data, DBT *out_key, DBT *out_data) { @@ -481,8 +452,8 @@ void (*export_functions[])(int which_cdb, DBT *in_key, DBT *in_data) = { export_user, // CDB_USERS export_room, // CDB_ROOMS export_floor, // CDB_FLOORTAB - zero_function, // CDB_MSGLISTS - zero_function, // CDB_VISIT + export_msglist, // CDB_MSGLISTS + export_visit, // CDB_VISIT zero_function, // CDB_DIRECTORY zero_function, // CDB_USETABLE zero_function, // CDB_BIGMSGS -- 2.39.2