@@ -326,6 +326,7 @@ impl ColumnType {
326
326
mod tests {
327
327
use std:: {
328
328
collections:: HashMap ,
329
+ convert:: TryFrom ,
329
330
io,
330
331
iter:: { once, repeat} ,
331
332
} ;
@@ -337,10 +338,14 @@ mod tests {
337
338
} ;
338
339
339
340
use crate :: {
340
- binlog:: { events:: RowsEventData , value:: BinlogValue } ,
341
+ binlog:: {
342
+ events:: { OptionalMetadataField , RowsEventData } ,
343
+ value:: BinlogValue ,
344
+ } ,
341
345
collations:: CollationId ,
342
346
constants:: ColumnFlags ,
343
347
proto:: MySerialize ,
348
+ row:: convert:: from_row,
344
349
value:: Value ,
345
350
} ;
346
351
@@ -734,10 +739,12 @@ mod tests {
734
739
let file_data = std:: fs:: read ( dbg ! ( & file_path) ) ?;
735
740
let mut binlog_file = BinlogFile :: new ( BinlogVersion :: Version4 , & file_data[ ..] ) ?;
736
741
742
+ let mut i = 0 ;
737
743
let mut ev_pos = 4 ;
738
744
let mut table_map_events = HashMap :: new ( ) ;
739
745
740
746
while let Some ( ev) = binlog_file. next ( ) {
747
+ i += 1 ;
741
748
let ev = ev?;
742
749
let _ = dbg ! ( ev. header( ) . event_type( ) ) ;
743
750
let ev_end = ev_pos + ev. header ( ) . event_size ( ) as usize ;
@@ -847,6 +854,72 @@ mod tests {
847
854
}
848
855
}
849
856
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
+
850
923
if file_path. file_name ( ) . unwrap ( ) == "mysql-enum-string-set.000001" {
851
924
if let Some ( EventData :: RowsEvent ( data) ) = ev. read_data ( ) . unwrap ( ) {
852
925
let table_map_event =
0 commit comments