@@ -1815,4 +1815,49 @@ mod tests {
1815
1815
assert_eq ! ( "" , idx. to_string( ) ) ;
1816
1816
assert_eq ! ( idx, Indexes :: from_str( "" ) . unwrap( ) ) ;
1817
1817
}
1818
+
1819
+ #[ test]
1820
+ fn test_recovery_schema_from_pb ( ) {
1821
+ let columns = [
1822
+ ( "tsid" , schema_pb:: DataType :: Double , 1 , false , false , false ) ,
1823
+ ( "ts" , schema_pb:: DataType :: Timestamp , 2 , false , false , false ) ,
1824
+ ( "t1" , schema_pb:: DataType :: String , 3 , false , false , false ) ,
1825
+ ( "t2" , schema_pb:: DataType :: String , 4 , false , false , false ) ,
1826
+ ( "t3" , schema_pb:: DataType :: String , 5 , false , false , false ) ,
1827
+ ] ;
1828
+ let columns = columns
1829
+ . into_iter ( )
1830
+ . map ( |column_schema| schema_pb:: ColumnSchema {
1831
+ name : column_schema. 0 . to_string ( ) ,
1832
+ data_type : column_schema. 1 as i32 ,
1833
+ id : column_schema. 2 ,
1834
+ is_nullable : column_schema. 3 ,
1835
+ is_tag : column_schema. 4 ,
1836
+ is_dictionary : column_schema. 5 ,
1837
+ comment : "" . to_string ( ) ,
1838
+ default_value : None ,
1839
+ } )
1840
+ . collect ( ) ;
1841
+ let pb_schema = schema_pb:: TableSchema {
1842
+ columns,
1843
+ version : 123 ,
1844
+ timestamp_id : 1 ,
1845
+ primary_key_ids : vec ! [ 5 , 4 , 2 ] ,
1846
+ } ;
1847
+
1848
+ let schema = Schema :: try_from ( pb_schema) . unwrap ( ) ;
1849
+ assert_eq ! ( schema. primary_key_indexes, vec![ 4 , 3 , 1 ] ) ;
1850
+ assert_eq ! ( schema. timestamp_index, 1 ) ;
1851
+ assert_eq ! ( schema. tsid_index, Some ( 0 ) ) ;
1852
+ assert_eq ! ( schema. version, 123 ) ;
1853
+ assert_eq ! (
1854
+ vec![ "tsid" , "ts" , "t1" , "t2" , "t3" ] ,
1855
+ schema
1856
+ . column_schemas
1857
+ . columns
1858
+ . iter( )
1859
+ . map( |col| col. name. as_str( ) )
1860
+ . collect:: <Vec <_>>( ) ,
1861
+ ) ;
1862
+ }
1818
1863
}
0 commit comments