File tree Expand file tree Collapse file tree 1 file changed +36
-0
lines changed Expand file tree Collapse file tree 1 file changed +36
-0
lines changed Original file line number Diff line number Diff line change @@ -881,6 +881,42 @@ mod test {
881
881
Ok ( ( ) )
882
882
}
883
883
884
+ #[ test]
885
+ fn test_query_one_optional ( ) -> Result < ( ) > {
886
+ use crate :: OptionalExt ;
887
+
888
+ let db = Connection :: open_in_memory ( ) ?;
889
+ let sql = "BEGIN;
890
+ CREATE TABLE foo(x INTEGER, y INTEGER);
891
+ INSERT INTO foo VALUES(1, 3);
892
+ INSERT INTO foo VALUES(2, 4);
893
+ END;" ;
894
+ db. execute_batch ( sql) ?;
895
+
896
+ // Exactly one row
897
+ let y: Option < i32 > = db
898
+ . prepare ( "SELECT y FROM foo WHERE x = ?" ) ?
899
+ . query_one ( [ 1 ] , |r| r. get ( 0 ) )
900
+ . optional ( ) ?;
901
+ assert_eq ! ( y, Some ( 3 ) ) ;
902
+
903
+ // No rows
904
+ let y: Option < i32 > = db
905
+ . prepare ( "SELECT y FROM foo WHERE x = ?" ) ?
906
+ . query_one ( [ 99 ] , |r| r. get ( 0 ) )
907
+ . optional ( ) ?;
908
+ assert_eq ! ( y, None ) ;
909
+
910
+ // Multiple rows - should still return error (not converted by optional)
911
+ let res = db
912
+ . prepare ( "SELECT y FROM foo" ) ?
913
+ . query_one ( [ ] , |r| r. get :: < _ , i32 > ( 0 ) )
914
+ . optional ( ) ;
915
+ assert_eq ! ( res. unwrap_err( ) , Error :: QueryReturnedMoreThanOneRow ) ;
916
+
917
+ Ok ( ( ) )
918
+ }
919
+
884
920
#[ test]
885
921
fn test_query_by_column_name ( ) -> Result < ( ) > {
886
922
let db = Connection :: open_in_memory ( ) ?;
You can’t perform that action at this time.
0 commit comments