@@ -723,3 +723,30 @@ fn test_copy_in() {
723723 assert_eq ! ( vec![ ( 0i32 , Some ( "Steven" . to_string( ) ) ) , ( 1 , None ) ] ,
724724 or_fail!( stmt. query( [ ] ) ) . map( |r| ( r. get( 0 u) , r. get( 1 u) ) ) . collect( ) ) ;
725725}
726+
727+ #[ test]
728+ fn test_copy_in_bad_column_count ( ) {
729+ let conn = or_fail ! ( PostgresConnection :: connect( "postgres://postgres@localhost" , & NoSsl ) ) ;
730+ or_fail ! ( conn. execute( "CREATE TEMPORARY TABLE foo (id INT, name VARCHAR)" , [ ] ) ) ;
731+
732+ let stmt = or_fail ! ( conn. prepare_copy_in( "foo" , [ "id" , "name" ] ) ) ;
733+ let data: & [ & [ & ToSql ] ] = & [ & [ & 0i32 , & "Steven" . to_string ( ) ] , & [ & 1i32 ] ] ;
734+
735+ let res = stmt. execute ( data. iter ( ) . map ( |r| r. iter ( ) . map ( |& e| e) ) ) ;
736+ match res {
737+ Err ( PgDbError ( ref err) ) if err. message . as_slice ( ) . contains ( "Invalid column count" ) => { }
738+ Err ( err) => fail ! ( "unexpected error {}" , err) ,
739+ _ => fail ! ( "Expected error" ) ,
740+ }
741+
742+ let data: & [ & [ & ToSql ] ] = & [ & [ & 0i32 , & "Steven" . to_string ( ) ] , & [ & 1i32 , & "Steven" . to_string ( ) , & 1i32 ] ] ;
743+
744+ let res = stmt. execute ( data. iter ( ) . map ( |r| r. iter ( ) . map ( |& e| e) ) ) ;
745+ match res {
746+ Err ( PgDbError ( ref err) ) if err. message . as_slice ( ) . contains ( "Invalid column count" ) => { }
747+ Err ( err) => fail ! ( "unexpected error {}" , err) ,
748+ _ => fail ! ( "Expected error" ) ,
749+ }
750+
751+ or_fail ! ( conn. execute( "SELECT 1" , [ ] ) ) ;
752+ }
0 commit comments