@@ -586,18 +586,19 @@ pub fn parse_sql_response(
586586 let mut data = Vec :: with_capacity ( xsqlda. len ( ) ) ;
587587
588588 for ( col_index, var) in xsqlda. iter ( ) . enumerate ( ) {
589+ // Remove nullable type indicator
590+ let sqltype = var. sqltype as u32 & ( !1 ) ;
591+
589592 if version >= ProtocolVersion :: V13 && read_null ( resp, col_index) ? {
590593 // There is no data in protocol 13 if null, so just continue
591594 data. push ( ParsedColumn :: Complete ( Column :: new (
592595 var. alias_name . clone ( ) ,
596+ sqltype,
593597 SqlType :: Null ,
594598 ) ) ) ;
595599 continue ;
596600 }
597601
598- // Remove nullable type indicator
599- let sqltype = var. sqltype as u32 & ( !1 ) ;
600-
601602 match sqltype {
602603 ibase:: SQL_VARYING => {
603604 let d = resp. get_wire_bytes ( ) ?;
@@ -606,11 +607,13 @@ pub fn parse_sql_response(
606607 if null {
607608 data. push ( ParsedColumn :: Complete ( Column :: new (
608609 var. alias_name . clone ( ) ,
610+ sqltype,
609611 SqlType :: Null ,
610612 ) ) )
611613 } else {
612614 data. push ( ParsedColumn :: Complete ( Column :: new (
613615 var. alias_name . clone ( ) ,
616+ sqltype,
614617 SqlType :: Text ( charset. decode ( & d[ ..] ) ?) ,
615618 ) ) )
616619 }
@@ -623,11 +626,13 @@ pub fn parse_sql_response(
623626 if null {
624627 data. push ( ParsedColumn :: Complete ( Column :: new (
625628 var. alias_name . clone ( ) ,
629+ sqltype,
626630 SqlType :: Null ,
627631 ) ) )
628632 } else {
629633 data. push ( ParsedColumn :: Complete ( Column :: new (
630634 var. alias_name . clone ( ) ,
635+ sqltype,
631636 SqlType :: Integer ( i) ,
632637 ) ) )
633638 }
@@ -640,11 +645,13 @@ pub fn parse_sql_response(
640645 if null {
641646 data. push ( ParsedColumn :: Complete ( Column :: new (
642647 var. alias_name . clone ( ) ,
648+ sqltype,
643649 SqlType :: Null ,
644650 ) ) )
645651 } else {
646652 data. push ( ParsedColumn :: Complete ( Column :: new (
647653 var. alias_name . clone ( ) ,
654+ sqltype,
648655 SqlType :: Floating ( f) ,
649656 ) ) )
650657 }
@@ -660,11 +667,13 @@ pub fn parse_sql_response(
660667 if null {
661668 data. push ( ParsedColumn :: Complete ( Column :: new (
662669 var. alias_name . clone ( ) ,
670+ sqltype,
663671 SqlType :: Null ,
664672 ) ) )
665673 } else {
666674 data. push ( ParsedColumn :: Complete ( Column :: new (
667675 var. alias_name . clone ( ) ,
676+ sqltype,
668677 SqlType :: Timestamp ( rsfbclient_core:: date_time:: decode_timestamp ( ts) ) ,
669678 ) ) )
670679 }
@@ -677,6 +686,7 @@ pub fn parse_sql_response(
677686 if null {
678687 data. push ( ParsedColumn :: Complete ( Column :: new (
679688 var. alias_name . clone ( ) ,
689+ sqltype,
680690 SqlType :: Null ,
681691 ) ) )
682692 } else {
@@ -697,11 +707,13 @@ pub fn parse_sql_response(
697707 if null {
698708 data. push ( ParsedColumn :: Complete ( Column :: new (
699709 var. alias_name . clone ( ) ,
710+ sqltype,
700711 SqlType :: Null ,
701712 ) ) )
702713 } else {
703714 data. push ( ParsedColumn :: Complete ( Column :: new (
704715 var. alias_name . clone ( ) ,
716+ sqltype,
705717 SqlType :: Boolean ( b) ,
706718 ) ) )
707719 }
@@ -767,6 +779,7 @@ impl ParsedColumn {
767779
768780 Column :: new (
769781 col_name,
782+ ibase:: SQL_BLOB ,
770783 if binary {
771784 SqlType :: Binary ( data)
772785 } else {
0 commit comments