@@ -39,6 +39,7 @@ use geo::Point;
3939use geozero:: CoordDimensions ;
4040use geozero:: ToWkb ;
4141use itertools:: Itertools ;
42+ use jsonb:: RawJsonb ;
4243use roaring:: RoaringTreemap ;
4344use serde:: de:: Visitor ;
4445use serde:: Deserialize ;
@@ -776,7 +777,9 @@ impl PartialOrd for Scalar {
776777 ( Scalar :: Bitmap ( b1) , Scalar :: Bitmap ( b2) ) => b1. partial_cmp ( b2) ,
777778 ( Scalar :: Tuple ( t1) , Scalar :: Tuple ( t2) ) => t1. partial_cmp ( t2) ,
778779 ( Scalar :: Variant ( v1) , Scalar :: Variant ( v2) ) => {
779- jsonb:: compare ( v1. as_slice ( ) , v2. as_slice ( ) ) . ok ( )
780+ let left_jsonb = RawJsonb :: new ( v1) ;
781+ let right_jsonb = RawJsonb :: new ( v2) ;
782+ left_jsonb. partial_cmp ( & right_jsonb)
780783 }
781784 ( Scalar :: Geometry ( g1) , Scalar :: Geometry ( g2) ) => compare_geometry ( g1, g2) ,
782785 ( Scalar :: Geography ( g1) , Scalar :: Geography ( g2) ) => g1. partial_cmp ( g2) ,
@@ -814,7 +817,11 @@ impl<'b> PartialOrd<ScalarRef<'b>> for ScalarRef<'_> {
814817 ( ScalarRef :: Map ( m1) , ScalarRef :: Map ( m2) ) => m1. partial_cmp ( m2) ,
815818 ( ScalarRef :: Bitmap ( b1) , ScalarRef :: Bitmap ( b2) ) => b1. partial_cmp ( b2) ,
816819 ( ScalarRef :: Tuple ( t1) , ScalarRef :: Tuple ( t2) ) => t1. partial_cmp ( t2) ,
817- ( ScalarRef :: Variant ( v1) , ScalarRef :: Variant ( v2) ) => jsonb:: compare ( v1, v2) . ok ( ) ,
820+ ( ScalarRef :: Variant ( v1) , ScalarRef :: Variant ( v2) ) => {
821+ let left_jsonb = RawJsonb :: new ( v1) ;
822+ let right_jsonb = RawJsonb :: new ( v2) ;
823+ left_jsonb. partial_cmp ( & right_jsonb)
824+ }
818825 ( ScalarRef :: Geometry ( g1) , ScalarRef :: Geometry ( g2) ) => compare_geometry ( g1, g2) ,
819826 ( ScalarRef :: Geography ( g1) , ScalarRef :: Geography ( g2) ) => g1. partial_cmp ( g2) ,
820827 ( ScalarRef :: Interval ( i1) , ScalarRef :: Interval ( i2) ) => i1. partial_cmp ( i2) ,
@@ -913,9 +920,13 @@ impl PartialOrd for Column {
913920 col1. iter ( ) . partial_cmp ( col2. iter ( ) )
914921 }
915922 ( Column :: Tuple ( fields1) , Column :: Tuple ( fields2) ) => fields1. partial_cmp ( fields2) ,
916- ( Column :: Variant ( col1) , Column :: Variant ( col2) ) => col1
917- . iter ( )
918- . partial_cmp_by ( col2. iter ( ) , |v1, v2| jsonb:: compare ( v1, v2) . ok ( ) ) ,
923+ ( Column :: Variant ( col1) , Column :: Variant ( col2) ) => {
924+ col1. iter ( ) . partial_cmp_by ( col2. iter ( ) , |v1, v2| {
925+ let left_jsonb = RawJsonb :: new ( v1) ;
926+ let right_jsonb = RawJsonb :: new ( v2) ;
927+ left_jsonb. partial_cmp ( & right_jsonb)
928+ } )
929+ }
919930 ( Column :: Geometry ( col1) , Column :: Geometry ( col2) ) => {
920931 col1. iter ( ) . partial_cmp_by ( col2. iter ( ) , compare_geometry)
921932 }
@@ -1423,7 +1434,7 @@ impl Column {
14231434 DataType :: Variant => {
14241435 let mut data = Vec :: with_capacity ( len) ;
14251436 for _ in 0 ..len {
1426- let val = jsonb:: rand_value ( ) ;
1437+ let val = jsonb:: Value :: rand_value ( ) ;
14271438 data. push ( val. to_vec ( ) ) ;
14281439 }
14291440 VariantType :: from_data ( data)
0 commit comments