@@ -407,6 +407,7 @@ impl WrongType {
407
407
/// | `f32` | REAL |
408
408
/// | `f64` | DOUBLE PRECISION |
409
409
/// | `&str`/`String` | VARCHAR, CHAR(n), TEXT, CITEXT, NAME, UNKNOWN |
410
+ /// | | LTREE, LQUERY, LTXTQUERY |
410
411
/// | `&[u8]`/`Vec<u8>` | BYTEA |
411
412
/// | `HashMap<String, Option<String>>` | HSTORE |
412
413
/// | `SystemTime` | TIMESTAMP, TIMESTAMP WITH TIME ZONE |
@@ -594,8 +595,8 @@ impl<'a> FromSql<'a> for &'a [u8] {
594
595
}
595
596
596
597
impl < ' a > FromSql < ' a > for String {
597
- fn from_sql ( _ : & Type , raw : & ' a [ u8 ] ) -> Result < String , Box < dyn Error + Sync + Send > > {
598
- types :: text_from_sql ( raw) . map ( ToString :: to_string)
598
+ fn from_sql ( ty : & Type , raw : & ' a [ u8 ] ) -> Result < String , Box < dyn Error + Sync + Send > > {
599
+ < & str as FromSql > :: from_sql ( ty , raw) . map ( ToString :: to_string)
599
600
}
600
601
601
602
fn accepts ( ty : & Type ) -> bool {
@@ -604,8 +605,8 @@ impl<'a> FromSql<'a> for String {
604
605
}
605
606
606
607
impl < ' a > FromSql < ' a > for Box < str > {
607
- fn from_sql ( _ : & Type , raw : & ' a [ u8 ] ) -> Result < Box < str > , Box < dyn Error + Sync + Send > > {
608
- types :: text_from_sql ( raw)
608
+ fn from_sql ( ty : & Type , raw : & ' a [ u8 ] ) -> Result < Box < str > , Box < dyn Error + Sync + Send > > {
609
+ < & str as FromSql > :: from_sql ( ty , raw)
609
610
. map ( ToString :: to_string)
610
611
. map ( String :: into_boxed_str)
611
612
}
@@ -616,14 +617,26 @@ impl<'a> FromSql<'a> for Box<str> {
616
617
}
617
618
618
619
impl < ' a > FromSql < ' a > for & ' a str {
619
- fn from_sql ( _: & Type , raw : & ' a [ u8 ] ) -> Result < & ' a str , Box < dyn Error + Sync + Send > > {
620
- types:: text_from_sql ( raw)
620
+ fn from_sql ( ty : & Type , raw : & ' a [ u8 ] ) -> Result < & ' a str , Box < dyn Error + Sync + Send > > {
621
+ match * ty {
622
+ ref ty if ty. name ( ) == "ltree" => types:: ltree_from_sql ( raw) ,
623
+ ref ty if ty. name ( ) == "lquery" => types:: lquery_from_sql ( raw) ,
624
+ ref ty if ty. name ( ) == "ltxtquery" => types:: ltxtquery_from_sql ( raw) ,
625
+ _ => types:: text_from_sql ( raw) ,
626
+ }
621
627
}
622
628
623
629
fn accepts ( ty : & Type ) -> bool {
624
630
match * ty {
625
631
Type :: VARCHAR | Type :: TEXT | Type :: BPCHAR | Type :: NAME | Type :: UNKNOWN => true ,
626
- ref ty if ty. name ( ) == "citext" => true ,
632
+ ref ty
633
+ if ( ty. name ( ) == "citext"
634
+ || ty. name ( ) == "ltree"
635
+ || ty. name ( ) == "lquery"
636
+ || ty. name ( ) == "ltxtquery" ) =>
637
+ {
638
+ true
639
+ }
627
640
_ => false ,
628
641
}
629
642
}
@@ -727,6 +740,7 @@ pub enum IsNull {
727
740
/// | `f32` | REAL |
728
741
/// | `f64` | DOUBLE PRECISION |
729
742
/// | `&str`/`String` | VARCHAR, CHAR(n), TEXT, CITEXT, NAME |
743
+ /// | | LTREE, LQUERY, LTXTQUERY |
730
744
/// | `&[u8]`/`Vec<u8>` | BYTEA |
731
745
/// | `HashMap<String, Option<String>>` | HSTORE |
732
746
/// | `SystemTime` | TIMESTAMP, TIMESTAMP WITH TIME ZONE |
@@ -924,15 +938,27 @@ impl ToSql for Vec<u8> {
924
938
}
925
939
926
940
impl < ' a > ToSql for & ' a str {
927
- fn to_sql ( & self , _: & Type , w : & mut BytesMut ) -> Result < IsNull , Box < dyn Error + Sync + Send > > {
928
- types:: text_to_sql ( * self , w) ;
941
+ fn to_sql ( & self , ty : & Type , w : & mut BytesMut ) -> Result < IsNull , Box < dyn Error + Sync + Send > > {
942
+ match * ty {
943
+ ref ty if ty. name ( ) == "ltree" => types:: ltree_to_sql ( * self , w) ,
944
+ ref ty if ty. name ( ) == "lquery" => types:: lquery_to_sql ( * self , w) ,
945
+ ref ty if ty. name ( ) == "ltxtquery" => types:: ltxtquery_to_sql ( * self , w) ,
946
+ _ => types:: text_to_sql ( * self , w) ,
947
+ }
929
948
Ok ( IsNull :: No )
930
949
}
931
950
932
951
fn accepts ( ty : & Type ) -> bool {
933
952
match * ty {
934
953
Type :: VARCHAR | Type :: TEXT | Type :: BPCHAR | Type :: NAME | Type :: UNKNOWN => true ,
935
- ref ty if ty. name ( ) == "citext" => true ,
954
+ ref ty
955
+ if ( ty. name ( ) == "citext"
956
+ || ty. name ( ) == "ltree"
957
+ || ty. name ( ) == "lquery"
958
+ || ty. name ( ) == "ltxtquery" ) =>
959
+ {
960
+ true
961
+ }
936
962
_ => false ,
937
963
}
938
964
}
0 commit comments