mysql_common/binlog/events/
delete_rows_event.rs1use bitvec::prelude::*;
10
11use std::io::{self};
12
13use crate::{
14 binlog::{
15 consts::{BinlogVersion, EventType, RowsEventFlags},
16 BinlogCtx, BinlogEvent, BinlogStruct,
17 },
18 io::ParseBuf,
19 proto::{MyDeserialize, MySerialize},
20};
21
22use super::{rows_event::RowsEventCtx, RowsEvent, RowsEventRows, TableMapEvent};
23
24#[derive(Debug, Clone, Eq, PartialEq, Hash)]
28pub struct DeleteRowsEvent<'a>(RowsEvent<'a>);
29
30impl<'a> DeleteRowsEvent<'a> {
31 pub fn table_id(&self) -> u64 {
33 self.0.table_id()
34 }
35
36 pub fn num_columns(&self) -> u64 {
38 self.0.num_columns()
39 }
40
41 pub fn columns_before_image(&'a self) -> &'a BitSlice<u8> {
45 self.0.columns_before_image().expect("must be here")
46 }
47
48 pub fn rows_data(&'a self) -> &'a [u8] {
50 self.0.rows_data()
51 }
52
53 pub fn flags(&'a self) -> RowsEventFlags {
55 self.0.flags()
56 }
57
58 pub fn flags_raw(&'a self) -> u16 {
60 self.0.flags_raw()
61 }
62
63 pub fn rows(&'a self, table_map_event: &'a TableMapEvent<'a>) -> RowsEventRows<'a> {
65 RowsEventRows::new(&self.0, table_map_event, ParseBuf(self.rows_data()))
66 }
67
68 pub fn into_owned(self) -> DeleteRowsEvent<'static> {
69 DeleteRowsEvent(self.0.into_owned())
70 }
71}
72
73impl<'de> MyDeserialize<'de> for DeleteRowsEvent<'de> {
74 const SIZE: Option<usize> = RowsEvent::SIZE;
75 type Ctx = BinlogCtx<'de>;
76
77 fn deserialize(ctx: Self::Ctx, buf: &mut ParseBuf<'de>) -> io::Result<Self> {
78 let ctx = RowsEventCtx {
79 event_type: Self::EVENT_TYPE,
80 binlog_ctx: ctx,
81 };
82 buf.parse(ctx).map(Self)
83 }
84}
85
86impl MySerialize for DeleteRowsEvent<'_> {
87 fn serialize(&self, buf: &mut Vec<u8>) {
88 self.0.serialize(&mut *buf);
89 }
90}
91
92impl<'a> BinlogStruct<'a> for DeleteRowsEvent<'a> {
93 fn len(&self, version: BinlogVersion) -> usize {
94 self.0.len(version)
95 }
96}
97
98impl<'a> BinlogEvent<'a> for DeleteRowsEvent<'a> {
99 const EVENT_TYPE: EventType = EventType::DELETE_ROWS_EVENT;
100}