LLiHengsync code
de223dd1创建于 2022年3月4日历史提交
/* -------------------------------------------------------------------------
 *
 * gistdesc.cpp
 *	  rmgr descriptor routines for access/gist/gistxlog.cpp
 *
 * Portions Copyright (c) 2020 Huawei Technologies Co.,Ltd.
 * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 *
 * IDENTIFICATION
 *	  src/gausskernel/storage/access/rmgrdesc/gistdesc.cpp
 *
 * -------------------------------------------------------------------------
 */
#include "postgres.h"
#include "knl/knl_variable.h"

#include "access/gist_private.h"
#include "lib/stringinfo.h"
#include "storage/smgr/relfilenode.h"

static void out_gistxlogPageSplit(StringInfo buf, gistxlogPageSplit *xlrec)
{
    appendStringInfo(buf, "page_split: splits to %hu pages", xlrec->npage);
}

const char* gist_type_name(uint8 subtype)
{
    uint8 info = subtype & ~XLR_INFO_MASK;
    switch (info) {
        case XLOG_GIST_PAGE_UPDATE:
            return "gist_page_update";
            break;
        case XLOG_GIST_PAGE_SPLIT:
            return "gist_page_split";
            break;
        case XLOG_GIST_CREATE_INDEX:
            return "gist_create_index";
            break;
        default:
            break;
    }
    return "unknow_type";
}

void gist_desc(StringInfo buf, XLogReaderState *record)
{
    char *rec = XLogRecGetData(record);
    uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;

    switch (info) {
        case XLOG_GIST_PAGE_UPDATE:
            appendStringInfo(buf, "page_update: ");
            break;
        case XLOG_GIST_PAGE_SPLIT:
            out_gistxlogPageSplit(buf, (gistxlogPageSplit *)rec);
            break;
        case XLOG_GIST_CREATE_INDEX:
            appendStringInfo(buf, "create_index: ");
            break;
        default:
            appendStringInfo(buf, "unknown gist op code %hhu", info);
            break;
    }
}