Skip to content

Commit 88edfdd

Browse files
committed
binlog: include VECTOR type tests into the binlog_event_roundtrip
1 parent 01620ea commit 88edfdd

File tree

2 files changed

+74
-1
lines changed

2 files changed

+74
-1
lines changed

src/binlog/mod.rs

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,7 @@ impl ColumnType {
326326
mod tests {
327327
use std::{
328328
collections::HashMap,
329+
convert::TryFrom,
329330
io,
330331
iter::{once, repeat},
331332
};
@@ -337,10 +338,14 @@ mod tests {
337338
};
338339

339340
use crate::{
340-
binlog::{events::RowsEventData, value::BinlogValue},
341+
binlog::{
342+
events::{OptionalMetadataField, RowsEventData},
343+
value::BinlogValue,
344+
},
341345
collations::CollationId,
342346
constants::ColumnFlags,
343347
proto::MySerialize,
348+
row::convert::from_row,
344349
value::Value,
345350
};
346351

@@ -734,10 +739,12 @@ mod tests {
734739
let file_data = std::fs::read(dbg!(&file_path))?;
735740
let mut binlog_file = BinlogFile::new(BinlogVersion::Version4, &file_data[..])?;
736741

742+
let mut i = 0;
737743
let mut ev_pos = 4;
738744
let mut table_map_events = HashMap::new();
739745

740746
while let Some(ev) = binlog_file.next() {
747+
i += 1;
741748
let ev = ev?;
742749
let _ = dbg!(ev.header().event_type());
743750
let ev_end = ev_pos + ev.header().event_size() as usize;
@@ -847,6 +854,72 @@ mod tests {
847854
}
848855
}
849856

857+
if file_path.file_name().unwrap() == "vector.binlog" {
858+
let event_data = ev.read_data().unwrap();
859+
match event_data {
860+
Some(EventData::TableMapEvent(ev)) => {
861+
let optional_meta = ev.iter_optional_meta();
862+
match ev.table_name().as_ref() {
863+
"foo" => {
864+
for meta in optional_meta {
865+
match meta.unwrap() {
866+
OptionalMetadataField::Dimensionality(x) => assert_eq!(
867+
x.iter_dimensionalities()
868+
.collect::<Result<Vec<_>, _>>()
869+
.unwrap(),
870+
vec![3],
871+
),
872+
_ => (),
873+
}
874+
}
875+
}
876+
"bar" => {
877+
for meta in optional_meta {
878+
match meta.unwrap() {
879+
OptionalMetadataField::Dimensionality(x) => assert_eq!(
880+
x.iter_dimensionalities()
881+
.collect::<Result<Vec<_>, _>>()
882+
.unwrap(),
883+
vec![2, 4],
884+
),
885+
_ => (),
886+
}
887+
}
888+
}
889+
_ => (),
890+
}
891+
}
892+
Some(EventData::RowsEvent(ev)) if i == 12 => {
893+
let table_map_event =
894+
binlog_file.reader().get_tme(ev.table_id()).unwrap();
895+
let mut rows = ev.rows(table_map_event);
896+
897+
let (None, Some(after)) = rows.next().unwrap().unwrap() else {
898+
panic!("Unexpected data");
899+
};
900+
let (id, vector_column): (u8, Vec<u8>) =
901+
from_row(crate::Row::try_from(after).unwrap());
902+
assert_eq!(id, 1);
903+
assert_eq!(
904+
vector_column,
905+
vec![205, 204, 140, 63, 205, 204, 12, 64, 51, 51, 83, 64]
906+
);
907+
908+
let (None, Some(after)) = rows.next().unwrap().unwrap() else {
909+
panic!("Unexpected data");
910+
};
911+
let (id, vector_column): (u8, Vec<u8>) =
912+
from_row(crate::Row::try_from(after).unwrap());
913+
assert_eq!(id, 2);
914+
assert_eq!(
915+
vector_column,
916+
vec![0, 0, 128, 63, 0, 0, 128, 191, 0, 0, 0, 0]
917+
);
918+
}
919+
_ => (),
920+
}
921+
}
922+
850923
if file_path.file_name().unwrap() == "mysql-enum-string-set.000001" {
851924
if let Some(EventData::RowsEvent(data)) = ev.read_data().unwrap() {
852925
let table_map_event =

test-data/binlogs/vector.binlog

3.38 KB
Binary file not shown.

0 commit comments

Comments
 (0)