public FormatDescriptionLogEvent()

in dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/FormatDescriptionLogEvent.java [155:296]


    public FormatDescriptionLogEvent(final int binlogVersion){
        this.binlogVersion = binlogVersion;

        postHeaderLen = new short[ENUM_END_EVENT];
        /* identify binlog format */
        switch (binlogVersion) {
            case 4: /* MySQL 5.0 */
                serverVersion = SERVER_VERSION;
                commonHeaderLen = LOG_EVENT_HEADER_LEN;
                numberOfEventTypes = LOG_EVENT_TYPES;

                /*
                 * Note: all event types must explicitly fill in their lengths
                 * here.
                 */
                postHeaderLen[START_EVENT_V3 - 1] = START_V3_HEADER_LEN;
                postHeaderLen[QUERY_EVENT - 1] = QUERY_HEADER_LEN;
                postHeaderLen[STOP_EVENT - 1] = STOP_HEADER_LEN;
                postHeaderLen[ROTATE_EVENT - 1] = ROTATE_HEADER_LEN;
                postHeaderLen[INTVAR_EVENT - 1] = INTVAR_HEADER_LEN;
                postHeaderLen[LOAD_EVENT - 1] = LOAD_HEADER_LEN;
                postHeaderLen[SLAVE_EVENT - 1] = SLAVE_HEADER_LEN;
                postHeaderLen[CREATE_FILE_EVENT - 1] = CREATE_FILE_HEADER_LEN;
                postHeaderLen[APPEND_BLOCK_EVENT - 1] = APPEND_BLOCK_HEADER_LEN;
                postHeaderLen[EXEC_LOAD_EVENT - 1] = EXEC_LOAD_HEADER_LEN;
                postHeaderLen[DELETE_FILE_EVENT - 1] = DELETE_FILE_HEADER_LEN;
                postHeaderLen[NEW_LOAD_EVENT - 1] = NEW_LOAD_HEADER_LEN;
                postHeaderLen[RAND_EVENT - 1] = RAND_HEADER_LEN;
                postHeaderLen[USER_VAR_EVENT - 1] = USER_VAR_HEADER_LEN;
                postHeaderLen[FORMAT_DESCRIPTION_EVENT - 1] = FORMAT_DESCRIPTION_HEADER_LEN;
                postHeaderLen[XID_EVENT - 1] = XID_HEADER_LEN;
                postHeaderLen[BEGIN_LOAD_QUERY_EVENT - 1] = BEGIN_LOAD_QUERY_HEADER_LEN;
                postHeaderLen[EXECUTE_LOAD_QUERY_EVENT - 1] = EXECUTE_LOAD_QUERY_HEADER_LEN;
                postHeaderLen[TABLE_MAP_EVENT - 1] = TABLE_MAP_HEADER_LEN;
                postHeaderLen[WRITE_ROWS_EVENT_V1 - 1] = ROWS_HEADER_LEN_V1;
                postHeaderLen[UPDATE_ROWS_EVENT_V1 - 1] = ROWS_HEADER_LEN_V1;
                postHeaderLen[DELETE_ROWS_EVENT_V1 - 1] = ROWS_HEADER_LEN_V1;
                /*
                 * We here have the possibility to simulate a master of before
                 * we changed the table map id to be stored in 6 bytes: when it
                 * was stored in 4 bytes (=> post_header_len was 6). This is
                 * used to test backward compatibility. This code can be removed
                 * after a few months (today is Dec 21st 2005), when we know
                 * that the 4-byte masters are not deployed anymore (check with
                 * Tomas Ulin first!), and the accompanying test
                 * (rpl_row_4_bytes) too.
                 */
                postHeaderLen[HEARTBEAT_LOG_EVENT - 1] = 0;
                postHeaderLen[IGNORABLE_LOG_EVENT - 1] = IGNORABLE_HEADER_LEN;
                postHeaderLen[ROWS_QUERY_LOG_EVENT - 1] = IGNORABLE_HEADER_LEN;
                postHeaderLen[WRITE_ROWS_EVENT - 1] = ROWS_HEADER_LEN_V2;
                postHeaderLen[UPDATE_ROWS_EVENT - 1] = ROWS_HEADER_LEN_V2;
                postHeaderLen[DELETE_ROWS_EVENT - 1] = ROWS_HEADER_LEN_V2;
                postHeaderLen[GTID_LOG_EVENT - 1] = POST_HEADER_LENGTH;
                postHeaderLen[ANONYMOUS_GTID_LOG_EVENT - 1] = POST_HEADER_LENGTH;
                postHeaderLen[PREVIOUS_GTIDS_LOG_EVENT - 1] = IGNORABLE_HEADER_LEN;

                postHeaderLen[TRANSACTION_CONTEXT_EVENT - 1] = TRANSACTION_CONTEXT_HEADER_LEN;
                postHeaderLen[VIEW_CHANGE_EVENT - 1] = VIEW_CHANGE_HEADER_LEN;
                postHeaderLen[XA_PREPARE_LOG_EVENT - 1] = XA_PREPARE_HEADER_LEN;
                postHeaderLen[PARTIAL_UPDATE_ROWS_EVENT - 1] = ROWS_HEADER_LEN_V2;
                postHeaderLen[TRANSACTION_PAYLOAD_EVENT - 1] = TRANSACTION_PAYLOAD_HEADER_LEN;

                // mariadb 10
                postHeaderLen[ANNOTATE_ROWS_EVENT - 1] = ANNOTATE_ROWS_HEADER_LEN;
                postHeaderLen[BINLOG_CHECKPOINT_EVENT - 1] = BINLOG_CHECKPOINT_HEADER_LEN;
                postHeaderLen[GTID_EVENT - 1] = GTID_HEADER_LEN;
                postHeaderLen[GTID_LIST_EVENT - 1] = GTID_LIST_HEADER_LEN;
                postHeaderLen[START_ENCRYPTION_EVENT - 1] = START_ENCRYPTION_HEADER_LEN;

                // mariadb compress
                postHeaderLen[QUERY_COMPRESSED_EVENT - 1] = QUERY_COMPRESSED_EVENT;
                postHeaderLen[WRITE_ROWS_COMPRESSED_EVENT - 1] = ROWS_HEADER_LEN_V2;
                postHeaderLen[UPDATE_ROWS_COMPRESSED_EVENT - 1] = ROWS_HEADER_LEN_V2;
                postHeaderLen[DELETE_ROWS_COMPRESSED_EVENT - 1] = ROWS_HEADER_LEN_V2;
                postHeaderLen[WRITE_ROWS_COMPRESSED_EVENT_V1 - 1] = ROWS_HEADER_LEN_V1;
                postHeaderLen[UPDATE_ROWS_COMPRESSED_EVENT_V1 - 1] = ROWS_HEADER_LEN_V1;
                postHeaderLen[DELETE_ROWS_COMPRESSED_EVENT_V1 - 1] = ROWS_HEADER_LEN_V1;
                break;

            case 3: /* 4.0.x x>=2 */
                /*
                 * We build an artificial (i.e. not sent by the master) event,
                 * which describes what those old master versions send.
                 */
                serverVersion = "4.0";
                commonHeaderLen = LOG_EVENT_MINIMAL_HEADER_LEN;

                /*
                 * The first new event in binlog version 4 is Format_desc. So
                 * any event type after that does not exist in older versions.
                 * We use the events known by version 3, even if version 1 had
                 * only a subset of them (this is not a problem: it uses a few
                 * bytes for nothing but unifies code; it does not make the
                 * slave detect less corruptions).
                 */
                numberOfEventTypes = FORMAT_DESCRIPTION_EVENT - 1;

                postHeaderLen[START_EVENT_V3 - 1] = START_V3_HEADER_LEN;
                postHeaderLen[QUERY_EVENT - 1] = QUERY_HEADER_MINIMAL_LEN;
                postHeaderLen[ROTATE_EVENT - 1] = ROTATE_HEADER_LEN;
                postHeaderLen[LOAD_EVENT - 1] = LOAD_HEADER_LEN;
                postHeaderLen[CREATE_FILE_EVENT - 1] = CREATE_FILE_HEADER_LEN;
                postHeaderLen[APPEND_BLOCK_EVENT - 1] = APPEND_BLOCK_HEADER_LEN;
                postHeaderLen[EXEC_LOAD_EVENT - 1] = EXEC_LOAD_HEADER_LEN;
                postHeaderLen[DELETE_FILE_EVENT - 1] = DELETE_FILE_HEADER_LEN;
                postHeaderLen[NEW_LOAD_EVENT - 1] = postHeaderLen[LOAD_EVENT - 1];
                break;

            case 1: /* 3.23 */
                /*
                 * We build an artificial (i.e. not sent by the master) event,
                 * which describes what those old master versions send.
                 */
                serverVersion = "3.23";
                commonHeaderLen = OLD_HEADER_LEN;

                /*
                 * The first new event in binlog version 4 is Format_desc. So
                 * any event type after that does not exist in older versions.
                 * We use the events known by version 3, even if version 1 had
                 * only a subset of them (this is not a problem: it uses a few
                 * bytes for nothing but unifies code; it does not make the
                 * slave detect less corruptions).
                 */
                numberOfEventTypes = FORMAT_DESCRIPTION_EVENT - 1;

                postHeaderLen[START_EVENT_V3 - 1] = START_V3_HEADER_LEN;
                postHeaderLen[QUERY_EVENT - 1] = QUERY_HEADER_MINIMAL_LEN;
                postHeaderLen[LOAD_EVENT - 1] = LOAD_HEADER_LEN;
                postHeaderLen[CREATE_FILE_EVENT - 1] = CREATE_FILE_HEADER_LEN;
                postHeaderLen[APPEND_BLOCK_EVENT - 1] = APPEND_BLOCK_HEADER_LEN;
                postHeaderLen[EXEC_LOAD_EVENT - 1] = EXEC_LOAD_HEADER_LEN;
                postHeaderLen[DELETE_FILE_EVENT - 1] = DELETE_FILE_HEADER_LEN;
                postHeaderLen[NEW_LOAD_EVENT - 1] = postHeaderLen[LOAD_EVENT - 1];
                break;

            default:
                numberOfEventTypes = 0;
                commonHeaderLen = 0;
        }
    }