@@ -727,3 +727,55 @@ async fn any_blob_conversions() -> anyhow::Result<()> {
727727
728728 Ok ( ( ) )
729729}
730+
731+ #[ sqlx_macros:: test]
732+ async fn test_client_found_rows ( ) -> anyhow:: Result < ( ) > {
733+ setup_if_needed ( ) ;
734+
735+ let url = url:: Url :: parse ( & env:: var ( "DATABASE_URL" ) ?) ?;
736+
737+ // CLIENT_AFFECTED_ROWS unspecified = true by default.
738+ let mut conn = MySqlConnectOptions :: from_url ( & url) ?. connect ( ) . await ?;
739+ let mut tx = conn. begin ( ) . await ?;
740+
741+ tx. execute ( sqlx:: query (
742+ "CREATE TEMPORARY TABLE found_rows_testing (id INT PRIMARY KEY, field INT NOT NULL)" ,
743+ ) )
744+ . await ?;
745+
746+ let result = tx. execute ( sqlx:: query ( "INSERT INTO found_rows_testing VALUES (0, 10) AS new ON DUPLICATE KEY UPDATE field = new.field" ) ) . await ?;
747+ assert_eq ! ( result. rows_affected( ) , 1 ) ;
748+
749+ let result = tx. execute ( sqlx:: query ( "INSERT INTO found_rows_testing VALUES (0, 10) AS new ON DUPLICATE KEY UPDATE field = new.field" ) ) . await ?;
750+ assert_eq ! ( result. rows_affected( ) , 1 ) ;
751+
752+ let result = tx. execute ( sqlx:: query ( "INSERT INTO found_rows_testing VALUES (0, 20) AS new ON DUPLICATE KEY UPDATE field = new.field" ) ) . await ?;
753+ assert_eq ! ( result. rows_affected( ) , 2 ) ;
754+
755+ tx. rollback ( ) . await ?;
756+
757+ // Explicitly unset CLIENT_AFFECTED_ROWS.
758+ let mut conn = MySqlConnectOptions :: from_url ( & url) ?
759+ . found_rows ( false )
760+ . connect ( )
761+ . await ?;
762+ let mut tx = conn. begin ( ) . await ?;
763+
764+ tx. execute ( sqlx:: query (
765+ "CREATE TEMPORARY TABLE found_rows_testing (id INT PRIMARY KEY, field INT NOT NULL)" ,
766+ ) )
767+ . await ?;
768+
769+ let result = tx. execute ( sqlx:: query ( "INSERT INTO found_rows_testing VALUES (0, 10) AS new ON DUPLICATE KEY UPDATE field = new.field" ) ) . await ?;
770+ assert_eq ! ( result. rows_affected( ) , 1 ) ;
771+
772+ let result = tx. execute ( sqlx:: query ( "INSERT INTO found_rows_testing VALUES (0, 10) AS new ON DUPLICATE KEY UPDATE field = new.field" ) ) . await ?;
773+ assert_eq ! ( result. rows_affected( ) , 0 ) ;
774+
775+ let result = tx. execute ( sqlx:: query ( "INSERT INTO found_rows_testing VALUES (0, 20) AS new ON DUPLICATE KEY UPDATE field = new.field" ) ) . await ?;
776+ assert_eq ! ( result. rows_affected( ) , 2 ) ;
777+
778+ tx. rollback ( ) . await ?;
779+
780+ Ok ( ( ) )
781+ }
0 commit comments