| 918 | } |
| 919 | |
| 920 | void MySQLFlavor::readPayloadImpl(ReadBuffer & payload) |
| 921 | { |
| 922 | if (payload.eof()) |
| 923 | throw Exception("Attempt to read after EOF.", ErrorCodes::ATTEMPT_TO_READ_AFTER_EOF); |
| 924 | |
| 925 | UInt16 header = static_cast<unsigned char>(*payload.position()); |
| 926 | switch (header) |
| 927 | { |
| 928 | case PACKET_EOF: |
| 929 | throw ReplicationError("Master maybe lost", ErrorCodes::CANNOT_READ_ALL_DATA); |
| 930 | case PACKET_ERR: |
| 931 | ERRPacket err; |
| 932 | err.readPayloadWithUnpacked(payload); |
| 933 | throw ReplicationError(err.error_message, ErrorCodes::UNKNOWN_EXCEPTION); |
| 934 | } |
| 935 | // skip the generic response packets header flag. |
| 936 | payload.ignore(1); |
| 937 | |
| 938 | MySQLBinlogEventReadBuffer event_payload(payload, checksum_signature_length); |
| 939 | |
| 940 | EventHeader event_header; |
| 941 | event_header.parse(event_payload); |
| 942 | |
| 943 | switch (event_header.type) |
| 944 | { |
| 945 | case FORMAT_DESCRIPTION_EVENT: |
| 946 | { |
| 947 | event = std::make_shared<FormatDescriptionEvent>(std::move(event_header)); |
| 948 | event->parseEvent(event_payload); |
| 949 | position.update(event); |
| 950 | break; |
| 951 | } |
| 952 | case ROTATE_EVENT: |
| 953 | { |
| 954 | event = std::make_shared<RotateEvent>(std::move(event_header)); |
| 955 | event->parseEvent(event_payload); |
| 956 | position.update(event); |
| 957 | break; |
| 958 | } |
| 959 | case QUERY_EVENT: |
| 960 | { |
| 961 | event = std::make_shared<QueryEvent>(std::move(event_header)); |
| 962 | event->parseEvent(event_payload); |
| 963 | position.update(event); |
| 964 | |
| 965 | auto query = std::static_pointer_cast<QueryEvent>(event); |
| 966 | switch (query->typ) |
| 967 | { |
| 968 | case QUERY_EVENT_MULTI_TXN_FLAG: |
| 969 | case QUERY_EVENT_XA: |
| 970 | /// Ignore queries that have no impact on the data. |
| 971 | case QUERY_SAVEPOINT: |
| 972 | { |
| 973 | event = std::make_shared<DryRunEvent>(std::move(query->header)); |
| 974 | break; |
| 975 | } |
| 976 | default: |
| 977 | break; |
nothing calls this directly
no test coverage detected